Defer cleaning up screenshot until after we actually switch to screenshot

- In the case where we get a screenshot on cancel, we should wait to
  finish the recents animation until the view gets a chance to update

Bug: 185643608
Test: Swipe up to overview in 2 button, hit home
Change-Id: I2ac3567006f6fa7e6f473499f6862e5e408dfc3d
This commit is contained in:
Winson Chung 2021-06-30 11:59:08 -07:00
parent f91abaa6f9
commit a7d7f78c08
2 changed files with 10 additions and 7 deletions

View File

@ -383,10 +383,10 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
// Set up a entire animation lifecycle callback to notify the current recents view when
// the animation is canceled
mGestureState.runOnceAtState(STATE_RECENTS_ANIMATION_CANCELED, () -> {
ThumbnailData snapshot = mGestureState.getRecentsAnimationCanceledSnapshot();
ThumbnailData snapshot = mGestureState.consumeRecentsAnimationCanceledSnapshot();
if (snapshot != null) {
RecentsModel.INSTANCE.get(mContext).onTaskSnapshotChanged(
mRecentsView.getRunningTaskId(), snapshot);
mRecentsView.switchToScreenshot(snapshot,
() -> mRecentsAnimationController.cleanupScreenshot());
mRecentsView.onRecentsAnimationComplete();
}
});

View File

@ -376,11 +376,14 @@ public class GestureState implements RecentsAnimationCallbacks.RecentsAnimationL
}
/**
* Returns the canceled animation thumbnail data. This call only returns a value while
* STATE_RECENTS_ANIMATION_CANCELED state is being set.
* Returns and clears the canceled animation thumbnail data. This call only returns a value
* while STATE_RECENTS_ANIMATION_CANCELED state is being set, and the caller is responsible for
* calling {@link RecentsAnimationController#cleanupScreenshot()}.
*/
ThumbnailData getRecentsAnimationCanceledSnapshot() {
return mRecentsAnimationCanceledSnapshot;
ThumbnailData consumeRecentsAnimationCanceledSnapshot() {
ThumbnailData data = mRecentsAnimationCanceledSnapshot;
mRecentsAnimationCanceledSnapshot = null;
return data;
}
void setSwipeUpStartTimeMs(long uptimeMs) {