diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json index 115bd9b08a53d..6076c2ad1a1db 100644 --- a/data/etc/services.core.protolog.json +++ b/data/etc/services.core.protolog.json @@ -3307,6 +3307,12 @@ "group": "WM_DEBUG_WINDOW_TRANSITIONS", "at": "com\/android\/server\/wm\/TransitionController.java" }, + "1804245629": { + "message": "Attempted to add starting window to token but already cleaned", + "level": "WARN", + "group": "WM_ERROR", + "at": "com\/android\/server\/wm\/WindowManagerService.java" + }, "1810019902": { "message": "TRANSIT_FLAG_OPEN_BEHIND, adding %s to mOpeningApps", "level": "DEBUG", diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index d361a8c03fbdc..b12ce67832ef4 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -2247,6 +2247,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // Go ahead and cancel the request. ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Clearing startingData for token=%s", this); mStartingData = null; + // Clean surface up since we don't want the window to be added back, so we don't + // need to keep the surface to remove it. + mStartingSurface = null; } return; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index dce79a093a6f9..c5e000000eee2 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1600,11 +1600,17 @@ public class WindowManagerService extends IWindowManager.Stub ProtoLog.w(WM_ERROR, "Attempted to add window with exiting application token " + ".%s Aborting.", token); return WindowManagerGlobal.ADD_APP_EXITING; - } else if (type == TYPE_APPLICATION_STARTING && activity.mStartingWindow != null) { - ProtoLog.w(WM_ERROR, - "Attempted to add starting window to token with already existing" - + " starting window"); - return WindowManagerGlobal.ADD_DUPLICATE_ADD; + } else if (type == TYPE_APPLICATION_STARTING) { + if (activity.mStartingWindow != null) { + ProtoLog.w(WM_ERROR, "Attempted to add starting window to " + + "token with already existing starting window"); + return WindowManagerGlobal.ADD_DUPLICATE_ADD; + } + if (activity.mStartingData == null) { + ProtoLog.w(WM_ERROR, "Attempted to add starting window to " + + "token but already cleaned"); + return WindowManagerGlobal.ADD_DUPLICATE_ADD; + } } } else if (rootType == TYPE_INPUT_METHOD) { if (token.windowType != TYPE_INPUT_METHOD) {