android/source/src/java/org/libreoffice/LOKitThread.java | 8 +++-- android/source/src/java/org/mozilla/gecko/ZoomConstraints.java | 14 -------- android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java | 16 ++-------- 3 files changed, 10 insertions(+), 28 deletions(-)
New commits: commit 377a8c8ed7dd997d1ac96918b69f805880d208af Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jan 17 08:40:41 2023 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jan 17 11:08:27 2023 +0000 tdf#153058 android: Use "fit page" for min zoom level So far, Android Viewer was using "fit page width" as minimum zoom level, meaning that it was impossible to zoom out to see the full page, e.g. when opening a doc with page size A4 portrait and using the device in landscape mode. Change the minimum zoom level to take the page height into account as well, i.e. adapt the minimum zoom level to be "fit whole page" to allow doing that. However, keep applying "fit page width" as zoom level when double-tapping, by using the "fit page width" zoom level as new default zoom level and applying the default instead of the minimum zoom level on double-tap. ("Fit page width" is probably more desirable than "fit whole page" at least when used on small devices, at least in all cases where writing is in horizontal direction, so the user can see the current portion of text and scroll down to continue reading/writing.) Use on double-tap is currently the only use for the default zoom level, the only previous occurence was effectively unused since commit 9ab43aebad67383057d2cc3f754ce2193fa78b4e Date: Wed Dec 4 17:18:20 2019 +0100 android: Allow zooming for Calc as well and finally dropped with Change-Id I702874f1d9161e5cef660bb4c4a0b7864d6e3c09 ("android: Drop superfluous ZoomConstraints#mAllow{,DoubleTap}Zoom"). Change-Id: Ica5d8207bc19a81173143fcb5c3747dc89f9fa81 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145658 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/android/source/src/java/org/libreoffice/LOKitThread.java b/android/source/src/java/org/libreoffice/LOKitThread.java index 27568ace5599..fd40c3089102 100644 --- a/android/source/src/java/org/libreoffice/LOKitThread.java +++ b/android/source/src/java/org/libreoffice/LOKitThread.java @@ -184,9 +184,11 @@ class LOKitThread extends Thread { private void updateZoomConstraints() { if (mTileProvider == null) return; mLayerClient = mContext.getLayerClient(); - // Set min zoom to the page width so that you cannot zoom below page width - final float minZoom = mLayerClient.getViewportMetrics().getWidth()/mTileProvider.getPageWidth(); - mLayerClient.setZoomConstraints(new ZoomConstraints(1f, minZoom, 0f)); + // Set default zoom to the page width and min zoom so that the whole page is visible + final float pageHeightZoom = mLayerClient.getViewportMetrics().getHeight() / mTileProvider.getPageHeight(); + final float pageWidthZoom = mLayerClient.getViewportMetrics().getWidth() / mTileProvider.getPageWidth(); + final float minZoom = Math.min(pageWidthZoom, pageHeightZoom); + mLayerClient.setZoomConstraints(new ZoomConstraints(pageWidthZoom, minZoom, 0f)); } /** diff --git a/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java b/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java index ef3d28e8ebb3..f1973d980e32 100644 --- a/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java +++ b/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java @@ -983,7 +983,7 @@ class JavaPanZoomController PointF pointOfTap = getMotionInDocumentCoordinates(motionEvent); ImmutableViewportMetrics metrics = getMetrics(); float newZoom = metrics.getZoomFactor() >= - DOUBLE_TAP_THRESHOLD ? mTarget.getZoomConstraints().getMinZoom() : DOUBLE_TAP_THRESHOLD; + DOUBLE_TAP_THRESHOLD ? mTarget.getZoomConstraints().getDefaultZoom() : DOUBLE_TAP_THRESHOLD; // calculate new top_left point from the point of tap float ratio = newZoom/metrics.getZoomFactor(); float newLeft = pointOfTap.x - 1/ratio * (pointOfTap.x - metrics.getOrigin().x / metrics.getZoomFactor()); commit 7c399767053b1cc6f68beccfbbb084c2891fe05e Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Tue Jan 17 08:31:54 2023 +0100 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Tue Jan 17 11:08:21 2023 +0000 android: Drop superfluous ZoomConstraints#mAllow{,DoubleTap}Zoom Both members are always set to true since commit 9ab43aebad67383057d2cc3f754ce2193fa78b4e Date: Wed Dec 4 17:18:20 2019 +0100 android: Allow zooming for Calc as well , so drop the two now superfluous members and getters. Change-Id: I702874f1d9161e5cef660bb4c4a0b7864d6e3c09 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145657 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/android/source/src/java/org/libreoffice/LOKitThread.java b/android/source/src/java/org/libreoffice/LOKitThread.java index c29f98461fb9..27568ace5599 100644 --- a/android/source/src/java/org/libreoffice/LOKitThread.java +++ b/android/source/src/java/org/libreoffice/LOKitThread.java @@ -186,7 +186,7 @@ class LOKitThread extends Thread { mLayerClient = mContext.getLayerClient(); // Set min zoom to the page width so that you cannot zoom below page width final float minZoom = mLayerClient.getViewportMetrics().getWidth()/mTileProvider.getPageWidth(); - mLayerClient.setZoomConstraints(new ZoomConstraints(true, 1f, minZoom, 0f)); + mLayerClient.setZoomConstraints(new ZoomConstraints(1f, minZoom, 0f)); } /** diff --git a/android/source/src/java/org/mozilla/gecko/ZoomConstraints.java b/android/source/src/java/org/mozilla/gecko/ZoomConstraints.java index f1672ba3dd76..dbe278827279 100644 --- a/android/source/src/java/org/mozilla/gecko/ZoomConstraints.java +++ b/android/source/src/java/org/mozilla/gecko/ZoomConstraints.java @@ -6,28 +6,16 @@ package org.mozilla.gecko; public final class ZoomConstraints { - private final boolean mAllowZoom; - private final boolean mAllowDoubleTapZoom; private final float mDefaultZoom; private final float mMinZoom; private final float mMaxZoom; - public ZoomConstraints(boolean allowZoom, float defaultZoom, float minZoom, float maxZoom) { - mAllowZoom = allowZoom; - mAllowDoubleTapZoom = allowZoom; + public ZoomConstraints(float defaultZoom, float minZoom, float maxZoom) { mDefaultZoom = defaultZoom; mMinZoom = minZoom; mMaxZoom = maxZoom; } - public final boolean getAllowZoom() { - return mAllowZoom; - } - - public final boolean getAllowDoubleTapZoom() { - return mAllowDoubleTapZoom; - } - public final float getDefaultZoom() { return mDefaultZoom; } diff --git a/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java b/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java index 697980af397d..ef3d28e8ebb3 100644 --- a/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java +++ b/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java @@ -744,11 +744,6 @@ class JavaPanZoomController if (constraints.getMaxZoom() > 0) maxZoomFactor = constraints.getMaxZoom(); - if (!constraints.getAllowZoom()) { - // If allowZoom is false, clamp to the default zoom level. - maxZoomFactor = minZoomFactor = constraints.getDefaultZoom(); - } - maxZoomFactor = Math.max(maxZoomFactor, minZoomFactor); if (zoomFactor < minZoomFactor) { @@ -821,7 +816,7 @@ class JavaPanZoomController if (mState == PanZoomState.ANIMATED_ZOOM) return false; - if (null == mTarget.getZoomConstraints() || !mTarget.getZoomConstraints().getAllowZoom()) + if (null == mTarget.getZoomConstraints()) return false; setState(PanZoomState.PINCHING); @@ -927,10 +922,7 @@ class JavaPanZoomController @Override public boolean onDown(MotionEvent motionEvent) { - if (mTarget.getZoomConstraints() != null) - mWaitForDoubleTap = mTarget.getZoomConstraints().getAllowDoubleTapZoom(); - else - mWaitForDoubleTap = false; + mWaitForDoubleTap = mTarget.getZoomConstraints() != null; return false; } @@ -984,7 +976,7 @@ class JavaPanZoomController @Override public boolean onDoubleTap(MotionEvent motionEvent) { - if (null == mTarget.getZoomConstraints() || !mTarget.getZoomConstraints().getAllowDoubleTapZoom()) { + if (null == mTarget.getZoomConstraints()) { return true; } // Double tap zooms in or out depending on the current zoom factor