From 779efaca91309f82e133954e1fab032601b2aa93 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Tue, 23 Jun 2020 21:40:05 +0800 Subject: [PATCH] Guard swipe to notification gesture with system settings preference Bug: 154080211 Test: make and install, check the gesture works as expectedly Change-Id: Ibd6bbd595d2fba5d68e66eb54e4a7fec160b9bf8 --- .../OneHandedModeInputConsumer.java | 14 ++++----- .../RecentsAnimationDeviceState.java | 29 ++++++++++++++----- .../util/SecureSettingsObserver.java | 14 +++++++++ 3 files changed, 41 insertions(+), 16 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OneHandedModeInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OneHandedModeInputConsumer.java index 46249d9fc5..0bb8fff2a1 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OneHandedModeInputConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/inputconsumers/OneHandedModeInputConsumer.java @@ -130,17 +130,13 @@ public class OneHandedModeInputConsumer extends DelegateInputConsumer { } private void onStartGestureDetected() { - if (mDeviceState.isOneHandedModeActive()) { - return; - } - if (mDeviceState.isOneHandedModeEnabled()) { - SystemUiProxy.INSTANCE.get(mContext).startOneHandedMode(); - return; + if (!mDeviceState.isOneHandedModeActive()) { + SystemUiProxy.INSTANCE.get(mContext).startOneHandedMode(); + } + } else if (mDeviceState.isSwipeToNotificationEnabled()) { + SystemUiProxy.INSTANCE.get(mContext).expandNotificationPanel(); } - - // Hook one-handed gesture to expand notification panel by default - SystemUiProxy.INSTANCE.get(mContext).expandNotificationPanel(); } private void onStopGestureDetected() { diff --git a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java index 8a1c30f0b2..448c93e616 100644 --- a/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java +++ b/quickstep/src/com/android/quickstep/RecentsAnimationDeviceState.java @@ -96,12 +96,12 @@ public class RecentsAnimationDeviceState implements private @SystemUiStateFlags int mSystemUiStateFlags; private SysUINavigationMode.Mode mMode = THREE_BUTTONS; private NavBarPosition mNavBarPosition; - private SecureSettingsObserver mOneHandedEnabledObserver; private final Region mDeferredGestureRegion = new Region(); private boolean mAssistantAvailable; private float mAssistantVisibility; private boolean mIsOneHandedModeEnabled; + private boolean mIsSwipeToNotificationEnabled; private boolean mIsUserUnlocked; private final ArrayList mUserUnlockedActions = new ArrayList<>(); @@ -240,12 +240,21 @@ public class RecentsAnimationDeviceState implements } if (SystemProperties.getBoolean("ro.support_one_handed_mode", false)) { - mOneHandedEnabledObserver = SecureSettingsObserver.newOneHandedSettingsObserver( - mContext, this::onOneHandedEnabledSettingsChanged); - mOneHandedEnabledObserver.register(); - mOneHandedEnabledObserver.dispatchOnChange(); + SecureSettingsObserver oneHandedEnabledObserver = + SecureSettingsObserver.newOneHandedSettingsObserver( + mContext, enabled -> mIsOneHandedModeEnabled = enabled); + oneHandedEnabledObserver.register(); + oneHandedEnabledObserver.dispatchOnChange(); + runOnDestroy(oneHandedEnabledObserver::unregister); } + SecureSettingsObserver swipeBottomEnabledObserver = + SecureSettingsObserver.newSwipeToNotificationSettingsObserver( + mContext, enabled -> mIsSwipeToNotificationEnabled = enabled); + swipeBottomEnabledObserver.register(); + swipeBottomEnabledObserver.dispatchOnChange(); + runOnDestroy(swipeBottomEnabledObserver::unregister); + SecureSettingsObserver userSetupObserver = new SecureSettingsObserver( context.getContentResolver(), e -> mIsUserSetupComplete = e, @@ -666,6 +675,10 @@ public class RecentsAnimationDeviceState implements * @return whether the given motion event can trigger the one handed mode. */ public boolean canTriggerOneHandedAction(MotionEvent ev) { + if (!mIsOneHandedModeEnabled && !mIsSwipeToNotificationEnabled) { + return false; + } + final DefaultDisplay.Info displayInfo = mDefaultDisplay.getInfo(); return (mOrientationTouchTransformer.touchInOneHandedModeRegion(ev) && displayInfo.rotation != Surface.ROTATION_90 @@ -677,8 +690,8 @@ public class RecentsAnimationDeviceState implements return mIsOneHandedModeEnabled; } - private void onOneHandedEnabledSettingsChanged(boolean isOneHandedEnabled) { - mIsOneHandedModeEnabled = isOneHandedEnabled; + public boolean isSwipeToNotificationEnabled() { + return mIsSwipeToNotificationEnabled; } /** @@ -790,6 +803,8 @@ public class RecentsAnimationDeviceState implements pw.println(" currentActiveRotation=" + getCurrentActiveRotation()); pw.println(" displayRotation=" + getDisplayRotation()); pw.println(" isUserUnlocked=" + mIsUserUnlocked); + pw.println(" isOneHandedModeEnabled=" + mIsOneHandedModeEnabled); + pw.println(" isSwipeToNotificationEnabled=" + mIsSwipeToNotificationEnabled); mOrientationTouchTransformer.dump(pw); } } diff --git a/src/com/android/launcher3/util/SecureSettingsObserver.java b/src/com/android/launcher3/util/SecureSettingsObserver.java index 08a8e6d255..4b2242907b 100644 --- a/src/com/android/launcher3/util/SecureSettingsObserver.java +++ b/src/com/android/launcher3/util/SecureSettingsObserver.java @@ -31,6 +31,9 @@ public class SecureSettingsObserver extends ContentObserver { public static final String NOTIFICATION_BADGING = "notification_badging"; /** Hidden field Settings.Secure.ONE_HANDED_MODE_ENABLED */ public static final String ONE_HANDED_ENABLED = "one_handed_mode_enabled"; + /** Hidden field Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED */ + public static final String ONE_HANDED_SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED = + "swipe_bottom_to_notification_enabled"; private final ContentResolver mResolver; private final String mKeySetting; @@ -87,4 +90,15 @@ public class SecureSettingsObserver extends ContentObserver { return new SecureSettingsObserver( context.getContentResolver(), listener, ONE_HANDED_ENABLED, 1); } + + /** + * Constructs settings observer for {@link #ONE_HANDED_SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED} + * preference. + */ + public static SecureSettingsObserver newSwipeToNotificationSettingsObserver(Context context, + OnChangeListener listener) { + return new SecureSettingsObserver( + context.getContentResolver(), listener, + ONE_HANDED_SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED, 1); + } }