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

Commit a1a39786 authored by burakov's avatar burakov Committed by Danny Burakov
Browse files

[bc25] Fix notifications showing above QS shade (in Dual Shade mode).

Notifications can still show above QS shade when the HUN appears, but
this will be fixed separately (b/372000794).

Fix: 371554945
Bug: 372000794
Flag: com.android.systemui.scene_container
Flag: com.android.systemui.dual_shade
Test: Manually tested by expanding and collapsing the quick settings
shade over both lockscreen and gone, as well as invoking the HUN on QS.
Test: Existing unit tests still pass.

Change-Id: I0e84aaf628131c4534081b787ca1286ea1c069f1
parent e41386fa
Loading
Loading
Loading
Loading
+37 −16
Original line number Diff line number Diff line
@@ -68,6 +68,8 @@ import com.android.systemui.keyguard.ui.viewmodel.ViewStateAccessor
import com.android.systemui.scene.shared.flag.SceneContainerFlag
import com.android.systemui.scene.shared.model.Scenes
import com.android.systemui.shade.domain.interactor.ShadeInteractor
import com.android.systemui.shade.shared.flag.DualShade
import com.android.systemui.statusbar.notification.domain.interactor.HeadsUpNotificationInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationStackAppearanceInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.SharedNotificationContainerInteractor
import com.android.systemui.unfold.domain.interactor.UnfoldTransitionInteractor
@@ -75,6 +77,7 @@ import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf
import com.android.systemui.util.kotlin.FlowDumperImpl
import com.android.systemui.util.kotlin.Utils.Companion.sample as sampleCombine
import com.android.systemui.util.kotlin.sample
import dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -137,8 +140,10 @@ constructor(
    private val primaryBouncerToGoneTransitionViewModel: PrimaryBouncerToGoneTransitionViewModel,
    private val primaryBouncerToLockscreenTransitionViewModel:
        PrimaryBouncerToLockscreenTransitionViewModel,
    private val aodBurnInViewModel: AodBurnInViewModel,
    aodBurnInViewModel: AodBurnInViewModel,
    private val communalSceneInteractor: CommunalSceneInteractor,
    // Lazy because it's only used in the SceneContainer + Dual Shade configuration.
    headsUpNotificationInteractor: Lazy<HeadsUpNotificationInteractor>,
    unfoldTransitionInteractor: UnfoldTransitionInteractor,
) : FlowDumperImpl(dumpManager) {

@@ -390,8 +395,23 @@ constructor(
     * notifications unless in splitshade.
     */
    private val alphaForShadeAndQsExpansion: Flow<Float> =
        interactor.configurationBasedDimensions
            .flatMapLatest { configurationBasedDimensions ->
        if (DualShade.isEnabled) {
                combineTransform(
                    headsUpNotificationInteractor.get().isHeadsUpOrAnimatingAway,
                    shadeInteractor.shadeExpansion,
                    shadeInteractor.qsExpansion,
                ) { isHeadsUpOrAnimatingAway, shadeExpansion, qsExpansion ->
                    if (isHeadsUpOrAnimatingAway) {
                        // Ensure HUNs will be visible in QS shade (at least while unlocked)
                        emit(1f)
                    } else if (shadeExpansion > 0f || qsExpansion > 0f) {
                        // Fade out as QS shade expands
                        emit(1f - qsExpansion)
                    }
                }
            } else {
                interactor.configurationBasedDimensions.flatMapLatest { configurationBasedDimensions
                    ->
                    combineTransform(shadeInteractor.shadeExpansion, shadeInteractor.qsExpansion) {
                        shadeExpansion,
                        qsExpansion ->
@@ -408,6 +428,7 @@ constructor(
                        }
                    }
                }
            }
            .onStart { emit(1f) }
            .dumpWhileCollecting("alphaForShadeAndQsExpansion")

@@ -427,7 +448,7 @@ constructor(
    private fun alphaForTransitions(viewState: ViewStateAccessor): Flow<Float> {
        return merge(
            keyguardInteractor.dismissAlpha.dumpWhileCollecting("keyguardInteractor.dismissAlpha"),
            // All transition view models are mututally exclusive, and safe to merge
            // All transition view models are mutually exclusive, and safe to merge
            bouncerToGoneNotificationAlpha(viewState),
            aodToGoneTransitionViewModel.notificationAlpha(viewState),
            aodToLockscreenTransitionViewModel.notificationAlpha,
+2 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.systemui.kosmos.Kosmos
import com.android.systemui.kosmos.Kosmos.Fixture
import com.android.systemui.kosmos.applicationCoroutineScope
import com.android.systemui.shade.domain.interactor.shadeInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.headsUpNotificationInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationStackAppearanceInteractor
import com.android.systemui.statusbar.notification.stack.domain.interactor.sharedNotificationContainerInteractor
import com.android.systemui.unfold.domain.interactor.unfoldTransitionInteractor
@@ -92,6 +93,7 @@ val Kosmos.sharedNotificationContainerViewModel by Fixture {
            primaryBouncerToLockscreenTransitionViewModel,
        aodBurnInViewModel = aodBurnInViewModel,
        communalSceneInteractor = communalSceneInteractor,
        headsUpNotificationInteractor = { headsUpNotificationInteractor },
        unfoldTransitionInteractor = unfoldTransitionInteractor,
    )
}