Merge "Force-finish pending cancellation of the recents animation when process dies" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b7ac726393
@@ -1030,7 +1030,13 @@ public class RecentsAnimationController implements DeathRecipient {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void binderDied() {
|
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()) {
|
synchronized (mService.getWindowManagerLock()) {
|
||||||
// Clear associated input consumers on runner death
|
// Clear associated input consumers on runner death
|
||||||
|
|||||||
@@ -306,6 +306,29 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
|
|||||||
assertTrue(activity.shouldAnimate());
|
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
|
@Test
|
||||||
public void testRecentViewInFixedPortraitWhenTopAppInLandscape() {
|
public void testRecentViewInFixedPortraitWhenTopAppInLandscape() {
|
||||||
unblockDisplayRotation(mDefaultDisplay);
|
unblockDisplayRotation(mDefaultDisplay);
|
||||||
|
|||||||
Reference in New Issue
Block a user