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

Commit 99fa3206 authored by Grace Cheng's avatar Grace Cheng Committed by Android (Google) Code Review
Browse files

Merge "Implements disabled keyguard transitions + security features for secure lock" into main

parents 59b81673 a9c62dcb
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.systemui.bouncer.domain.interactor
package com.android.systemui.bouncer.domain.interactor


import android.platform.test.annotations.EnableFlags
import android.security.Flags.FLAG_SECURE_LOCK_DEVICE
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.SysuiTestCase
@@ -31,9 +33,11 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.securelockdevice.data.repository.fakeSecureLockDeviceRepository
import com.android.systemui.testKosmos
import com.android.systemui.testKosmos
import com.google.common.truth.Truth.assertThat
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertFalse
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Assert.assertTrue
@@ -86,6 +90,18 @@ class AlternateBouncerInteractorTest : SysuiTestCase() {
            assertThat(canShowAlternateBouncer).isFalse()
            assertThat(canShowAlternateBouncer).isFalse()
        }
        }


    @EnableFlags(FLAG_SECURE_LOCK_DEVICE)
    @Test
    fun canShowAlternateBouncerForFingerprint_falseDuringSecureLockDevice() =
        kosmos.testScope.runTest {
            kosmos.givenAlternateBouncerSupported()
            val canShowAlternateBouncer by collectLastValue(underTest.canShowAlternateBouncer)
            kosmos.fakeSecureLockDeviceRepository.onSecureLockDeviceEnabled()
            runCurrent()

            assertThat(canShowAlternateBouncer).isFalse()
        }

    @Test
    @Test
    fun hide_wasPreviouslyShowing() {
    fun hide_wasPreviouslyShowing() {
        kosmos.keyguardBouncerRepository.setAlternateVisible(true)
        kosmos.keyguardBouncerRepository.setAlternateVisible(true)
+2 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.res.R
import com.android.systemui.res.R
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.securelockdevice.domain.interactor.secureLockDeviceInteractor
import com.android.systemui.shade.pulsingGestureListener
import com.android.systemui.shade.pulsingGestureListener
import com.android.systemui.shared.settings.data.repository.SecureSettingsRepository
import com.android.systemui.shared.settings.data.repository.SecureSettingsRepository
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
@@ -443,6 +444,7 @@ class KeyguardTouchHandlingInteractorTest : SysuiTestCase() {
                powerManager = powerManager,
                powerManager = powerManager,
                systemClock = kosmos.fakeSystemClock,
                systemClock = kosmos.fakeSystemClock,
                pointerDeviceRepository = kosmos.pointerDeviceRepository,
                pointerDeviceRepository = kosmos.pointerDeviceRepository,
                secureLockDeviceInteractor = { kosmos.secureLockDeviceInteractor },
            )
            )
        setUpState()
        setUpState()
    }
    }
+9 −3
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.domain.interactor.SceneInteractor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.securelockdevice.domain.interactor.SecureLockDeviceInteractor
import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
import dagger.Lazy
import dagger.Lazy
import javax.inject.Inject
import javax.inject.Inject
@@ -60,6 +61,7 @@ constructor(
    keyguardTransitionInteractor: Lazy<KeyguardTransitionInteractor>,
    keyguardTransitionInteractor: Lazy<KeyguardTransitionInteractor>,
    displayStateInteractor: Lazy<DisplayStateInteractor>,
    displayStateInteractor: Lazy<DisplayStateInteractor>,
    sceneInteractor: Lazy<SceneInteractor>,
    sceneInteractor: Lazy<SceneInteractor>,
    secureLockDeviceInteractor: Lazy<SecureLockDeviceInteractor>,
    @Application scope: CoroutineScope,
    @Application scope: CoroutineScope,
) {
) {
    private var receivedDownTouch = false
    private var receivedDownTouch = false
@@ -105,10 +107,14 @@ constructor(
                    combine(
                    combine(
                            keyguardTransitionInteractor.get().currentKeyguardState,
                            keyguardTransitionInteractor.get().currentKeyguardState,
                            sceneInteractor.get().currentScene,
                            sceneInteractor.get().currentScene,
                            ::Pair,
                            secureLockDeviceInteractor.get().isSecureLockDeviceEnabled,
                            ::Triple,
                        )
                        )
                        .flatMapLatest { (currentKeyguardState, transitionState) ->
                        .flatMapLatest {
                            if (currentKeyguardState == KeyguardState.GONE) {
                            (currentKeyguardState, transitionState, secureLockDeviceEnabled) ->
                            if (secureLockDeviceEnabled) {
                                flowOf(false)
                            } else if (currentKeyguardState == KeyguardState.GONE) {
                                flowOf(false)
                                flowOf(false)
                            } else if (
                            } else if (
                                SceneContainerFlag.isEnabled && transitionState == Scenes.Gone
                                SceneContainerFlag.isEnabled && transitionState == Scenes.Gone
+16 −4
Original line number Original line Diff line number Diff line
@@ -40,12 +40,14 @@ import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.res.R
import com.android.systemui.res.R
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.securelockdevice.domain.interactor.SecureLockDeviceInteractor
import com.android.systemui.shade.PulsingGestureListener
import com.android.systemui.shade.PulsingGestureListener
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.shade.ShadeDisplayAware
import com.android.systemui.shared.settings.data.repository.SecureSettingsRepository
import com.android.systemui.shared.settings.data.repository.SecureSettingsRepository
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper
import com.android.systemui.statusbar.policy.AccessibilityManagerWrapper
import com.android.systemui.util.time.SystemClock
import com.android.systemui.util.time.SystemClock
import dagger.Lazy
import javax.inject.Inject
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.Job
@@ -83,6 +85,7 @@ constructor(
    private val powerManager: PowerManager,
    private val powerManager: PowerManager,
    private val systemClock: SystemClock,
    private val systemClock: SystemClock,
    private val pointerDeviceRepository: PointerDeviceRepository,
    private val pointerDeviceRepository: PointerDeviceRepository,
    secureLockDeviceInteractor: Lazy<SecureLockDeviceInteractor>,
) {
) {
    private val _udfpsAccessibilityOverlayBounds: MutableStateFlow<Rect?> = MutableStateFlow(null)
    private val _udfpsAccessibilityOverlayBounds: MutableStateFlow<Rect?> = MutableStateFlow(null)


@@ -100,8 +103,14 @@ constructor(
                combine(
                combine(
                    transitionInteractor.isFinishedIn(KeyguardState.LOCKSCREEN),
                    transitionInteractor.isFinishedIn(KeyguardState.LOCKSCREEN),
                    repository.isQuickSettingsVisible,
                    repository.isQuickSettingsVisible,
                ) { isFullyTransitionedToLockScreen, isQuickSettingsVisible ->
                    secureLockDeviceInteractor.get().isSecureLockDeviceEnabled,
                    isFullyTransitionedToLockScreen && !isQuickSettingsVisible
                ) {
                    isFullyTransitionedToLockScreen,
                    isQuickSettingsVisible,
                    isSecureLockDeviceEnabled ->
                    isFullyTransitionedToLockScreen &&
                        !isQuickSettingsVisible &&
                        !isSecureLockDeviceEnabled
                }
                }
            } else {
            } else {
                flowOf(false)
                flowOf(false)
@@ -119,13 +128,16 @@ constructor(
                    transitionInteractor.transitionValue(KeyguardState.LOCKSCREEN),
                    transitionInteractor.transitionValue(KeyguardState.LOCKSCREEN),
                    repository.isQuickSettingsVisible,
                    repository.isQuickSettingsVisible,
                    isDoubleTapSettingEnabled(),
                    isDoubleTapSettingEnabled(),
                    secureLockDeviceInteractor.get().isSecureLockDeviceEnabled,
                ) {
                ) {
                    isFullyTransitionedToLockScreen,
                    isFullyTransitionedToLockScreen,
                    isQuickSettingsVisible,
                    isQuickSettingsVisible,
                    isDoubleTapSettingEnabled ->
                    isDoubleTapSettingEnabled,
                    isSecureLockDeviceEnabled ->
                    isFullyTransitionedToLockScreen == 1f &&
                    isFullyTransitionedToLockScreen == 1f &&
                        !isQuickSettingsVisible &&
                        !isQuickSettingsVisible &&
                        isDoubleTapSettingEnabled
                        isDoubleTapSettingEnabled &&
                        !isSecureLockDeviceEnabled
                }
                }
            } else {
            } else {
                flowOf(false)
                flowOf(false)
+2 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInterac
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.testScope
import com.android.systemui.kosmos.testScope
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.scene.domain.interactor.sceneInteractor
import com.android.systemui.securelockdevice.domain.interactor.secureLockDeviceInteractor


val Kosmos.alternateBouncerInteractor: AlternateBouncerInteractor by
val Kosmos.alternateBouncerInteractor: AlternateBouncerInteractor by
    Kosmos.Fixture {
    Kosmos.Fixture {
@@ -37,6 +38,7 @@ val Kosmos.alternateBouncerInteractor: AlternateBouncerInteractor by
            scope = testScope.backgroundScope,
            scope = testScope.backgroundScope,
            sceneInteractor = { sceneInteractor },
            sceneInteractor = { sceneInteractor },
            displayStateInteractor = { displayStateInteractor },
            displayStateInteractor = { displayStateInteractor },
            secureLockDeviceInteractor = { secureLockDeviceInteractor },
        )
        )
    }
    }


Loading