Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e19a5a29 authored by wilsonshih's avatar wilsonshih
Browse files

Do not add starting window after the starting data was cleared.

After moving the starting window logic to Shell, some timeing could be
changed. For some case the starting window could be added back to
window manager after app has drawn, for this case the mStartingData
was already cleared.
A reasonable solution should to prevent the starting window add back
to window manager if window manager already clear the starting data,
and for this case we don't need to remove the starting window from
window manager.

Bug: 182749276
Test: atest ActivityRecordTests
Change-Id: Iec8581908a413a1d8f70a2006d58386c5c8f5b86
parent c415157f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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",
+3 −0
Original line number Diff line number Diff line
@@ -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;
        }
+11 −5
Original line number Diff line number Diff line
@@ -1600,12 +1600,18 @@ 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");
                } 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) {
                    ProtoLog.w(WM_ERROR, "Attempted to add input method window with bad token "