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(() -> {