From 23aa129016b6b1986c1a9e1408fb6d935b003bb0 Mon Sep 17 00:00:00 2001 From: Vinit Nayak Date: Thu, 27 May 2021 19:01:09 -0700 Subject: [PATCH] Force initialize task stack callback for gesture modes on init This handles an edge case where RotationTouchHelper#mMode starts as 3 button (by default) * then changes to gesture nav. * then onDestroy called * then on re-initialization mMode will be gesture nav instead of 3-button (it maintains state because of it being singleton). The check to register the callback won't happen because we register only if previous mode and current mode differ. Don't rely on default value of mMode being 3 button when initializing Bug: 181928969 Test: Followed repo steps in bug. Restarted phone in all 3 nav modes and verified expected quickswitch behavior Change-Id: I381eba7417c4cde593edf4b9a34da55b50774e98 --- .../android/quickstep/RotationTouchHelper.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/quickstep/src/com/android/quickstep/RotationTouchHelper.java b/quickstep/src/com/android/quickstep/RotationTouchHelper.java index 66929d0cdb..fc7a3dfde3 100644 --- a/quickstep/src/com/android/quickstep/RotationTouchHelper.java +++ b/quickstep/src/com/android/quickstep/RotationTouchHelper.java @@ -152,7 +152,7 @@ public class RotationTouchHelper implements // Register for navigation mode changes SysUINavigationMode.Mode newMode = mSysUiNavMode.addModeChangeListener(this); - onNavigationModeChanged(newMode); + onNavModeChangedInternal(newMode, newMode.hasGestures); runOnDestroy(() -> mSysUiNavMode.removeModeChangeListener(this)); mOrientationListener = new OrientationEventListener(mContext) { @@ -245,13 +245,22 @@ public class RotationTouchHelper implements @Override public void onNavigationModeChanged(SysUINavigationMode.Mode newMode) { + onNavModeChangedInternal(newMode, false); + } + + /** + * @param forceRegister if {@code true}, this will register {@link #mFrozenTaskListener} via + * {@link #setupOrientationSwipeHandler()} + */ + private void onNavModeChangedInternal(SysUINavigationMode.Mode newMode, boolean forceRegister) { mDisplayController.removeChangeListener(this); mDisplayController.addChangeListener(this); onDisplayInfoChanged(mContext, mDisplayController.getInfo(), CHANGE_ALL); mOrientationTouchTransformer.setNavigationMode(newMode, mDisplayController.getInfo(), - mContext.getResources()); - if (!mMode.hasGestures && newMode.hasGestures) { + mContext.getResources()); + + if (forceRegister || (!mMode.hasGestures && newMode.hasGestures)) { setupOrientationSwipeHandler(); } else if (mMode.hasGestures && !newMode.hasGestures){ destroyOrientationSwipeHandlerCallback();