summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Louis Chang <louischang@google.com> 2024-08-13 03:56:58 +0000
committer Louis Chang <louischang@google.com> 2024-08-13 06:07:23 +0000
commit1646b31cfc79bf794ab73c6cb2457d8a4c782ce1 (patch)
treedade54cc59ddbb4c350f56f45369ef003d5d3f33
parentcca31ca5f7e31f5faaf0e9e0d1a4b78d2c6e737d (diff)
Fix activities are not removed while removing the Display
Activities are re-parented to default display when the display is removed, even when the remove-content-mode is set to REMOVE_MODE_DESTROY_CONTENT. Checking the remove content mode settings in the DisplayWindowSettings vs. the settings in the DisplayInfo. Bug: 356220670 Test: atest DisplayWindowSettingsTests Flag: EXEMPT bugfix Change-Id: I7754d242cdaa6f0ccf50db0de664ab183a76cbce
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java9
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java10
3 files changed, 18 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index fcc6b11d46c5..c44e1b13e246 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -45,7 +45,6 @@ import static android.view.Display.FLAG_CAN_SHOW_WITH_INSECURE_KEYGUARD;
import static android.view.Display.FLAG_PRIVATE;
import static android.view.Display.FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS;
import static android.view.Display.INVALID_DISPLAY;
-import static android.view.Display.REMOVE_MODE_DESTROY_CONTENT;
import static android.view.Display.STATE_UNKNOWN;
import static android.view.Display.isSuspendedState;
import static android.view.InsetsSource.ID_IME;
@@ -80,6 +79,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static android.view.WindowManager.REMOVE_CONTENT_MODE_DESTROY;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_NONE;
import static android.view.WindowManager.TRANSIT_OPEN;
@@ -6556,7 +6556,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
@VisibleForTesting
boolean shouldDestroyContentOnRemove() {
- return mDisplay.getRemoveMode() == REMOVE_MODE_DESTROY_CONTENT;
+ return getRemoveContentMode() == REMOVE_CONTENT_MODE_DESTROY;
+ }
+
+ @WindowManager.RemoveContentMode
+ int getRemoveContentMode() {
+ return mWmService.mDisplayWindowSettings.getRemoveContentModeLocked(this);
}
boolean shouldSleep() {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 5749272376ac..243ab3a6c574 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -7656,7 +7656,7 @@ public class WindowManagerService extends IWindowManager.Stub
displayId);
return REMOVE_CONTENT_MODE_UNDEFINED;
}
- return mDisplayWindowSettings.getRemoveContentModeLocked(displayContent);
+ return displayContent.getRemoveContentMode();
}
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java
index ddadbc41a1c0..57839e2b795e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java
@@ -309,6 +309,16 @@ public class DisplayWindowSettingsTests extends WindowTestsBase {
public void testPublicDisplayDefaultToMoveToPrimary() {
assertEquals(REMOVE_CONTENT_MODE_MOVE_TO_PRIMARY,
mDisplayWindowSettings.getRemoveContentModeLocked(mSecondaryDisplay));
+
+ // Sets the remove-content-mode and make sure the mode is updated.
+ mDisplayWindowSettings.setRemoveContentModeLocked(mSecondaryDisplay,
+ REMOVE_CONTENT_MODE_DESTROY);
+ final int removeContentMode = mDisplayWindowSettings.getRemoveContentModeLocked(
+ mSecondaryDisplay);
+ assertEquals(REMOVE_CONTENT_MODE_DESTROY, removeContentMode);
+
+ doReturn(removeContentMode).when(mSecondaryDisplay).getRemoveContentMode();
+ assertTrue(mSecondaryDisplay.shouldDestroyContentOnRemove());
}
@Test