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

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

[Dual Shade] Separate the notifications and QS shades for transitions.

For the time being, it's decided to not have a shared element transition
when transitioning between the two shades.

BONUS: Fade the shade header (aka shade status bar) during the
transition.

Fix: 391151101
Bug: 394149273
Test: Manually by expanding and collapsing the shades over Lockscreen
 and verifying there's no shared element transition between them.
Flag: com.android.systemui.scene_container
Change-Id: I40b1dea47fa4d6fc85bf5b21a064305e2ea05734
parent 76c8184a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -85,6 +85,7 @@ constructor(
            }

        OverlayShade(
            panelElement = NotificationsShade.Elements.Panel,
            panelAlignment = Alignment.TopStart,
            modifier = modifier,
            onScrimClicked = viewModel::onScrimClicked,
@@ -144,6 +145,7 @@ constructor(

object NotificationsShade {
    object Elements {
        val StatusBar = ElementKey("NotificationsShadeStatusBar")
        val Panel = ElementKey("NotificationsShadeOverlayPanel")
        val StatusBar = ElementKey("NotificationsShadeOverlayStatusBar")
    }
}
+10 −3
Original line number Diff line number Diff line
@@ -43,13 +43,13 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.android.compose.animation.scene.ContentScope
import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.UserAction
import com.android.compose.animation.scene.UserActionResult
import com.android.systemui.brightness.ui.compose.BrightnessSliderContainer
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.lifecycle.rememberViewModel
import com.android.systemui.notifications.ui.composable.NotificationsShade
import com.android.systemui.notifications.ui.composable.SnoozeableHeadsUpNotificationSpace
import com.android.systemui.qs.composefragment.ui.GridAnchor
import com.android.systemui.qs.flags.QsDetailedView
@@ -123,13 +123,14 @@ constructor(
                    },
            )
            OverlayShade(
                panelElement = QuickSettingsShade.Elements.Panel,
                panelAlignment = Alignment.TopEnd,
                onScrimClicked = contentViewModel::onScrimClicked,
                header = {
                    OverlayShadeHeader(
                        viewModel = quickSettingsContainerViewModel.shadeHeaderViewModel,
                        modifier =
                            Modifier.element(NotificationsShade.Elements.StatusBar)
                            Modifier.element(QuickSettingsShade.Elements.StatusBar)
                                .layoutId(SingleShadeMeasurePolicy.LayoutId.ShadeHeader),
                    )
                },
@@ -159,7 +160,8 @@ constructor(
                            QuickSettingsOverlayHeader(
                                viewModel = quickSettingsContainerViewModel.shadeHeaderViewModel,
                                modifier =
                                    Modifier.padding(top = QuickSettingsShade.Dimensions.Padding),
                                    Modifier.element(QuickSettingsShade.Elements.Header)
                                        .padding(top = QuickSettingsShade.Dimensions.Padding),
                            )
                        }
                    },
@@ -267,6 +269,11 @@ fun ContentScope.QuickSettingsLayout(
}

object QuickSettingsShade {
    object Elements {
        val StatusBar = ElementKey("QuickSettingsShadeOverlayStatusBar")
        val Panel = ElementKey("QuickSettingsShadeOverlayPanel")
        val Header = ElementKey("QuickSettingsShadeOverlayHeader")
    }

    object Dimensions {
        val Padding = 16.dp
+5 −2
Original line number Diff line number Diff line
@@ -21,8 +21,8 @@ import com.android.compose.animation.scene.TransitionBuilder
import com.android.compose.animation.scene.reveal.ContainerRevealHaptics
import com.android.compose.animation.scene.reveal.verticalContainerReveal
import com.android.systemui.keyguard.ui.composable.blueprint.ClockElementKeys
import com.android.systemui.notifications.ui.composable.NotificationsShade
import com.android.systemui.scene.shared.model.Overlays
import com.android.systemui.shade.ui.composable.OverlayShade
import kotlin.time.Duration.Companion.milliseconds

fun TransitionBuilder.toNotificationsShadeTransition(
@@ -36,7 +36,10 @@ fun TransitionBuilder.toNotificationsShadeTransition(
        ClockElementKeys.smallClockElementKey,
        elevateInContent = Overlays.NotificationsShade,
    )
    verticalContainerReveal(OverlayShade.Elements.Panel, revealHaptics)

    verticalContainerReveal(NotificationsShade.Elements.Panel, revealHaptics)

    fade(NotificationsShade.Elements.StatusBar)
}

private val DefaultDuration = 300.milliseconds
+4 −2
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import androidx.compose.animation.core.tween
import com.android.compose.animation.scene.TransitionBuilder
import com.android.compose.animation.scene.reveal.ContainerRevealHaptics
import com.android.compose.animation.scene.reveal.verticalContainerReveal
import com.android.systemui.shade.ui.composable.OverlayShade
import com.android.systemui.qs.ui.composable.QuickSettingsShade
import kotlin.time.Duration.Companion.milliseconds

fun TransitionBuilder.toQuickSettingsShadeTransition(
@@ -29,7 +29,9 @@ fun TransitionBuilder.toQuickSettingsShadeTransition(
) {
    spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())

    verticalContainerReveal(OverlayShade.Elements.Panel, revealHaptics)
    verticalContainerReveal(QuickSettingsShade.Elements.Panel, revealHaptics)

    fade(QuickSettingsShade.Elements.StatusBar)
}

private val DefaultDuration = 300.milliseconds
+2 −1
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.systemui.res.R
/** Renders a lightweight shade UI container, as an overlay. */
@Composable
fun ContentScope.OverlayShade(
    panelElement: ElementKey,
    panelAlignment: Alignment,
    onScrimClicked: () -> Unit,
    modifier: Modifier = Modifier,
@@ -75,7 +76,7 @@ fun ContentScope.OverlayShade(
            Panel(
                modifier =
                    Modifier.overscroll(verticalOverscrollEffect)
                        .element(OverlayShade.Elements.Panel)
                        .element(panelElement)
                        .panelWidth(isFullWidth),
                header = header.takeIf { isFullWidth },
                content = content,