From c743c0d6a7cae1d143d04518c2bec8c7010a1b28 Mon Sep 17 00:00:00 2001 From: smdyv <88971341+smdyv@users.noreply.github.com> Date: Mon, 7 Feb 2022 17:42:47 +0100 Subject: [PATCH 01/15] Create layout for the PDF viewer activity Updating insets is no longer necessary because the layout reserves the space for the top app bar and frees it up in full-screen mode so the WebView can fill the entire screen. --- app/src/main/assets/viewer.css | 7 +---- app/src/main/assets/viewer.html | 1 - app/src/main/assets/viewer.js | 10 ------- .../org/grapheneos/pdfviewer/PdfViewer.java | 21 ++++---------- app/src/main/res/layout/pdfviewer.xml | 29 +++++++++++++++++++ app/src/main/res/layout/webview.xml | 5 ---- app/src/main/res/values-night/styles.xml | 8 +++-- app/src/main/res/values/styles.xml | 10 +++++-- 8 files changed, 50 insertions(+), 41 deletions(-) create mode 100644 app/src/main/res/layout/pdfviewer.xml delete mode 100644 app/src/main/res/layout/webview.xml diff --git a/app/src/main/assets/viewer.css b/app/src/main/assets/viewer.css index 7befbc5..ac479ba 100644 --- a/app/src/main/assets/viewer.css +++ b/app/src/main/assets/viewer.css @@ -1,13 +1,8 @@ -body, canvas, #padding { +body, canvas { padding: 0; margin: 0; } -#padding { - min-width: 100%; - background: black; -} - .textLayer { position: absolute; text-align: initial; 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 3dd440e..4a1c874 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java @@ -30,7 +30,7 @@ import androidx.loader.content.Loader; import com.google.android.material.snackbar.Snackbar; -import org.grapheneos.pdfviewer.databinding.WebviewBinding; +import org.grapheneos.pdfviewer.databinding.PdfviewerBinding; import org.grapheneos.pdfviewer.fragment.DocumentPropertiesFragment; import org.grapheneos.pdfviewer.fragment.JumpToPageFragment; import org.grapheneos.pdfviewer.loader.DocumentPropertiesLoader; @@ -103,21 +103,15 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader private float mZoomRatio = 1f; private int mDocumentOrientationDegrees; private int mDocumentState; - private int windowInsetTop; private List mDocumentProperties; private InputStream mInputStream; - private WebviewBinding binding; + private PdfviewerBinding binding; private TextView mTextView; private Toast mToast; private Snackbar snackbar; private class Channel { - @JavascriptInterface - public int getWindowInsetTop() { - return windowInsetTop; - } - @JavascriptInterface public int getPage() { return mPage; @@ -155,8 +149,9 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader @SuppressLint({"SetJavaScriptEnabled", "ClickableViewAccessibility"}) protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - binding = WebviewBinding.inflate(getLayoutInflater()); + binding = PdfviewerBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); + setSupportActionBar(binding.toolbar); binding.webview.setBackgroundColor(Color.TRANSPARENT); @@ -164,12 +159,6 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader WebView.setWebContentsDebuggingEnabled(true); } - binding.webview.setOnApplyWindowInsetsListener((view, insets) -> { - windowInsetTop = insets.getSystemWindowInsetTop(); - binding.webview.evaluateJavascript("updateInset()", null); - return insets; - }); - final WebSettings settings = binding.webview.getSettings(); settings.setAllowContentAccess(false); settings.setAllowFileAccess(false); @@ -412,6 +401,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + getSupportActionBar().show(); } private void hideSystemUi() { @@ -422,6 +412,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE); + getSupportActionBar().hide(); } @Override diff --git a/app/src/main/res/layout/pdfviewer.xml b/app/src/main/res/layout/pdfviewer.xml new file mode 100644 index 0000000..db4657f --- /dev/null +++ b/app/src/main/res/layout/pdfviewer.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/webview.xml b/app/src/main/res/layout/webview.xml deleted file mode 100644 index 36674fc..0000000 --- a/app/src/main/res/layout/webview.xml +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index 0be3c24..4ed1b8d 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -1,9 +1,13 @@ - - + - + From 8453e2f2c6007d33dc257e937e9e42c9a85b4094 Mon Sep 17 00:00:00 2001 From: smdyv <88971341+smdyv@users.noreply.github.com> Date: Sat, 19 Feb 2022 15:02:25 +0100 Subject: [PATCH 05/15] Use M3 theme --- .../pdfviewer/fragment/DocumentPropertiesFragment.java | 9 +++++---- .../pdfviewer/fragment/JumpToPageFragment.java | 5 +++-- app/src/main/res/values-night/styles.xml | 4 ++-- app/src/main/res/values/styles.xml | 6 +++--- 4 files changed, 13 insertions(+), 11 deletions(-) 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 c907acf..5441b15 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 { @@ -45,7 +46,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/values-night/styles.xml b/app/src/main/res/values-night/styles.xml index f96de1a..3743572 100644 --- a/app/src/main/res/values-night/styles.xml +++ b/app/src/main/res/values-night/styles.xml @@ -1,12 +1,12 @@ - - -