Loading services/core/java/com/android/server/wm/DisplayContent.java +13 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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() { Loading services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) Loading services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +13 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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() { Loading
services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +2 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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) Loading
services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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(); Loading