Prevent multiple calls to finish on the recents controller

Bug: 186246362
Test: Verify from logs that we don't finish the controller
      multiple times
Change-Id: I8d40a756216133b8a278a28b822cf75c6e2a3046
This commit is contained in:
Winson Chung
2021-04-27 21:15:18 -07:00
parent 4df3b23225
commit fb45e57ac1
2 changed files with 17 additions and 3 deletions
@@ -25,6 +25,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.UiThread;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.RunnableList;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
import com.android.systemui.shared.system.RecentsAnimationControllerCompat;
@@ -43,6 +44,8 @@ public class RecentsAnimationController {
private boolean mUseLauncherSysBarFlags = false;
private boolean mSplitScreenMinimized = false;
private boolean mFinishRequested = false;
private RunnableList mPendingFinishCallbacks = new RunnableList();
public RecentsAnimationController(RecentsAnimationControllerCompat controller,
boolean allowMinimizeSplitScreen,
@@ -132,14 +135,22 @@ public class RecentsAnimationController {
@UiThread
public void finishController(boolean toRecents, Runnable callback, boolean sendUserLeaveHint) {
if (mFinishRequested) {
// If finishing, add to pending finish callbacks, otherwise, if finished, adding to the
// destroyed RunnableList will just trigger the callback to be called immediately
mPendingFinishCallbacks.add(callback);
return;
}
// Finish not yet requested
mFinishRequested = true;
mOnFinishedListener.accept(this);
mPendingFinishCallbacks.add(callback);
UI_HELPER_EXECUTOR.execute(() -> {
mController.finish(toRecents, sendUserLeaveHint);
InteractionJankMonitorWrapper.end(InteractionJankMonitorWrapper.CUJ_QUICK_SWITCH);
InteractionJankMonitorWrapper.end(InteractionJankMonitorWrapper.CUJ_APP_CLOSE_TO_HOME);
if (callback != null) {
MAIN_EXECUTOR.execute(callback);
}
MAIN_EXECUTOR.execute(mPendingFinishCallbacks::executeAllAndDestroy);
});
}