Reset hidden state of AppToken that was cleared due to starting window
If a starting window is tranferred to a token from another token that is visible, we also make the receiving token visible, however we don't reset the start when the starting window is tranferred out again when no other windows were added to the token. We now do. Fixes: 38317227 Test: Launch Audible app music player and verify the LibraryActivity token isn't in the visible state. Change-Id: I0186c79aa24d64362f742229d60c75eb0c1a3f97
This commit is contained in:
@@ -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<Rect> mFrozenBounds = new ArrayDeque<>();
|
||||
ArrayDeque<Configuration> 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);
|
||||
|
||||
Reference in New Issue
Block a user