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

Commit 1be1da96 authored by omarmt's avatar omarmt
Browse files

Flexiglass uses STL OverscrollEffects

STL is changing how scene overscroll is handled. Instead of custom
solutions, the new approach leverages standard Compose components like
OverscrollEffects (see b/378470603).

For each scene or content, STL generates two OverscrollEffects (one
vertical and one horizontal) that can be directly applied to the
composable that will be translated during overscroll.

These effects should be added to any existing overscrollEffects on the
element.

Video: b/382477212#comment2

Test: manually test on Flexiglass
Bug: 382477212
Flag: com.android.systemui.scene_container
Change-Id: I11ab1754135ae308183135aa113b724ff00cf351
parent fb219458
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.systemui.bouncer.ui.composable
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.overscroll
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
@@ -101,6 +102,7 @@ private fun SceneScope.BouncerScene(
            viewModel,
            dialogFactory,
            Modifier.element(Bouncer.Elements.Content)
                .overscroll(verticalOverscrollEffect)
                .sysuiResTag(Bouncer.TestTags.Root)
                .fillMaxSize(),
        )
+2 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.windowInsetsBottomHeight
import androidx.compose.foundation.overscroll
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme
@@ -480,6 +481,7 @@ fun SceneScope.NotificationScrollingStack(
        modifier =
            modifier
                .element(Notifications.Elements.NotificationScrim)
                .overscroll(verticalOverscrollEffect)
                .offset {
                    // if scrim is expanded while transitioning to Gone or QS scene, increase the
                    // offset in step with the corresponding transition so that it is 0 when it
+5 −22
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import com.android.systemui.scene.ui.composable.transitions.notificationsShadeTo
import com.android.systemui.scene.ui.composable.transitions.shadeToQuickSettingsTransition
import com.android.systemui.scene.ui.composable.transitions.toNotificationsShadeTransition
import com.android.systemui.scene.ui.composable.transitions.toQuickSettingsShadeTransition
import com.android.systemui.shade.ui.composable.OverlayShade
import com.android.systemui.shade.ui.composable.Shade

/**
@@ -134,27 +133,11 @@ val SceneContainerTransitions = transitions {
    }

    // Scene overscroll

    // TODO(b/382477212) Remove STL Overscroll DSL
    overscrollDisabled(Scenes.Gone, Orientation.Vertical)
    overscrollDisabled(Scenes.Lockscreen, Orientation.Vertical)
    overscroll(Scenes.Bouncer, Orientation.Vertical) {
        translate(Bouncer.Elements.Content, y = { absoluteDistance })
    }
    overscroll(Scenes.Shade, Orientation.Vertical) {
        translate(
            Notifications.Elements.NotificationScrim,
            y = Shade.Dimensions.ScrimOverscrollLimit,
        )
        translate(Shade.Elements.SplitShadeStartColumn, y = Shade.Dimensions.ScrimOverscrollLimit)
        translate(
            Notifications.Elements.NotificationStackPlaceholder,
            y = Shade.Dimensions.ScrimOverscrollLimit,
        )
    }
    overscroll(Overlays.NotificationsShade, Orientation.Vertical) {
        translate(OverlayShade.Elements.Panel, y = OverlayShade.Dimensions.OverscrollLimit)
    }
    overscroll(Overlays.QuickSettingsShade, Orientation.Vertical) {
        translate(OverlayShade.Elements.Panel, y = OverlayShade.Dimensions.OverscrollLimit)
    }
    overscrollDisabled(Scenes.Bouncer, Orientation.Vertical)
    overscrollDisabled(Scenes.Shade, Orientation.Vertical)
    overscrollDisabled(Overlays.NotificationsShade, Orientation.Vertical)
    overscrollDisabled(Overlays.QuickSettingsShade, Orientation.Vertical)
}
+5 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsIgnoringVisibility
import androidx.compose.foundation.layout.waterfall
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.overscroll
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
@@ -65,7 +66,10 @@ fun SceneScope.OverlayShade(

        Box(modifier = Modifier.fillMaxSize().panelPadding(), contentAlignment = Alignment.TopEnd) {
            Panel(
                modifier = Modifier.element(OverlayShade.Elements.Panel).panelSize(),
                modifier =
                    Modifier.element(OverlayShade.Elements.Panel)
                        .overscroll(verticalOverscrollEffect)
                        .panelSize(),
                content = content,
            )
        }
+2 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.overscroll
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
@@ -527,6 +528,7 @@ private fun SceneScope.SplitShade(
                Box(
                    modifier =
                        Modifier.element(Shade.Elements.SplitShadeStartColumn)
                            .overscroll(verticalOverscrollEffect)
                            .weight(1f)
                            .graphicsLayer { translationX = unfoldTranslationXForStartSide }
                ) {
Loading