Merge "Added WC#showToCurrentUser (83/n)"
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 0d8f257..5a124a7 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -48,34 +48,19 @@
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_SYSTEM_ERROR;
-import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
-import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_CONSUMER;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
-import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
-import static android.view.WindowManager.LayoutParams.TYPE_PHONE;
-import static android.view.WindowManager.LayoutParams.TYPE_POINTER;
import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
-import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_SEARCH_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
-import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL;
-import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL;
-import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
-import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
import static android.view.WindowManager.LayoutParams.isSystemAlertWindowType;
import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN;
@@ -2182,52 +2167,6 @@
}
}
- @Override
- public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs) {
-
- // If this switch statement is modified, modify the comment in the declarations of
- // the type in {@link WindowManager.LayoutParams} as well.
- switch (attrs.type) {
- default:
- // These are the windows that by default are shown only to the user that created
- // them. If this needs to be overridden, set
- // {@link WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS} in
- // {@link WindowManager.LayoutParams}. Note that permission
- // {@link android.Manifest.permission.INTERNAL_SYSTEM_WINDOW} is required as well.
- if ((attrs.privateFlags & SYSTEM_FLAG_SHOW_FOR_ALL_USERS) == 0) {
- return true;
- }
- break;
-
- // These are the windows that by default are shown to all users. However, to
- // protect against spoofing, check permissions below.
- case TYPE_APPLICATION_STARTING:
- case TYPE_BOOT_PROGRESS:
- case TYPE_DISPLAY_OVERLAY:
- case TYPE_INPUT_CONSUMER:
- case TYPE_KEYGUARD_DIALOG:
- case TYPE_MAGNIFICATION_OVERLAY:
- case TYPE_NAVIGATION_BAR:
- case TYPE_NAVIGATION_BAR_PANEL:
- case TYPE_PHONE:
- case TYPE_POINTER:
- case TYPE_PRIORITY_PHONE:
- case TYPE_SEARCH_BAR:
- case TYPE_STATUS_BAR:
- case TYPE_STATUS_BAR_PANEL:
- case TYPE_STATUS_BAR_SUB_PANEL:
- case TYPE_SYSTEM_DIALOG:
- case TYPE_VOLUME_OVERLAY:
- case TYPE_PRESENTATION:
- case TYPE_PRIVATE_PRESENTATION:
- case TYPE_DOCK_DIVIDER:
- break;
- }
-
- // Check if third party app has set window to system window type.
- return mContext.checkCallingOrSelfPermission(INTERNAL_SYSTEM_WINDOW) != PERMISSION_GRANTED;
- }
-
void readLidState() {
mDefaultDisplayPolicy.setLidState(mWindowManagerFuncs.getLidState());
}
diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
index a2425a3..b014372 100644
--- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java
+++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java
@@ -702,16 +702,6 @@
public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp);
/**
- * Check permissions when adding a window.
- *
- * @param attrs The window's LayoutParams.
- *
- * @return True if the window may only be shown to the current user, false if the window can
- * be shown on all users' windows.
- */
- public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs);
-
- /**
* After the window manager has computed the current configuration based
* on its knowledge of the display and input devices, it gives the policy
* a chance to adjust the information contained in it. If you want to
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 111bdd6..b156d1b 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -7452,6 +7452,11 @@
}
@Override
+ boolean showToCurrentUser() {
+ return mShowForAllUsers || mWmService.isCurrentProfile(mUserId);
+ }
+
+ @Override
public String toString() {
if (stringName != null) {
return stringName + " t" + (task == null ? INVALID_TASK_ID : task.mTaskId) +
diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java
index 935e33b..ef34327 100644
--- a/services/core/java/com/android/server/wm/ActivityStack.java
+++ b/services/core/java/com/android/server/wm/ActivityStack.java
@@ -1258,7 +1258,7 @@
super.switchUser(userId);
forAllTasks((t) -> {
- if (t.mWmService.isCurrentProfileLocked(t.mUserId) || t.showForAllUsers()) {
+ if (t.mWmService.isCurrentProfile(t.mUserId) || t.showForAllUsers()) {
mChildren.remove(t);
mChildren.add(t);
}
@@ -3986,11 +3986,19 @@
* @param showForAllUsers Whether to show the task regardless of the current user.
*/
private void addChild(Task task, int position, boolean showForAllUsers, boolean moveParents) {
- // Add child task.
- addChild(task, null);
+ try {
+ // Force show for all user so task can be position correctly based on which user is
+ // active. We clear the force show below.
+ task.setForceShowForAllUsers(showForAllUsers);
+ // Add child task.
+ addChild(task, null);
- // Move child to a proper position, as some restriction for position might apply.
- positionChildAt(position, task, moveParents /* includingParents */, showForAllUsers);
+ // Move child to a proper position, as some restriction for position might apply.
+ positionChildAt(position, task, moveParents /* includingParents */);
+
+ } finally {
+ task.setForceShowForAllUsers(false);
+ }
}
@Override
@@ -4036,18 +4044,7 @@
@Override
void positionChildAt(int position, WindowContainer child, boolean includingParents) {
final Task task = (Task) child;
- positionChildAt(position, task, includingParents, task.showForAllUsers());
- }
-
- /**
- * Overridden version of {@link ActivityStack#positionChildAt(int, WindowContainer, boolean)}.
- * Used in {@link ActivityStack#addChild(Task, int, boolean showForAllUsers, boolean)}, as it
- * can receive showForAllUsers param from {@link ActivityRecord} instead of
- * {@link Task#showForAllUsers()}.
- */
- private int positionChildAt(int position, Task child, boolean includingParents,
- boolean showForAllUsers) {
- final int targetPosition = findPositionForTask(child, position, showForAllUsers);
+ final int targetPosition = findPositionForTask(task, position);
super.positionChildAt(targetPosition, child, includingParents);
// Log positioning.
@@ -4056,8 +4053,7 @@
}
final int toTop = targetPosition == mChildren.size() - 1 ? 1 : 0;
- EventLogTags.writeWmTaskMoved(child.mTaskId, toTop, targetPosition);
- return targetPosition;
+ EventLogTags.writeWmTaskMoved(task.mTaskId, toTop, targetPosition);
}
@Override
@@ -4127,9 +4123,8 @@
// TODO: We should really have users as a window container in the hierarchy so that we don't
// have to do complicated things like we are doing in this method.
- int findPositionForTask(Task task, int targetPosition, boolean showForAllUsers) {
- final boolean canShowTask =
- showForAllUsers || mWmService.isCurrentProfileLocked(task.mUserId);
+ int findPositionForTask(Task task, int targetPosition) {
+ final boolean canShowTask = task.showToCurrentUser();
final int stackSize = mChildren.size();
int minPosition = 0;
@@ -4161,9 +4156,7 @@
private int computeMinPosition(int minPosition, int size) {
while (minPosition < size) {
final Task tmpTask = (Task) mChildren.get(minPosition);
- final boolean canShowTmpTask =
- tmpTask.showForAllUsers()
- || mWmService.isCurrentProfileLocked(tmpTask.mUserId);
+ final boolean canShowTmpTask = tmpTask.showToCurrentUser();
if (canShowTmpTask) {
break;
}
@@ -4181,9 +4174,7 @@
private int computeMaxPosition(int maxPosition) {
while (maxPosition > 0) {
final Task tmpTask = (Task) mChildren.get(maxPosition);
- final boolean canShowTmpTask =
- tmpTask.showForAllUsers()
- || mWmService.isCurrentProfileLocked(tmpTask.mUserId);
+ final boolean canShowTmpTask = tmpTask.showToCurrentUser();
if (!canShowTmpTask) {
break;
}
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index 06af095..914b95c 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -385,6 +385,8 @@
private static Exception sTmpException;
+ private boolean mForceShowForAllUsers;
+
private final FindRootHelper mFindRootHelper = new FindRootHelper();
private class FindRootHelper {
private ActivityRecord mRoot;
@@ -2185,7 +2187,7 @@
+ " from stack=" + getStack());
EventLogTags.writeWmTaskRemoved(mTaskId, "reParentTask:" + reason);
- position = stack.findPositionForTask(this, position, showForAllUsers());
+ position = stack.findPositionForTask(this, position);
reparent(stack, position);
@@ -2522,6 +2524,15 @@
return r != null && r.mShowForAllUsers;
}
+ @Override
+ boolean showToCurrentUser() {
+ return mForceShowForAllUsers || showForAllUsers() || mWmService.isCurrentProfile(mUserId);
+ }
+
+ void setForceShowForAllUsers(boolean forceShowForAllUsers) {
+ mForceShowForAllUsers = forceShowForAllUsers;
+ }
+
/**
* When we are in a floating stack (Freeform, Pinned, ...) we calculate
* insets differently. However if we are animating to the fullscreen stack
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 62630a6..5daf567 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -1071,6 +1071,10 @@
}
}
+ boolean showToCurrentUser() {
+ return true;
+ }
+
/**
* For all windows at or below this container call the callback.
* @param callback Calls the {@link ToBooleanFunction#apply} method for each window found and
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 8a91d9e..223e9b9 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -255,7 +255,6 @@
import com.android.internal.util.DumpUtils;
import com.android.internal.util.FastPrintWriter;
import com.android.internal.util.LatencyTracker;
-import com.android.internal.util.Preconditions;
import com.android.internal.util.function.pooled.PooledConsumer;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.internal.view.WindowManagerPolicyThread;
@@ -1508,7 +1507,6 @@
final DisplayPolicy displayPolicy = displayContent.getDisplayPolicy();
displayPolicy.adjustWindowParamsLw(win, win.mAttrs, Binder.getCallingPid(),
Binder.getCallingUid());
- win.setShowToOwnerOnlyLocked(mPolicy.checkShowToOwnerOnly(attrs));
res = displayPolicy.validateAddingWindowLw(attrs);
if (res != WindowManagerGlobal.ADD_OKAY) {
@@ -3175,7 +3173,7 @@
}
/* Called by WindowState */
- boolean isCurrentProfileLocked(int userId) {
+ boolean isCurrentProfile(int userId) {
if (userId == mCurrentUserId) return true;
for (int i = 0; i < mCurrentProfileIds.length; i++) {
if (mCurrentProfileIds[i] == userId) return true;
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index b681923..2ac1f39 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -56,19 +56,35 @@
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
import static android.view.WindowManager.LayoutParams.SOFT_INPUT_MASK_ADJUST;
import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
+import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
+import static android.view.WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_INPUT_CONSUMER;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
+import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL;
+import static android.view.WindowManager.LayoutParams.TYPE_PHONE;
+import static android.view.WindowManager.LayoutParams.TYPE_POINTER;
+import static android.view.WindowManager.LayoutParams.TYPE_PRESENTATION;
+import static android.view.WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;
+import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
+import static android.view.WindowManager.LayoutParams.TYPE_SEARCH_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL;
+import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL;
+import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
+import static android.view.WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
import static android.view.WindowManager.LayoutParams.isSystemAlertWindowType;
import static android.view.WindowManagerGlobal.RELAYOUT_RES_DRAG_RESIZING_DOCKED;
@@ -523,9 +539,6 @@
boolean mHasSurface = false;
- /** When true this window can be displayed on screens owther than mOwnerUid's */
- private boolean mShowToOwnerOnly;
-
// This window will be replaced due to relaunch. This allows window manager
// to differentiate between simple removal of a window and replacement. In the latter case it
// will preserve the old window until the new one is drawn.
@@ -2357,12 +2370,13 @@
@Override
void switchUser(int userId) {
super.switchUser(userId);
- if (isHiddenFromUserLocked()) {
+
+ if (showToCurrentUser()) {
+ setPolicyVisibilityFlag(VISIBLE_FOR_USER);
+ } else {
if (DEBUG_VISIBILITY) Slog.w(TAG_WM, "user changing, hiding " + this
+ ", attrs=" + mAttrs.type + ", belonging to " + mOwnerUid);
clearPolicyVisibilityFlag(VISIBLE_FOR_USER);
- } else {
- setPolicyVisibilityFlag(VISIBLE_FOR_USER);
}
}
@@ -2725,7 +2739,7 @@
// Already showing.
return false;
}
- if (isHiddenFromUserLocked()) {
+ if (!showToCurrentUser()) {
return false;
}
if (!mAppOpVisibility) {
@@ -3133,11 +3147,55 @@
return displayContent.isDefaultDisplay;
}
- void setShowToOwnerOnlyLocked(boolean showToOwnerOnly) {
- mShowToOwnerOnly = showToOwnerOnly;
+ /** @return {@code true} if this window can be shown to all users. */
+ boolean showForAllUsers() {
+
+ // If this switch statement is modified, modify the comment in the declarations of
+ // the type in {@link WindowManager.LayoutParams} as well.
+ switch (mAttrs.type) {
+ default:
+ // These are the windows that by default are shown only to the user that created
+ // them. If this needs to be overridden, set
+ // {@link WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS} in
+ // {@link WindowManager.LayoutParams}. Note that permission
+ // {@link android.Manifest.permission.INTERNAL_SYSTEM_WINDOW} is required as well.
+ if ((mAttrs.privateFlags & SYSTEM_FLAG_SHOW_FOR_ALL_USERS) == 0) {
+ return false;
+ }
+ break;
+
+ // These are the windows that by default are shown to all users. However, to
+ // protect against spoofing, check permissions below.
+ case TYPE_APPLICATION_STARTING:
+ case TYPE_BOOT_PROGRESS:
+ case TYPE_DISPLAY_OVERLAY:
+ case TYPE_INPUT_CONSUMER:
+ case TYPE_KEYGUARD_DIALOG:
+ case TYPE_MAGNIFICATION_OVERLAY:
+ case TYPE_NAVIGATION_BAR:
+ case TYPE_NAVIGATION_BAR_PANEL:
+ case TYPE_PHONE:
+ case TYPE_POINTER:
+ case TYPE_PRIORITY_PHONE:
+ case TYPE_SEARCH_BAR:
+ case TYPE_STATUS_BAR:
+ case TYPE_STATUS_BAR_PANEL:
+ case TYPE_STATUS_BAR_SUB_PANEL:
+ case TYPE_SYSTEM_DIALOG:
+ case TYPE_VOLUME_OVERLAY:
+ case TYPE_PRESENTATION:
+ case TYPE_PRIVATE_PRESENTATION:
+ case TYPE_DOCK_DIVIDER:
+ break;
+ }
+
+ // Only the system can show free windows to all users.
+ return mOwnerCanAddInternalSystemWindow;
+
}
- private boolean isHiddenFromUserLocked() {
+ @Override
+ boolean showToCurrentUser() {
// Child windows are evaluated based on their parent window.
final WindowState win = getTopParentWindow();
if (win.mAttrs.type < FIRST_SYSTEM_WINDOW
@@ -3151,12 +3209,12 @@
&& win.getFrameLw().right >= win.getStableFrameLw().right
&& win.getFrameLw().bottom >= win.getStableFrameLw().bottom) {
// Is a fullscreen window, like the clock alarm. Show to everyone.
- return false;
+ return true;
}
}
- return win.mShowToOwnerOnly
- && !mWmService.isCurrentProfileLocked(UserHandle.getUserId(win.mOwnerUid));
+ return win.showForAllUsers()
+ || mWmService.isCurrentProfile(UserHandle.getUserId(win.mOwnerUid));
}
private static void applyInsets(Region outRegion, Rect frame, Rect inset) {
@@ -3716,7 +3774,7 @@
pw.println(" mSession=" + mSession
+ " mClient=" + mClient.asBinder());
pw.println(prefix + "mOwnerUid=" + mOwnerUid
- + " mShowToOwnerOnly=" + mShowToOwnerOnly
+ + " showForAllUsers=" + showForAllUsers()
+ " package=" + mAttrs.packageName
+ " appop=" + AppOpsManager.opToName(mAppOp));
pw.println(prefix + "mAttrs=" + mAttrs.toString(prefix));
@@ -4160,7 +4218,7 @@
// This must be called while inside a transaction.
boolean performShowLocked() {
- if (isHiddenFromUserLocked()) {
+ if (!showToCurrentUser()) {
if (DEBUG_VISIBILITY) Slog.w(TAG, "hiding " + this + ", belonging to " + mOwnerUid);
clearPolicyVisibilityFlag(VISIBLE_FOR_USER);
return false;
diff --git a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
index 634d2f0..08ee0eb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java
@@ -80,11 +80,6 @@
}
@Override
- public boolean checkShowToOwnerOnly(WindowManager.LayoutParams attrs) {
- return false;
- }
-
- @Override
public void adjustConfigurationLw(Configuration config, int keyboardPresence,
int navigationPresence) {
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
index 6d23b2e..5028585 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowStateTests.java
@@ -522,7 +522,8 @@
public void testVisibilityChangeSwitchUser() {
final WindowState window = createWindow(null, TYPE_APPLICATION, "app");
window.mHasSurface = true;
- window.setShowToOwnerOnlyLocked(true);
+ spyOn(window);
+ doReturn(false).when(window).showForAllUsers();
mWm.mCurrentUserId = 1;
window.switchUser(mWm.mCurrentUserId);