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

Commit a8c82692 authored by Beverly's avatar Beverly
Browse files

AOD transitions to GONE (not LS) if security is NONE

If the keyguard is dismissible, then AOD should transition
to GONE, not the LOCKSCREEN.

Test: Set security setting to NONE and enable AOD. Observe
the KeyguardTransitionRepository log goes from AOD => GONE
when the power button is pressed on AOD.
Bug: 335673842
Flag: None

Change-Id: Ief92ac2d376705b559206a0266ae92a27192144e
parent 6fd098cb
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,
        )
    }