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

Commit 4f31768d authored by Josh Tsuji's avatar Josh Tsuji
Browse files

Emit notificationsAlpha=0f earlier in the OCCLUDED->LS transition.

This workaround is required until we tie shade expansion to keyguard transitions (tracking in b/332946323).

Fixes: 332877794
Test: atest SystemUITests
Test: launch camera w/ notifs and then go back
Flag: ACONFIG com.android.systemui.migrate_clocks_to_blueprint TEAMFOOD
Change-Id: I3c71927f26a218e8b2b7e3ceea99cf8ba79d828f
parent 065e8c4a
Loading
Loading
Loading
Loading
+30 −5
Original line number Diff line number Diff line
@@ -21,15 +21,21 @@ import com.android.systemui.common.ui.domain.interactor.ConfigurationInteractor
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.deviceentry.domain.interactor.DeviceEntryUdfpsInteractor
import com.android.systemui.keyguard.domain.interactor.FromOccludedTransitionInteractor.Companion.TO_LOCKSCREEN_DURATION
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInteractor
import com.android.systemui.keyguard.shared.model.KeyguardState
import com.android.systemui.keyguard.ui.KeyguardTransitionAnimationFlow
import com.android.systemui.keyguard.ui.transitions.DeviceEntryIconTransition
import com.android.systemui.res.R
import com.android.systemui.util.kotlin.pairwise
import javax.inject.Inject
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.merge

/**
 * Breaks down OCCLUDED->LOCKSCREEN transition into discrete steps for corresponding views to
@@ -43,6 +49,8 @@ constructor(
    deviceEntryUdfpsInteractor: DeviceEntryUdfpsInteractor,
    configurationInteractor: ConfigurationInteractor,
    animationFlow: KeyguardTransitionAnimationFlow,
    keyguardInteractor: KeyguardInteractor,
    keyguardTransitionInteractor: KeyguardTransitionInteractor,
) : DeviceEntryIconTransition {

    private val transitionAnimation =
@@ -74,11 +82,28 @@ constructor(

    /** Lockscreen views alpha */
    val lockscreenAlpha: Flow<Float> =
        merge(
            transitionAnimation.sharedFlow(
                startTime = 233.milliseconds,
                duration = 250.milliseconds,
                onStep = { it },
                name = "OCCLUDED->LOCKSCREEN: lockscreenAlpha",
            ),
            // Required to fix a bug where the shade expands while lockscreenAlpha=1f, due to a call
            // to setOccluded(false) triggering a reset() call in KeyguardViewMediator. The
            // permanent solution is to only expand the shade once the keyguard transition from
            // OCCLUDED starts, but that requires more refactoring of expansion amounts. For now,
            // emit alpha = 0f for OCCLUDED -> LOCKSCREEN whenever isOccluded flips from true to
            // false while currentState == OCCLUDED, so that alpha = 0f when that expansion occurs.
            // TODO(b/332946323): Remove this once it's no longer needed.
            keyguardInteractor.isKeyguardOccluded
                .pairwise()
                .filter { (wasOccluded, isOccluded) ->
                    wasOccluded &&
                        !isOccluded &&
                        keyguardTransitionInteractor.getCurrentState() == KeyguardState.OCCLUDED
                }
                .map { 0f }
        )

    val deviceEntryBackgroundViewAlpha: Flow<Float> =
+4 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ package com.android.systemui.keyguard.ui.viewmodel

import com.android.systemui.common.ui.domain.interactor.configurationInteractor
import com.android.systemui.deviceentry.domain.interactor.deviceEntryUdfpsInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardInteractor
import com.android.systemui.keyguard.domain.interactor.keyguardTransitionInteractor
import com.android.systemui.keyguard.ui.keyguardTransitionAnimationFlow
import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
@@ -30,5 +32,7 @@ var Kosmos.occludedToLockscreenTransitionViewModel by Fixture {
        deviceEntryUdfpsInteractor = deviceEntryUdfpsInteractor,
        configurationInteractor = configurationInteractor,
        animationFlow = keyguardTransitionAnimationFlow,
        keyguardInteractor = keyguardInteractor,
        keyguardTransitionInteractor = keyguardTransitionInteractor,
    )
}