Loading packages/SystemUI/src/com/android/systemui/flags/Flags.kt +0 −2 Original line number Diff line number Diff line Loading @@ -114,8 +114,6 @@ object Flags { // ** Flag retired ** // public static final BooleanFlag KEYGUARD_LAYOUT = // new BooleanFlag(200, true); // TODO(b/254512713): Tracking Bug @JvmField val LOCKSCREEN_ANIMATIONS = releasedFlag(201, "lockscreen_animations") // TODO(b/254512750): Tracking Bug val NEW_UNLOCK_SWIPE_ANIMATION = releasedFlag(202, "new_unlock_swipe_animation") Loading packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt +30 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.phone.BiometricUnlockController.WakeAndUnlockMode import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.policy.KeyguardStateController import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose Loading Loading @@ -88,6 +89,9 @@ interface KeyguardRepository { /** Observable for whether the bouncer is showing. */ val isBouncerShowing: Flow<Boolean> /** Is the always-on display available to be used? */ val isAodAvailable: Flow<Boolean> /** * Observable for whether we are in doze state. * Loading Loading @@ -182,6 +186,7 @@ constructor( private val keyguardStateController: KeyguardStateController, private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val dozeTransitionListener: DozeTransitionListener, private val dozeParameters: DozeParameters, private val authController: AuthController, private val dreamOverlayCallbackController: DreamOverlayCallbackController, ) : KeyguardRepository { Loading Loading @@ -220,6 +225,31 @@ constructor( } .distinctUntilChanged() override val isAodAvailable: Flow<Boolean> = conflatedCallbackFlow { val callback = object : DozeParameters.Callback { override fun onAlwaysOnChange() { trySendWithFailureLogging( dozeParameters.getAlwaysOn(), TAG, "updated isAodAvailable" ) } } dozeParameters.addCallback(callback) // Adding the callback does not send an initial update. trySendWithFailureLogging( dozeParameters.getAlwaysOn(), TAG, "initial isAodAvailable" ) awaitClose { dozeParameters.removeCallback(callback) } } .distinctUntilChanged() override val isKeyguardOccluded: Flow<Boolean> = conflatedCallbackFlow { val callback = Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt +4 −5 Original line number Diff line number Diff line Loading @@ -21,9 +21,9 @@ import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.DozeStateModel.Companion.isDozeOff import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessModel.Companion.isWakingOrStartingToWake import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlin.time.Duration Loading @@ -48,12 +48,11 @@ constructor( private fun listenForDozingToLockscreen() { scope.launch { keyguardInteractor.dozeTransitionModel keyguardInteractor.wakefulnessModel .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (dozeTransitionModel, lastStartedTransition) = pair .collect { (wakefulnessModel, lastStartedTransition) -> if ( isDozeOff(dozeTransitionModel.to) && isWakingOrStartingToWake(wakefulnessModel) && lastStartedTransition.to == KeyguardState.DOZING ) { keyguardTransitionRepository.startTransition( Loading packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt +24 −10 Original line number Diff line number Diff line Loading @@ -26,7 +26,10 @@ import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch @SysUISingleton Loading @@ -40,7 +43,7 @@ constructor( ) : TransitionInteractor(FromGoneTransitionInteractor::class.simpleName!!) { override fun start() { listenForGoneToAod() listenForGoneToAodOrDozing() listenForGoneToDreaming() } Loading @@ -56,7 +59,7 @@ constructor( name, KeyguardState.GONE, KeyguardState.DREAMING, getAnimator(), getAnimator(TO_DREAMING_DURATION), ) ) } Loading @@ -64,12 +67,18 @@ constructor( } } private fun listenForGoneToAod() { private fun listenForGoneToAodOrDozing() { scope.launch { keyguardInteractor.wakefulnessModel .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair) .collect { pair -> val (wakefulnessState, keyguardState) = pair .sample( combine( keyguardTransitionInteractor.finishedKeyguardState, keyguardInteractor.isAodAvailable, ::Pair ), ::toTriple ) .collect { (wakefulnessState, keyguardState, isAodAvailable) -> if ( keyguardState == KeyguardState.GONE && wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP Loading @@ -78,7 +87,11 @@ constructor( TransitionInfo( name, KeyguardState.GONE, KeyguardState.AOD, if (isAodAvailable) { KeyguardState.AOD } else { KeyguardState.DOZING }, getAnimator(), ) ) Loading @@ -87,14 +100,15 @@ constructor( } } private fun getAnimator(): ValueAnimator { private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { return ValueAnimator().apply { setInterpolator(Interpolators.LINEAR) setDuration(TRANSITION_DURATION_MS) setDuration(duration.inWholeMilliseconds) } } companion object { private const val TRANSITION_DURATION_MS = 500L private val DEFAULT_DURATION = 500.milliseconds val TO_DREAMING_DURATION = 933.milliseconds } } packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +22 −10 Original line number Diff line number Diff line Loading @@ -21,11 +21,11 @@ import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.StatusBarState.KEYGUARD import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.util.kotlin.sample import java.util.UUID Loading Loading @@ -54,7 +54,7 @@ constructor( listenForLockscreenToGone() listenForLockscreenToOccluded() listenForLockscreenToCamera() listenForLockscreenToAod() listenForLockscreenToAodOrDozing() listenForLockscreenToBouncer() listenForLockscreenToDreaming() listenForLockscreenToBouncerDragging() Loading Loading @@ -230,19 +230,31 @@ constructor( } } private fun listenForLockscreenToAod() { private fun listenForLockscreenToAodOrDozing() { scope.launch { keyguardInteractor .dozeTransitionTo(DozeStateModel.DOZE_AOD) .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (dozeToAod, lastStartedStep) = pair if (lastStartedStep.to == KeyguardState.LOCKSCREEN) { keyguardInteractor.wakefulnessModel .sample( combine( keyguardTransitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.isAodAvailable, ::Pair ), ::toTriple ) .collect { (wakefulnessState, lastStartedStep, isAodAvailable) -> if ( lastStartedStep.to == KeyguardState.LOCKSCREEN && wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP ) { keyguardTransitionRepository.startTransition( TransitionInfo( name, KeyguardState.LOCKSCREEN, KeyguardState.AOD, if (isAodAvailable) { KeyguardState.AOD } else { KeyguardState.DOZING }, getAnimator(), ) ) Loading Loading
packages/SystemUI/src/com/android/systemui/flags/Flags.kt +0 −2 Original line number Diff line number Diff line Loading @@ -114,8 +114,6 @@ object Flags { // ** Flag retired ** // public static final BooleanFlag KEYGUARD_LAYOUT = // new BooleanFlag(200, true); // TODO(b/254512713): Tracking Bug @JvmField val LOCKSCREEN_ANIMATIONS = releasedFlag(201, "lockscreen_animations") // TODO(b/254512750): Tracking Bug val NEW_UNLOCK_SWIPE_ANIMATION = releasedFlag(202, "new_unlock_swipe_animation") Loading
packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt +30 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.systemui.keyguard.shared.model.WakefulnessModel import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.statusbar.phone.BiometricUnlockController import com.android.systemui.statusbar.phone.BiometricUnlockController.WakeAndUnlockMode import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.policy.KeyguardStateController import javax.inject.Inject import kotlinx.coroutines.channels.awaitClose Loading Loading @@ -88,6 +89,9 @@ interface KeyguardRepository { /** Observable for whether the bouncer is showing. */ val isBouncerShowing: Flow<Boolean> /** Is the always-on display available to be used? */ val isAodAvailable: Flow<Boolean> /** * Observable for whether we are in doze state. * Loading Loading @@ -182,6 +186,7 @@ constructor( private val keyguardStateController: KeyguardStateController, private val keyguardUpdateMonitor: KeyguardUpdateMonitor, private val dozeTransitionListener: DozeTransitionListener, private val dozeParameters: DozeParameters, private val authController: AuthController, private val dreamOverlayCallbackController: DreamOverlayCallbackController, ) : KeyguardRepository { Loading Loading @@ -220,6 +225,31 @@ constructor( } .distinctUntilChanged() override val isAodAvailable: Flow<Boolean> = conflatedCallbackFlow { val callback = object : DozeParameters.Callback { override fun onAlwaysOnChange() { trySendWithFailureLogging( dozeParameters.getAlwaysOn(), TAG, "updated isAodAvailable" ) } } dozeParameters.addCallback(callback) // Adding the callback does not send an initial update. trySendWithFailureLogging( dozeParameters.getAlwaysOn(), TAG, "initial isAodAvailable" ) awaitClose { dozeParameters.removeCallback(callback) } } .distinctUntilChanged() override val isKeyguardOccluded: Flow<Boolean> = conflatedCallbackFlow { val callback = Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromDozingTransitionInteractor.kt +4 −5 Original line number Diff line number Diff line Loading @@ -21,9 +21,9 @@ import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.DozeStateModel.Companion.isDozeOff import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessModel.Companion.isWakingOrStartingToWake import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlin.time.Duration Loading @@ -48,12 +48,11 @@ constructor( private fun listenForDozingToLockscreen() { scope.launch { keyguardInteractor.dozeTransitionModel keyguardInteractor.wakefulnessModel .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (dozeTransitionModel, lastStartedTransition) = pair .collect { (wakefulnessModel, lastStartedTransition) -> if ( isDozeOff(dozeTransitionModel.to) && isWakingOrStartingToWake(wakefulnessModel) && lastStartedTransition.to == KeyguardState.DOZING ) { keyguardTransitionRepository.startTransition( Loading
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromGoneTransitionInteractor.kt +24 −10 Original line number Diff line number Diff line Loading @@ -26,7 +26,10 @@ import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.util.kotlin.sample import javax.inject.Inject import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine import kotlinx.coroutines.launch @SysUISingleton Loading @@ -40,7 +43,7 @@ constructor( ) : TransitionInteractor(FromGoneTransitionInteractor::class.simpleName!!) { override fun start() { listenForGoneToAod() listenForGoneToAodOrDozing() listenForGoneToDreaming() } Loading @@ -56,7 +59,7 @@ constructor( name, KeyguardState.GONE, KeyguardState.DREAMING, getAnimator(), getAnimator(TO_DREAMING_DURATION), ) ) } Loading @@ -64,12 +67,18 @@ constructor( } } private fun listenForGoneToAod() { private fun listenForGoneToAodOrDozing() { scope.launch { keyguardInteractor.wakefulnessModel .sample(keyguardTransitionInteractor.finishedKeyguardState, ::Pair) .collect { pair -> val (wakefulnessState, keyguardState) = pair .sample( combine( keyguardTransitionInteractor.finishedKeyguardState, keyguardInteractor.isAodAvailable, ::Pair ), ::toTriple ) .collect { (wakefulnessState, keyguardState, isAodAvailable) -> if ( keyguardState == KeyguardState.GONE && wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP Loading @@ -78,7 +87,11 @@ constructor( TransitionInfo( name, KeyguardState.GONE, KeyguardState.AOD, if (isAodAvailable) { KeyguardState.AOD } else { KeyguardState.DOZING }, getAnimator(), ) ) Loading @@ -87,14 +100,15 @@ constructor( } } private fun getAnimator(): ValueAnimator { private fun getAnimator(duration: Duration = DEFAULT_DURATION): ValueAnimator { return ValueAnimator().apply { setInterpolator(Interpolators.LINEAR) setDuration(TRANSITION_DURATION_MS) setDuration(duration.inWholeMilliseconds) } } companion object { private const val TRANSITION_DURATION_MS = 500L private val DEFAULT_DURATION = 500.milliseconds val TO_DREAMING_DURATION = 933.milliseconds } }
packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/FromLockscreenTransitionInteractor.kt +22 −10 Original line number Diff line number Diff line Loading @@ -21,11 +21,11 @@ import com.android.systemui.animation.Interpolators import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository import com.android.systemui.keyguard.shared.model.DozeStateModel import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.StatusBarState.KEYGUARD import com.android.systemui.keyguard.shared.model.TransitionInfo import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.shared.model.WakefulnessState import com.android.systemui.shade.data.repository.ShadeRepository import com.android.systemui.util.kotlin.sample import java.util.UUID Loading Loading @@ -54,7 +54,7 @@ constructor( listenForLockscreenToGone() listenForLockscreenToOccluded() listenForLockscreenToCamera() listenForLockscreenToAod() listenForLockscreenToAodOrDozing() listenForLockscreenToBouncer() listenForLockscreenToDreaming() listenForLockscreenToBouncerDragging() Loading Loading @@ -230,19 +230,31 @@ constructor( } } private fun listenForLockscreenToAod() { private fun listenForLockscreenToAodOrDozing() { scope.launch { keyguardInteractor .dozeTransitionTo(DozeStateModel.DOZE_AOD) .sample(keyguardTransitionInteractor.startedKeyguardTransitionStep, ::Pair) .collect { pair -> val (dozeToAod, lastStartedStep) = pair if (lastStartedStep.to == KeyguardState.LOCKSCREEN) { keyguardInteractor.wakefulnessModel .sample( combine( keyguardTransitionInteractor.startedKeyguardTransitionStep, keyguardInteractor.isAodAvailable, ::Pair ), ::toTriple ) .collect { (wakefulnessState, lastStartedStep, isAodAvailable) -> if ( lastStartedStep.to == KeyguardState.LOCKSCREEN && wakefulnessState.state == WakefulnessState.STARTING_TO_SLEEP ) { keyguardTransitionRepository.startTransition( TransitionInfo( name, KeyguardState.LOCKSCREEN, KeyguardState.AOD, if (isAodAvailable) { KeyguardState.AOD } else { KeyguardState.DOZING }, getAnimator(), ) ) Loading