From 3e208562150aed2dfcacd3ebe9c50b5c04a67c0f Mon Sep 17 00:00:00 2001 From: Bill Lin Date: Mon, 19 Apr 2021 20:09:27 +0800 Subject: [PATCH] 1/ Add onStartTransition() callback for SYSUI_STATE_ONE_HANDED_ACTIVE Previously in launcher quick steps, when one handed mode trigger the gesture is easy to conflict "swipe up Recents" and "swipe horizontal for quick switch", we only consume gesture when SYSUI_STATE_ONE_HANDED_ACTIVE=true, however, user have a bad experience when one handed transitioning conflict to "swipe up to launch recents". Legacy design : onStartFinished() : SYSUI_STATE_ONE_HANDED_ACTIVE -> true onStopFinished() : SYSUI_STATE_ONE_HANDED_ACTIVE -> false New design : onTransition() : SYSUI_STATE_ONE_HANDED_ACTIVE -> true onStartFinished() : SYSUI_STATE_ONE_HANDED_ACTIVE -> true onStopFinished() : SYSUI_STATE_ONE_HANDED_ACTIVE -> false Test: atest WMShellUnitTests Bug: 177978035 Change-Id: Iac9612b2eb07606712a4ab3eb036ac6fd3d12ae3 --- .../onehanded/OneHandedDisplayAreaOrganizer.java | 15 ++++++++++++--- .../onehanded/OneHandedTransitionCallback.java | 6 ++++++ .../src/com/android/systemui/wmshell/WMShell.java | 8 ++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java index d1b3f1a2e8a54..390985c09dcc9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java @@ -82,6 +82,14 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { @Override public void onOneHandedAnimationStart( OneHandedAnimationController.OneHandedTransitionAnimator animator) { + final boolean isEntering = animator.getTransitionDirection() + == TRANSITION_DIRECTION_TRIGGER; + if (!mTransitionCallbacks.isEmpty()) { + for (int i = mTransitionCallbacks.size() - 1; i >= 0; i--) { + final OneHandedTransitionCallback cb = mTransitionCallbacks.get(i); + cb.onStartTransition(isEntering); + } + } } @Override @@ -266,11 +274,12 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { mLastVisualDisplayBounds.offsetTo(0, direction == TRANSITION_DIRECTION_TRIGGER ? offset : 0); for (int i = mTransitionCallbacks.size() - 1; i >= 0; i--) { - final OneHandedTransitionCallback callback = mTransitionCallbacks.get(i); + final OneHandedTransitionCallback cb = mTransitionCallbacks.get(i); + cb.onStartTransition(false /* isTransitioning */); if (direction == TRANSITION_DIRECTION_TRIGGER) { - callback.onStartFinished(getLastVisualDisplayBounds()); + cb.onStartFinished(getLastVisualDisplayBounds()); } else { - callback.onStopFinished(getLastVisualDisplayBounds()); + cb.onStopFinished(getLastVisualDisplayBounds()); } } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTransitionCallback.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTransitionCallback.java index 3af7c4b71d0ac..e8291862947b5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTransitionCallback.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedTransitionCallback.java @@ -23,6 +23,12 @@ import android.graphics.Rect; * touch region.(e.g: one handed activated, user tap out regions of displayArea to stop one handed) */ public interface OneHandedTransitionCallback { + /** + * Called when one handed mode entering or exiting transition starting + */ + default void onStartTransition(boolean isEntering) { + } + /** * Called when start one handed transition finished */ diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java index 81bb819d77eac..74077a2482d13 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java @@ -235,6 +235,14 @@ public final class WMShell extends SystemUI oneHanded.setThreeButtonModeEnabled(currentMode == NAV_BAR_MODE_3BUTTON); oneHanded.registerTransitionCallback(new OneHandedTransitionCallback() { + @Override + public void onStartTransition(boolean isEntering) { + mSysUiMainExecutor.execute(() -> { + mSysUiState.setFlag(SYSUI_STATE_ONE_HANDED_ACTIVE, + true).commitUpdate(DEFAULT_DISPLAY); + }); + } + @Override public void onStartFinished(Rect bounds) { mSysUiMainExecutor.execute(() -> {