Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +16 −1 Original line number Diff line number Diff line Loading @@ -111,6 +111,12 @@ public class CompatUIController implements OnDisplaysChangedListener, private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap = 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 */ Loading Loading @@ -261,7 +267,11 @@ public class CompatUIController implements OnDisplaysChangedListener, private void handleDisplayCompatShowRestartDialog( 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) { final TaskInfo taskInfo = compatUIInfo.getTaskInfo(); final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener(); if (taskListener == null) { mTaskIdToCompatUIInfoMap.delete(taskInfo.taskId); } else { mTaskIdToCompatUIInfoMap.put(taskInfo.taskId, compatUIInfo); } final boolean isInDisplayCompatMode = taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove(); if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat() Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/impl/CompatUIRequests.kt +1 −4 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ 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 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 { /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */ data class DisplayCompatShowRestartDialog(val taskInfo: TaskInfo, val taskListener: ShellTaskOrganizer.TaskListener) : data class DisplayCompatShowRestartDialog(val taskId: Int) : CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG) } libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +19 −10 Original line number Diff line number Diff line Loading @@ -680,7 +680,8 @@ public class CompatUIControllerTest extends ShellTestCase { // Create transparent task 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 mController.updateActiveTaskInfo(taskInfo1); Loading Loading @@ -742,32 +743,38 @@ public class CompatUIControllerTest extends ShellTestCase { @Test @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK) public void testSendCompatUIRequest_createRestartDialog() { TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ false); doReturn(true).when(mMockRestartDialogLayout) .needsToBeRecreated(any(TaskInfo.class), any(ShellTaskOrganizer.TaskListener.class)); final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ false, /* isRestartMenuEnabledForDisplayMove */ true); doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled(); doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo)); mController.sendCompatUIRequest(new CompatUIRequests.DisplayCompatShowRestartDialog( taskInfo, mMockTaskListener)); mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener)); verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo), 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) { 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, boolean isVisible, boolean isFocused) { 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, boolean isVisible, boolean isFocused, boolean isTopActivityTransparent) { boolean isVisible, boolean isFocused, boolean isTopActivityTransparent, boolean isRestartMenuEnabledForDisplayMove) { RunningTaskInfo taskInfo = new RunningTaskInfo(); taskInfo.taskId = taskId; taskInfo.displayId = displayId; Loading @@ -777,6 +784,8 @@ public class CompatUIControllerTest extends ShellTestCase { taskInfo.isTopActivityTransparent = isTopActivityTransparent; taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true); taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true); taskInfo.appCompatTaskInfo.setRestartMenuEnabledForDisplayMove( isRestartMenuEnabledForDisplayMove); return taskInfo; } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +16 −1 Original line number Diff line number Diff line Loading @@ -111,6 +111,12 @@ public class CompatUIController implements OnDisplaysChangedListener, private final SparseArray<RestartDialogWindowManager> mTaskIdToRestartDialogWindowManagerMap = 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 */ Loading Loading @@ -261,7 +267,11 @@ public class CompatUIController implements OnDisplaysChangedListener, private void handleDisplayCompatShowRestartDialog( 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) { final TaskInfo taskInfo = compatUIInfo.getTaskInfo(); final ShellTaskOrganizer.TaskListener taskListener = compatUIInfo.getListener(); if (taskListener == null) { mTaskIdToCompatUIInfoMap.delete(taskInfo.taskId); } else { mTaskIdToCompatUIInfoMap.put(taskInfo.taskId, compatUIInfo); } final boolean isInDisplayCompatMode = taskInfo.appCompatTaskInfo.isRestartMenuEnabledForDisplayMove(); if (taskInfo != null && !taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat() Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/impl/CompatUIRequests.kt +1 −4 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ 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 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 { /** Sent when the restart handle menu is clicked, and a restart dialog is requested. */ data class DisplayCompatShowRestartDialog(val taskInfo: TaskInfo, val taskListener: ShellTaskOrganizer.TaskListener) : data class DisplayCompatShowRestartDialog(val taskId: Int) : CompatUIRequests(DISPLAY_COMPAT_SHOW_RESTART_DIALOG) }
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +19 −10 Original line number Diff line number Diff line Loading @@ -680,7 +680,8 @@ public class CompatUIControllerTest extends ShellTestCase { // Create transparent task 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 mController.updateActiveTaskInfo(taskInfo1); Loading Loading @@ -742,32 +743,38 @@ public class CompatUIControllerTest extends ShellTestCase { @Test @RequiresFlagsDisabled(Flags.FLAG_APP_COMPAT_UI_FRAMEWORK) public void testSendCompatUIRequest_createRestartDialog() { TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ false); doReturn(true).when(mMockRestartDialogLayout) .needsToBeRecreated(any(TaskInfo.class), any(ShellTaskOrganizer.TaskListener.class)); final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, /* isVisible */ true, /* isFocused */ true, /* isTopActivityTransparent */ false, /* isRestartMenuEnabledForDisplayMove */ true); doReturn(true).when(mCompatUIConfiguration).isRestartDialogEnabled(); doReturn(true).when(mCompatUIConfiguration).shouldShowRestartDialogAgain(eq(taskInfo)); mController.sendCompatUIRequest(new CompatUIRequests.DisplayCompatShowRestartDialog( taskInfo, mMockTaskListener)); mController.onCompatInfoChanged(new CompatUIInfo(taskInfo, mMockTaskListener)); verify(mController).createRestartDialogWindowManager(any(), eq(taskInfo), 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) { 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, boolean isVisible, boolean isFocused) { 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, boolean isVisible, boolean isFocused, boolean isTopActivityTransparent) { boolean isVisible, boolean isFocused, boolean isTopActivityTransparent, boolean isRestartMenuEnabledForDisplayMove) { RunningTaskInfo taskInfo = new RunningTaskInfo(); taskInfo.taskId = taskId; taskInfo.displayId = displayId; Loading @@ -777,6 +784,8 @@ public class CompatUIControllerTest extends ShellTestCase { taskInfo.isTopActivityTransparent = isTopActivityTransparent; taskInfo.appCompatTaskInfo.setLetterboxEducationEnabled(true); taskInfo.appCompatTaskInfo.setTopActivityLetterboxed(true); taskInfo.appCompatTaskInfo.setRestartMenuEnabledForDisplayMove( isRestartMenuEnabledForDisplayMove); return taskInfo; } }