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
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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(() -> {
|
||||
|
||||
Reference in New Issue
Block a user