diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 57b0fe2c04d95..52eb2fb01d791 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -53,7 +53,6 @@ import android.app.Activity; import android.content.res.Configuration; import android.graphics.Rect; import android.os.Binder; -import android.os.Build; import android.os.Debug; import android.os.IBinder; import android.os.SystemClock; @@ -155,6 +154,9 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree StartingSurface startingSurface; boolean startingDisplayed; boolean startingMoved; + // True if the hidden state of this token was forced to false due to a transferred starting + // window. + private boolean mHiddenSetFromTransferredStartingWindow; boolean firstWindowDrawn; private final WindowState.UpdateReportedVisibilityResults mReportedVisibilityResults = new WindowState.UpdateReportedVisibilityResults(); @@ -185,7 +187,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree ArrayDeque mFrozenBounds = new ArrayDeque<>(); ArrayDeque mFrozenMergedConfig = new ArrayDeque<>(); - private boolean mDisbalePreviewScreenshots; + private boolean mDisablePreviewScreenshots; Task mLastParent; @@ -790,11 +792,17 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree if (getController() != null) { getController().removeStartingWindow(); } - } else if (mChildren.size() == 0 && startingData != null) { + } else if (mChildren.size() == 0) { // If this is the last window and we had requested a starting transition window, // well there is no point now. if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Nulling last startingData"); startingData = null; + if (mHiddenSetFromTransferredStartingWindow) { + // We set the hidden state to false for the token from a transferred starting window. + // We now reset it back to true since the starting window was the last window in the + // token. + hidden = true; + } } else if (mChildren.size() == 1 && startingSurface != null && !isRelaunching()) { // If this is the last window except for a starting transition window, // we need to get rid of the starting transition. @@ -1171,6 +1179,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree "Removing starting " + tStartingWindow + " from " + fromToken); fromToken.removeChild(tStartingWindow); fromToken.postWindowRemoveStartingWindowCleanup(tStartingWindow); + fromToken.mHiddenSetFromTransferredStartingWindow = false; addWindow(tStartingWindow); // Propagate other interesting state between the tokens. If the old token is displayed, @@ -1186,6 +1195,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree if (!fromToken.hidden) { hidden = false; hiddenRequested = false; + mHiddenSetFromTransferredStartingWindow = true; } setClientHidden(fromToken.mClientHidden); fromToken.mAppAnimator.transferCurrentAnimation( @@ -1544,7 +1554,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree * See {@link Activity#setDisablePreviewScreenshots}. */ void setDisablePreviewScreenshots(boolean disable) { - mDisbalePreviewScreenshots = disable; + mDisablePreviewScreenshots = disable; } /** @@ -1556,7 +1566,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree * screenshot. */ boolean shouldUseAppThemeSnapshot() { - return mDisbalePreviewScreenshots || forAllWindows(w -> (w.mAttrs.flags & FLAG_SECURE) != 0, + return mDisablePreviewScreenshots || forAllWindows(w -> (w.mAttrs.flags & FLAG_SECURE) != 0, true /* topToBottom */); } @@ -1604,11 +1614,13 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree pw.print(" mIsExiting="); pw.println(mIsExiting); } if (startingWindow != null || startingSurface != null - || startingDisplayed || startingMoved) { + || startingDisplayed || startingMoved || mHiddenSetFromTransferredStartingWindow) { pw.print(prefix); pw.print("startingWindow="); pw.print(startingWindow); pw.print(" startingSurface="); pw.print(startingSurface); pw.print(" startingDisplayed="); pw.print(startingDisplayed); - pw.print(" startingMoved="); pw.println(startingMoved); + pw.print(" startingMoved="); pw.print(startingMoved); + pw.println(" mHiddenSetFromTransferredStartingWindow=" + + mHiddenSetFromTransferredStartingWindow); } if (!mFrozenBounds.isEmpty()) { pw.print(prefix); pw.print("mFrozenBounds="); pw.println(mFrozenBounds);