Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fffdbd18 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Check the user visibility only when visible background user is enabled" into main

parents 8b7f1ef4 cc63cc92
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -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() {
+2 −0
Original line number Diff line number Diff line
@@ -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)
+4 −2
Original line number Diff line number Diff line
@@ -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();