Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +16 −1 Original line number Original line Diff line number Diff line Loading @@ -111,6 +111,12 @@ public class CompatUIController implements OnDisplaysChangedListener, private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap = private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap = new SparseArray<>(0); new SparseArray<>(0); /** * {@link SparseArray} that maps task ids to {@link CompatUIInfo}. */ private final SparseArray<CompatUIInfo> mTaskIdToCompatUIInfoMap = new SparseArray<>(0); /** /** * {@link Set} of task ids for which we need to display a restart confirmation dialog * {@link Set} of task ids for which we need to display a restart confirmation dialog */ */ Loading Loading @@ -261,7 +267,11 @@ public class CompatUIController implements OnDisplaysChangedListener, private void handleDisplayCompatShowRestartDialog( private void handleDisplayCompatShowRestartDialog( CompatUIRequests.DisplayCompatShowRestartDialog request) { CompatUIRequests.DisplayCompatShowRestartDialog request) { onRestartButtonClicked(new Pair<>(request.getTaskInfo(), request.getTaskListener())); final CompatUIInfo compatUIInfo = mTaskIdToCompatUIInfoMap.get(request.getTaskId()); if (compatUIInfo == null) { return; } onRestartButtonClicked(new Pair<>(compatUIInfo.getTaskInfo(), compatUIInfo.getListener())); } } /** /** Loading @@ -273,6 +283,11 @@ public class CompatUIController implements OnDisplaysChangedListener, public void onCompatInfoChanged(@NonNull CompatUIInfo compatUIInfo) { public void onCompatInfoChanged(@NonNull CompatUIInfo compatUIInfo) { final TaskInfo taskInfo = compatUIInfo.getTaskInfo(); final TaskInfo taskInfo = compatUIInfo.getTaskInfo(); final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener(); final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener(); if (taskListener == null) { mTaskIdToCompatUIInfoMap.delete(taskInfo.taskId); } else { mTaskIdToCompatUIInfoMap.put(taskInfo.taskId, compatUIInfo); } final boolean isInDisplayCompatMode = final boolean isInDisplayCompatMode = taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove(); taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove(); if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat() if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat() Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/impl/CompatUIRequests.kt +1 −4 Original line number Original line Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.wm.shell.compatui.impl package com.android.wm.shell.compatui.impl import android.app.TaskInfo import com.android.wm.shell.ShellTaskOrganizer import com.android.wm.shell.compatui.api.CompatUIRequest import com.android.wm.shell.compatui.api.CompatUIRequest internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0 internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0 Loading @@ -27,7 +25,6 @@ internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0 */ */ sealed class CompatUIRequests(override val requestId: Int) : CompatUIRequest { sealed class CompatUIRequests(override val requestId: Int) : CompatUIRequest { /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */ /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */ data class DisplayCompatShowRestartDialog(val taskInfo: TaskInfo, data class DisplayCompatShowRestartDialog(val taskId: Int) : val taskListener: ShellTaskOrganizer.TaskListener) : CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG) CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG) } } libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +19 −10 Original line number Original line Diff line number Diff line Loading @@ -680,7 +680,8 @@ public class CompatUIControllerTest extends ShellTestCase { // Create transparent task // Create transparent task final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true, final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true, /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true); /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true, /* isRestartMenuEnabledForDisplayMove */ true); // Simulate new task being shown // Simulate new task being shown mController.updateActiveTaskInfo(taskInfo1); mController.updateActiveTaskInfo(taskInfo1); Loading Loading @@ -742,32 +743,38 @@ public class CompatUIControllerTest extends ShellTestCase { @Test @Test @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK) @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK) public void testSendCompatUIRequest_createRestartDialog() { public void testSendCompatUIRequest_createRestartDialog() { TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ false); final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, doReturn(true).when(mMockRestartDialogLayout) /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ false, .needsToBeRecreated(any(TaskInfo.class), /* isRestartMenuEnabledForDisplayMove */ true); any(ShellTaskOrganizer.TaskListener.class)); doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled(); doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled(); doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo)); doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo)); mController.sendCompatUIRequest(new CompatUIRequests.DisplayCompatShowRestartDialog( mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener)); taskInfo, mMockTaskListener)); verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo), verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo), eq(mMockTaskListener)); eq(mMockTaskListener)); verify(mMockRestartDialogLayout).setRequestRestartDialog(false); mController.sendCompatUIRequest( new CompatUIRequests.DisplayCompatShowRestartDialog(taskInfo.taskId)); verify(mMockRestartDialogLayout).setRequestRestartDialog(true); } } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat) { private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat) { return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false, return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false, /* isFocused */ false, /* isTopActivityTransparent */ false); /* isFocused */ false, /* isTopActivityTransparent */ false, /* isRestartMenuEnabledForDisplayMove */ false); } } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, boolean isVisible, boolean isFocused) { boolean isVisible, boolean isFocused) { return createTaskInfo(displayId, taskId, hasSizeCompat, return createTaskInfo(displayId, taskId, hasSizeCompat, isVisible, isFocused, /* isTopActivityTransparent */ false); isVisible, isFocused, /* isTopActivityTransparent */ false, /* isRestartMenuEnabledForDisplayMove */ false); } } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, boolean isVisible, boolean isFocused, boolean isTopActivityTransparent) { boolean isVisible, boolean isFocused, boolean isTopActivityTransparent, boolean isRestartMenuEnabledForDisplayMove) { RunningTaskInfo taskInfo = new RunningTaskInfo(); RunningTaskInfo taskInfo = new RunningTaskInfo(); taskInfo.taskId = taskId; taskInfo.taskId = taskId; taskInfo.displayId = displayId; taskInfo.displayId = displayId; Loading @@ -777,6 +784,8 @@ public class CompatUIControllerTest extends ShellTestCase { taskInfo.isTopActivityTransparent = isTopActivityTransparent; taskInfo.isTopActivityTransparent = isTopActivityTransparent; taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true); taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true); taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true); taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true); taskInfo.appCompatTaskInfo.setRestartMenuEnabledForDisplayMove( isRestartMenuEnabledForDisplayMove); return taskInfo; return taskInfo; } } } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +16 −1 Original line number Original line Diff line number Diff line Loading @@ -111,6 +111,12 @@ public class CompatUIController implements OnDisplaysChangedListener, private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap = private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap = new SparseArray<>(0); new SparseArray<>(0); /** * {@link SparseArray} that maps task ids to {@link CompatUIInfo}. */ private final SparseArray<CompatUIInfo> mTaskIdToCompatUIInfoMap = new SparseArray<>(0); /** /** * {@link Set} of task ids for which we need to display a restart confirmation dialog * {@link Set} of task ids for which we need to display a restart confirmation dialog */ */ Loading Loading @@ -261,7 +267,11 @@ public class CompatUIController implements OnDisplaysChangedListener, private void handleDisplayCompatShowRestartDialog( private void handleDisplayCompatShowRestartDialog( CompatUIRequests.DisplayCompatShowRestartDialog request) { CompatUIRequests.DisplayCompatShowRestartDialog request) { onRestartButtonClicked(new Pair<>(request.getTaskInfo(), request.getTaskListener())); final CompatUIInfo compatUIInfo = mTaskIdToCompatUIInfoMap.get(request.getTaskId()); if (compatUIInfo == null) { return; } onRestartButtonClicked(new Pair<>(compatUIInfo.getTaskInfo(), compatUIInfo.getListener())); } } /** /** Loading @@ -273,6 +283,11 @@ public class CompatUIController implements OnDisplaysChangedListener, public void onCompatInfoChanged(@NonNull CompatUIInfo compatUIInfo) { public void onCompatInfoChanged(@NonNull CompatUIInfo compatUIInfo) { final TaskInfo taskInfo = compatUIInfo.getTaskInfo(); final TaskInfo taskInfo = compatUIInfo.getTaskInfo(); final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener(); final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener(); if (taskListener == null) { mTaskIdToCompatUIInfoMap.delete(taskInfo.taskId); } else { mTaskIdToCompatUIInfoMap.put(taskInfo.taskId, compatUIInfo); } final boolean isInDisplayCompatMode = final boolean isInDisplayCompatMode = taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove(); taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove(); if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat() if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat() Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/impl/CompatUIRequests.kt +1 −4 Original line number Original line Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.wm.shell.compatui.impl package com.android.wm.shell.compatui.impl import android.app.TaskInfo import com.android.wm.shell.ShellTaskOrganizer import com.android.wm.shell.compatui.api.CompatUIRequest import com.android.wm.shell.compatui.api.CompatUIRequest internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0 internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0 Loading @@ -27,7 +25,6 @@ internal const val DISPLAY_COMPAT_SHOW_RESTART_DIALOG = 0 */ */ sealed class CompatUIRequests(override val requestId: Int) : CompatUIRequest { sealed class CompatUIRequests(override val requestId: Int) : CompatUIRequest { /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */ /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */ data class DisplayCompatShowRestartDialog(val taskInfo: TaskInfo, data class DisplayCompatShowRestartDialog(val taskId: Int) : val taskListener: ShellTaskOrganizer.TaskListener) : CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG) CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG) } }
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +19 −10 Original line number Original line Diff line number Diff line Loading @@ -680,7 +680,8 @@ public class CompatUIControllerTest extends ShellTestCase { // Create transparent task // Create transparent task final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true, final TaskInfo taskInfo1 = createTaskInfo(DISPLAY_ID, newTaskId, /* hasSizeCompat= */ true, /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true); /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ true, /* isRestartMenuEnabledForDisplayMove */ true); // Simulate new task being shown // Simulate new task being shown mController.updateActiveTaskInfo(taskInfo1); mController.updateActiveTaskInfo(taskInfo1); Loading Loading @@ -742,32 +743,38 @@ public class CompatUIControllerTest extends ShellTestCase { @Test @Test @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK) @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK) public void testSendCompatUIRequest_createRestartDialog() { public void testSendCompatUIRequest_createRestartDialog() { TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ false); final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, doReturn(true).when(mMockRestartDialogLayout) /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ false, .needsToBeRecreated(any(TaskInfo.class), /* isRestartMenuEnabledForDisplayMove */ true); any(ShellTaskOrganizer.TaskListener.class)); doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled(); doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled(); doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo)); doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo)); mController.sendCompatUIRequest(new CompatUIRequests.DisplayCompatShowRestartDialog( mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener)); taskInfo, mMockTaskListener)); verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo), verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo), eq(mMockTaskListener)); eq(mMockTaskListener)); verify(mMockRestartDialogLayout).setRequestRestartDialog(false); mController.sendCompatUIRequest( new CompatUIRequests.DisplayCompatShowRestartDialog(taskInfo.taskId)); verify(mMockRestartDialogLayout).setRequestRestartDialog(true); } } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat) { private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat) { return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false, return createTaskInfo(displayId, taskId, hasSizeCompat, /* isVisible */ false, /* isFocused */ false, /* isTopActivityTransparent */ false); /* isFocused */ false, /* isTopActivityTransparent */ false, /* isRestartMenuEnabledForDisplayMove */ false); } } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, boolean isVisible, boolean isFocused) { boolean isVisible, boolean isFocused) { return createTaskInfo(displayId, taskId, hasSizeCompat, return createTaskInfo(displayId, taskId, hasSizeCompat, isVisible, isFocused, /* isTopActivityTransparent */ false); isVisible, isFocused, /* isTopActivityTransparent */ false, /* isRestartMenuEnabledForDisplayMove */ false); } } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, boolean isVisible, boolean isFocused, boolean isTopActivityTransparent) { boolean isVisible, boolean isFocused, boolean isTopActivityTransparent, boolean isRestartMenuEnabledForDisplayMove) { RunningTaskInfo taskInfo = new RunningTaskInfo(); RunningTaskInfo taskInfo = new RunningTaskInfo(); taskInfo.taskId = taskId; taskInfo.taskId = taskId; taskInfo.displayId = displayId; taskInfo.displayId = displayId; Loading @@ -777,6 +784,8 @@ public class CompatUIControllerTest extends ShellTestCase { taskInfo.isTopActivityTransparent = isTopActivityTransparent; taskInfo.isTopActivityTransparent = isTopActivityTransparent; taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true); taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true); taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true); taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true); taskInfo.appCompatTaskInfo.setRestartMenuEnabledForDisplayMove( isRestartMenuEnabledForDisplayMove); return taskInfo; return taskInfo; } } } }