Fix crash when removing a display with activities
When secondary display is removed current behavior is to
move its stacks to the primary display. This requires app
windows to be reparented, and there was a check missing
for app windows in DisplayContent.reParentWindowToken.
Test: bit FrameworksServicesTests:com.android.server.wm.DisplayContentTests
Test: #testMoveStackBetweenDisplays
Bug: 33677605
Change-Id: I2ac2cdba273134438c63385887a09c37d42017bb
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 135a3dc..ff841b1 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -712,19 +712,11 @@
if (prevDc == this) {
return;
}
- if (prevDc != null && prevDc.mTokenMap.remove(token.token) != null) {
- switch (token.windowType) {
- case TYPE_WALLPAPER:
- prevDc.mBelowAppWindowsContainers.removeChild(token);
- break;
- case TYPE_INPUT_METHOD:
- case TYPE_INPUT_METHOD_DIALOG:
- prevDc.mImeWindowsContainers.removeChild(token);
- break;
- default:
- prevDc.mAboveAppWindowsContainers.removeChild(token);
- break;
- }
+ if (prevDc != null && prevDc.mTokenMap.remove(token.token) != null
+ && token.asAppWindowToken() == null) {
+ // Removed the token from the map, but made sure it's not an app token before removing
+ // from parent.
+ token.getParent().removeChild(token);
}
addWindowToken(token.token, token);