Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e208562 authored by Bill Lin's avatar Bill Lin
Browse files

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
parent 1027fb5c
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -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());
            }
        }
    }
+6 −0
Original line number Diff line number Diff line
@@ -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
     */
+8 −0
Original line number Diff line number Diff line
@@ -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(() -> {