Merge "Limit freeform to front for freeform task launches" into tm-qpr-dev am: da0d26e567
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20248330 Change-Id: I6c44388777e313a18b335a98d056c9c8be7f901c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -249,11 +249,23 @@ public class DesktopModeController implements RemoteCallable<DesktopModeControll
|
|||||||
@Override
|
@Override
|
||||||
public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
|
public WindowContainerTransaction handleRequest(@NonNull IBinder transition,
|
||||||
@NonNull TransitionRequestInfo request) {
|
@NonNull TransitionRequestInfo request) {
|
||||||
|
// Only do anything if we are in desktop mode and opening a task/app in freeform
|
||||||
// Only do anything if we are in desktop mode and opening a task/app
|
if (!DesktopModeStatus.isActive(mContext)) {
|
||||||
if (!DesktopModeStatus.isActive(mContext) || request.getType() != TRANSIT_OPEN) {
|
ProtoLog.d(WM_SHELL_DESKTOP_MODE,
|
||||||
|
"skip shell transition request: desktop mode not active");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (request.getType() != TRANSIT_OPEN) {
|
||||||
|
ProtoLog.d(WM_SHELL_DESKTOP_MODE,
|
||||||
|
"skip shell transition request: only supports TRANSIT_OPEN");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (request.getTriggerTask() == null
|
||||||
|
|| request.getTriggerTask().getWindowingMode() != WINDOWING_MODE_FREEFORM) {
|
||||||
|
ProtoLog.d(WM_SHELL_DESKTOP_MODE, "skip shell transition request: not freeform task");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ProtoLog.d(WM_SHELL_DESKTOP_MODE, "handle shell transition request: %s", request);
|
||||||
|
|
||||||
WindowContainerTransaction wct = mTransitions.dispatchRequest(transition, request, this);
|
WindowContainerTransaction wct = mTransitions.dispatchRequest(transition, request, this);
|
||||||
if (wct == null) {
|
if (wct == null) {
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
|
|||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
|
||||||
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
|
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
|
||||||
import static android.app.WindowConfiguration.WINDOW_CONFIG_BOUNDS;
|
import static android.app.WindowConfiguration.WINDOW_CONFIG_BOUNDS;
|
||||||
|
import static android.view.WindowManager.TRANSIT_OPEN;
|
||||||
|
import static android.view.WindowManager.TRANSIT_TO_FRONT;
|
||||||
import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REORDER;
|
import static android.window.WindowContainerTransaction.HierarchyOp.HIERARCHY_OP_TYPE_REORDER;
|
||||||
|
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
|
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
|
||||||
@@ -35,10 +37,12 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
|
import android.os.Binder;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.testing.AndroidTestingRunner;
|
import android.testing.AndroidTestingRunner;
|
||||||
import android.window.DisplayAreaInfo;
|
import android.window.DisplayAreaInfo;
|
||||||
|
import android.window.TransitionRequestInfo;
|
||||||
import android.window.WindowContainerToken;
|
import android.window.WindowContainerToken;
|
||||||
import android.window.WindowContainerTransaction;
|
import android.window.WindowContainerTransaction;
|
||||||
import android.window.WindowContainerTransaction.Change;
|
import android.window.WindowContainerTransaction.Change;
|
||||||
@@ -243,6 +247,44 @@ public class DesktopModeControllerTest extends ShellTestCase {
|
|||||||
assertThat(op2.getContainer()).isEqualTo(token2.binder());
|
assertThat(op2.getContainer()).isEqualTo(token2.binder());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHandleTransitionRequest_desktopModeNotActive_returnsNull() {
|
||||||
|
when(DesktopModeStatus.isActive(any())).thenReturn(false);
|
||||||
|
WindowContainerTransaction wct = mController.handleRequest(
|
||||||
|
new Binder(),
|
||||||
|
new TransitionRequestInfo(TRANSIT_OPEN, null /* trigger */, null /* remote */));
|
||||||
|
assertThat(wct).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHandleTransitionRequest_notTransitOpen_returnsNull() {
|
||||||
|
WindowContainerTransaction wct = mController.handleRequest(
|
||||||
|
new Binder(),
|
||||||
|
new TransitionRequestInfo(TRANSIT_TO_FRONT, null /* trigger */, null /* remote */));
|
||||||
|
assertThat(wct).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHandleTransitionRequest_notFreeform_returnsNull() {
|
||||||
|
ActivityManager.RunningTaskInfo trigger = new ActivityManager.RunningTaskInfo();
|
||||||
|
trigger.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
|
||||||
|
WindowContainerTransaction wct = mController.handleRequest(
|
||||||
|
new Binder(),
|
||||||
|
new TransitionRequestInfo(TRANSIT_TO_FRONT, trigger, null /* remote */));
|
||||||
|
assertThat(wct).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHandleTransitionRequest_returnsWct() {
|
||||||
|
ActivityManager.RunningTaskInfo trigger = new ActivityManager.RunningTaskInfo();
|
||||||
|
trigger.token = new MockToken().mToken;
|
||||||
|
trigger.configuration.windowConfiguration.setWindowingMode(WINDOWING_MODE_FREEFORM);
|
||||||
|
WindowContainerTransaction wct = mController.handleRequest(
|
||||||
|
mock(IBinder.class),
|
||||||
|
new TransitionRequestInfo(TRANSIT_OPEN, trigger, null /* remote */));
|
||||||
|
assertThat(wct).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
private static class MockToken {
|
private static class MockToken {
|
||||||
private final WindowContainerToken mToken;
|
private final WindowContainerToken mToken;
|
||||||
private final IBinder mBinder;
|
private final IBinder mBinder;
|
||||||
|
|||||||
Reference in New Issue
Block a user