Merge "PiP: Ensure PiP menu layout updates are on Shell main thread." into sc-dev
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user