From b9450d9ef95db2d69bf7493ff36c96232bbe21d5 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Tue, 6 Apr 2021 14:57:13 -0700 Subject: Update PiP action even if menu is not visible Deprecate also the query on WM for pip bounds in PhonePipMenuController Video: http://recall/-/aaaaaabFQoRHlzixHdtY/n6eylZkmVGfJwp0nl42un Bug: 172587320 Test: Play in spotify when PiP is in playing state, see video Test: atest WMShellFlickerTests:com.android.wm.shell.flicker.pip Change-Id: Ieca6b3e136d5fff6818474ef012ea6b415515fb4 --- .../wm/shell/pip/phone/PhonePipMenuController.java | 30 ++++++++-------------- .../android/wm/shell/pip/phone/PipMenuView.java | 4 ++- .../android/systemui/wmshell/WMShellModule.java | 7 ++--- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java index 4cf8ab476865..2e74f262d19a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java @@ -16,13 +16,9 @@ package com.android.wm.shell.pip.phone; -import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; -import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.view.WindowManager.SHELL_ROOT_LAYER_PIP; import android.annotation.Nullable; -import android.app.ActivityTaskManager; -import android.app.ActivityTaskManager.RootTaskInfo; import android.app.RemoteAction; import android.content.Context; import android.content.pm.ParceledListSlice; @@ -43,6 +39,7 @@ import android.view.WindowManagerGlobal; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SystemWindows; +import com.android.wm.shell.pip.PipBoundsState; import com.android.wm.shell.pip.PipMediaController; import com.android.wm.shell.pip.PipMediaController.ActionListener; import com.android.wm.shell.pip.PipMenuController; @@ -99,6 +96,7 @@ public class PhonePipMenuController implements PipMenuController { private final RectF mTmpSourceRectF = new RectF(); private final RectF mTmpDestinationRectF = new RectF(); private final Context mContext; + private final PipBoundsState mPipBoundsState; private final PipMediaController mMediaController; private final ShellExecutor mMainExecutor; private final Handler mMainHandler; @@ -134,10 +132,11 @@ public class PhonePipMenuController implements PipMenuController { } }; - public PhonePipMenuController(Context context, PipMediaController mediaController, - SystemWindows systemWindows, ShellExecutor mainExecutor, - Handler mainHandler) { + public PhonePipMenuController(Context context, PipBoundsState pipBoundsState, + PipMediaController mediaController, SystemWindows systemWindows, + ShellExecutor mainExecutor, Handler mainHandler) { mContext = context; + mPipBoundsState = pipBoundsState; mMediaController = mediaController; mSystemWindows = systemWindows; mMainExecutor = mainExecutor; @@ -466,20 +465,11 @@ public class PhonePipMenuController implements PipMenuController { * Updates the PiP menu with the best set of actions provided. */ private void updateMenuActions() { - if (isMenuVisible()) { - // Fetch the pinned stack bounds - Rect stackBounds = null; - try { - RootTaskInfo pinnedTaskInfo = ActivityTaskManager.getService().getRootTaskInfo( - WINDOWING_MODE_PINNED, ACTIVITY_TYPE_UNDEFINED); - if (pinnedTaskInfo != null) { - stackBounds = pinnedTaskInfo.bounds; - } - } catch (RemoteException e) { - Log.e(TAG, "Error showing PIP menu", e); + if (mPipMenuView != null) { + final ParceledListSlice menuActions = resolveMenuActions(); + if (menuActions != null) { + mPipMenuView.setActions(mPipBoundsState.getBounds(), menuActions.getList()); } - - mPipMenuView.setActions(stackBounds, resolveMenuActions().getList()); } } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java index 1bfae53853c3..7e594a43a52f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipMenuView.java @@ -374,7 +374,9 @@ public class PipMenuView extends FrameLayout { void setActions(Rect stackBounds, List actions) { mActions.clear(); mActions.addAll(actions); - updateActionViews(stackBounds); + if (mMenuState == MENU_STATE_FULL) { + updateActionViews(stackBounds); + } } private void updateActionViews(Rect stackBounds) { diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java index 33b2d67e462e..743dd466d95e 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java @@ -157,11 +157,12 @@ public class WMShellModule { @WMSingleton @Provides static PhonePipMenuController providesPipPhoneMenuController(Context context, - PipMediaController pipMediaController, SystemWindows systemWindows, + PipBoundsState pipBoundsState, PipMediaController pipMediaController, + SystemWindows systemWindows, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler) { - return new PhonePipMenuController(context, pipMediaController, systemWindows, - mainExecutor, mainHandler); + return new PhonePipMenuController(context, pipBoundsState, pipMediaController, + systemWindows, mainExecutor, mainHandler); } @WMSingleton -- cgit v1.2.3-59-g8ed1b