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

Commit 9b15aed3 authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge "Filter inSecure camera launches" into main

parents f80c5fcb 87da270e
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -64,10 +64,10 @@ class CameraGestureHelperTest : SysuiTestCase() {
    @Mock lateinit var activityTaskManager: IActivityTaskManager
    @Mock lateinit var cameraIntents: CameraIntentsWrapper
    @Mock lateinit var contentResolver: ContentResolver
    @Mock lateinit var mSelectedUserInteractor: SelectedUserInteractor
    @Mock lateinit var selectedUserInteractor: SelectedUserInteractor
    @Mock lateinit var devicePolicyManager: DevicePolicyManager
    @Mock lateinit var lockscreenUserManager: NotificationLockscreenUserManager

    private val TEST_USER_ID = 1
    private lateinit var underTest: CameraGestureHelper

    @Before
@@ -93,7 +93,7 @@ class CameraGestureHelperTest : SysuiTestCase() {
                cameraIntents = cameraIntents,
                contentResolver = contentResolver,
                uiExecutor = MoreExecutors.directExecutor(),
                selectedUserInteractor = mSelectedUserInteractor,
                selectedUserInteractor = selectedUserInteractor,
                devicePolicyManager = devicePolicyManager,
                lockscreenUserManager = lockscreenUserManager,
            )
@@ -123,7 +123,8 @@ class CameraGestureHelperTest : SysuiTestCase() {
        isCameraActivityRunningOnTop: Boolean = false,
        isTaskListEmpty: Boolean = false,
    ) {
        whenever(lockscreenUserManager.getCurrentUserId()).thenReturn(1)
        whenever(lockscreenUserManager.getCurrentUserId()).thenReturn(TEST_USER_ID)
        whenever(selectedUserInteractor.getSelectedUserId()).thenReturn(TEST_USER_ID)
        if (isCameraAllowedByAdmin) {
            whenever(devicePolicyManager.getCameraDisabled(isNull(), any())).thenReturn(false)
            whenever(keyguardStateController.isMethodSecure).thenReturn(false)
@@ -135,6 +136,9 @@ class CameraGestureHelperTest : SysuiTestCase() {
            .thenReturn(installedCameraAppCount > 1)

        whenever(keyguardStateController.isMethodSecure).thenReturn(isUsingSecureScreenLockOption)
        whenever(keyguardStateController.isShowing())
            .thenReturn(true)
            .thenReturn(!isUsingSecureScreenLockOption)
        whenever(keyguardStateController.canDismissLockScreen())
            .thenReturn(!isUsingSecureScreenLockOption)

@@ -255,16 +259,13 @@ class CameraGestureHelperTest : SysuiTestCase() {
        assertActivityStarting(
            isSecure = true,
            source = source,
            moreThanOneCameraAppInstalled = true
            moreThanOneCameraAppInstalled = true,
        )
    }

    @Test
    fun launchCamera_multipleCameraAppsInstalled_usingNonSecureScreenLockOption() {
        prepare(
            isUsingSecureScreenLockOption = false,
            installedCameraAppCount = 2,
        )
        prepare(isUsingSecureScreenLockOption = false, installedCameraAppCount = 2)
        val source = 1337

        underTest.launchCamera(source)
@@ -272,7 +273,7 @@ class CameraGestureHelperTest : SysuiTestCase() {
        assertActivityStarting(
            isSecure = false,
            moreThanOneCameraAppInstalled = true,
            source = source
            source = source,
        )
    }

@@ -296,7 +297,7 @@ class CameraGestureHelperTest : SysuiTestCase() {
                    anyInt(),
                    isNull(),
                    any(),
                    anyInt()
                    anyInt(),
                )
        } else {
            verify(activityStarter).startActivity(intentCaptor.capture(), eq(false))
+16 −4
Original line number Diff line number Diff line
@@ -592,7 +592,10 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
                bouncerRepository.setAlternateVisible(false)
                // Keyguard is occluded when secure camera is active.
                keyguardRepository.setKeyguardOccluded(true)
                keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
                keyguardInteractor.onCameraLaunchDetected(
                    CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                    isSecureCamera = true,
                )
            }
        }

@@ -607,7 +610,10 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
            assertThat(canFaceAuthRun()).isTrue()

            // launch secure camera
            keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            keyguardInteractor.onCameraLaunchDetected(
                CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            keyguardRepository.setKeyguardOccluded(true)
            runCurrent()
            assertThat(canFaceAuthRun()).isFalse()
@@ -626,7 +632,10 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
            bouncerRepository.setAlternateVisible(false)

            // launch secure camera
            keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            keyguardInteractor.onCameraLaunchDetected(
                CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            keyguardRepository.setKeyguardOccluded(true)
            kosmos.sceneInteractor.snapToScene(Scenes.Lockscreen, "for-test")
            runCurrent()
@@ -948,7 +957,10 @@ class DeviceEntryFaceAuthRepositoryTest : SysuiTestCase() {
                bouncerRepository.setAlternateVisible(false)
                // Keyguard is occluded when secure camera is active.
                keyguardRepository.setKeyguardOccluded(true)
                keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
                keyguardInteractor.onCameraLaunchDetected(
                    CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                    isSecureCamera = true,
                )
            }
        }

+51 −8
Original line number Diff line number Diff line
@@ -92,16 +92,28 @@ class KeyguardInteractorTest : SysuiTestCase() {
            val cameraLaunchSource = collectLastValue(flow)
            runCurrent()

            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            assertThat(cameraLaunchSource()!!.type).isEqualTo(CameraLaunchType.POWER_DOUBLE_TAP)

            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_WIGGLE)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_WIGGLE,
                isSecureCamera = true,
            )
            assertThat(cameraLaunchSource()!!.type).isEqualTo(CameraLaunchType.WIGGLE)

            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_LIFT_TRIGGER,
                isSecureCamera = true,
            )
            assertThat(cameraLaunchSource()!!.type).isEqualTo(CameraLaunchType.LIFT_TRIGGER)

            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_QUICK_AFFORDANCE)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_QUICK_AFFORDANCE,
                isSecureCamera = true,
            )
            assertThat(cameraLaunchSource()!!.type).isEqualTo(CameraLaunchType.QUICK_AFFORDANCE)
        }

@@ -112,7 +124,10 @@ class KeyguardInteractorTest : SysuiTestCase() {
            val secureCameraActive = collectLastValue(underTest.isSecureCameraActive)
            runCurrent()

            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )

            assertThat(secureCameraActive()).isTrue()

@@ -133,7 +148,10 @@ class KeyguardInteractorTest : SysuiTestCase() {
            val secureCameraActive = collectLastValue(underTest.isSecureCameraActive)
            runCurrent()

            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            assertThat(secureCameraActive()).isTrue()

            // Keyguard is showing and not occluded
@@ -154,7 +172,10 @@ class KeyguardInteractorTest : SysuiTestCase() {
            runCurrent()

            // Launch camera
            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            assertThat(secureCameraActive()).isTrue()

            // Go back to keyguard
@@ -178,7 +199,10 @@ class KeyguardInteractorTest : SysuiTestCase() {
            runCurrent()

            // Launch camera
            underTest.onCameraLaunchDetected(StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            assertThat(secureCameraActive()).isTrue()

            // Show bouncer
@@ -192,6 +216,25 @@ class KeyguardInteractorTest : SysuiTestCase() {
            assertThat(secureCameraActive()).isFalse()
        }

    @Test
    fun secureCameraRemainFalseOnInsecureCameraLaunch() =
        testScope.runTest {
            val secureCameraActive = collectLastValue(underTest.isSecureCameraActive)
            runCurrent()

            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = false,
            )
            assertThat(secureCameraActive()).isFalse()

            underTest.onCameraLaunchDetected(
                StatusBarManager.CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            assertThat(secureCameraActive()).isTrue()
        }

    @Test
    @DisableFlags(FLAG_KEYGUARD_WM_STATE_REFACTOR)
    fun keyguardVisibilityIsDefinedAsKeyguardShowingButNotOccluded() = runTest {
+4 −1
Original line number Diff line number Diff line
@@ -1344,7 +1344,10 @@ class KeyguardTransitionScenariosTest(flags: FlagsParameterization?) : SysuiTest
            reset(transitionRepository)

            // ...AND WHEN the camera gesture is detected quickly afterwards
            keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            keyguardInteractor.onCameraLaunchDetected(
                CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )
            runCurrent()

            // THEN a transition from DOZING => OCCLUDED should occur
+16 −4
Original line number Diff line number Diff line
@@ -812,7 +812,10 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
                to = KeyguardState.OCCLUDED,
                testScope = testScope,
            )
            kosmos.keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            kosmos.keyguardInteractor.onCameraLaunchDetected(
                CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )

            assertThat(latest).isFalse()
        }
@@ -918,7 +921,10 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
                to = KeyguardState.OCCLUDED,
                testScope = testScope,
            )
            kosmos.keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            kosmos.keyguardInteractor.onCameraLaunchDetected(
                CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )

            assertThat(underTest.ongoingActivityChips.areChipsAllowed).isFalse()
        }
@@ -1653,7 +1659,10 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
                to = KeyguardState.OCCLUDED,
                testScope = testScope,
            )
            kosmos.keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            kosmos.keyguardInteractor.onCameraLaunchDetected(
                CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )

            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE)
            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE)
@@ -1671,7 +1680,10 @@ class HomeStatusBarViewModelImplTest : SysuiTestCase() {
            kosmos.sceneContainerRepository.snapToScene(Scenes.Lockscreen)
            // Secure camera is an occluding activity
            kosmos.keyguardOcclusionRepository.setShowWhenLockedActivityInfo(true, taskInfo = null)
            kosmos.keyguardInteractor.onCameraLaunchDetected(CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP)
            kosmos.keyguardInteractor.onCameraLaunchDetected(
                CAMERA_LAUNCH_SOURCE_POWER_DOUBLE_TAP,
                isSecureCamera = true,
            )

            assertThat(clockVisible!!.visibility).isEqualTo(View.INVISIBLE)
            assertThat(notifIconsVisible!!.visibility).isEqualTo(View.GONE)
Loading