Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 085035f9 authored by Ben Lin's avatar Ben Lin Committed by Android (Google) Code Review
Browse files

Merge "PiP: Ensure PiP menu layout updates are on Shell main thread." into sc-dev

parents 008e3b80 8b70910b
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
    private PipBoundsState mPipBoundsState;
    private PipTouchHandler mTouchHandler;
    private PipTransitionController mPipTransitionController;
    private TaskStackListenerImpl mTaskStackListener;
    private Optional<OneHandedController> mOneHandedController;
    protected final PipImpl mImpl;

@@ -291,12 +292,18 @@ public class PipController implements PipTransitionController.PipTransitionCallb
        mAppOpsListener = pipAppOpsListener;
        mOneHandedController = oneHandedController;
        mPipTransitionController = pipTransitionController;
        mTaskStackListener = taskStackListener;
        mPipInputConsumer = new PipInputConsumer(WindowManagerGlobal.getWindowManagerService(),
                INPUT_CONSUMER_PIP, mainExecutor);
        //TODO: move this to ShellInit when PipController can be injected
        mMainExecutor.execute(this::init);
    }

    public void init() {
        mPipTransitionController.registerPipTransitionCallback(this);
        mPipTaskOrganizer.registerOnDisplayIdChangeCallback((int displayId) -> {
            mPipBoundsState.setDisplayId(displayId);
            onDisplayChanged(displayController.getDisplayLayout(displayId),
            onDisplayChanged(mDisplayController.getDisplayLayout(displayId),
                    false /* saveRestoreSnapFraction */);
        });
        mPipBoundsState.setOnMinimalSizeChangeCallback(
@@ -321,13 +328,13 @@ public class PipController implements PipTransitionController.PipTransitionCallb
            mPipInputConsumer.setInputListener(mTouchHandler::handleTouchEvent);
            mPipInputConsumer.setRegistrationListener(mTouchHandler::onRegistrationChanged);
        }
        displayController.addDisplayChangingController(mRotationController);
        displayController.addDisplayWindowListener(mDisplaysChangedListener);
        mDisplayController.addDisplayChangingController(mRotationController);
        mDisplayController.addDisplayWindowListener(mDisplaysChangedListener);

        // Ensure that we have the display info in case we get calls to update the bounds before the
        // listener calls back
        mPipBoundsState.setDisplayId(context.getDisplayId());
        mPipBoundsState.setDisplayLayout(new DisplayLayout(context, context.getDisplay()));
        mPipBoundsState.setDisplayId(mContext.getDisplayId());
        mPipBoundsState.setDisplayLayout(new DisplayLayout(mContext, mContext.getDisplay()));

        try {
            mWindowManagerShellWrapper.addPinnedStackListener(mPinnedTaskListener);
@@ -349,7 +356,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
        }

        // Handle for system task stack changes.
        taskStackListener.addListener(
        mTaskStackListener.addListener(
                new TaskStackListenerCallback() {
                    @Override
                    public void onActivityPinned(String packageName, int userId, int taskId,
+4 −4
Original line number Diff line number Diff line
@@ -83,15 +83,15 @@ public class PipControllerTest extends ShellTestCase {
    @Before
    public void setUp() throws RemoteException {
        MockitoAnnotations.initMocks(this);
        doAnswer(invocation -> {
            ((Runnable) invocation.getArgument(0)).run();
            return null;
        }).when(mMockExecutor).execute(any());
        mPipController = new PipController(mContext, mMockDisplayController,
                mMockPipAppOpsListener, mMockPipBoundsAlgorithm, mMockPipBoundsState,
                mMockPipMediaController, mMockPhonePipMenuController, mMockPipTaskOrganizer,
                mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
                mMockTaskStackListener, mMockOneHandedController, mMockExecutor);
        doAnswer(invocation -> {
            ((Runnable) invocation.getArgument(0)).run();
            return null;
        }).when(mMockExecutor).execute(any());
    }

    @Test