From 45b8d39ab83363d2a79da9a806f194717dccafc8 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Thu, 18 May 2023 11:26:31 -0700 Subject: [PATCH] Notify WMShell on aborting auto-enter-pip Note that this change does not fix the bug listed here. This is to callback WMShell when the transition is aborted and WMShell can choose how to handle this. Bug: 283177443 Test: adb shell dumpsys activity service SystemUIService WMShell Test: go/winscope and check the SF/WM dump Change-Id: I8abfc2db47d1f0bfc3d400066936bed354743420 --- .../android/quickstep/AbsSwipeUpHandler.java | 18 ++++++++++++++++-- .../com/android/quickstep/SystemUiProxy.java | 14 ++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index b49eb24971..928910d3ab 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -2041,8 +2041,9 @@ public abstract class AbsSwipeUpHandler, if (!hasTargets() || mRecentsAnimationController == null) { // If there are no targets or the animation not started, then there is nothing to finish mStateCallback.setStateOnUiThread(STATE_CURRENT_TASK_FINISHED); + maybeAbortSwipePipToHome(); } else { - maybeFinishSwipeToHome(); + maybeFinishSwipePipToHome(); finishRecentsControllerToHome( () -> mStateCallback.setStateOnUiThread(STATE_CURRENT_TASK_FINISHED)); } @@ -2053,12 +2054,25 @@ public abstract class AbsSwipeUpHandler, doLogGesture(HOME, mRecentsView == null ? null : mRecentsView.getCurrentPageTaskView()); } + /** + * Notifies SysUI that transition is aborted if applicable and also pass leash transactions + * from Launcher to WM. + */ + private void maybeAbortSwipePipToHome() { + if (mIsSwipingPipToHome && mSwipePipToHomeAnimators[0] != null) { + SystemUiProxy.INSTANCE.get(mContext).abortSwipePipToHome( + mSwipePipToHomeAnimator.getTaskId(), + mSwipePipToHomeAnimator.getComponentName()); + mIsSwipingPipToHome = false; + } + } + /** * Notifies SysUI that transition is finished if applicable and also pass leash transactions * from Launcher to WM. * This should happen before {@link #finishRecentsControllerToHome(Runnable)}. */ - private void maybeFinishSwipeToHome() { + private void maybeFinishSwipePipToHome() { if (mIsSwipingPipToHome && mSwipePipToHomeAnimators[0] != null) { SystemUiProxy.INSTANCE.get(mContext).stopSwipePipToHome( mSwipePipToHomeAnimator.getTaskId(), diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java index 29aed2532b..ba809514c8 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -564,6 +564,20 @@ public class SystemUiProxy implements ISystemUiProxy { } } + /** + * Notifies WM Shell that launcher has aborted all the animation for swipe to home. WM Shell + * can use this callback to clean up its internal states. + */ + public void abortSwipePipToHome(int taskId, ComponentName componentName) { + if (mPip != null) { + try { + mPip.abortSwipePipToHome(taskId, componentName); + } catch (RemoteException e) { + Log.w(TAG, "Failed call abortSwipePipToHome"); + } + } + } + /** * Sets the next pip animation type to be the alpha animation. */