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

This commit is contained in:
Ben Lin
2021-04-01 17:44:52 +00:00
committed by Android (Google) Code Review
2 changed files with 17 additions and 10 deletions

View File

@@ -95,6 +95,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
private PipBoundsState mPipBoundsState; private PipBoundsState mPipBoundsState;
private PipTouchHandler mTouchHandler; private PipTouchHandler mTouchHandler;
private PipTransitionController mPipTransitionController; private PipTransitionController mPipTransitionController;
private TaskStackListenerImpl mTaskStackListener;
private Optional<OneHandedController> mOneHandedController; private Optional<OneHandedController> mOneHandedController;
protected final PipImpl mImpl; protected final PipImpl mImpl;
@@ -291,12 +292,18 @@ public class PipController implements PipTransitionController.PipTransitionCallb
mAppOpsListener = pipAppOpsListener; mAppOpsListener = pipAppOpsListener;
mOneHandedController = oneHandedController; mOneHandedController = oneHandedController;
mPipTransitionController = pipTransitionController; mPipTransitionController = pipTransitionController;
mTaskStackListener = taskStackListener;
mPipInputConsumer = new PipInputConsumer(WindowManagerGlobal.getWindowManagerService(), mPipInputConsumer = new PipInputConsumer(WindowManagerGlobal.getWindowManagerService(),
INPUT_CONSUMER_PIP, mainExecutor); INPUT_CONSUMER_PIP, mainExecutor);
//TODO: move this to ShellInit when PipController can be injected
mMainExecutor.execute(this::init);
}
public void init() {
mPipTransitionController.registerPipTransitionCallback(this); mPipTransitionController.registerPipTransitionCallback(this);
mPipTaskOrganizer.registerOnDisplayIdChangeCallback((int displayId) -> { mPipTaskOrganizer.registerOnDisplayIdChangeCallback((int displayId) -> {
mPipBoundsState.setDisplayId(displayId); mPipBoundsState.setDisplayId(displayId);
onDisplayChanged(displayController.getDisplayLayout(displayId), onDisplayChanged(mDisplayController.getDisplayLayout(displayId),
false /* saveRestoreSnapFraction */); false /* saveRestoreSnapFraction */);
}); });
mPipBoundsState.setOnMinimalSizeChangeCallback( mPipBoundsState.setOnMinimalSizeChangeCallback(
@@ -321,13 +328,13 @@ public class PipController implements PipTransitionController.PipTransitionCallb
mPipInputConsumer.setInputListener(mTouchHandler::handleTouchEvent); mPipInputConsumer.setInputListener(mTouchHandler::handleTouchEvent);
mPipInputConsumer.setRegistrationListener(mTouchHandler::onRegistrationChanged); mPipInputConsumer.setRegistrationListener(mTouchHandler::onRegistrationChanged);
} }
displayController.addDisplayChangingController(mRotationController); mDisplayController.addDisplayChangingController(mRotationController);
displayController.addDisplayWindowListener(mDisplaysChangedListener); mDisplayController.addDisplayWindowListener(mDisplaysChangedListener);
// Ensure that we have the display info in case we get calls to update the bounds before the // Ensure that we have the display info in case we get calls to update the bounds before the
// listener calls back // listener calls back
mPipBoundsState.setDisplayId(context.getDisplayId()); mPipBoundsState.setDisplayId(mContext.getDisplayId());
mPipBoundsState.setDisplayLayout(new DisplayLayout(context, context.getDisplay())); mPipBoundsState.setDisplayLayout(new DisplayLayout(mContext, mContext.getDisplay()));
try { try {
mWindowManagerShellWrapper.addPinnedStackListener(mPinnedTaskListener); mWindowManagerShellWrapper.addPinnedStackListener(mPinnedTaskListener);
@@ -349,7 +356,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
} }
// Handle for system task stack changes. // Handle for system task stack changes.
taskStackListener.addListener( mTaskStackListener.addListener(
new TaskStackListenerCallback() { new TaskStackListenerCallback() {
@Override @Override
public void onActivityPinned(String packageName, int userId, int taskId, public void onActivityPinned(String packageName, int userId, int taskId,

View File

@@ -83,15 +83,15 @@ public class PipControllerTest extends ShellTestCase {
@Before @Before
public void setUp() throws RemoteException { public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
doAnswer(invocation -> {
((Runnable) invocation.getArgument(0)).run();
return null;
}).when(mMockExecutor).execute(any());
mPipController = new PipController(mContext, mMockDisplayController, mPipController = new PipController(mContext, mMockDisplayController,
mMockPipAppOpsListener, mMockPipBoundsAlgorithm, mMockPipBoundsState, mMockPipAppOpsListener, mMockPipBoundsAlgorithm, mMockPipBoundsState,
mMockPipMediaController, mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipMediaController, mMockPhonePipMenuController, mMockPipTaskOrganizer,
mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper, mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
mMockTaskStackListener, mMockOneHandedController, mMockExecutor); mMockTaskStackListener, mMockOneHandedController, mMockExecutor);
doAnswer(invocation -> {
((Runnable) invocation.getArgument(0)).run();
return null;
}).when(mMockExecutor).execute(any());
} }
@Test @Test