Merge "Force-finish pending cancellation of the recents animation when process dies" into sc-dev am: b7ac726393 am: 4a67f3e3c4
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15262265 Change-Id: I469625afba8829ef9a124fa516376439a2bb36a0
This commit is contained in:
@@ -1030,7 +1030,13 @@ public class RecentsAnimationController implements DeathRecipient {
|
||||
|
||||
@Override
|
||||
public void binderDied() {
|
||||
cancelAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION, "binderDied");
|
||||
if (!mCanceled) {
|
||||
cancelAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION, "binderDied");
|
||||
} else {
|
||||
// If we are already canceled but with a screenshot, and are waiting for the
|
||||
// cleanupScreenshot() callback, then force-finish the animation now
|
||||
continueDeferredCancelAnimation();
|
||||
}
|
||||
|
||||
synchronized (mService.getWindowManagerLock()) {
|
||||
// Clear associated input consumers on runner death
|
||||
|
||||
@@ -306,6 +306,29 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
||||
assertTrue(activity.shouldAnimate());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBinderDiedAfterCancelWithDeferredScreenshot() throws Exception {
|
||||
mWm.setRecentsAnimationController(mController);
|
||||
final ActivityRecord homeActivity = createHomeActivity();
|
||||
final ActivityRecord activity = createActivityRecord(mDefaultDisplay);
|
||||
final WindowState win1 = createWindow(null, TYPE_BASE_APPLICATION, activity, "win1");
|
||||
activity.addWindow(win1);
|
||||
|
||||
initializeRecentsAnimationController(mController, homeActivity);
|
||||
mController.setWillFinishToHome(true);
|
||||
|
||||
// Verify cancel is called with a snapshot and that we've created an overlay
|
||||
spyOn(mWm.mTaskSnapshotController);
|
||||
doReturn(mMockTaskSnapshot).when(mWm.mTaskSnapshotController).getSnapshot(anyInt(),
|
||||
anyInt(), eq(false) /* restoreFromDisk */, eq(false) /* isLowResolution */);
|
||||
mController.cancelAnimationWithScreenshot(true /* screenshot */);
|
||||
verify(mMockRunner).onAnimationCanceled(any());
|
||||
|
||||
// Simulate process crashing and ensure the animation is still canceled
|
||||
mController.binderDied();
|
||||
verify(mAnimationCallbacks).onAnimationFinished(REORDER_KEEP_IN_PLACE, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRecentViewInFixedPortraitWhenTopAppInLandscape() {
|
||||
unblockDisplayRotation(mDefaultDisplay);
|
||||
|
||||
Reference in New Issue
Block a user