From 4e4b7c5da4dddbc3841abd450fa250936be70f4e Mon Sep 17 00:00:00 2001 From: Hardcore Sushi Date: Fri, 18 Feb 2022 15:03:53 +0100 Subject: [PATCH] libpdfviewer: Genesis --- .gitmodules | 2 +- app/build.gradle.kts | 12 +- {third_party => app}/pdfjs-dist | 0 app/src/main/AndroidManifest.xml | 20 +- app/src/main/assets/pdf.js | 2 +- app/src/main/assets/pdf.worker.js | 2 +- app/src/main/feature_graphic.png | Bin 15330 -> 0 bytes app/src/main/ic_launcher-playstore.png | Bin 11232 -> 0 bytes .../grapheneos/pdfviewer/GestureHelper.java | 13 - .../org/grapheneos/pdfviewer/PdfViewer.java | 284 ++++++------------ .../fragment/JumpToPageFragment.java | 19 +- .../loader/DocumentPropertiesLoader.java | 55 +--- .../ic_insert_drive_file_white_24dp.png | Bin 153 -> 0 bytes .../ic_insert_drive_file_white_24dp.png | Bin 133 -> 0 bytes .../ic_insert_drive_file_white_24dp.png | Bin 206 -> 0 bytes .../ic_insert_drive_file_white_24dp.png | Bin 283 -> 0 bytes .../ic_insert_drive_file_white_24dp.png | Bin 372 -> 0 bytes .../res/drawable/ic_launcher_foreground.xml | 30 -- app/src/main/res/layout/webview.xml | 5 - app/src/main/res/menu/pdf_viewer.xml | 6 - .../main/res/mipmap-anydpi/ic_launcher.xml | 5 - .../res/mipmap-anydpi/ic_launcher_round.xml | 5 - app/src/main/res/raw/keep.xml | 3 - app/src/main/res/values-night/styles.xml | 9 - .../res/values/ic_launcher_background.xml | 4 - app/src/main/res/values/strings.xml | 1 - app/src/main/res/values/styles.xml | 8 - 27 files changed, 110 insertions(+), 375 deletions(-) rename {third_party => app}/pdfjs-dist (100%) delete mode 100644 app/src/main/feature_graphic.png delete mode 100644 app/src/main/ic_launcher-playstore.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_insert_drive_file_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_insert_drive_file_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_insert_drive_file_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_insert_drive_file_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_insert_drive_file_white_24dp.png delete mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml delete mode 100644 app/src/main/res/layout/webview.xml delete mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher.xml delete mode 100644 app/src/main/res/mipmap-anydpi/ic_launcher_round.xml delete mode 100644 app/src/main/res/raw/keep.xml delete mode 100644 app/src/main/res/values-night/styles.xml delete mode 100644 app/src/main/res/values/ic_launcher_background.xml delete mode 100644 app/src/main/res/values/styles.xml diff --git a/.gitmodules b/.gitmodules index b5525f4..5a9ae89 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "pdfjs-dist"] - path = third_party/pdfjs-dist + path = app/pdfjs-dist url = https://github.com/mozilla/pdfjs-dist.git diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8c646c3..95cd277 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -9,7 +9,7 @@ if (useKeystoreProperties) { } plugins { - id("com.android.application") + id("com.android.library") id("kotlin-android") } @@ -29,21 +29,13 @@ android { buildToolsVersion = "32.0.0" defaultConfig { - applicationId = "org.grapheneos.pdfviewer" - minSdk = 26 + minSdk = 21 targetSdk = 31 - versionCode = 10 - versionName = versionCode.toString() resourceConfigurations.add("en") } buildTypes { - getByName("debug") { - applicationIdSuffix = ".debug" - } - getByName("release") { - isShrinkResources = true isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") if (useKeystoreProperties) { diff --git a/third_party/pdfjs-dist b/app/pdfjs-dist similarity index 100% rename from third_party/pdfjs-dist rename to app/pdfjs-dist diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5aa5354..7647869 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,25 +2,7 @@ - - - - - - - - - - - - - - + gn%1j=N@ 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 diff --git a/app/src/main/java/org/grapheneos/pdfviewer/GestureHelper.java b/app/src/main/java/org/grapheneos/pdfviewer/GestureHelper.java index 3b8002d..45fd9c7 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/GestureHelper.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/GestureHelper.java @@ -2,8 +2,6 @@ package org.grapheneos.pdfviewer; import android.annotation.SuppressLint; import android.content.Context; -import android.view.GestureDetector; -import android.view.MotionEvent; import android.view.ScaleGestureDetector; import android.view.View; @@ -13,7 +11,6 @@ import android.view.View; class GestureHelper { public interface GestureListener { - boolean onTapUp(); // Can be replaced with ratio when supported void onZoomIn(float value); void onZoomOut(float value); @@ -22,15 +19,6 @@ class GestureHelper { @SuppressLint("ClickableViewAccessibility") static void attach(Context context, View gestureView, GestureListener listener) { - - final GestureDetector detector = new GestureDetector(context, - new GestureDetector.SimpleOnGestureListener() { - @Override - public boolean onSingleTapUp(MotionEvent motionEvent) { - return listener.onTapUp(); - } - }); - final ScaleGestureDetector scaleDetector = new ScaleGestureDetector(context, new ScaleGestureDetector.SimpleOnScaleGestureListener() { final float SPAN_RATIO = 600; @@ -67,7 +55,6 @@ class GestureHelper { }); gestureView.setOnTouchListener((view, motionEvent) -> { - detector.onTouchEvent(motionEvent); scaleDetector.onTouchEvent(motionEvent); return false; }); diff --git a/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java b/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java index 3dd440e..77ca5e9 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/PdfViewer.java @@ -1,18 +1,16 @@ package org.grapheneos.pdfviewer; -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.Intent; +import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; +import android.util.AttributeSet; import android.util.Log; import android.view.Gravity; 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; @@ -24,13 +22,11 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.loader.app.LoaderManager; import androidx.loader.content.Loader; -import com.google.android.material.snackbar.Snackbar; - -import org.grapheneos.pdfviewer.databinding.WebviewBinding; import org.grapheneos.pdfviewer.fragment.DocumentPropertiesFragment; import org.grapheneos.pdfviewer.fragment.JumpToPageFragment; import org.grapheneos.pdfviewer.loader.DocumentPropertiesLoader; @@ -40,13 +36,9 @@ import java.io.InputStream; import java.util.HashMap; import java.util.List; -public class PdfViewer extends AppCompatActivity implements LoaderManager.LoaderCallbacks> { +public class PdfViewer extends WebView implements LoaderManager.LoaderCallbacks> { public static final String TAG = "PdfViewer"; - private static final String STATE_URI = "uri"; - private static final String STATE_PAGE = "page"; - 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 String CONTENT_SECURITY_POLICY = @@ -92,12 +84,10 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader private static final float MAX_ZOOM_RATIO = 1.5f; private static final int ALPHA_LOW = 130; private static final int ALPHA_HIGH = 255; - private static final int ACTION_OPEN_DOCUMENT_REQUEST_CODE = 1; private static final int STATE_LOADED = 1; private static final int STATE_END = 2; private static final int PADDING = 10; - private Uri mUri; public int mPage; public int mNumPages; private float mZoomRatio = 1f; @@ -107,70 +97,27 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader private List mDocumentProperties; private InputStream mInputStream; - private WebviewBinding binding; private TextView mTextView; private Toast mToast; - private Snackbar snackbar; - private class Channel { - @JavascriptInterface - public int getWindowInsetTop() { - return windowInsetTop; - } + public AppCompatActivity activity; + String fileName; + Long fileSize; - @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; - runOnUiThread(PdfViewer.this::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); - runOnUiThread(() -> LoaderManager.getInstance(PdfViewer.this).restartLoader(DocumentPropertiesLoader.ID, args, PdfViewer.this)); - } - } - - @Override - @SuppressLint({"SetJavaScriptEnabled", "ClickableViewAccessibility"}) - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - binding = WebviewBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - binding.webview.setBackgroundColor(Color.TRANSPARENT); + void init(Context context) { + setBackgroundColor(Color.TRANSPARENT); if (BuildConfig.DEBUG) { WebView.setWebContentsDebuggingEnabled(true); } - binding.webview.setOnApplyWindowInsetsListener((view, insets) -> { + setOnApplyWindowInsetsListener((view, insets) -> { windowInsetTop = insets.getSystemWindowInsetTop(); - binding.webview.evaluateJavascript("updateInset()", null); + evaluateJavascript("updateInset()", null); return insets; }); - final WebSettings settings = binding.webview.getSettings(); + final WebSettings settings = getSettings(); settings.setAllowContentAccess(false); settings.setAllowFileAccess(false); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); @@ -178,12 +125,12 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader CookieManager.getInstance().setAcceptCookie(false); - binding.webview.addJavascriptInterface(new Channel(), "channel"); + addJavascriptInterface(new Channel(), "channel"); - binding.webview.setWebViewClient(new WebViewClient() { + setWebViewClient(new WebViewClient() { private WebResourceResponse fromAsset(final String mime, final String path) { try { - InputStream inputStream = getAssets().open(path.substring(1)); + InputStream inputStream = context.getAssets().open(path.substring(1)); return new WebResourceResponse(mime, null, inputStream); } catch (IOException e) { return null; @@ -237,30 +184,12 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader @Override public void onPageFinished(WebView view, String url) { mDocumentState = STATE_LOADED; - invalidateOptionsMenu(); + activity.invalidateOptionsMenu(); } }); - GestureHelper.attach(PdfViewer.this, binding.webview, + GestureHelper.attach(context, this, new GestureHelper.GestureListener() { - @Override - public boolean onTapUp() { - if (mUri != null) { - binding.webview.evaluateJavascript("isTextSelected()", selection -> { - if (!Boolean.parseBoolean(selection)) { - if ((getWindow().getDecorView().getSystemUiVisibility() & - View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { - hideSystemUi(); - } else { - showSystemUi(); - } - } - }); - return true; - } - return false; - } - @Override public void onZoomIn(float value) { zoomIn(value, false); @@ -277,56 +206,82 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader } }); - mTextView = new TextView(this); + mTextView = new TextView(context); mTextView.setBackgroundColor(Color.DKGRAY); mTextView.setTextColor(ColorStateList.valueOf(Color.WHITE)); mTextView.setTextSize(18); mTextView.setPadding(PADDING, 0, PADDING, 0); + } - // If loaders are not being initialized in onCreate(), the result will not be delivered - // after orientation change (See FragmentHostCallback), thus initialize the - // loader manager impl so that the result will be delivered. - LoaderManager.getInstance(this); + public PdfViewer(@NonNull Context context) { + super(context); + init(context); + } - snackbar = Snackbar.make(binding.webview, "", Snackbar.LENGTH_LONG); + public PdfViewer(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(context); + } - final Intent intent = getIntent(); - if (Intent.ACTION_VIEW.equals(intent.getAction())) { - if (!"application/pdf".equals(intent.getType())) { - snackbar.setText(R.string.invalid_mime_type).show(); - return; - } - mUri = intent.getData(); - mPage = 1; + 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; } - if (savedInstanceState != null) { - mUri = savedInstanceState.getParcelable(STATE_URI); - mPage = savedInstanceState.getInt(STATE_PAGE); - mZoomRatio = savedInstanceState.getFloat(STATE_ZOOM_RATIO); - mDocumentOrientationDegrees = savedInstanceState.getInt(STATE_DOCUMENT_ORIENTATION_DEGREES); + @JavascriptInterface + public int getPage() { + return mPage; } - if (mUri != null) { - if ("file".equals(mUri.getScheme())) { - snackbar.setText(R.string.legacy_file_uri).show(); - return; + @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"); } - loadPdf(); + final Bundle args = new Bundle(); + args.putString(KEY_PROPERTIES, properties); + activity.runOnUiThread(() -> LoaderManager.getInstance(PdfViewer.this.activity).restartLoader(DocumentPropertiesLoader.ID, args, PdfViewer.this)); } } @NonNull @Override public Loader> onCreateLoader(int id, Bundle args) { - return new DocumentPropertiesLoader(this, args.getString(KEY_PROPERTIES), mNumPages, mUri); + return new DocumentPropertiesLoader(activity, args.getString(KEY_PROPERTIES), mNumPages, fileName, fileSize); } @Override public void onLoadFinished(@NonNull Loader> loader, List data) { mDocumentProperties = data; - LoaderManager.getInstance(this).destroyLoader(DocumentPropertiesLoader.ID); + LoaderManager.getInstance(activity).destroyLoader(DocumentPropertiesLoader.ID); } @Override @@ -334,23 +289,18 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader mDocumentProperties = null; } - private void loadPdf() { - try { - if (mInputStream != null) { - mInputStream.close(); - } - mInputStream = getContentResolver().openInputStream(mUri); - } catch (IOException e) { - snackbar.setText(R.string.io_error).show(); - return; - } - - showSystemUi(); - binding.webview.loadUrl("https://localhost/viewer.html"); + public void loadPdf(InputStream inputStream, String fileName, Long fileSize) { + mPage = 1; + mDocumentProperties = null; + mInputStream = inputStream; + this.fileName = fileName; + this.fileSize = fileSize; + loadUrl("https://localhost/viewer.html"); + activity.invalidateOptionsMenu(); } private void renderPage(final int zoom) { - binding.webview.evaluateJavascript("onRenderPage(" + zoom + ")", null); + evaluateJavascript("onRenderPage(" + zoom + ")", null); } private void documentOrientationChanged(final int orientationDegreesOffset) { @@ -361,18 +311,11 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader renderPage(0); } - private void openDocument() { - Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); - intent.addCategory(Intent.CATEGORY_OPENABLE); - intent.setType("application/pdf"); - startActivityForResult(intent, ACTION_OPEN_DOCUMENT_REQUEST_CODE); - } - private void zoomIn(float value, boolean end) { if (mZoomRatio < MAX_ZOOM_RATIO) { mZoomRatio = Math.min(mZoomRatio + value, MAX_ZOOM_RATIO); renderPage(end ? 1 : 2); - invalidateOptionsMenu(); + activity.invalidateOptionsMenu(); } } @@ -380,7 +323,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader if (mZoomRatio > MIN_ZOOM_RATIO) { mZoomRatio = Math.max(mZoomRatio - value, MIN_ZOOM_RATIO); renderPage(end ? 1 : 2); - invalidateOptionsMenu(); + activity.invalidateOptionsMenu(); } } @@ -403,48 +346,7 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader mPage = selected_page; renderPage(0); showPageNumber(); - invalidateOptionsMenu(); - } - } - - private void showSystemUi() { - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); - } - - private void hideSystemUi() { - getWindow().getDecorView().setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE | - View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | - View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | - View.SYSTEM_UI_FLAG_FULLSCREEN | - View.SYSTEM_UI_FLAG_IMMERSIVE); - } - - @Override - public void onSaveInstanceState(@NonNull Bundle savedInstanceState) { - super.onSaveInstanceState(savedInstanceState); - savedInstanceState.putParcelable(STATE_URI, mUri); - savedInstanceState.putInt(STATE_PAGE, mPage); - savedInstanceState.putFloat(STATE_ZOOM_RATIO, mZoomRatio); - savedInstanceState.putInt(STATE_DOCUMENT_ORIENTATION_DEGREES, mDocumentOrientationDegrees); - } - - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent resultData) { - super.onActivityResult(requestCode, resultCode, resultData); - - if (requestCode == ACTION_OPEN_DOCUMENT_REQUEST_CODE && resultCode == Activity.RESULT_OK) { - if (resultData != null) { - mUri = resultData.getData(); - mPage = 1; - mDocumentProperties = null; - loadPdf(); - invalidateOptionsMenu(); - } + activity.invalidateOptionsMenu(); } } @@ -453,22 +355,13 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader mToast.cancel(); } mTextView.setText(String.format("%s/%s", mPage, mNumPages)); - mToast = new Toast(getApplicationContext()); + mToast = new Toast(activity); mToast.setGravity(Gravity.BOTTOM | Gravity.END, PADDING, PADDING); mToast.setDuration(Toast.LENGTH_SHORT); mToast.setView(mTextView); mToast.show(); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - super.onCreateOptionsMenu(menu); - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.pdf_viewer, menu); - return true; - } - - @Override public boolean onPrepareOptionsMenu(Menu menu) { final int[] ids = { R.id.action_zoom_in, R.id.action_zoom_out, R.id.action_jump_to_page, R.id.action_next, R.id.action_previous, R.id.action_first, R.id.action_last, @@ -499,7 +392,6 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader return true; } - @Override public boolean onOptionsItemSelected(MenuItem item) { final int itemId = item.getItemId(); if (itemId == R.id.action_previous) { @@ -514,9 +406,6 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader } else if (itemId == R.id.action_last) { onJumpToPageInDocument(mNumPages); return true; - } else if (itemId == R.id.action_open) { - openDocument(); - return true; } else if (itemId == R.id.action_zoom_out) { zoomOut(0.25f, true); return true; @@ -532,14 +421,13 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader } else if (itemId == R.id.action_view_document_properties) { DocumentPropertiesFragment .newInstance(mDocumentProperties) - .show(getSupportFragmentManager(), DocumentPropertiesFragment.TAG); + .show(activity.getSupportFragmentManager(), DocumentPropertiesFragment.TAG); return true; } else if (itemId == R.id.action_jump_to_page) { - new JumpToPageFragment() - .show(getSupportFragmentManager(), JumpToPageFragment.TAG); + JumpToPageFragment.newInstance(this) + .show(activity.getSupportFragmentManager(), JumpToPageFragment.TAG); return true; } - - return super.onOptionsItemSelected(item); + return false; } } 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..586a0a3 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/fragment/JumpToPageFragment.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/fragment/JumpToPageFragment.java @@ -20,15 +20,12 @@ public class JumpToPageFragment extends DialogFragment { private final static String STATE_PICKER_MAX = "picker_max"; private NumberPicker mPicker; + PdfViewer pdfViewer; - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - if (savedInstanceState != null) { - mPicker.setMinValue(savedInstanceState.getInt(STATE_PICKER_MIN)); - mPicker.setMaxValue(savedInstanceState.getInt(STATE_PICKER_MAX)); - mPicker.setValue(savedInstanceState.getInt(STATE_PICKER_CUR)); - } + public static JumpToPageFragment newInstance(PdfViewer pdfViewer) { + JumpToPageFragment f = new JumpToPageFragment(); + f.pdfViewer = pdfViewer; + return f; } @NonNull @@ -36,8 +33,8 @@ public class JumpToPageFragment extends DialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { mPicker = new NumberPicker(getActivity()); mPicker.setMinValue(1); - mPicker.setMaxValue(((PdfViewer)requireActivity()).mNumPages); - mPicker.setValue(((PdfViewer)requireActivity()).mPage); + mPicker.setMaxValue(pdfViewer.mNumPages); + mPicker.setValue(pdfViewer.mPage); final FrameLayout layout = new FrameLayout(getActivity()); layout.addView(mPicker, new FrameLayout.LayoutParams( @@ -49,7 +46,7 @@ public class JumpToPageFragment extends DialogFragment { .setView(layout) .setPositiveButton(android.R.string.ok, (dialogInterface, i) -> { mPicker.clearFocus(); - ((PdfViewer)requireActivity()).onJumpToPageInDocument(mPicker.getValue()); + pdfViewer.onJumpToPageInDocument(mPicker.getValue()); }) .setNegativeButton(android.R.string.cancel, null) .create(); diff --git a/app/src/main/java/org/grapheneos/pdfviewer/loader/DocumentPropertiesLoader.java b/app/src/main/java/org/grapheneos/pdfviewer/loader/DocumentPropertiesLoader.java index 0b341ca..3bafbe5 100644 --- a/app/src/main/java/org/grapheneos/pdfviewer/loader/DocumentPropertiesLoader.java +++ b/app/src/main/java/org/grapheneos/pdfviewer/loader/DocumentPropertiesLoader.java @@ -1,10 +1,7 @@ package org.grapheneos.pdfviewer.loader; import android.content.Context; -import android.database.Cursor; import android.graphics.Typeface; -import android.net.Uri; -import android.provider.OpenableColumns; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.StyleSpan; @@ -12,6 +9,8 @@ import android.util.Log; import androidx.loader.content.AsyncTaskLoader; +import org.grapheneos.pdfviewer.R; +import org.grapheneos.pdfviewer.Utils; import org.json.JSONException; import org.json.JSONObject; @@ -19,9 +18,6 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.List; -import org.grapheneos.pdfviewer.R; -import org.grapheneos.pdfviewer.Utils; - public class DocumentPropertiesLoader extends AsyncTaskLoader> { public static final String TAG = "DocumentPropertiesLoader"; @@ -29,16 +25,17 @@ public class DocumentPropertiesLoader extends AsyncTaskLoader private final String mProperties; private final int mNumPages; - private final Uri mUri; - private Cursor mCursor; + String fileName; + Long fileSize; - public DocumentPropertiesLoader(Context context, String properties, int numPages, Uri uri) { + public DocumentPropertiesLoader(Context context, String properties, int numPages, String fileName, Long fileSize) { super(context); mProperties = properties; mNumPages = numPages; - mUri = uri; + this.fileName = fileName; + this.fileSize = fileSize; } @Override @@ -48,23 +45,8 @@ public class DocumentPropertiesLoader extends AsyncTaskLoader final String[] names = context.getResources().getStringArray(R.array.property_names); final List properties = new ArrayList<>(names.length); - mCursor = context.getContentResolver().query(mUri, null, null, null, null); - if (mCursor != null) { - mCursor.moveToFirst(); - - final int indexName = mCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); - if (indexName >= 0) { - properties.add(getProperty(null, names[0], mCursor.getString(indexName))); - } - - final int indexSize = mCursor.getColumnIndex(OpenableColumns.SIZE); - if (indexSize >= 0) { - final long fileSize = Long.parseLong(mCursor.getString(indexSize)); - properties.add(getProperty(null, names[1], Utils.parseFileSize(fileSize))); - } - - mCursor.close(); - } + properties.add(getProperty(null, names[0], fileName)); + properties.add(getProperty(null, names[1], Utils.parseFileSize(fileSize))); try { final JSONObject json = new JSONObject(mProperties); @@ -89,9 +71,7 @@ public class DocumentPropertiesLoader extends AsyncTaskLoader @Override public void deliverResult(List properties) { - if (isReset()) { - onReleaseResources(); - } else if (isStarted()) { + if (!isReset() && isStarted()) { super.deliverResult(properties); } } @@ -106,26 +86,11 @@ public class DocumentPropertiesLoader extends AsyncTaskLoader cancelLoad(); } - @Override - public void onCanceled(List properties) { - super.onCanceled(properties); - - onReleaseResources(); - } - @Override protected void onReset() { super.onReset(); onStopLoading(); - onReleaseResources(); - } - - private void onReleaseResources() { - if (mCursor != null) { - mCursor.close(); - mCursor = null; - } } private CharSequence getProperty(final JSONObject json, String name, String specName) { diff --git a/app/src/main/res/drawable-hdpi/ic_insert_drive_file_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_insert_drive_file_white_24dp.png deleted file mode 100644 index 84755e48817d86d61d09e70489b6c94b5c1f4d38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8f~SjPh{y4_XAbf<81OJ3(CJ7} zndX``b76v-N7DYNg?AXzx0$@j_%O$-MDb9#M4)m=#h>FoD;{~Q*wnG^Q^%Sa9jkV9 zthk}E_JdQ<#r;ZwuA-qP*1MK2|9P?TocWEMO!)@USli?GV)cP`F?hQAxvX~5;q+UmdnXs1e(j>>FVdQ&MBb@07N}3VE_OC diff --git a/app/src/main/res/drawable-xhdpi/ic_insert_drive_file_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_insert_drive_file_white_24dp.png deleted file mode 100644 index 798ebd4e25f68b658c82e773eea97bd2ad412f17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0Dsh%#5ArXh)UUTGX4&Z5dST1#X z_fmE(jjwTCSC_smS-D$9cp}$l`2@QYT1!{h^YDMEIJ_$LxwOxRqkmdKI;Vst E0NwCNssI20 diff --git a/app/src/main/res/drawable-xxhdpi/ic_insert_drive_file_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_insert_drive_file_white_24dp.png deleted file mode 100644 index f3e153b45eb7886c314afd8642bc9018c1f2b5bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw9(lSrhGg7(d+8wOAqSC`hqkR( z1O(pr7kRR-^fM4B-pJrB!18rLU;5WcwbqN9K8JrW^zk~kQ@@Q%*UUm`d)(nn1I4KI z5$WBNZm6sYkec37%CT|!!~%}SX+}cp1pU2?gz^k0^oX!`dZ;RJuH;csnA-GWNs++J zBMgC_G6EBiFkSSp5$HU^66g_g!CF(k6j7})P zi3R_eVwcPdw#%5()K(Lq&bsyI0x4_Bbf>AG4m-Kby09c-#l^%UGs{zXGMryqJkPLY Y&+MxXFXli2*NgVS zce*$hNuLo@ada)wwkl-hV=5FsC)E4*jDt)D|B?8wr!IWgTTscqYIn4V0dUAW1Y}9z7KOhqi^sPPIw7!dLw*NrLf;=eP`^JY9k?(#X=nCd zcgzlKvHty0=g_lyrE}%$KcD@NJa^2A$V!HX=v7zCg9d&s2ko((e7)78&qol`;+ E02^zJCIA2c diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 2558bc4..0000000 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - 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/menu/pdf_viewer.xml b/app/src/main/res/menu/pdf_viewer.xml index e1cc94d..fac76c3 100644 --- a/app/src/main/res/menu/pdf_viewer.xml +++ b/app/src/main/res/menu/pdf_viewer.xml @@ -19,12 +19,6 @@ android:title="@string/action_next" app:showAsAction="ifRoom" /> - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml deleted file mode 100644 index 7353dbd..0000000 --- a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/raw/keep.xml b/app/src/main/res/raw/keep.xml deleted file mode 100644 index 3b9412b..0000000 --- a/app/src/main/res/raw/keep.xml +++ /dev/null @@ -1,3 +0,0 @@ - - diff --git a/app/src/main/res/values-night/styles.xml b/app/src/main/res/values-night/styles.xml deleted file mode 100644 index 0be3c24..0000000 --- a/app/src/main/res/values-night/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index c5d5899..0000000 --- a/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #FFFFFF - \ 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..9a1dd85 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,7 +4,6 @@ Previous page Next page - Open document First page Last page Zoom out diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml deleted file mode 100644 index 7c3f7d7..0000000 --- a/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -