Clean up visibility related flags in ActivityRecord
- Replace mClientHidden by mClientVisible
Test: Refactoring, all existing tests pass.
Bug: 80414790
Change-Id: I4c122bf5418182ab7456ee2548195dbbab79fad6
diff --git a/core/proto/android/server/windowmanagerservice.proto b/core/proto/android/server/windowmanagerservice.proto
index c1e8196..24456d8 100644
--- a/core/proto/android/server/windowmanagerservice.proto
+++ b/core/proto/android/server/windowmanagerservice.proto
@@ -236,7 +236,7 @@
optional bool fills_parent = 7;
optional bool app_stopped = 8;
optional bool visible_requested = 9;
- optional bool client_hidden = 10;
+ optional bool client_visible = 10;
optional bool defer_hiding_client = 11;
optional bool reported_drawn = 12;
optional bool reported_visible = 13;
diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json
index 3d82d44..440b885 100644
--- a/data/etc/services.core.protolog.json
+++ b/data/etc/services.core.protolog.json
@@ -55,6 +55,12 @@
"group": "WM_DEBUG_REMOTE_ANIMATIONS",
"at": "com\/android\/server\/wm\/RemoteAnimationController.java"
},
+ "-2006946193": {
+ "message": "setClientVisible: %s clientVisible=%b Callers=%s",
+ "level": "VERBOSE",
+ "group": "WM_DEBUG_APP_TRANSITIONS",
+ "at": "com\/android\/server\/wm\/ActivityRecord.java"
+ },
"-2002500255": {
"message": "Defer removing snapshot surface in %dms",
"level": "VERBOSE",
@@ -301,12 +307,6 @@
"group": "WM_DEBUG_ADD_REMOVE",
"at": "com\/android\/server\/wm\/ActivityRecord.java"
},
- "-1456549051": {
- "message": "setClientHidden: %s clientHidden=%b Callers=%s",
- "level": "VERBOSE",
- "group": "WM_DEBUG_APP_TRANSITIONS",
- "at": "com\/android\/server\/wm\/ActivityRecord.java"
- },
"-1455600136": {
"message": "Attempted to add Dream window with unknown token %s. Aborting.",
"level": "WARN",
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index b7d49f4..3ad8cef 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -173,7 +173,7 @@
import static com.android.server.wm.ActivityTaskManagerService.getInputDispatchingTimeoutLocked;
import static com.android.server.wm.AppWindowTokenProto.ALL_DRAWN;
import static com.android.server.wm.AppWindowTokenProto.APP_STOPPED;
-import static com.android.server.wm.AppWindowTokenProto.CLIENT_HIDDEN;
+import static com.android.server.wm.AppWindowTokenProto.CLIENT_VISIBLE;
import static com.android.server.wm.AppWindowTokenProto.DEFER_HIDING_CLIENT;
import static com.android.server.wm.AppWindowTokenProto.FILLS_PARENT;
import static com.android.server.wm.AppWindowTokenProto.FROZEN_BOUNDS;
@@ -464,13 +464,13 @@
private boolean mVisible; // Should this token's windows be visible?
boolean visibleIgnoringKeyguard; // is this activity visible, ignoring the fact that Keyguard
// might hide this activity?
- // True if the hidden state of this token was forced to false due to a transferred starting
+ // True if the visible state of this token was forced to true due to a transferred starting
// window.
private boolean mVisibleSetFromTransferredStartingWindow;
// TODO: figure out how to consolidate with the same variable in ActivityRecord.
private boolean mDeferHidingClient; // If true we told WM to defer reporting to the client
// process that it is hidden.
- private boolean mLastDeferHidingClient; // If true we will defer setting mClientHidden to true
+ private boolean mLastDeferHidingClient; // If true we will defer setting mClientVisible to false
// and reporting to the client that it is hidden.
boolean sleeping; // have we told the activity to sleep?
boolean nowVisible; // is this activity's window visible?
@@ -535,8 +535,8 @@
private Task mLastParent;
- // Have we told the window clients to hide themselves?
- private boolean mClientHidden;
+ // Have we told the window clients to show themselves?
+ private boolean mClientVisible;
boolean firstWindowDrawn;
// Last drawn state we reported to the app token.
@@ -857,7 +857,7 @@
pw.print(prefix); pw.print(" mOccludesParent="); pw.print(mOccludesParent);
pw.print(" mOrientation="); pw.println(mOrientation);
pw.println(prefix + "mVisibleRequested=" + mVisibleRequested
- + " mClientHidden=" + mClientHidden
+ + " mClientVisible=" + mClientVisible
+ ((mDeferHidingClient) ? " mDeferHidingClient=" + mDeferHidingClient : "")
+ " reportedDrawn=" + reportedDrawn + " reportedVisible=" + reportedVisible);
if (paused) {
@@ -1515,6 +1515,7 @@
inHistory = false;
nowVisible = false;
mDrawn = false;
+ mClientVisible = true;
idle = false;
hasBeenLaunched = false;
mStackSupervisor = supervisor;
@@ -3218,7 +3219,7 @@
mVisibleRequested = true;
mVisibleSetFromTransferredStartingWindow = true;
}
- setClientHidden(fromActivity.mClientHidden);
+ setClientVisible(fromActivity.mClientVisible);
transferAnimation(fromActivity);
@@ -3873,7 +3874,7 @@
// We previously deferred telling the client to hide itself when visibility was
// initially set to false. Now we would like it to hide, so go ahead and set it.
mLastDeferHidingClient = deferHidingClient;
- setClientHidden(true);
+ setClientVisible(false);
}
return;
}
@@ -3918,7 +3919,7 @@
waitingToShow = true;
// If the client isn't hidden, we don't need to reset the drawing state.
- if (isClientHidden()) {
+ if (!isClientVisible()) {
// Let's reset the draw state in order to prevent the starting window to be
// immediately dismissed when the app still has the surface.
forAllWindows(w -> {
@@ -3938,7 +3939,7 @@
// we still need to tell the client to make its windows visible so they get drawn.
// Otherwise, we will wait on performing the transition until all windows have been
// drawn, they never will be, and we are sad.
- setClientHidden(false);
+ setClientVisible(true);
requestUpdateWallpaperIfNeeded();
@@ -4086,7 +4087,7 @@
// If we're becoming invisible, update the client visibility if we are not running an
// animation. Otherwise, we'll update client visibility in onAnimationFinished.
if (visible || !isAnimating()) {
- setClientHidden(!visible);
+ setClientVisible(visible);
}
if (!displayContent.mClosingApps.contains(this)
@@ -5113,18 +5114,18 @@
}
}
- boolean isClientHidden() {
- return mClientHidden;
+ boolean isClientVisible() {
+ return mClientVisible;
}
- void setClientHidden(boolean hideClient) {
- if (mClientHidden == hideClient || (hideClient && mDeferHidingClient)) {
+ void setClientVisible(boolean clientVisible) {
+ if (mClientVisible == clientVisible || (!clientVisible && mDeferHidingClient)) {
return;
}
ProtoLog.v(WM_DEBUG_APP_TRANSITIONS,
- "setClientHidden: %s clientHidden=%b Callers=%s", this, hideClient,
+ "setClientVisible: %s clientVisible=%b Callers=%s", this, clientVisible,
Debug.getCallers(5));
- mClientHidden = hideClient;
+ mClientVisible = clientVisible;
sendAppVisibilityToClients();
}
@@ -5907,7 +5908,7 @@
"AppWindowToken");
clearThumbnail();
- setClientHidden(!isVisible() && !mVisibleRequested);
+ setClientVisible(isVisible() || mVisibleRequested);
getDisplayContent().computeImeTargetIfNeeded(this);
@@ -7328,7 +7329,7 @@
proto.write(FILLS_PARENT, mOccludesParent);
proto.write(APP_STOPPED, mAppStopped);
proto.write(com.android.server.wm.AppWindowTokenProto.VISIBLE_REQUESTED, mVisibleRequested);
- proto.write(CLIENT_HIDDEN, mClientHidden);
+ proto.write(CLIENT_VISIBLE, mClientVisible);
proto.write(DEFER_HIDING_CLIENT, mDeferHidingClient);
proto.write(REPORTED_DRAWN, reportedDrawn);
proto.write(REPORTED_VISIBLE, reportedVisible);
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index b132dbd..87f3da1 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -3053,7 +3053,7 @@
wsa.destroySurface();
mWmService.mForceRemoves.add(w);
mTmpWindow = w;
- } else if (w.mActivityRecord != null && w.mActivityRecord.isClientHidden()) {
+ } else if (w.mActivityRecord != null && !w.mActivityRecord.isClientVisible()) {
Slog.w(TAG_WM, "LEAKED SURFACE (app token hidden): "
+ w + " surface=" + wsa.mSurfaceController
+ " token=" + w.mActivityRecord);
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 6ddd943..e86a0e0 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -2508,7 +2508,7 @@
for (int i = mChildren.size() - 1; i >= 0; i--) {
final ActivityRecord token = mChildren.get(i);
// skip hidden (or about to hide) apps
- if (token.mIsExiting || token.isClientHidden() || !token.mVisibleRequested) {
+ if (token.mIsExiting || !token.isClientVisible() || !token.mVisibleRequested) {
continue;
}
final WindowState win = token.findMainWindow();
@@ -2726,10 +2726,9 @@
ActivityRecord getTopVisibleActivity() {
for (int i = mChildren.size() - 1; i >= 0; i--) {
- final ActivityRecord token = mChildren.get(i);
- // skip hidden (or about to hide) apps
- if (!token.mIsExiting && !token.isClientHidden() && token.mVisibleRequested) {
- return token;
+ final ActivityRecord activity = mChildren.get(i);
+ if (!activity.mIsExiting && activity.isClientVisible() && activity.mVisibleRequested) {
+ return activity;
}
}
return null;
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 2d6d5f4..8e2fbca 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -1653,7 +1653,7 @@
if (mInTouchMode) {
res |= WindowManagerGlobal.ADD_FLAG_IN_TOUCH_MODE;
}
- if (win.mActivityRecord == null || !win.mActivityRecord.isClientHidden()) {
+ if (win.mActivityRecord == null || win.mActivityRecord.isClientVisible()) {
res |= WindowManagerGlobal.ADD_FLAG_APP_VISIBLE;
}
@@ -2186,7 +2186,7 @@
// associated appToken is not hidden.
final boolean shouldRelayout = viewVisibility == View.VISIBLE &&
(win.mActivityRecord == null || win.mAttrs.type == TYPE_APPLICATION_STARTING
- || !win.mActivityRecord.isClientHidden());
+ || win.mActivityRecord.isClientVisible());
// If we are not currently running the exit animation, we need to see about starting
// one.
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 5c4ec4a..104bb67 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -2595,7 +2595,7 @@
* interacts with it.
*/
private boolean shouldKeepVisibleDeadAppWindow() {
- if (!isWinVisibleLw() || mActivityRecord == null || mActivityRecord.isClientHidden()) {
+ if (!isWinVisibleLw() || mActivityRecord == null || !mActivityRecord.isClientVisible()) {
// Not a visible app window or the app isn't dead.
return false;
}
@@ -2907,13 +2907,13 @@
void sendAppVisibilityToClients() {
super.sendAppVisibilityToClients();
- final boolean clientHidden = mActivityRecord.isClientHidden();
- if (mAttrs.type == TYPE_APPLICATION_STARTING && clientHidden) {
+ final boolean clientVisible = mActivityRecord.isClientVisible();
+ if (mAttrs.type == TYPE_APPLICATION_STARTING && !clientVisible) {
// Don't hide the starting window.
return;
}
- if (clientHidden) {
+ if (!clientVisible) {
// Once we are notifying the client that it's visibility has changed, we need to prevent
// it from destroying child surfaces until the animation has finished. We do this by
// detaching any surface control the client added from the client.
@@ -2927,8 +2927,8 @@
try {
if (DEBUG_VISIBILITY) Slog.v(TAG,
- "Setting visibility of " + this + ": " + (!clientHidden));
- mClient.dispatchAppVisibility(!clientHidden);
+ "Setting visibility of " + this + ": " + clientVisible);
+ mClient.dispatchAppVisibility(clientVisible);
} catch (RemoteException e) {
}
}