diff --git a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt index f3234eeccc..023cc7ef92 100644 --- a/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt +++ b/quickstep/src/com/android/quickstep/fallback/window/RecentsWindowManager.kt @@ -425,6 +425,14 @@ constructor( AccessibilityManagerCompat.sendStateEventToTest(baseContext, state.toLauncherStateOrdinal()) } + override fun onRepeatStateSetAborted(state: RecentsState) { + super.onRepeatStateSetAborted(state) + RecentsWindowProtoLogProxy.logOnRepeatStateSetAborted(state.toString()) + if (!state.isRecentsViewVisible) { + cleanupRecentsWindow() + } + } + override fun getSystemUiController(): SystemUiController? { if (systemUiController == null) { systemUiController = SystemUiController(rootView) diff --git a/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java b/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java index cb7254f1fe..8221629aeb 100644 --- a/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java +++ b/quickstep/src_protolog/com/android/launcher3/util/StateManagerProtoLogProxy.java @@ -62,6 +62,12 @@ public class StateManagerProtoLogProxy { ProtoLog.d(LAUNCHER_STATE_MANAGER, "StateManager.onStateTransitionEnd: state: %s", state); } + public static void logOnRepeatStateSetAborted(@NonNull Object state) { + if (!ENABLE_STATE_MANAGER_PROTO_LOG.isTrue() || !isProtoLogInitialized()) return; + ProtoLog.d(LAUNCHER_STATE_MANAGER, + "StateManager.onRepeatStateSetAborted: state: %s", state); + } + public static void logCancelAnimation(boolean animationOngoing, @NonNull String trace) { if (!ENABLE_STATE_MANAGER_PROTO_LOG.isTrue() || !isProtoLogInitialized()) return; ProtoLog.d(LAUNCHER_STATE_MANAGER, diff --git a/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java b/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java index 0be88f6b7f..41e9cefbc1 100644 --- a/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java +++ b/quickstep/src_protolog/com/android/quickstep/util/RecentsWindowProtoLogProxy.java @@ -54,6 +54,11 @@ public class RecentsWindowProtoLogProxy { ProtoLog.d(RECENTS_WINDOW, "onStateSetEnd: %s", stateName); } + public static void logOnRepeatStateSetAborted(@NonNull String stateName) { + if (!ENABLE_RECENTS_WINDOW_PROTO_LOG.isTrue() || !isProtoLogInitialized()) return; + ProtoLog.d(RECENTS_WINDOW, "onRepeatStateSetAborted: %s", stateName); + } + public static void logStartRecentsWindow(boolean isShown, boolean windowViewIsNull) { if (!ENABLE_RECENTS_WINDOW_PROTO_LOG.isTrue() || !isProtoLogInitialized()) return; ProtoLog.d(RECENTS_WINDOW, diff --git a/src/com/android/launcher3/statemanager/StateManager.java b/src/com/android/launcher3/statemanager/StateManager.java index bbb46a35fa..1388b84d7a 100644 --- a/src/com/android/launcher3/statemanager/StateManager.java +++ b/src/com/android/launcher3/statemanager/StateManager.java @@ -265,6 +265,7 @@ public class StateManager, T extends StatefulContainer if (listener != null) { listener.onAnimationEnd(new AnimatorSet()); } + onRepeatStateSetAborted(state); return; } else if ((!mConfig.isUserControlled() && animated && mConfig.targetState == state) || mState.shouldPreserveDataStateOnReapply()) { @@ -273,6 +274,7 @@ public class StateManager, T extends StatefulContainer if (listener != null) { mConfig.currentAnimation.addListener(listener); } + onRepeatStateSetAborted(state); return; } } @@ -453,6 +455,15 @@ public class StateManager, T extends StatefulContainer } } + private void onRepeatStateSetAborted(S state) { + if (enableStateManagerProtoLog()) { + StateManagerProtoLogProxy.logOnRepeatStateSetAborted(state); + } else if (DEBUG) { + Log.d(TAG, "onRepeatStateSetAborted - state: " + state); + } + mContainer.onRepeatStateSetAborted(state); + } + public S getLastState() { return mLastStableState; } diff --git a/src/com/android/launcher3/statemanager/StatefulContainer.java b/src/com/android/launcher3/statemanager/StatefulContainer.java index 83a2fdcac5..951391438d 100644 --- a/src/com/android/launcher3/statemanager/StatefulContainer.java +++ b/src/com/android/launcher3/statemanager/StatefulContainer.java @@ -62,6 +62,14 @@ public interface StatefulContainer> ext default void onStateSetEnd(STATE_TYPE state) { } + /** + * Called when transition to state is aborted because the state is already set + * + * @param state current state of State_Type + */ + default void onRepeatStateSetAborted(STATE_TYPE state) { + } + /** * Called when transition to state starts * diff --git a/src_no_quickstep/com/android/launcher3/util/StateManagerProtoLogProxy.java b/src_no_quickstep/com/android/launcher3/util/StateManagerProtoLogProxy.java index 34e15f70ce..6906f63533 100644 --- a/src_no_quickstep/com/android/launcher3/util/StateManagerProtoLogProxy.java +++ b/src_no_quickstep/com/android/launcher3/util/StateManagerProtoLogProxy.java @@ -29,5 +29,7 @@ public class StateManagerProtoLogProxy { public static void logOnStateTransitionEnd(Object state) { } + public static void logOnRepeatStateSetAborted(Object state) { } + public static void logCancelAnimation(boolean animationOngoing, String trace) { } }