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

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

Merge "[RESTRICT AUTOMERGE] Update the visibility of activities on sleeping...

Merge "[RESTRICT AUTOMERGE] Update the visibility of activities on sleeping display" into rvc-d1-dev
parents f1fa5509 31fc73a7
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -4578,15 +4578,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
            return false;
        }

        // Check if the activity is on a sleeping display, and if it can turn it ON.
        if (getDisplay().isSleeping()) {
            final boolean canTurnScreenOn = !mSetToSleep || canTurnScreenOn()
                    || canShowWhenLocked() || containsDismissKeyguardWindow();
            if (!canTurnScreenOn) {
                return false;
            }
        }

        // Now check whether it's really visible depending on Keyguard state, and update
        // {@link ActivityStack} internal states.
        // Inform the method if this activity is the top activity of this stack, but exclude the
@@ -4597,6 +4588,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        final boolean visibleIgnoringDisplayStatus = stack.checkKeyguardVisibility(this,
                visibleIgnoringKeyguard, isTop && isTopNotPinnedStack);

        // Check if the activity is on a sleeping display, and if it can turn it ON.
        // TODO(b/163993448): Do not make activity visible before display awake.
        if (visibleIgnoringDisplayStatus && getDisplay().isSleeping()) {
            return !mSetToSleep || canTurnScreenOn();
        }

        return visibleIgnoringDisplayStatus;
    }

+28 −0
Original line number Diff line number Diff line
@@ -1099,6 +1099,34 @@ public class ActivityRecordTests extends ActivityTestsBase {
        verify(topActivity).destroyIfPossible(anyString());
    }

    /**
     * Verify the visibility of a show-when-locked and dismiss keyguard activity on sleeping
     * display.
     */
    @Test
    public void testDisplaySleeping_activityInvisible() {
        final KeyguardController keyguardController =
                mActivity.mStackSupervisor.getKeyguardController();
        doReturn(true).when(keyguardController).isKeyguardLocked();
        final ActivityRecord topActivity = new ActivityBuilder(mService).setTask(mTask).build();
        topActivity.mVisibleRequested = true;
        topActivity.nowVisible = true;
        topActivity.setState(RESUMED, "test" /*reason*/);
        doReturn(true).when(topActivity).containsDismissKeyguardWindow();
        doCallRealMethod().when(mRootWindowContainer).ensureActivitiesVisible(
                any() /* starting */, anyInt() /* configChanges */,
                anyBoolean() /* preserveWindows */, anyBoolean() /* notifyClients */);
        topActivity.setShowWhenLocked(true);

        // Verify the top activity is occluded keyguard.
        assertEquals(topActivity, mStack.topRunningActivity());
        assertTrue(mStack.topActivityOccludesKeyguard());

        final DisplayContent display = mActivity.mDisplayContent;
        doReturn(true).when(display).isSleeping();
        assertFalse(topActivity.shouldBeVisible());
    }

    /**
     * Verify that complete finish request for a show-when-locked activity must ensure the
     * keyguard occluded state being updated.