Skip marking recents as pending top if it is already on top

Otherwise when cleaning up recents animation without further
transition, the fixed rotation state is not cleared.

Since live tile is enabled, when using home key (button navigation
mode) to leave overview, the recents animation will be finished
after starting home, so home is already on top. Then the method
notifyRecentsWillBeTop that used for deferring clear fixed rotation
until next transition should not be called.

Fixes: 193032496
Test: RecentsAnimationControllerTest
Change-Id: Icbe27f6b3d84c948a75d6dabebab1f6b469bbc4d
This commit is contained in:
Riddle Hsu
2021-07-13 02:35:07 +08:00
parent 395c582b62
commit 88f306e2ba
2 changed files with 8 additions and 1 deletions

View File

@@ -949,7 +949,8 @@ public class RecentsAnimationController implements DeathRecipient {
"cleanupAnimation(): Notify animation finished mPendingAnimations=%d "
+ "reorderMode=%d",
mPendingAnimations.size(), reorderMode);
if (reorderMode != REORDER_MOVE_TO_ORIGINAL_POSITION) {
if (reorderMode != REORDER_MOVE_TO_ORIGINAL_POSITION
&& mTargetActivityRecord != mDisplayContent.topRunningActivity()) {
// Notify the state at the beginning because the removeAnimation may notify the
// transition is finished. This is a signal that there will be a next transition.
mDisplayContent.mFixedRotationTransitionListener.notifyRecentsWillBeTop();

View File

@@ -701,6 +701,12 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
// Continue the animation (simulating a call to cleanupScreenshot())
mController.continueDeferredCancelAnimation();
verify(mAnimationCallbacks).onAnimationFinished(REORDER_MOVE_TO_TOP, false);
// Assume home was moved to front so will-be-top callback should not be called.
homeActivity.moveFocusableActivityToTop("test");
spyOn(mDefaultDisplay.mFixedRotationTransitionListener);
mController.cleanupAnimation(REORDER_MOVE_TO_TOP);
verify(mDefaultDisplay.mFixedRotationTransitionListener, never()).notifyRecentsWillBeTop();
}
private ActivityRecord createHomeActivity() {