diff options
| author | 2024-04-12 20:47:57 +0000 | |
|---|---|---|
| committer | 2024-04-12 20:47:57 +0000 | |
| commit | fffdbd18a1ed6faebabfe8db4431723ecc9acbca (patch) | |
| tree | b825e342a2b8b75768e9c6249d2243032a66c39b | |
| parent | 8b7f1ef4b04718a6e99033abe40439e0aa035209 (diff) | |
| parent | cc63cc928401c3a8bcbfa9b2d0760bbae021919c (diff) | |
Merge "Check the user visibility only when visible background user is enabled" into main
3 files changed, 19 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 739f76e2bdc7..87c5b7b8a120 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -197,6 +197,7 @@ import android.os.RemoteException; import android.os.SystemClock; import android.os.Trace; import android.os.UserHandle; +import android.os.UserManager; import android.os.WorkSource; import android.provider.Settings; import android.util.ArrayMap; @@ -289,6 +290,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp static final float INVALID_DPI = 0.0f; + private final boolean mVisibleBackgroundUserEnabled = + UserManager.isVisibleBackgroundUsersEnabled(); + @IntDef(prefix = { "FORCE_SCALING_MODE_" }, value = { FORCE_SCALING_MODE_AUTO, FORCE_SCALING_MODE_DISABLED @@ -2698,11 +2702,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp * Returns true if the specified UID has access to this display. */ boolean hasAccess(int uid) { - int userId = UserHandle.getUserId(uid); - boolean isUserVisibleOnDisplay = mWmService.mUmInternal.isUserVisible( - userId, mDisplayId); - return mDisplay.hasAccess(uid) - && (userId == UserHandle.USER_SYSTEM || isUserVisibleOnDisplay); + if (!mDisplay.hasAccess(uid)) { + return false; + } + if (!mVisibleBackgroundUserEnabled) { + return true; + } + final int userId = UserHandle.getUserId(uid); + return userId == UserHandle.USER_SYSTEM + || mWmService.mUmInternal.isUserVisible(userId, mDisplayId); } boolean isPrivate() { diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java index 413d003ae7aa..b9fe0745ef4c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java @@ -68,6 +68,7 @@ import android.os.PowerManagerInternal; import android.os.PowerSaveState; import android.os.StrictMode; import android.os.UserHandle; +import android.os.UserManager; import android.provider.DeviceConfig; import android.util.Log; import android.view.DisplayInfo; @@ -194,6 +195,7 @@ public class SystemServicesTestRule implements TestRule { mMockitoSession = mockitoSession() .mockStatic(LocalServices.class, spyStubOnly) .mockStatic(DeviceConfig.class, spyStubOnly) + .mockStatic(UserManager.class, spyStubOnly) .mockStatic(SurfaceControl.class, mockStubOnly) .mockStatic(DisplayControl.class, mockStubOnly) .mockStatic(LockGuard.class, mockStubOnly) diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java index 50db99ea6dfc..5fe71a181c0f 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java @@ -25,7 +25,6 @@ import static android.permission.flags.Flags.FLAG_SENSITIVE_NOTIFICATION_APP_PRO import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.FLAG_OWN_FOCUS; import static android.view.Display.INVALID_DISPLAY; -import static android.view.flags.Flags.FLAG_SENSITIVE_CONTENT_APP_PROTECTION; import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.FLAG_SECURE; import static android.view.WindowManager.LayoutParams.INPUT_FEATURE_SENSITIVE_FOR_TRACING; @@ -38,6 +37,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; 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_TOAST; +import static android.view.flags.Flags.FLAG_SENSITIVE_CONTENT_APP_PROTECTION; import static android.window.DisplayAreaOrganizer.FEATURE_VENDOR_FIRST; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer; @@ -82,6 +82,7 @@ import android.os.InputConfig; import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; +import android.os.UserManager; import android.platform.test.annotations.Presubmit; import android.platform.test.annotations.RequiresFlagsDisabled; import android.platform.test.annotations.RequiresFlagsEnabled; @@ -1304,7 +1305,8 @@ public class WindowManagerServiceTests extends WindowTestsBase { } @Test - public void testAddOverlayWindowToUnassignedDisplay_notAllowed() { + public void testAddOverlayWindowToUnassignedDisplay_notAllowed_ForVisibleBackgroundUsers() { + doReturn(true).when(() -> UserManager.isVisibleBackgroundUsersEnabled()); int uid = 100000; // uid for non-system user Session session = createTestSession(mAtm, 1234 /* pid */, uid); DisplayContent dc = createNewDisplay(); |