From def3e9d7f42c65644ee86cec3bed0e28a845db9b Mon Sep 17 00:00:00 2001 From: Vinit Nayak Date: Tue, 10 Oct 2023 17:04:07 -0700 Subject: [PATCH] Call split finish callback if split invocation fails Bug: 295981634 Test: Splitting w/ Google TV widget no longer keeps placeholder views on screen Flag: ENABLE_SPLIT_WORKSPACE_TO_WORKSPACE Change-Id: I1d4df9deb9aaaaeef3741a05130429d0091293e8 --- .../util/SplitSelectStateController.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java index 21c0059856..e3778966ac 100644 --- a/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java +++ b/quickstep/src/com/android/quickstep/util/SplitSelectStateController.java @@ -37,6 +37,7 @@ import static com.android.wm.shell.common.split.SplitScreenConstants.SNAP_TO_50_ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.NonNull; +import android.annotation.UiThread; import android.app.ActivityManager; import android.app.ActivityOptions; import android.app.ActivityThread; @@ -603,13 +604,13 @@ public class SplitSelectStateController { private final int mInitialTaskId; private final int mSecondTaskId; - private Consumer mSuccessCallback; + private Consumer mFinishCallback; RemoteSplitLaunchTransitionRunner(int initialTaskId, int secondTaskId, @Nullable Consumer callback) { mInitialTaskId = initialTaskId; mSecondTaskId = secondTaskId; - mSuccessCallback = callback; + mFinishCallback = callback; } @Override @@ -628,11 +629,7 @@ public class SplitSelectStateController { TaskViewUtils.composeRecentsSplitLaunchAnimator(mLaunchingTaskView, mStateManager, mDepthController, mInitialTaskId, mSecondTaskId, info, t, () -> { finishAdapter.run(); - if (mSuccessCallback != null) { - mSuccessCallback.accept(true); - mSuccessCallback = null; - } - resetState(); + cleanup(true /*success*/); }); }); } @@ -645,6 +642,22 @@ public class SplitSelectStateController { @Override public void onTransitionConsumed(IBinder transition, boolean aborted) throws RemoteException { + MAIN_EXECUTOR.execute(() -> { + cleanup(false /*success*/); + }); + } + + /** + * Must be called on UI thread. + * @param success if launching the split apps occurred successfully or not + */ + @UiThread + private void cleanup(boolean success) { + if (mFinishCallback != null) { + mFinishCallback.accept(success); + mFinishCallback = null; + } + resetState(); } }