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

Commit 249173da authored by Beverly Tai's avatar Beverly Tai Committed by Android (Google) Code Review
Browse files

Merge "AOD transitions to GONE (not LS) if security is NONE" into main

parents 753eafbf a8c82692
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.keyguard.domain.interactor
import android.animation.ValueAnimator
import com.android.app.animation.Interpolators
import com.android.app.tracing.coroutines.launch
import com.android.internal.widget.LockPatternUtils
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.dagger.qualifiers.Main
@@ -28,6 +29,7 @@ import com.android.systemui.keyguard.shared.model.BiometricUnlockModel.Companion
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.shared.model.TransitionModeOnCanceled
import com.android.systemui.power.domain.interactor.PowerInteractor
import com.android.systemui.user.domain.interactor.SelectedUserInteractor
import com.android.systemui.util.kotlin.Utils.Companion.sample
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
@@ -47,6 +49,8 @@ constructor(
    private val keyguardInteractor: KeyguardInteractor,
    powerInteractor: PowerInteractor,
    keyguardOcclusionInteractor: KeyguardOcclusionInteractor,
    private val lockPatternUtils: LockPatternUtils,
    private val selectedUserInteractor: SelectedUserInteractor,
) :
    TransitionInteractor(
        fromState = KeyguardState.AOD,
@@ -79,9 +83,8 @@ constructor(
                    startedKeyguardTransitionStep,
                    keyguardInteractor.biometricUnlockState,
                    keyguardInteractor.primaryBouncerShowing,
                    keyguardInteractor.isKeyguardShowing,
                    keyguardInteractor.isKeyguardOccluded,
                    keyguardInteractor.isKeyguardDismissible,
                    selectedUserInteractor.selectedUser,
                )
                .collect {
                    (
@@ -89,10 +92,11 @@ constructor(
                        startedStep,
                        biometricUnlockState,
                        primaryBouncerShowing,
                        _,
                        isKeyguardOccludedLegacy,
                        _) ->
                        currentUser,
                    ) ->
                    if (!maybeHandleInsecurePowerGesture()) {
                        val securityNone = lockPatternUtils.isLockScreenDisabled(currentUser)
                        val shouldTransitionToLockscreen =
                            if (KeyguardWmStateRefactor.isEnabled) {
                                // Check with the superclass to see if an occlusion transition is
@@ -101,11 +105,13 @@ constructor(
                                // completes.
                                !maybeStartTransitionToOccludedOrInsecureCamera() &&
                                    !isWakeAndUnlock(biometricUnlockState) &&
                                    !primaryBouncerShowing
                                    !primaryBouncerShowing &&
                                    !securityNone
                            } else {
                                !isKeyguardOccludedLegacy &&
                                    !isWakeAndUnlock(biometricUnlockState) &&
                                    !primaryBouncerShowing
                                    !primaryBouncerShowing &&
                                    !securityNone
                            }

                        // With the refactor enabled, maybeStartTransitionToOccludedOrInsecureCamera
+31 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.PowerManager
import android.platform.test.annotations.EnableFlags
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.android.internal.widget.lockPatternUtils
import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.keyguard.data.repository.FakeKeyguardTransitionRepository
@@ -53,6 +54,7 @@ import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.se
import com.android.systemui.power.domain.interactor.PowerInteractor.Companion.setAwakeForTest
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.testKosmos
import com.android.systemui.util.mockito.whenever
import junit.framework.Assert.assertEquals
import kotlin.test.Test
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -61,6 +63,7 @@ import kotlinx.coroutines.test.runCurrent
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mockito.reset
import org.mockito.Mockito.spy

@@ -300,4 +303,32 @@ class FromAodTransitionInteractorTest : SysuiTestCase() {
            assertThat(transitionRepository)
                .startedTransition(from = KeyguardState.AOD, to = KeyguardState.OCCLUDED)
        }

    @Test
    fun testTransitionToGone_onWakeUpFromAod_dismissibleKeyguard_securityNone() =
        testScope.runTest {
            whenever(kosmos.lockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(true)
            kosmos.fakeKeyguardRepository.setKeyguardDismissible(true)
            powerInteractor.setAwakeForTest()
            testScope.testScheduler.advanceTimeBy(100) // account for debouncing
            runCurrent()

            // We should head back to GONE since we started there.
            assertThat(transitionRepository)
                .startedTransition(from = KeyguardState.AOD, to = KeyguardState.GONE)
        }

    @Test
    fun testTransitionToGone_onWakeUpFromAod_dismissibleKeyguard_securitySwipe() =
        testScope.runTest {
            whenever(kosmos.lockPatternUtils.isLockScreenDisabled(anyInt())).thenReturn(false)
            kosmos.fakeKeyguardRepository.setKeyguardDismissible(true)
            powerInteractor.setAwakeForTest()
            testScope.testScheduler.advanceTimeBy(100) // account for debouncing
            runCurrent()

            // We should head back to GONE since we started there.
            assertThat(transitionRepository)
                .startedTransition(from = KeyguardState.AOD, to = KeyguardState.LOCKSCREEN)
        }
}
+2 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.util.DisplayMetrics
import android.view.LayoutInflater
import com.android.internal.logging.MetricsLogger
import com.android.internal.statusbar.IStatusBarService
import com.android.internal.widget.LockPatternUtils
import com.android.keyguard.KeyguardSecurityModel
import com.android.keyguard.KeyguardUpdateMonitor
import com.android.keyguard.KeyguardViewController
@@ -152,6 +153,7 @@ data class TestMocksModule(
    @get:Provides val displayMetrics: DisplayMetrics = mock(),
    @get:Provides val metricsLogger: MetricsLogger = mock(),
    @get:Provides val userManager: UserManager = mock(),
    @get:Provides val lockPatternUtils: LockPatternUtils = mock(),

    // system server mocks
    @get:Provides val mockStatusBarService: IStatusBarService = mock(),
+4 −0
Original line number Diff line number Diff line
@@ -16,12 +16,14 @@

package com.android.systemui.keyguard.domain.interactor

import com.android.internal.widget.lockPatternUtils
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.kosmos.testDispatcher
import com.android.systemui.power.domain.interactor.powerInteractor
import com.android.systemui.statusbar.domain.interactor.keyguardOcclusionInteractor
import com.android.systemui.user.domain.interactor.selectedUserInteractor

val Kosmos.fromAodTransitionInteractor by
    Kosmos.Fixture {
@@ -34,5 +36,7 @@ val Kosmos.fromAodTransitionInteractor by
            keyguardInteractor = keyguardInteractor,
            powerInteractor = powerInteractor,
            keyguardOcclusionInteractor = keyguardOcclusionInteractor,
            selectedUserInteractor = selectedUserInteractor,
            lockPatternUtils = lockPatternUtils,
        )
    }