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

Commit 341220fd authored by Craig Mautner's avatar Craig Mautner
Browse files

Use parent window to evaluate show-to-all-users.

When a window is attached to another window use the parent window's
attributes to determine whether the child window should be shown
to all users.

Bug: 7328633 fixed.
Change-Id: I9601c149af87f624378e6895063bb3179d4f845e
parent 964629ac
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -1038,18 +1038,26 @@ final class WindowState implements WindowManagerPolicy.WindowState {
    }

    boolean isHiddenFromUserLocked() {
        // Attached windows are evaluated based on the window that they are attached to.
        WindowState win = this;
        while (win.mAttachedWindow != null) {
            win = win.mAttachedWindow;
        }
        if (win.mAttrs.type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW
                && win.mAppToken != null && win.mAppToken.showWhenLocked) {
            // Save some cycles by not calling getDisplayInfo unless it is an application
            // window intended for all users.
        if (mAttrs.type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW
                && mAppToken != null && mAppToken.showWhenLocked) {
            final DisplayInfo displayInfo = mDisplayContent.getDisplayInfo();
            if (isFullscreen(displayInfo.appWidth, displayInfo.appHeight)) {
            final DisplayInfo displayInfo = win.mDisplayContent.getDisplayInfo();
            if (win.mFrame.left <= 0 && win.mFrame.top <= 0
                    && win.mFrame.right >= displayInfo.appWidth
                    && win.mFrame.bottom >= displayInfo.appHeight) {
                // Is a fullscreen window, like the clock alarm. Show to everyone.
                return false;
            }
        }

        return mShowToOwnerOnly && UserHandle.getUserId(mOwnerUid) != mService.mCurrentUserId;
        return win.mShowToOwnerOnly
                && UserHandle.getUserId(win.mOwnerUid) != mService.mCurrentUserId;
    }

    private static void applyInsets(Region outRegion, Rect frame, Rect inset) {