diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 95cd277..dc12f67 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -22,6 +22,13 @@ android { keyAlias = keystoreProperties["keyAlias"] as String keyPassword = keystoreProperties["keyPassword"] as String } + + create("play") { + storeFile = rootProject.file(keystoreProperties["storeFile"]!!) + storePassword = keystoreProperties["storePassword"] as String + keyAlias = keystoreProperties["uploadKeyAlias"] as String + keyPassword = keystoreProperties["uploadKeyPassword"] as String + } } } @@ -43,6 +50,13 @@ android { } } + create("play") { + initWith(getByName("release")) + if (useKeystoreProperties) { + signingConfig = signingConfigs.getByName("play") + } + } + buildFeatures { viewBinding = true } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7647869..d0b01f8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + diff --git a/app/src/main/assets/viewer.css b/app/src/main/assets/viewer.css index 7befbc5..999ba10 100644 --- a/app/src/main/assets/viewer.css +++ b/app/src/main/assets/viewer.css @@ -1,11 +1,11 @@ -body, canvas, #padding { +body, canvas { padding: 0; margin: 0; } -#padding { - min-width: 100%; - background: black; +canvas { + margin: auto; + display: block; } .textLayer { diff --git a/app/src/main/assets/viewer.html b/app/src/main/assets/viewer.html index bea4678..c4f1125 100644 --- a/app/src/main/assets/viewer.html +++ b/app/src/main/assets/viewer.html @@ -7,7 +7,6 @@ -
diff --git a/app/src/main/assets/viewer.js b/app/src/main/assets/viewer.js index 911b4c2..c5e4ef2 100644 --- a/app/src/main/assets/viewer.js +++ b/app/src/main/assets/viewer.js @@ -2,7 +2,6 @@ pdfjsLib.GlobalWorkerOptions.workerSrc = "/pdf.worker.js"; -const padding = document.getElementById("padding"); let pdfDoc = null; let pageRendering = false; let renderPending = false; @@ -56,7 +55,6 @@ function display(newCanvas, zoom) { canvas.width = newCanvas.width; canvas.style.height = newCanvas.style.height; canvas.style.width = newCanvas.style.width; - padding.style.width = canvas.style.width; canvas.getContext("2d", { alpha: false }).drawImage(newCanvas, 0, 0); if (!zoom) { scrollTo(0, 0); @@ -200,14 +198,6 @@ function isTextSelected() { return window.getSelection().toString() !== ""; } -function updateInset() { - const windowInsetTop = channel.getWindowInsetTop() / window.devicePixelRatio + "px"; - padding.style.paddingTop = windowInsetTop; - textLayerDiv.style.top = windowInsetTop; -} - -updateInset(); - pdfjsLib.getDocument("https://localhost/placeholder.pdf").promise.then(function(newDoc) { pdfDoc = newDoc; channel.setNumPages(pdfDoc.numPages); diff --git a/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java b/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java index 77ca5e9..cd4fbf6 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java @@ -1,16 +1,18 @@ package org.grapheneos.pdfviewer; -import android.content.Context; +import android.content.pm.PackageInfo; import android.content.res.ColorStateList; import android.graphics.Color; import android.net.Uri; +import android.os.Build; import android.os.Bundle; -import android.util.AttributeSet; import android.util.Log; import android.view.Gravity; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.View; import android.webkit.CookieManager; import android.webkit.JavascriptInterface; import android.webkit.WebResourceRequest; @@ -22,11 +24,12 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import androidx.loader.app.LoaderManager; import androidx.loader.content.Loader; +import org.grapheneos.pdfviewer.databinding.PdfviewerBinding; import org.grapheneos.pdfviewer.fragment.DocumentPropertiesFragment; import org.grapheneos.pdfviewer.fragment.JumpToPageFragment; import org.grapheneos.pdfviewer.loader.DocumentPropertiesLoader; @@ -36,10 +39,11 @@ import java.io.InputStream; import java.util.HashMap; import java.util.List; -public class PdfViewer extends WebView implements LoaderManager.LoaderCallbacks> { +public class PdfViewer implements LoaderManager.LoaderCallbacks> { public static final String TAG = "PdfViewer"; private static final String KEY_PROPERTIES = "properties"; + private static final int MIN_WEBVIEW_RELEASE = 89; private static final String CONTENT_SECURITY_POLICY = "default-src 'none'; " + @@ -93,31 +97,64 @@ public class PdfViewer extends WebView implements LoaderManager.LoaderCallbacks< private float mZoomRatio = 1f; private int mDocumentOrientationDegrees; private int mDocumentState; - private int windowInsetTop; private List mDocumentProperties; private InputStream mInputStream; + private PdfviewerBinding binding; private TextView mTextView; private Toast mToast; - public AppCompatActivity activity; + AppCompatActivity activity; String fileName; Long fileSize; - void init(Context context) { - setBackgroundColor(Color.TRANSPARENT); + private class Channel { + @JavascriptInterface + public int getPage() { + return mPage; + } + + @JavascriptInterface + public float getZoomRatio() { + return mZoomRatio; + } + + @JavascriptInterface + public int getDocumentOrientationDegrees() { + return mDocumentOrientationDegrees; + } + + @JavascriptInterface + public void setNumPages(int numPages) { + mNumPages = numPages; + activity.runOnUiThread(activity::invalidateOptionsMenu); + } + + @JavascriptInterface + public void setDocumentProperties(final String properties) { + if (mDocumentProperties != null) { + throw new SecurityException("mDocumentProperties not null"); + } + + final Bundle args = new Bundle(); + args.putString(KEY_PROPERTIES, properties); + activity.runOnUiThread(() -> LoaderManager.getInstance(PdfViewer.this.activity).restartLoader(DocumentPropertiesLoader.ID, args, PdfViewer.this)); + } + } + + public PdfViewer(@NonNull AppCompatActivity activity) { + this.activity = activity; + LayoutInflater inflater = activity.getLayoutInflater(); + binding = PdfviewerBinding.inflate(inflater); + activity.setContentView(binding.getRoot()); + + binding.webview.setBackgroundColor(Color.TRANSPARENT); if (BuildConfig.DEBUG) { WebView.setWebContentsDebuggingEnabled(true); } - setOnApplyWindowInsetsListener((view, insets) -> { - windowInsetTop = insets.getSystemWindowInsetTop(); - evaluateJavascript("updateInset()", null); - return insets; - }); - - final WebSettings settings = getSettings(); + final WebSettings settings = binding.webview.getSettings(); settings.setAllowContentAccess(false); settings.setAllowFileAccess(false); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); @@ -125,12 +162,12 @@ public class PdfViewer extends WebView implements LoaderManager.LoaderCallbacks< CookieManager.getInstance().setAcceptCookie(false); - addJavascriptInterface(new Channel(), "channel"); + binding.webview.addJavascriptInterface(new Channel(), "channel"); - setWebViewClient(new WebViewClient() { + binding.webview.setWebViewClient(new WebViewClient() { private WebResourceResponse fromAsset(final String mime, final String path) { try { - InputStream inputStream = context.getAssets().open(path.substring(1)); + InputStream inputStream = activity.getAssets().open(path.substring(1)); return new WebResourceResponse(mime, null, inputStream); } catch (IOException e) { return null; @@ -188,7 +225,7 @@ public class PdfViewer extends WebView implements LoaderManager.LoaderCallbacks< } }); - GestureHelper.attach(context, this, + GestureHelper.attach(activity, binding.webview, new GestureHelper.GestureListener() { @Override public void onZoomIn(float value) { @@ -206,72 +243,40 @@ public class PdfViewer extends WebView implements LoaderManager.LoaderCallbacks< } }); - mTextView = new TextView(context); + mTextView = new TextView(activity); mTextView.setBackgroundColor(Color.DKGRAY); mTextView.setTextColor(ColorStateList.valueOf(Color.WHITE)); mTextView.setTextSize(18); mTextView.setPadding(PADDING, 0, PADDING, 0); } - public PdfViewer(@NonNull Context context) { - super(context); - init(context); - } - - public PdfViewer(@NonNull Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - init(context); - } - - public PdfViewer(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context); - } - public void onCreateOptionMenu(Menu menu) { MenuInflater inflater = activity.getMenuInflater(); inflater.inflate(R.menu.pdf_viewer, menu); } - private class Channel { - @JavascriptInterface - public int getWindowInsetTop() { - return windowInsetTop; - } - - @JavascriptInterface - public int getPage() { - return mPage; - } - - @JavascriptInterface - public float getZoomRatio() { - return mZoomRatio; - } - - @JavascriptInterface - public int getDocumentOrientationDegrees() { - return mDocumentOrientationDegrees; - } - - @JavascriptInterface - public void setNumPages(int numPages) { - mNumPages = numPages; - activity.runOnUiThread(activity::invalidateOptionsMenu); - } - - @JavascriptInterface - public void setDocumentProperties(final String properties) { - if (mDocumentProperties != null) { - throw new SecurityException("mDocumentProperties not null"); + public void onResume() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + // The user could have left the activity to update the WebView + activity.invalidateOptionsMenu(); + if (getWebViewRelease() >= MIN_WEBVIEW_RELEASE) { + binding.webviewOutOfDateLayout.setVisibility(View.GONE); + binding.webview.setVisibility(View.VISIBLE); + } else { + binding.webview.setVisibility(View.GONE); + binding.webviewOutOfDateMessage.setText(activity.getString(R.string.webview_out_of_date_message, getWebViewRelease(), MIN_WEBVIEW_RELEASE)); + binding.webviewOutOfDateLayout.setVisibility(View.VISIBLE); } - - final Bundle args = new Bundle(); - args.putString(KEY_PROPERTIES, properties); - activity.runOnUiThread(() -> LoaderManager.getInstance(PdfViewer.this.activity).restartLoader(DocumentPropertiesLoader.ID, args, PdfViewer.this)); } } + @RequiresApi(api = Build.VERSION_CODES.O) + private int getWebViewRelease() { + PackageInfo webViewPackage = WebView.getCurrentWebViewPackage(); + String webViewVersionName = webViewPackage.versionName; + return Integer.parseInt(webViewVersionName.substring(0, webViewVersionName.indexOf("."))); + } + @NonNull @Override public Loader> onCreateLoader(int id, Bundle args) { @@ -295,12 +300,12 @@ public class PdfViewer extends WebView implements LoaderManager.LoaderCallbacks< mInputStream = inputStream; this.fileName = fileName; this.fileSize = fileSize; - loadUrl("https://localhost/viewer.html"); + binding.webview.loadUrl("https://localhost/viewer.html"); activity.invalidateOptionsMenu(); } private void renderPage(final int zoom) { - evaluateJavascript("onRenderPage(" + zoom + ")", null); + binding.webview.evaluateJavascript("onRenderPage(" + zoom + ")", null); } private void documentOrientationChanged(final int orientationDegreesOffset) { diff --git a/app/src/main/java/org/grapheneos/pdfviewer/fragment/DocumentPropertiesFragment.java b/app/src/main/java/org/grapheneos/pdfviewer/fragment/DocumentPropertiesFragment.java index a287065..851d9d5 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/fragment/DocumentPropertiesFragment.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/fragment/DocumentPropertiesFragment.java @@ -6,14 +6,15 @@ import android.os.Bundle; import android.widget.ArrayAdapter; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import org.grapheneos.pdfviewer.R; + import java.util.ArrayList; import java.util.List; -import org.grapheneos.pdfviewer.R; - public class DocumentPropertiesFragment extends DialogFragment { public static final String TAG = "DocumentPropertiesFragment"; @@ -44,7 +45,7 @@ public class DocumentPropertiesFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Activity activity = requireActivity(); - final AlertDialog.Builder dialog = new AlertDialog.Builder(activity) + final MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(activity) .setPositiveButton(android.R.string.ok, null); if (mDocumentProperties != null) { diff --git a/app/src/main/java/org/grapheneos/pdfviewer/fragment/JumpToPageFragment.java b/app/src/main/java/org/grapheneos/pdfviewer/fragment/JumpToPageFragment.java index 586a0a3..489ce82 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/fragment/JumpToPageFragment.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/fragment/JumpToPageFragment.java @@ -7,9 +7,10 @@ import android.widget.FrameLayout; import android.widget.NumberPicker; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import org.grapheneos.pdfviewer.PdfViewer; public class JumpToPageFragment extends DialogFragment { @@ -42,7 +43,7 @@ public class JumpToPageFragment extends DialogFragment { FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER)); - return new AlertDialog.Builder(requireActivity()) + return new MaterialAlertDialogBuilder(requireActivity()) .setView(layout) .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> { mPicker.clearFocus(); diff --git a/app/src/main/res/drawable-hdpi/ic_navigate_before_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_navigate_before_white_24dp.png deleted file mode 100644 index bd23a06..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_navigate_before_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_navigate_next_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_navigate_next_white_24dp.png deleted file mode 100644 index 1f10ee4..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_navigate_next_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_pageview_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_pageview_white_24dp.png deleted file mode 100644 index e0adb37..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_pageview_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_rotate_left_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_rotate_left_white_24dp.png deleted file mode 100644 index e22d7b0..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_rotate_left_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_rotate_right_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_rotate_right_white_24dp.png deleted file mode 100644 index fa7fccd..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_rotate_right_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_zoom_in_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_zoom_in_white_24dp.png deleted file mode 100644 index 6373294..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_zoom_in_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_zoom_out_white_24dp.png deleted file mode 100644 index 7772cee..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_zoom_out_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_navigate_before_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_navigate_before_white_24dp.png deleted file mode 100644 index 4d7869d..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_navigate_before_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_navigate_next_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_navigate_next_white_24dp.png deleted file mode 100644 index b4f3c6d..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_navigate_next_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_pageview_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_pageview_white_24dp.png deleted file mode 100644 index 2e1a810..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_pageview_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_rotate_left_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_rotate_left_white_24dp.png deleted file mode 100644 index a73d48c..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_rotate_left_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_rotate_right_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_rotate_right_white_24dp.png deleted file mode 100644 index 6750928..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_rotate_right_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_zoom_in_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_zoom_in_white_24dp.png deleted file mode 100644 index 36a659d..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_zoom_in_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_zoom_out_white_24dp.png deleted file mode 100644 index e69da0b..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_zoom_out_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_navigate_before_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_navigate_before_white_24dp.png deleted file mode 100644 index 62f3590..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_navigate_before_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_navigate_next_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_navigate_next_white_24dp.png deleted file mode 100644 index 93dec39..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_navigate_next_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_pageview_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_pageview_white_24dp.png deleted file mode 100644 index e33356a..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_pageview_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_rotate_left_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_rotate_left_white_24dp.png deleted file mode 100644 index 029d35f..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_rotate_left_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_rotate_right_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_rotate_right_white_24dp.png deleted file mode 100644 index 4299904..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_rotate_right_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_zoom_in_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_zoom_in_white_24dp.png deleted file mode 100644 index ce88ebd..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_zoom_in_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_zoom_out_white_24dp.png deleted file mode 100644 index 8c6ccea..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_zoom_out_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_navigate_before_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_navigate_before_white_24dp.png deleted file mode 100644 index 87a5f51..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_navigate_before_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_navigate_next_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_navigate_next_white_24dp.png deleted file mode 100644 index b2812e9..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_navigate_next_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_pageview_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_pageview_white_24dp.png deleted file mode 100644 index d292eff..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_pageview_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_rotate_left_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_rotate_left_white_24dp.png deleted file mode 100644 index bdfcbca..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_rotate_left_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_rotate_right_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_rotate_right_white_24dp.png deleted file mode 100644 index 6d73012..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_rotate_right_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_zoom_in_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_zoom_in_white_24dp.png deleted file mode 100644 index 30b8470..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_zoom_in_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_zoom_out_white_24dp.png deleted file mode 100644 index 68aaec6..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_zoom_out_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_navigate_before_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_navigate_before_white_24dp.png deleted file mode 100644 index a68bc5f..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_navigate_before_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_navigate_next_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_navigate_next_white_24dp.png deleted file mode 100644 index 6858f02..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_navigate_next_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_pageview_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_pageview_white_24dp.png deleted file mode 100644 index 9df7fdd..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_pageview_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_rotate_left_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_rotate_left_white_24dp.png deleted file mode 100644 index 18be026..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_rotate_left_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_rotate_right_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_rotate_right_white_24dp.png deleted file mode 100644 index 13e03d5..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_rotate_right_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_zoom_in_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_zoom_in_white_24dp.png deleted file mode 100644 index b636f6e..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_zoom_in_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_zoom_out_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_zoom_out_white_24dp.png deleted file mode 100644 index d85e242..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_zoom_out_white_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable/baseline_first_page_24.xml b/app/src/main/res/drawable/baseline_first_page_24.xml deleted file mode 100755 index 46b62f2..0000000 --- a/app/src/main/res/drawable/baseline_first_page_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/baseline_last_page_24.xml b/app/src/main/res/drawable/baseline_last_page_24.xml deleted file mode 100755 index 0efc8c6..0000000 --- a/app/src/main/res/drawable/baseline_last_page_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_error_outline_24dp.xml b/app/src/main/res/drawable/ic_error_outline_24dp.xml new file mode 100644 index 0000000..9b8c530 --- /dev/null +++ b/app/src/main/res/drawable/ic_error_outline_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_first_page_24dp.xml b/app/src/main/res/drawable/ic_first_page_24dp.xml new file mode 100644 index 0000000..59d6aa5 --- /dev/null +++ b/app/src/main/res/drawable/ic_first_page_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_insert_drive_file_24dp.xml b/app/src/main/res/drawable/ic_insert_drive_file_24dp.xml new file mode 100644 index 0000000..d35c045 --- /dev/null +++ b/app/src/main/res/drawable/ic_insert_drive_file_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_last_page_24dp.xml b/app/src/main/res/drawable/ic_last_page_24dp.xml new file mode 100644 index 0000000..4807df6 --- /dev/null +++ b/app/src/main/res/drawable/ic_last_page_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_navigate_before_24dp.xml b/app/src/main/res/drawable/ic_navigate_before_24dp.xml new file mode 100644 index 0000000..e233407 --- /dev/null +++ b/app/src/main/res/drawable/ic_navigate_before_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_navigate_next_24dp.xml b/app/src/main/res/drawable/ic_navigate_next_24dp.xml new file mode 100644 index 0000000..f7f29d6 --- /dev/null +++ b/app/src/main/res/drawable/ic_navigate_next_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_pageview_24dp.xml b/app/src/main/res/drawable/ic_pageview_24dp.xml new file mode 100644 index 0000000..8a3ce2d --- /dev/null +++ b/app/src/main/res/drawable/ic_pageview_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_rotate_left_24dp.xml b/app/src/main/res/drawable/ic_rotate_left_24dp.xml new file mode 100644 index 0000000..1777343 --- /dev/null +++ b/app/src/main/res/drawable/ic_rotate_left_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_rotate_right_24dp.xml b/app/src/main/res/drawable/ic_rotate_right_24dp.xml new file mode 100644 index 0000000..5b80f8e --- /dev/null +++ b/app/src/main/res/drawable/ic_rotate_right_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_zoom_in_24dp.xml b/app/src/main/res/drawable/ic_zoom_in_24dp.xml new file mode 100644 index 0000000..ab4ab2f --- /dev/null +++ b/app/src/main/res/drawable/ic_zoom_in_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_zoom_out_24dp.xml b/app/src/main/res/drawable/ic_zoom_out_24dp.xml new file mode 100644 index 0000000..aa7acf4 --- /dev/null +++ b/app/src/main/res/drawable/ic_zoom_out_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/pdfviewer.xml b/app/src/main/res/layout/pdfviewer.xml new file mode 100644 index 0000000..cdc4fe6 --- /dev/null +++ b/app/src/main/res/layout/pdfviewer.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/pdf_viewer.xml b/app/src/main/res/menu/pdf_viewer.xml index fac76c3..7a8cc25 100644 --- a/app/src/main/res/menu/pdf_viewer.xml +++ b/app/src/main/res/menu/pdf_viewer.xml @@ -9,55 +9,55 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9a1dd85..413d10d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -19,4 +19,7 @@ Cannot open file with invalid MIME type Cannot open legacy file paths from insecure apps Received I/O error trying to open content + + WebView out-of-date + Your current WebView version is %d. The WebView should be at least version %d for the PDF Viewer to work. diff --git a/build.gradle.kts b/build.gradle.kts index d12a8aa..3502229 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath("com.android.tools.build:gradle:7.1.1") + classpath("com.android.tools.build:gradle:7.1.2") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10") } }