diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java index 2e5604fbec..23cc6d5431 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/BaseSwipeUpHandlerV2.java @@ -780,12 +780,6 @@ public abstract class BaseSwipeUpHandlerV2, Q exte } } - if (endTarget == RECENTS || endTarget == HOME) { - // Since we're now done quickStepping, we want to only listen for touch events - // for the main orientation's nav bar, instead of multiple - mDeviceState.enableMultipleRegions(false); - } - if (mDeviceState.isOverviewDisabled() && (endTarget == RECENTS || endTarget == LAST_TASK)) { return LAST_TASK; } @@ -1243,6 +1237,7 @@ public abstract class BaseSwipeUpHandlerV2, Q exte } ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimation", true); doLogGesture(HOME); + mDeviceState.enableMultipleRegions(false); } protected abstract void finishRecentsControllerToHome(Runnable callback); @@ -1258,6 +1253,7 @@ public abstract class BaseSwipeUpHandlerV2, Q exte SystemUiProxy.INSTANCE.get(mContext).onOverviewShown(false, TAG); doLogGesture(RECENTS); + mDeviceState.onSwipeUpToOverview(mActivityInterface); reset(); } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java index 7d08fac363..c9ff88409a 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityInterface.java @@ -139,6 +139,11 @@ public final class FallbackActivityInterface extends || super.deferStartingActivity(deviceState, ev); } + @Override + public void onExitOverview(RecentsAnimationDeviceState deviceState, Runnable exitRunnable) { + // no-op, fake landscape not supported for 3P + } + @Override public int getContainerType() { RecentsActivity activity = getCreatedActivity(); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java index dae2f41b28..13b84e036e 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java @@ -44,6 +44,7 @@ import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.statehandlers.DepthController; import com.android.launcher3.statehandlers.DepthController.ClampedDepthProperty; +import com.android.launcher3.statemanager.StateManager; import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.userevent.nano.LauncherLogProto; @@ -224,6 +225,27 @@ public final class LauncherActivityInterface extends } + @Override + public void onExitOverview(RecentsAnimationDeviceState deviceState, Runnable exitRunnable) { + final StateManager stateManager = getCreatedActivity().getStateManager(); + stateManager.addStateListener( + new StateManager.StateListener() { + @Override + public void onStateTransitionComplete(LauncherState toState) { + // Are we going from Recents to Workspace? + if (toState == LauncherState.NORMAL) { + exitRunnable.run(); + + // reset layout on swipe to home + RecentsView recentsView = getCreatedActivity().getOverviewPanel(); + recentsView.setLayoutRotation(deviceState.getCurrentActiveRotation(), + deviceState.getDisplayRotation()); + stateManager.removeStateListener(this); + } + } + }); + } + @Override public Rect getOverviewWindowBounds(Rect homeBounds, RemoteAnimationTargetCompat target) { return homeBounds; diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java index a0bb631f78..ef3d174ed3 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java @@ -554,7 +554,6 @@ public class TouchInteractionService extends Service implements PluginListener mGestureBlockedActivities; private Runnable mOnDestroyFrozenTaskRunnable; + /** + * Set to true when user swipes to recents. In recents, we ignore the state of the recents + * task list being frozen or not to allow the user to keep interacting with nav bar rotation + * they went into recents with as opposed to defaulting to the default display rotation. + * TODO: (b/156984037) For when user rotates after entering overview + */ + private boolean mInOverview; public RecentsAnimationDeviceState(Context context) { mContext = context; @@ -508,7 +514,18 @@ public class RecentsAnimationDeviceState implements mOrientationTouchTransformer.transform(event); } + void onSwipeUpToOverview(BaseActivityInterface activityInterface) { + mInOverview = true; + activityInterface.onExitOverview(this, () -> { + mInOverview = false; + enableMultipleRegions(false); + }); + } + void enableMultipleRegions(boolean enable) { + if (mInOverview) { + return; + } mOrientationTouchTransformer.enableMultipleRegions(enable, mDefaultDisplay.getInfo()); UI_HELPER_EXECUTOR.execute(() -> { int quickStepStartingRotation =