From be5af2de6b9e9cc40716f4d440f42e2cf2afcdf0 Mon Sep 17 00:00:00 2001 From: Jason Chang Date: Thu, 24 Dec 2020 16:34:19 +0800 Subject: [PATCH] Fix triggering One-handed mode introduces gesture conflict issues (2/n) Define a new larger gesture height instead of replacing existing navigation_bar_gesture_height with RRO. Bug: 159580663 Test: manual Change-Id: Icdd70b28d9b2629171fb60a0c9d603f6a69f076a --- .../OrientationTouchTransformer.java | 9 +++++++- .../quickstep/SysUINavigationMode.java | 21 ++++++++++++++++--- src/com/android/launcher3/ResourceUtils.java | 2 ++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java b/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java index eb33f98dad..b258a10c85 100644 --- a/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java +++ b/quickstep/src/com/android/quickstep/OrientationTouchTransformer.java @@ -66,6 +66,7 @@ class OrientationTouchTransformer { private final RectF mOneHandedModeRegion = new RectF(); private int mCurrentDisplayRotation; private int mNavBarGesturalHeight; + private int mNavBarLargerGesturalHeight; private boolean mEnableMultipleRegions; private Resources mResources; private OrientationRectF mLastRectTouched; @@ -106,6 +107,9 @@ class OrientationTouchTransformer { mMode = mode; mContractInfo = contractInfo; mNavBarGesturalHeight = getNavbarSize(ResourceUtils.NAVBAR_BOTTOM_GESTURE_SIZE); + mNavBarLargerGesturalHeight = ResourceUtils.getDimenByName( + ResourceUtils.NAVBAR_BOTTOM_GESTURE_LARGER_SIZE, resources, + mNavBarGesturalHeight); } private void refreshTouchRegion(Info info, Resources newRes) { @@ -234,6 +238,7 @@ class OrientationTouchTransformer { Point size = display.realSize; int rotation = display.rotation; int touchHeight = mNavBarGesturalHeight; + int largerGesturalHeight = mNavBarLargerGesturalHeight; OrientationRectF orientationRectF = new OrientationRectF(0, 0, size.x, size.y, rotation); if (mMode == SysUINavigationMode.Mode.NO_BUTTON) { @@ -256,7 +261,8 @@ class OrientationTouchTransformer { } } // One handed gestural only active on portrait mode - mOneHandedModeRegion.set(0, orientationRectF.bottom - touchHeight, size.x, size.y); + mOneHandedModeRegion.set(0, orientationRectF.bottom - mNavBarLargerGesturalHeight, + size.x, size.y); return orientationRectF; } @@ -378,6 +384,7 @@ class OrientationTouchTransformer { } pw.println(regions.toString()); pw.println(" mNavBarGesturalHeight=" + mNavBarGesturalHeight); + pw.println(" mNavBarLargerGesturalHeight=" + mNavBarLargerGesturalHeight); pw.println(" mOneHandedModeRegion=" + mOneHandedModeRegion); } diff --git a/quickstep/src/com/android/quickstep/SysUINavigationMode.java b/quickstep/src/com/android/quickstep/SysUINavigationMode.java index 6b502186e9..9bf0cfe6f2 100644 --- a/quickstep/src/com/android/quickstep/SysUINavigationMode.java +++ b/quickstep/src/com/android/quickstep/SysUINavigationMode.java @@ -74,6 +74,7 @@ public class SysUINavigationMode { private Mode mMode; private int mNavBarGesturalHeight; + private int mNavBarLargerGesturalHeight; private final List mChangeListeners = new ArrayList<>(); private final List mOneHandedOverlayChangeListeners = @@ -113,6 +114,17 @@ public class SysUINavigationMode { if (mNavBarGesturalHeight != newGesturalHeight) { mNavBarGesturalHeight = newGesturalHeight; + } + + int newLargerGesturalHeight = ResourceUtils.getDimenByName( + ResourceUtils.NAVBAR_BOTTOM_GESTURE_LARGER_SIZE, mContext.getResources(), + INVALID_RESOURCE_HANDLE); + if (newLargerGesturalHeight == INVALID_RESOURCE_HANDLE) { + Log.e(TAG, "Failed to get system resource ID. Incompatible framework version?"); + return; + } + if (mNavBarLargerGesturalHeight != newLargerGesturalHeight) { + mNavBarLargerGesturalHeight = newLargerGesturalHeight; dispatchOneHandedOverlayChange(); } } @@ -123,6 +135,9 @@ public class SysUINavigationMode { mNavBarGesturalHeight = ResourceUtils.getDimenByName( ResourceUtils.NAVBAR_BOTTOM_GESTURE_SIZE, mContext.getResources(), INVALID_RESOURCE_HANDLE); + mNavBarLargerGesturalHeight = ResourceUtils.getDimenByName( + ResourceUtils.NAVBAR_BOTTOM_GESTURE_LARGER_SIZE, mContext.getResources(), + mNavBarGesturalHeight); if (modeInt == INVALID_RESOURCE_HANDLE) { Log.e(TAG, "Failed to get system resource ID. Incompatible framework version?"); @@ -144,7 +159,7 @@ public class SysUINavigationMode { private void dispatchOneHandedOverlayChange() { for (OneHandedModeChangeListener listener : mOneHandedOverlayChangeListeners) { - listener.onOneHandedModeChanged(mNavBarGesturalHeight); + listener.onOneHandedModeChanged(mNavBarLargerGesturalHeight); } } @@ -159,7 +174,7 @@ public class SysUINavigationMode { public int addOneHandedOverlayChangeListener(OneHandedModeChangeListener listener) { mOneHandedOverlayChangeListeners.add(listener); - return mNavBarGesturalHeight; + return mNavBarLargerGesturalHeight; } public void removeOneHandedOverlayChangeListener(OneHandedModeChangeListener listener) { @@ -195,4 +210,4 @@ public class SysUINavigationMode { public interface OneHandedModeChangeListener { void onOneHandedModeChanged(int newGesturalHeight); } -} \ No newline at end of file +} diff --git a/src/com/android/launcher3/ResourceUtils.java b/src/com/android/launcher3/ResourceUtils.java index c9fb75a2db..f60e1f8137 100644 --- a/src/com/android/launcher3/ResourceUtils.java +++ b/src/com/android/launcher3/ResourceUtils.java @@ -25,6 +25,8 @@ public class ResourceUtils { public static final int INVALID_RESOURCE_HANDLE = -1; public static final String NAVBAR_LANDSCAPE_LEFT_RIGHT_SIZE = "navigation_bar_width"; public static final String NAVBAR_BOTTOM_GESTURE_SIZE = "navigation_bar_gesture_height"; + public static final String NAVBAR_BOTTOM_GESTURE_LARGER_SIZE = + "navigation_bar_gesture_larger_height"; public static int getNavbarSize(String resName, Resources res) { return getDimenByName(resName, res, DEFAULT_NAVBAR_VALUE);