diff options
5 files changed, 23 insertions, 23 deletions
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 f44ebf3a3a5c..833924c8ee28 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 @@ -63,7 +63,6 @@ import com.android.internal.os.SomeArgs; import com.android.wm.shell.R; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; -import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.pip.phone.PipMenuActivityController; import com.android.wm.shell.pip.phone.PipMotionHelper; import com.android.wm.shell.pip.phone.PipUpdateThread; @@ -137,7 +136,6 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, private final PipBoundsState mPipBoundsState; private final PipBoundsHandler mPipBoundsHandler; private final PipMenuActivityController mMenuActivityController; - private final SystemWindows mSystemWindows; private final PipAnimationController mPipAnimationController; private final PipUiEventLogger mPipUiEventLoggerLogger; private final List<PipTransitionCallback> mPipTransitionCallbacks = new ArrayList<>(); @@ -270,14 +268,12 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, Optional<SplitScreen> splitScreenOptional, @NonNull DisplayController displayController, @NonNull PipUiEventLogger pipUiEventLogger, - @NonNull ShellTaskOrganizer shellTaskOrganizer, - @NonNull SystemWindows systemWindows) { + @NonNull ShellTaskOrganizer shellTaskOrganizer) { mMainHandler = new Handler(Looper.getMainLooper()); mUpdateHandler = new Handler(PipUpdateThread.get().getLooper(), mUpdateCallbacks); mPipBoundsState = pipBoundsState; mPipBoundsHandler = boundsHandler; mMenuActivityController = menuActivityController; - mSystemWindows = systemWindows; mEnterExitAnimationDuration = context.getResources() .getInteger(R.integer.config_pipResizeAnimationDuration); mSurfaceTransactionHelper = surfaceTransactionHelper; @@ -499,9 +495,13 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, } if (mShouldIgnoreEnteringPipTransition) { + final Rect destinationBounds = mPipBoundsState.getBounds(); // animation is finished in the Launcher and here we directly apply the final touch. - applyEnterPipSyncTransaction(mPipBoundsState.getBounds(), - () -> sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP)); + applyEnterPipSyncTransaction(destinationBounds, () -> { + // ensure menu's settled in its final bounds first + finishResizeForMenu(destinationBounds); + sendOnPipTransitionFinished(TRANSITION_DIRECTION_TO_PIP); + }); mShouldIgnoreEnteringPipTransition = false; return; } @@ -995,16 +995,21 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, return; } else if (isInPipDirection(direction) && type == ANIM_TYPE_ALPHA) { // TODO: Synchronize this correctly in #applyEnterPipSyncTransaction - runOnMainHandler(() -> { - mMenuActivityController.movePipMenu(null, null, destinationBounds); - mMenuActivityController.updateMenuBounds(destinationBounds); - }); + finishResizeForMenu(destinationBounds); return; } WindowContainerTransaction wct = new WindowContainerTransaction(); prepareFinishResizeTransaction(destinationBounds, direction, tx, wct); applyFinishBoundsResize(wct, direction); + finishResizeForMenu(destinationBounds); + } + + private void finishResizeForMenu(Rect destinationBounds) { + if (mMenuActivityController == null) { + if (DEBUG) Log.d(TAG, "mMenuActivityController is null"); + return; + } runOnMainHandler(() -> { mMenuActivityController.movePipMenu(null, null, destinationBounds); mMenuActivityController.updateMenuBounds(destinationBounds); 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 a5252654aa23..24144b21e6d0 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 @@ -305,8 +305,8 @@ public class PipMenuActivityController { } private boolean maybeCreateSyncApplier() { - if (mPipMenuView == null) { - Log.v(TAG, "Not going to move PiP since the menu is not created."); + if (mPipMenuView == null || mPipMenuView.getViewRootImpl() == null) { + Log.v(TAG, "Not going to move PiP, either menu or its parent is not created."); return false; } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java index ccc679797472..39381c6d677e 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java @@ -41,7 +41,6 @@ import android.window.WindowContainerToken; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; -import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.pip.phone.PipMenuActivityController; import com.android.wm.shell.splitscreen.SplitScreen; @@ -69,7 +68,6 @@ public class PipTaskOrganizerTest extends PipTestCase { @Mock private PipUiEventLogger mMockPipUiEventLogger; @Mock private Optional<SplitScreen> mMockOptionalSplitScreen; @Mock private ShellTaskOrganizer mMockShellTaskOrganizer; - @Mock private SystemWindows mSystemWindows; private PipBoundsState mPipBoundsState; private ComponentName mComponent1; @@ -84,7 +82,7 @@ public class PipTaskOrganizerTest extends PipTestCase { mSpiedPipTaskOrganizer = spy(new PipTaskOrganizer(mContext, mPipBoundsState, mMockPipBoundsHandler, mMenuActivityController, mMockPipSurfaceTransactionHelper, mMockOptionalSplitScreen, mMockdDisplayController, mMockPipUiEventLogger, - mMockShellTaskOrganizer, mSystemWindows)); + mMockShellTaskOrganizer)); preparePipTaskOrg(); } diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java index bbabaf429859..a59c87652632 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java @@ -22,7 +22,6 @@ import com.android.systemui.dagger.WMSingleton; import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.WindowManagerShellWrapper; import com.android.wm.shell.common.DisplayController; -import com.android.wm.shell.common.SystemWindows; import com.android.wm.shell.pip.Pip; import com.android.wm.shell.pip.PipBoundsHandler; import com.android.wm.shell.pip.PipBoundsState; @@ -107,10 +106,9 @@ public abstract class TvPipModule { PipBoundsHandler pipBoundsHandler, PipSurfaceTransactionHelper pipSurfaceTransactionHelper, Optional<SplitScreen> splitScreenOptional, DisplayController displayController, - PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer, - SystemWindows systemWindows) { + PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer) { return new PipTaskOrganizer(context, pipBoundsState, pipBoundsHandler, null /* menuActivityController */, pipSurfaceTransactionHelper, splitScreenOptional, - displayController, pipUiEventLogger, shellTaskOrganizer, systemWindows); + displayController, pipUiEventLogger, shellTaskOrganizer); } } diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java index 1ca04af393ff..0f8fb7bbd0ec 100644 --- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java +++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java @@ -131,10 +131,9 @@ public class WMShellModule { PipMenuActivityController menuActivityController, PipSurfaceTransactionHelper pipSurfaceTransactionHelper, Optional<SplitScreen> splitScreenOptional, DisplayController displayController, - PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer, - SystemWindows systemWindows) { + PipUiEventLogger pipUiEventLogger, ShellTaskOrganizer shellTaskOrganizer) { return new PipTaskOrganizer(context, pipBoundsState, pipBoundsHandler, menuActivityController, pipSurfaceTransactionHelper, splitScreenOptional, - displayController, pipUiEventLogger, shellTaskOrganizer, systemWindows); + displayController, pipUiEventLogger, shellTaskOrganizer); } } |