From e6add76a9fff3d956e2eb5a8feafe1d45188b1d9 Mon Sep 17 00:00:00 2001 From: smdyv <88971341+smdyv@users.noreply.github.com> Date: Fri, 25 Feb 2022 13:52:20 +0100 Subject: [PATCH] Handle out-of-date WebView Disable the open document menu item and show the user a relevant view. --- .../org/grapheneos/pdfviewer/PdfViewer.java | 25 +++++++ .../res/drawable/ic_error_outline_24dp.xml | 9 +++ app/src/main/res/layout/pdfviewer.xml | 65 +++++++++++++++++++ app/src/main/res/values/strings.xml | 3 + 4 files changed, 102 insertions(+) create mode 100644 app/src/main/res/drawable/ic_error_outline_24dp.xml diff --git a/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java b/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java index 4e049f2..2e39a9b 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java @@ -3,6 +3,7 @@ package org.grapheneos.pdfviewer; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; +import android.content.pm.PackageInfo; import android.content.res.ColorStateList; import android.graphics.Color; import android.net.Uri; @@ -53,6 +54,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader private static final String STATE_ZOOM_RATIO = "zoomRatio"; private static final String STATE_DOCUMENT_ORIENTATION_DEGREES = "documentOrientationDegrees"; 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'; " + @@ -324,6 +326,28 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader } } + @Override + protected void onResume() { + super.onResume(); + + // The user could have left the activity to update the WebView + 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(getString(R.string.webview_out_of_date_message, getWebViewRelease(), MIN_WEBVIEW_RELEASE)); + binding.webviewOutOfDateLayout.setVisibility(View.VISIBLE); + } + } + + 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) { @@ -500,6 +524,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader mDocumentState = STATE_END; } + enableDisableMenuItem(menu.findItem(R.id.action_open), getWebViewRelease() >= MIN_WEBVIEW_RELEASE); enableDisableMenuItem(menu.findItem(R.id.action_zoom_in), mZoomRatio != MAX_ZOOM_RATIO); enableDisableMenuItem(menu.findItem(R.id.action_zoom_out), mZoomRatio != MIN_ZOOM_RATIO); enableDisableMenuItem(menu.findItem(R.id.action_next), mPage < mNumPages); 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/layout/pdfviewer.xml b/app/src/main/res/layout/pdfviewer.xml index 7b1fcd7..8c01e23 100644 --- a/app/src/main/res/layout/pdfviewer.xml +++ b/app/src/main/res/layout/pdfviewer.xml @@ -25,4 +25,69 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 345df9b..89224f3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -20,4 +20,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.