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

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

Merge changes I8c7b17c9,I2e3f2fc4 into main

* changes:
  Remove delayed NSSL visibility
  Add support for more transitions
parents caa478c8 70bc7fb1
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -30,6 +30,8 @@ import com.android.systemui.communal.shared.model.CommunalSceneKey
import com.android.systemui.communal.shared.model.ObservableCommunalTransitionState
import com.android.systemui.communal.shared.model.ObservableCommunalTransitionState
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.coroutines.collectLastValue
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.deviceentry.data.repository.fakeDeviceEntryRepository
import com.android.systemui.flags.Flags
import com.android.systemui.flags.fakeFeatureFlagsClassic
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.fakeKeyguardTransitionRepository
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
@@ -57,7 +59,10 @@ import org.junit.runner.RunWith
@SmallTest
@SmallTest
@RunWith(AndroidJUnit4::class)
@RunWith(AndroidJUnit4::class)
class KeyguardRootViewModelTest : SysuiTestCase() {
class KeyguardRootViewModelTest : SysuiTestCase() {
    private val kosmos = testKosmos()
    private val kosmos =
        testKosmos().apply {
            fakeFeatureFlagsClassic.apply { set(Flags.REFACTOR_KEYGUARD_DISMISS_INTENT, false) }
        }
    private val testScope = kosmos.testScope
    private val testScope = kosmos.testScope
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val keyguardTransitionRepository = kosmos.fakeKeyguardTransitionRepository
    private val keyguardInteractor = kosmos.keyguardInteractor
    private val keyguardInteractor = kosmos.keyguardInteractor
+13 −5
Original line number Original line Diff line number Diff line
@@ -109,8 +109,12 @@ public class KeyguardVisibilityHelper {
                animProps.setDelay(0).setDuration(160);
                animProps.setDelay(0).setDuration(160);
                log("goingToFullShade && !keyguardFadingAway");
                log("goingToFullShade && !keyguardFadingAway");
            }
            }
            if (KeyguardShadeMigrationNssl.isEnabled()) {
                log("Using LockscreenToGoneTransition 1");
            } else {
                PropertyAnimator.setProperty(
                PropertyAnimator.setProperty(
                        mView, AnimatableProperty.ALPHA, 0f, animProps, true /* animate */);
                        mView, AnimatableProperty.ALPHA, 0f, animProps, true /* animate */);
            }
        } else if (oldStatusBarState == StatusBarState.SHADE_LOCKED && statusBarState == KEYGUARD) {
        } else if (oldStatusBarState == StatusBarState.SHADE_LOCKED && statusBarState == KEYGUARD) {
            mView.setVisibility(View.VISIBLE);
            mView.setVisibility(View.VISIBLE);
            mKeyguardViewVisibilityAnimating = true;
            mKeyguardViewVisibilityAnimating = true;
@@ -178,11 +182,15 @@ public class KeyguardVisibilityHelper {
                log("Direct set Visibility to VISIBLE");
                log("Direct set Visibility to VISIBLE");
                mView.setVisibility(View.VISIBLE);
                mView.setVisibility(View.VISIBLE);
            }
            }
        } else {
            if (KeyguardShadeMigrationNssl.isEnabled()) {
                log("Using LockscreenToGoneTransition 2");
            } else {
            } else {
                log("Direct set Visibility to GONE");
                log("Direct set Visibility to GONE");
                mView.setVisibility(View.GONE);
                mView.setVisibility(View.GONE);
                mView.setAlpha(1f);
                mView.setAlpha(1f);
            }
            }
        }


        mLastOccludedState = isOccluded;
        mLastOccludedState = isOccluded;
    }
    }
+16 −12
Original line number Original line Diff line number Diff line
@@ -24,15 +24,15 @@ import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.data.repository.KeyguardTransitionRepository
import com.android.systemui.keyguard.shared.model.KeyguardState
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.util.kotlin.Utils.Companion.sample
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine
import com.android.systemui.util.kotlin.sample
import com.android.systemui.util.kotlin.sample as sampleUtil
import com.android.wm.shell.animation.Interpolators
import com.android.wm.shell.animation.Interpolators
import javax.inject.Inject
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.sample
import kotlinx.coroutines.launch
import kotlinx.coroutines.launch


@SysUISingleton
@SysUISingleton
@@ -62,14 +62,17 @@ constructor(
        listenForTransitionToCamera(scope, keyguardInteractor)
        listenForTransitionToCamera(scope, keyguardInteractor)
    }
    }


    @FlowPreview
    private fun listenForAlternateBouncerToLockscreenHubAodOrDozing() {
    private fun listenForAlternateBouncerToLockscreenHubAodOrDozing() {
        scope.launch {
        scope.launch {
            keyguardInteractor.alternateBouncerShowing
            keyguardInteractor.alternateBouncerShowing
                // Add a slight delay, as alternateBouncer and primaryBouncer showing event changes
                // Add a slight delay, as alternateBouncer and primaryBouncer showing event changes
                // will arrive with a small gap in time. This prevents a transition to LOCKSCREEN
                // will arrive with a small gap in time. This prevents a transition to LOCKSCREEN
                // happening prematurely.
                // happening prematurely.
                .onEach { delay(50) }
                // This should eventually be removed in favor of
                .sample(
                // [KeyguardTransitionInteractor#startDismissKeyguardTransition]
                .sample(150L)
                .sampleCombine(
                    keyguardInteractor.primaryBouncerShowing,
                    keyguardInteractor.primaryBouncerShowing,
                    startedKeyguardTransitionStep,
                    startedKeyguardTransitionStep,
                    powerInteractor.isAwake,
                    powerInteractor.isAwake,
@@ -111,8 +114,9 @@ constructor(


    private fun listenForAlternateBouncerToGone() {
    private fun listenForAlternateBouncerToGone() {
        scope.launch {
        scope.launch {
            keyguardInteractor.isKeyguardGoingAway.sample(finishedKeyguardState, ::Pair).collect {
            keyguardInteractor.isKeyguardGoingAway
                (isKeyguardGoingAway, keyguardState) ->
                .sampleUtil(finishedKeyguardState, ::Pair)
                .collect { (isKeyguardGoingAway, keyguardState) ->
                    if (isKeyguardGoingAway && keyguardState == KeyguardState.ALTERNATE_BOUNCER) {
                    if (isKeyguardGoingAway && keyguardState == KeyguardState.ALTERNATE_BOUNCER) {
                        startTransitionTo(KeyguardState.GONE)
                        startTransitionTo(KeyguardState.GONE)
                    }
                    }
@@ -123,7 +127,7 @@ constructor(
    private fun listenForAlternateBouncerToPrimaryBouncer() {
    private fun listenForAlternateBouncerToPrimaryBouncer() {
        scope.launch {
        scope.launch {
            keyguardInteractor.primaryBouncerShowing
            keyguardInteractor.primaryBouncerShowing
                .sample(startedKeyguardTransitionStep, ::Pair)
                .sampleUtil(startedKeyguardTransitionStep, ::Pair)
                .collect { (isPrimaryBouncerShowing, startedKeyguardState) ->
                .collect { (isPrimaryBouncerShowing, startedKeyguardState) ->
                    if (
                    if (
                        isPrimaryBouncerShowing &&
                        isPrimaryBouncerShowing &&
+9 −0
Original line number Original line Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.systemui.keyguard.shared.model.ScrimAlpha
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import javax.inject.Inject
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.Flow


@@ -46,6 +47,14 @@ constructor(
            to = KeyguardState.GONE,
            to = KeyguardState.GONE,
        )
        )


    val lockscreenAlpha: Flow<Float> =
        transitionAnimation.sharedFlow(
            duration = 200.milliseconds,
            onStep = { 1 - it },
            onFinish = { 0f },
            onCancel = { 1f },
        )

    /** Scrim alpha values */
    /** Scrim alpha values */
    val scrimAlpha: Flow<ScrimAlpha> =
    val scrimAlpha: Flow<ScrimAlpha> =
        bouncerToGoneFlows.scrimAlpha(TO_GONE_DURATION, ALTERNATE_BOUNCER)
        bouncerToGoneFlows.scrimAlpha(TO_GONE_DURATION, ALTERNATE_BOUNCER)
+7 −1
Original line number Original line Diff line number Diff line
@@ -28,6 +28,9 @@ import com.android.systemui.keyguard.domain.interactor.BurnInInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.BurnInModel
import com.android.systemui.keyguard.shared.model.BurnInModel
import com.android.systemui.keyguard.shared.model.KeyguardState.ALTERNATE_BOUNCER
import com.android.systemui.keyguard.shared.model.KeyguardState.AOD
import com.android.systemui.keyguard.shared.model.KeyguardState.GONE
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.plugins.clocks.ClockController
import com.android.systemui.res.R
import com.android.systemui.res.R
import javax.inject.Inject
import javax.inject.Inject
@@ -117,7 +120,10 @@ constructor(
    ): Flow<BurnInModel> {
    ): Flow<BurnInModel> {
        return combine(
        return combine(
            merge(
            merge(
                    keyguardTransitionInteractor.goneToAodTransition.map { it.value },
                    keyguardTransitionInteractor.transition(GONE, AOD).map { it.value },
                    keyguardTransitionInteractor.transition(ALTERNATE_BOUNCER, AOD).map {
                        it.value
                    },
                    keyguardTransitionInteractor.dozeAmountTransition.map { it.value },
                    keyguardTransitionInteractor.dozeAmountTransition.map { it.value },
                )
                )
                .map { dozeAmount -> Interpolators.FAST_OUT_SLOW_IN.getInterpolation(dozeAmount) },
                .map { dozeAmount -> Interpolators.FAST_OUT_SLOW_IN.getInterpolation(dozeAmount) },
Loading