Loading core/java/android/app/TaskInfo.java +2 −0 Original line number Diff line number Diff line Loading @@ -444,6 +444,7 @@ public class TaskInfo { && Objects.equals(shouldDockBigOverlays, that.shouldDockBigOverlays) && Objects.equals(displayCutoutInsets, that.displayCutoutInsets) && getWindowingMode() == that.getWindowingMode() && configuration.uiMode == that.configuration.uiMode && Objects.equals(taskDescription, that.taskDescription) && isFocused == that.isFocused && isVisible == that.isVisible Loading Loading @@ -472,6 +473,7 @@ public class TaskInfo { .equals(that.configuration.windowConfiguration.getBounds())) && (!hasCompatUI() || configuration.getLayoutDirection() == that.configuration.getLayoutDirection()) && (!hasCompatUI() || configuration.uiMode == that.configuration.uiMode) && (!hasCompatUI() || isVisible == that.isVisible); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +14 −15 Original line number Diff line number Diff line Loading @@ -126,14 +126,12 @@ public class CompatUIController implements OnDisplaysChangedListener, private final Lazy<Transitions> mTransitionsLazy; private final DockStateReader mDockStateReader; private final CompatUIConfiguration mCompatUIConfiguration; private CompatUICallback mCallback; // Only show each hint once automatically in the process life. private final CompatUIHintsState mCompatUIHintsState; private final CompatUIShellCommandHandler mCompatUIShellCommandHandler; private CompatUICallback mCallback; // Indicates if the keyguard is currently showing, in which case compat UIs shouldn't // be shown. private boolean mKeyguardShowing; Loading Loading @@ -372,10 +370,10 @@ public class CompatUIController implements OnDisplaysChangedListener, RestartDialogWindowManager layout = mTaskIdToRestartDialogWindowManagerMap.get(taskInfo.taskId); if (layout != null) { // TODO(b/266262111) Handle theme change when taskListener changes if (layout.getTaskListener() != taskListener) { mSetOfTaskIdsShowingRestartDialog.remove(taskInfo.taskId); } if (layout.needsToBeRecreated(taskInfo, taskListener)) { mTaskIdToRestartDialogWindowManagerMap.remove(taskInfo.taskId); layout.release(); } else { layout.setRequestRestartDialog( mSetOfTaskIdsShowingRestartDialog.contains(taskInfo.taskId)); // UI already exists, update the UI layout. Loading @@ -386,6 +384,7 @@ public class CompatUIController implements OnDisplaysChangedListener, } return; } } // Create a new UI layout. final Context context = getOrCreateDisplayContext(taskInfo.displayId); if (context == null) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManagerAbstract.java +2 −2 Original line number Diff line number Diff line Loading @@ -151,7 +151,6 @@ public abstract class CompatUIWindowManagerAbstract extends WindowlessWindowMana @Override public void setConfiguration(Configuration configuration) { super.setConfiguration(configuration); // TODO(b/266262111): Investigate loss of theme configuration when switching TaskListener mContext = mContext.createConfigurationContext(configuration); } Loading Loading @@ -211,7 +210,8 @@ public abstract class CompatUIWindowManagerAbstract extends WindowlessWindowMana } View layout = getLayout(); if (layout == null || prevTaskListener != taskListener) { if (layout == null || prevTaskListener != taskListener || mTaskConfig.uiMode != prevTaskConfig.uiMode) { // Layout wasn't created yet or TaskListener changed, recreate the layout for new // surface parent. release(); Loading libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,11 @@ class RestartDialogWindowManager extends CompatUIWindowManagerAbstract { return super.updateCompatInfo(taskInfo, taskListener, canShow); } boolean needsToBeRecreated(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener) { return taskInfo.configuration.uiMode != mTaskInfo.configuration.uiMode || !getTaskListener().equals(taskListener); } private void updateDialogMargins() { if (mLayout == null) { return; Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -474,6 +474,36 @@ public class CompatUIControllerTest extends ShellTestCase { verify(mMockRestartDialogLayout).updateVisibility(true); } @Test public void testRestartLayoutRecreatedIfNeeded() { final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN); doReturn(true).when(mMockRestartDialogLayout) .needsToBeRecreated(any(TaskInfo.class), any(ShellTaskOrganizer.TaskListener.class)); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); verify(mMockRestartDialogLayout, times(2)) .createLayout(anyBoolean()); } @Test public void testRestartLayoutNotRecreatedIfNotNeeded() { final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN); doReturn(false).when(mMockRestartDialogLayout) .needsToBeRecreated(any(TaskInfo.class), any(ShellTaskOrganizer.TaskListener.class)); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); verify(mMockRestartDialogLayout, times(1)) .createLayout(anyBoolean()); } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, @CameraCompatControlState int cameraCompatControlState) { RunningTaskInfo taskInfo = new RunningTaskInfo(); Loading Loading
core/java/android/app/TaskInfo.java +2 −0 Original line number Diff line number Diff line Loading @@ -444,6 +444,7 @@ public class TaskInfo { && Objects.equals(shouldDockBigOverlays, that.shouldDockBigOverlays) && Objects.equals(displayCutoutInsets, that.displayCutoutInsets) && getWindowingMode() == that.getWindowingMode() && configuration.uiMode == that.configuration.uiMode && Objects.equals(taskDescription, that.taskDescription) && isFocused == that.isFocused && isVisible == that.isVisible Loading Loading @@ -472,6 +473,7 @@ public class TaskInfo { .equals(that.configuration.windowConfiguration.getBounds())) && (!hasCompatUI() || configuration.getLayoutDirection() == that.configuration.getLayoutDirection()) && (!hasCompatUI() || configuration.uiMode == that.configuration.uiMode) && (!hasCompatUI() || isVisible == that.isVisible); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIController.java +14 −15 Original line number Diff line number Diff line Loading @@ -126,14 +126,12 @@ public class CompatUIController implements OnDisplaysChangedListener, private final Lazy<Transitions> mTransitionsLazy; private final DockStateReader mDockStateReader; private final CompatUIConfiguration mCompatUIConfiguration; private CompatUICallback mCallback; // Only show each hint once automatically in the process life. private final CompatUIHintsState mCompatUIHintsState; private final CompatUIShellCommandHandler mCompatUIShellCommandHandler; private CompatUICallback mCallback; // Indicates if the keyguard is currently showing, in which case compat UIs shouldn't // be shown. private boolean mKeyguardShowing; Loading Loading @@ -372,10 +370,10 @@ public class CompatUIController implements OnDisplaysChangedListener, RestartDialogWindowManager layout = mTaskIdToRestartDialogWindowManagerMap.get(taskInfo.taskId); if (layout != null) { // TODO(b/266262111) Handle theme change when taskListener changes if (layout.getTaskListener() != taskListener) { mSetOfTaskIdsShowingRestartDialog.remove(taskInfo.taskId); } if (layout.needsToBeRecreated(taskInfo, taskListener)) { mTaskIdToRestartDialogWindowManagerMap.remove(taskInfo.taskId); layout.release(); } else { layout.setRequestRestartDialog( mSetOfTaskIdsShowingRestartDialog.contains(taskInfo.taskId)); // UI already exists, update the UI layout. Loading @@ -386,6 +384,7 @@ public class CompatUIController implements OnDisplaysChangedListener, } return; } } // Create a new UI layout. final Context context = getOrCreateDisplayContext(taskInfo.displayId); if (context == null) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManagerAbstract.java +2 −2 Original line number Diff line number Diff line Loading @@ -151,7 +151,6 @@ public abstract class CompatUIWindowManagerAbstract extends WindowlessWindowMana @Override public void setConfiguration(Configuration configuration) { super.setConfiguration(configuration); // TODO(b/266262111): Investigate loss of theme configuration when switching TaskListener mContext = mContext.createConfigurationContext(configuration); } Loading Loading @@ -211,7 +210,8 @@ public abstract class CompatUIWindowManagerAbstract extends WindowlessWindowMana } View layout = getLayout(); if (layout == null || prevTaskListener != taskListener) { if (layout == null || prevTaskListener != taskListener || mTaskConfig.uiMode != prevTaskConfig.uiMode) { // Layout wasn't created yet or TaskListener changed, recreate the layout for new // surface parent. release(); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java +5 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,11 @@ class RestartDialogWindowManager extends CompatUIWindowManagerAbstract { return super.updateCompatInfo(taskInfo, taskListener, canShow); } boolean needsToBeRecreated(TaskInfo taskInfo, ShellTaskOrganizer.TaskListener taskListener) { return taskInfo.configuration.uiMode != mTaskInfo.configuration.uiMode || !getTaskListener().equals(taskListener); } private void updateDialogMargins() { if (mLayout == null) { return; Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/compatui/CompatUIControllerTest.java +30 −0 Original line number Diff line number Diff line Loading @@ -474,6 +474,36 @@ public class CompatUIControllerTest extends ShellTestCase { verify(mMockRestartDialogLayout).updateVisibility(true); } @Test public void testRestartLayoutRecreatedIfNeeded() { final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN); doReturn(true).when(mMockRestartDialogLayout) .needsToBeRecreated(any(TaskInfo.class), any(ShellTaskOrganizer.TaskListener.class)); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); verify(mMockRestartDialogLayout, times(2)) .createLayout(anyBoolean()); } @Test public void testRestartLayoutNotRecreatedIfNotNeeded() { final TaskInfo taskInfo = createTaskInfo(DISPLAY_ID, TASK_ID, /* hasSizeCompat= */ true, CAMERA_COMPAT_CONTROL_HIDDEN); doReturn(false).when(mMockRestartDialogLayout) .needsToBeRecreated(any(TaskInfo.class), any(ShellTaskOrganizer.TaskListener.class)); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); mController.onCompatInfoChanged(taskInfo, mMockTaskListener); verify(mMockRestartDialogLayout, times(1)) .createLayout(anyBoolean()); } private static TaskInfo createTaskInfo(int displayId, int taskId, boolean hasSizeCompat, @CameraCompatControlState int cameraCompatControlState) { RunningTaskInfo taskInfo = new RunningTaskInfo(); Loading