diff options
author | Winson Chung <winsonc@google.com> | 2021-10-05 12:06:53 -0700 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-12-25 00:33:40 +0000 |
commit | 5d279cefacdc508d4a764e66ffe2e9d498a8624b (patch) | |
tree | 7b24413310aee2e580afa16f901486d1fd30ca0e | |
parent | 6a8c887ff758c36a0db2929e3e74e456d339cedc (diff) | |
download | base-5d279cefacdc508d4a764e66ffe2e9d498a8624b.tar.gz |
Cancel the existing recents animation before any initialization
- In the rare case that we are canceling the recents animation as a
part of starting another recents animation, ensure that we do it
before we move the target activity to be visible, otherwise the
cancelation will undo the previous work.
Bug: 193851085
Test: atest RecentsAnimationControllerTest
Change-Id: I22589a034eab3b1fab10f4b677f777b282305bbd
Merged-In: I22589a034eab3b1fab10f4b677f777b282305bbd
(cherry picked from commit 4ebdbc9db168d38341c131f9c53cf799311b6601)
(cherry picked from commit 7d6151c61ede945a1b29154fd658a425818db049)
Merged-In:I22589a034eab3b1fab10f4b677f777b282305bbd
-rw-r--r-- | services/core/java/com/android/server/wm/RecentsAnimation.java | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/RecentsAnimation.java b/services/core/java/com/android/server/wm/RecentsAnimation.java index b1bdc11ecee4..fea52f2f3b8d 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimation.java +++ b/services/core/java/com/android/server/wm/RecentsAnimation.java @@ -164,6 +164,13 @@ class RecentsAnimation implements RecentsAnimationCallbacks, OnRootTaskOrderChan ProtoLog.d(WM_DEBUG_RECENTS_ANIMATIONS, "startRecentsActivity(): intent=%s", mTargetIntent); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "RecentsAnimation#startRecentsActivity"); + // Cancel any existing recents animation running synchronously (do not hold the + // WM lock) before starting the newly requested recents animation as they can not coexist + if (mWindowManager.getRecentsAnimationController() != null) { + mWindowManager.getRecentsAnimationController().forceCancelAnimation( + REORDER_MOVE_TO_ORIGINAL_POSITION, "startRecentsActivity"); + } + // If the activity is associated with the root recents task, then try and get that first Task targetRootTask = mDefaultTaskDisplayArea.getRootTask(WINDOWING_MODE_UNDEFINED, mTargetActivityType); @@ -237,12 +244,7 @@ class RecentsAnimation implements RecentsAnimationCallbacks, OnRootTaskOrderChan targetActivity.intent.replaceExtras(mTargetIntent); // Fetch all the surface controls and pass them to the client to get the animation - // started. Cancel any existing recents animation running synchronously (do not hold the - // WM lock) - if (mWindowManager.getRecentsAnimationController() != null) { - mWindowManager.getRecentsAnimationController().forceCancelAnimation( - REORDER_MOVE_TO_ORIGINAL_POSITION, "startRecentsActivity"); - } + // started mWindowManager.initializeRecentsAnimation(mTargetActivityType, recentsAnimationRunner, this, mDefaultTaskDisplayArea.getDisplayId(), mTaskSupervisor.mRecentTasks.getRecentTaskIds(), targetActivity); |