diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index 39772fb7b7aed..b2f4b55003003 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -495,6 +495,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, mOnDisplayIdChangeCallback.accept(info.displayId); } + mMenuActivityController.onTaskAppeared(); + if (mShouldIgnoreEnteringPipTransition) { final Rect destinationBounds = mPipBoundsState.getBounds(); // animation is finished in the Launcher and here we directly apply the final touch. @@ -666,6 +668,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, mPictureInPictureParams = null; mState = State.UNDEFINED; mPipUiEventLoggerLogger.setTaskInfo(null); + mMenuActivityController.onTaskVanished(); } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index b68cf4f883d7a..6e1fc83a87fb7 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -277,7 +277,6 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac mMainExecutor.execute(() -> { mTouchHandler.onActivityPinned(); mMediaController.onActivityPinned(); - mMenuController.onActivityPinned(); mAppOpsListener.onActivityPinned(packageName); }); } @@ -285,7 +284,6 @@ public class PipController implements Pip, PipTaskOrganizer.PipTransitionCallbac @Override public void onActivityUnpinned(ComponentName topActivity) { mMainExecutor.execute(() -> { - mMenuController.onActivityUnpinned(); mTouchHandler.onActivityUnpinned(topActivity); mAppOpsListener.onActivityUnpinned(); }); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuActivityController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuActivityController.java index 105a7900833a6..1d5430008501c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuActivityController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuActivityController.java @@ -135,15 +135,22 @@ public class PipMenuActivityController { return mPipMenuView != null && mMenuState != MENU_STATE_NONE; } - public void onActivityPinned() { + /** + * Attach the menu when the PiP task first appears. + */ + public void onTaskAppeared() { attachPipMenuView(); } - public void onActivityUnpinned() { + /** + * Detach the menu when the PiP task is gone. + */ + public void onTaskVanished() { hideMenu(); detachPipMenuView(); } + public void onPinnedStackAnimationEnded() { if (isMenuVisible()) { mPipMenuView.onPipAnimationEnded(); @@ -151,10 +158,11 @@ public class PipMenuActivityController { } private void attachPipMenuView() { - if (mPipMenuView == null) { - mPipMenuView = new PipMenuView(mContext, this); + // In case detach was not called (e.g. PIP unexpectedly closed) + if (mPipMenuView != null) { + detachPipMenuView(); } - + mPipMenuView = new PipMenuView(mContext, this); mSystemWindows.addView(mPipMenuView, getPipMenuLayoutParams(0, 0), 0, SHELL_ROOT_LAYER_PIP); }