Some cleanup for handler invalidation
- Cancel reapplyWindowTransformAnim when STATE_HANDLER_INVALIDATED
- Set mActivity and mRecentsView = null in
invalidateHandlerWithLauncher() instead of posting from
invalidateHandler()
- Just in case, ignore onActivityInit() if we're already invalidated
Test: Tap repeatedly in nav region in an app, no crash
Fixes: 186983662
Change-Id: I3c005099b46ebb7c9203bcfcceedf48679dd1965
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index ecaac94..fafee39 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -340,6 +340,10 @@
}
protected boolean onActivityInit(Boolean alreadyOnHome) {
+ if (mStateCallback.hasStates(STATE_HANDLER_INVALIDATED)) {
+ return false;
+ }
+
T createdActivity = mActivityInterface.getCreatedActivity();
if (createdActivity != null) {
initTransitionEndpoints(createdActivity.getDeviceProfile());
@@ -571,6 +575,8 @@
}
});
reapplyWindowTransformAnim.setDuration(RECENTS_ATTACH_DURATION).start();
+ mStateCallback.runOnceAtState(STATE_HANDLER_INVALIDATED,
+ reapplyWindowTransformAnim::cancel);
} else {
applyWindowTransform();
}
@@ -1376,12 +1382,6 @@
mActivityInitListener.unregister();
ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mActivityRestartListener);
mTaskSnapshot = null;
- mHandler.post(() -> {
- // Defer clearing the activity since invalidation can happen over multiple callbacks
- // ie. invalidateHandlerWithLauncher()
- mActivity = null;
- mRecentsView = null;
- });
}
private void invalidateHandlerWithLauncher() {
@@ -1392,6 +1392,12 @@
mRecentsView.removeOnScrollChangedListener(mOnRecentsScrollListener);
resetLauncherListeners();
+
+ mHandler.post(() -> {
+ // Defer clearing the activity since invalidation can happen over multiple callbacks.
+ mActivity = null;
+ mRecentsView = null;
+ });
}
private void endLauncherTransitionController() {