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
This commit is contained in:
Tony Wickham 2021-05-05 12:10:04 -07:00
parent b90a951fed
commit 95e62812b2
1 changed files with 12 additions and 6 deletions

View File

@ -340,6 +340,10 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
}
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 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
}
});
reapplyWindowTransformAnim.setDuration(RECENTS_ATTACH_DURATION).start();
mStateCallback.runOnceAtState(STATE_HANDLER_INVALIDATED,
reapplyWindowTransformAnim::cancel);
} else {
applyWindowTransform();
}
@ -1376,12 +1382,6 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
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 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
mRecentsView.removeOnScrollChangedListener(mOnRecentsScrollListener);
resetLauncherListeners();
mHandler.post(() -> {
// Defer clearing the activity since invalidation can happen over multiple callbacks.
mActivity = null;
mRecentsView = null;
});
}
private void endLauncherTransitionController() {