summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeFacade.kt8
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt (renamed from packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/DisplayCutoutProvider.kt)17
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt100
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt40
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt6
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt4
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt3
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt21
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/data/repository/NotificationStackAppearanceRepository.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractor.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationStackAppearanceViewBinder.kt5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/SharedNotificationContainerBinder.kt8
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationStackAppearanceViewModel.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt4
15 files changed, 124 insertions, 103 deletions
diff --git a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeFacade.kt b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeFacade.kt
index afb860e62261..79d39bf04714 100644
--- a/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeFacade.kt
+++ b/packages/SystemUI/compose/facade/enabled/src/com/android/systemui/compose/ComposeFacade.kt
@@ -29,12 +29,13 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.LifecycleOwner
import com.android.compose.theme.PlatformTheme
import com.android.compose.ui.platform.DensityAwareComposeView
+import com.android.internal.policy.ScreenDecorationsUtils
import com.android.systemui.bouncer.ui.BouncerDialogFactory
import com.android.systemui.bouncer.ui.composable.BouncerContent
import com.android.systemui.bouncer.ui.viewmodel.BouncerViewModel
import com.android.systemui.common.ui.compose.windowinsets.CutoutLocation
import com.android.systemui.common.ui.compose.windowinsets.DisplayCutout
-import com.android.systemui.common.ui.compose.windowinsets.DisplayCutoutProvider
+import com.android.systemui.common.ui.compose.windowinsets.ScreenDecorProvider
import com.android.systemui.communal.ui.compose.CommunalContainer
import com.android.systemui.communal.ui.compose.CommunalHub
import com.android.systemui.communal.ui.viewmodel.BaseCommunalViewModel
@@ -126,8 +127,9 @@ object ComposeFacade : BaseComposeFacade {
return ComposeView(context).apply {
setContent {
PlatformTheme {
- DisplayCutoutProvider(
- displayCutout = displayCutoutFromWindowInsets(scope, context, windowInsets)
+ ScreenDecorProvider(
+ displayCutout = displayCutoutFromWindowInsets(scope, context, windowInsets),
+ screenCornerRadius = ScreenDecorationsUtils.getWindowCornerRadius(context)
) {
SceneContainer(
viewModel = viewModel,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/DisplayCutoutProvider.kt b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt
index ed393c0a9cb5..76bd4ec2778a 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/DisplayCutoutProvider.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/common/ui/compose/windowinsets/ScreenDecorProvider.kt
@@ -21,17 +21,28 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.staticCompositionLocalOf
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.unit.dp
import kotlinx.coroutines.flow.StateFlow
/** The bounds and [CutoutLocation] of the current display. */
val LocalDisplayCutout = staticCompositionLocalOf { DisplayCutout() }
+/** The corner radius in px of the current display. */
+val LocalScreenCornerRadius = staticCompositionLocalOf { 0.dp }
+
@Composable
-fun DisplayCutoutProvider(
+fun ScreenDecorProvider(
displayCutout: StateFlow<DisplayCutout>,
+ screenCornerRadius: Float,
content: @Composable () -> Unit,
) {
val cutout by displayCutout.collectAsState()
-
- CompositionLocalProvider(LocalDisplayCutout provides cutout) { content() }
+ val screenCornerRadiusDp = with(LocalDensity.current) { screenCornerRadius.toDp() }
+ CompositionLocalProvider(
+ LocalScreenCornerRadius provides screenCornerRadiusDp,
+ LocalDisplayCutout provides cutout
+ ) {
+ content()
+ }
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt
index 0e08a198c71e..3fb825471c57 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/Notifications.kt
@@ -51,11 +51,13 @@ import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.layout.LayoutCoordinates
import androidx.compose.ui.layout.boundsInWindow
+import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.onPlaced
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp
@@ -63,10 +65,15 @@ import com.android.compose.animation.scene.ElementKey
import com.android.compose.animation.scene.NestedScrollBehavior
import com.android.compose.animation.scene.SceneScope
import com.android.compose.modifiers.height
+import com.android.compose.ui.util.lerp
+import com.android.systemui.common.ui.compose.windowinsets.LocalScreenCornerRadius
import com.android.systemui.notifications.ui.composable.Notifications.Form
+import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_CORNER_RADIUS
+import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA
import com.android.systemui.scene.ui.composable.Gone
import com.android.systemui.scene.ui.composable.Shade
import com.android.systemui.shade.ui.composable.ShadeHeader
+import com.android.systemui.statusbar.notification.stack.ui.viewbinder.NotificationStackAppearanceViewBinder.SCRIM_CORNER_RADIUS
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
import kotlin.math.roundToInt
@@ -77,6 +84,13 @@ object Notifications {
val ShelfSpace = ElementKey("ShelfSpace")
}
+ // Expansion fraction thresholds (between 0-1f) at which the corresponding value should be
+ // at its maximum, given they are at their minimum value at expansion = 0f.
+ object TransitionThresholds {
+ const val EXPANSION_FOR_MAX_CORNER_RADIUS = 0.1f
+ const val EXPANSION_FOR_MAX_SCRIM_ALPHA = 0.3f
+ }
+
enum class Form {
HunFromTop,
Stack,
@@ -125,19 +139,19 @@ fun SceneScope.NotificationScrollingStack(
modifier: Modifier = Modifier,
) {
val density = LocalDensity.current
- val cornerRadius by viewModel.cornerRadiusDp.collectAsState()
+ val screenCornerRadius = LocalScreenCornerRadius.current
val expansionFraction by viewModel.expandFraction.collectAsState(0f)
val navBarHeight =
with(density) { WindowInsets.systemBars.asPaddingValues().calculateBottomPadding().toPx() }
- val statusBarHeight =
- with(density) { WindowInsets.systemBars.asPaddingValues().calculateTopPadding().toPx() }
- val displayCutoutHeight =
- with(density) { WindowInsets.displayCutout.asPaddingValues().calculateTopPadding().toPx() }
+ val statusBarHeight = WindowInsets.systemBars.asPaddingValues().calculateTopPadding()
+ val displayCutoutHeight = WindowInsets.displayCutout.asPaddingValues().calculateTopPadding()
val screenHeight =
- with(density) { LocalConfiguration.current.screenHeightDp.dp.toPx() } +
- navBarHeight +
- maxOf(statusBarHeight, displayCutoutHeight)
+ with(density) {
+ (LocalConfiguration.current.screenHeightDp.dp +
+ maxOf(statusBarHeight, displayCutoutHeight))
+ .toPx()
+ } + navBarHeight
val contentHeight = viewModel.intrinsicContentHeight.collectAsState()
@@ -171,26 +185,53 @@ fun SceneScope.NotificationScrollingStack(
.collect { shouldCollapse -> if (shouldCollapse) scrimOffset.value = 0f }
}
- Box(modifier = modifier.element(Notifications.Elements.NotificationScrim)) {
+ Box(
+ modifier =
+ modifier
+ .element(Notifications.Elements.NotificationScrim)
+ .offset {
+ // if scrim is expanded while transitioning to Gone scene, increase the offset
+ // in step with the transition so that it is 0 when it completes.
+ if (
+ scrimOffset.value < 0 &&
+ layoutState.isTransitioning(from = Shade, to = Gone)
+ ) {
+ IntOffset(x = 0, y = (scrimOffset.value * expansionFraction).roundToInt())
+ } else {
+ IntOffset(x = 0, y = scrimOffset.value.roundToInt())
+ }
+ }
+ .graphicsLayer {
+ shape =
+ calculateCornerRadius(
+ screenCornerRadius,
+ { expansionFraction },
+ layoutState.isTransitioningBetween(Gone, Shade)
+ )
+ .let {
+ RoundedCornerShape(
+ topStart = it,
+ topEnd = it,
+ )
+ }
+ clip = true
+ }
+ ) {
+ // Creates a cutout in the background scrim in the shape of the notifications scrim.
+ // Only visible when notif scrim alpha < 1, during shade expansion.
Spacer(
modifier =
- Modifier.fillMaxSize()
- .graphicsLayer {
- shape = RoundedCornerShape(cornerRadius.dp)
- clip = true
- }
- .drawBehind { drawRect(Color.Black, blendMode = BlendMode.DstOut) }
+ Modifier.fillMaxSize().drawBehind {
+ drawRect(Color.Black, blendMode = BlendMode.DstOut)
+ }
)
Box(
modifier =
Modifier.fillMaxSize()
- .offset { IntOffset(0, scrimOffset.value.roundToInt()) }
.graphicsLayer {
- shape = RoundedCornerShape(cornerRadius.dp)
- clip = true
alpha =
if (layoutState.isTransitioningBetween(Gone, Shade)) {
- (expansionFraction / 0.3f).coerceAtMost(1f)
+ (expansionFraction / EXPANSION_FOR_MAX_SCRIM_ALPHA).coerceAtMost(1f)
} else 1f
}
.background(MaterialTheme.colorScheme.surface)
@@ -278,10 +319,10 @@ private fun SceneScope.NotificationPlaceholder(
.onSizeChanged { size: IntSize ->
debugLog(viewModel) { "STACK onSizeChanged: size=$size" }
}
- .onPlaced { coordinates: LayoutCoordinates ->
+ .onGloballyPositioned { coordinates: LayoutCoordinates ->
viewModel.onContentTopChanged(coordinates.positionInWindow().y)
debugLog(viewModel) {
- "STACK onPlaced:" +
+ "STACK onGloballyPositioned:" +
" size=${coordinates.size}" +
" position=${coordinates.positionInWindow()}" +
" bounds=${coordinates.boundsInWindow()}"
@@ -310,6 +351,23 @@ private fun SceneScope.NotificationPlaceholder(
}
}
+private fun calculateCornerRadius(
+ screenCornerRadius: Dp,
+ expansionFraction: () -> Float,
+ transitioning: Boolean,
+): Dp {
+ return if (transitioning) {
+ lerp(
+ start = screenCornerRadius.value,
+ stop = SCRIM_CORNER_RADIUS,
+ fraction = (expansionFraction() / EXPANSION_FOR_MAX_CORNER_RADIUS).coerceAtMost(1f),
+ )
+ .dp
+ } else {
+ SCRIM_CORNER_RADIUS.dp
+ }
+}
+
private inline fun debugLog(
viewModel: NotificationsPlaceholderViewModel,
msg: () -> Any,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
index 5531f9cc5589..969dec31971c 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/qs/ui/composable/QuickSettingsScene.kt
@@ -36,7 +36,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
@@ -47,11 +46,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.graphicsLayer
-import androidx.compose.ui.layout.LayoutCoordinates
-import androidx.compose.ui.layout.boundsInWindow
-import androidx.compose.ui.layout.onPlaced
-import androidx.compose.ui.layout.positionInWindow
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.unit.dp
@@ -62,7 +56,6 @@ import com.android.systemui.battery.BatteryMeterViewController
import com.android.systemui.compose.modifiers.sysuiResTag
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
-import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.qs.footer.ui.compose.FooterActions
import com.android.systemui.qs.ui.viewmodel.QuickSettingsSceneViewModel
import com.android.systemui.scene.shared.model.SceneKey
@@ -122,8 +115,6 @@ private fun SceneScope.QuickSettingsScene(
statusBarIconController: StatusBarIconController,
modifier: Modifier = Modifier,
) {
- val cornerRadius by viewModel.notifications.cornerRadiusDp.collectAsState()
-
// TODO(b/280887232): implement the real UI.
Box(modifier = modifier.fillMaxSize()) {
val isCustomizing by viewModel.qsSceneAdapter.isCustomizing.collectAsState()
@@ -155,9 +146,9 @@ private fun SceneScope.QuickSettingsScene(
// a background that extends to the edges.
Spacer(
modifier =
- Modifier.element(Shade.Elements.ScrimBackground)
+ Modifier.element(Shade.Elements.BackgroundScrim)
.fillMaxSize()
- .background(MaterialTheme.colorScheme.scrim, shape = Shade.Shapes.Scrim)
+ .background(MaterialTheme.colorScheme.scrim)
)
Column(
horizontalAlignment = Alignment.CenterHorizontally,
@@ -242,32 +233,5 @@ private fun SceneScope.QuickSettingsScene(
}
}
}
- // Scrim with height 0 aligned to bottom of the screen to facilitate shared element
- // transition from Shade scene.
- Box(
- modifier =
- Modifier.element(Notifications.Elements.NotificationScrim)
- .fillMaxWidth()
- .height(0.dp)
- .graphicsLayer {
- shape = RoundedCornerShape(cornerRadius.dp)
- clip = true
- alpha = 1f
- }
- .background(MaterialTheme.colorScheme.surface)
- .align(Alignment.BottomCenter)
- .onPlaced { coordinates: LayoutCoordinates ->
- viewModel.notifications.onContentTopChanged(
- coordinates.positionInWindow().y
- )
- val boundsInWindow = coordinates.boundsInWindow()
- viewModel.notifications.onBoundsChanged(
- left = boundsInWindow.left,
- top = boundsInWindow.top,
- right = boundsInWindow.right,
- bottom = boundsInWindow.bottom,
- )
- }
- )
}
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt
index 770d654a4c88..736ee1f235c6 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/GoneScene.kt
@@ -16,18 +16,18 @@
package com.android.systemui.scene.ui.composable
-import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.android.compose.animation.scene.SceneScope
import com.android.systemui.dagger.SysUISingleton
-import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.scene.shared.model.Direction
import com.android.systemui.scene.shared.model.Edge
import com.android.systemui.scene.shared.model.SceneKey
import com.android.systemui.scene.shared.model.SceneModel
import com.android.systemui.scene.shared.model.UserAction
+import com.android.systemui.shade.ui.composable.Shade
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationsPlaceholderViewModel
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
@@ -63,6 +63,6 @@ constructor(
override fun SceneScope.Content(
modifier: Modifier,
) {
- Box(modifier = Modifier.fillMaxSize().element(Notifications.Elements.NotificationScrim))
+ Spacer(modifier.fillMaxSize())
}
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt
index 0c2c5195becc..1223ace6957b 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromGoneToShadeTransition.kt
@@ -3,6 +3,7 @@ package com.android.systemui.scene.ui.composable.transitions
import androidx.compose.animation.core.tween
import com.android.compose.animation.scene.Edge
import com.android.compose.animation.scene.TransitionBuilder
+import com.android.systemui.notifications.ui.composable.Notifications
import com.android.systemui.qs.ui.composable.QuickSettings
import com.android.systemui.shade.ui.composable.ShadeHeader
@@ -10,5 +11,6 @@ fun TransitionBuilder.goneToShadeTransition() {
spec = tween(durationMillis = 500)
fractionRange(start = .58f) { fade(ShadeHeader.Elements.CollapsedContent) }
- translate(QuickSettings.Elements.Content, Edge.Top, true)
+ translate(QuickSettings.Elements.Content, y = -ShadeHeader.Dimensions.CollapsedHeight * .66f)
+ translate(Notifications.Elements.NotificationScrim, Edge.Top, false)
}
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt
index ebc343dc6d76..2d5cf5c752bf 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/FromLockscreenToShadeTransition.kt
@@ -10,9 +10,8 @@ import com.android.systemui.shade.ui.composable.Shade
fun TransitionBuilder.lockscreenToShadeTransition() {
spec = tween(durationMillis = 500)
- translate(Shade.Elements.Scrim, Edge.Top, startsOutsideLayoutBounds = false)
fractionRange(end = 0.5f) {
- fade(Shade.Elements.ScrimBackground)
+ fade(Shade.Elements.BackgroundScrim)
translate(
QuickSettings.Elements.CollapsedGrid,
Edge.Top,
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
index 497fe873e87d..677df7ead2da 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/shade/ui/composable/ShadeScene.kt
@@ -38,6 +38,7 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.unit.dp
import com.android.compose.animation.scene.ElementKey
+import com.android.compose.animation.scene.LowestZIndexScenePicker
import com.android.compose.animation.scene.SceneScope
import com.android.systemui.battery.BatteryMeterViewController
import com.android.systemui.dagger.SysUISingleton
@@ -74,8 +75,8 @@ object Shade {
object Elements {
val QuickSettings = ElementKey("ShadeQuickSettings")
val MediaCarousel = ElementKey("ShadeMediaCarousel")
- val Scrim = ElementKey("ShadeScrim")
- val ScrimBackground = ElementKey("ShadeScrimBackground")
+ val BackgroundScrim =
+ ElementKey("ShadeBackgroundScrim", scenePicker = LowestZIndexScenePicker)
}
object Dimensions {
@@ -162,7 +163,9 @@ private fun SceneScope.ShadeScene(
Box(
modifier =
- modifier.element(Shade.Elements.Scrim).background(MaterialTheme.colorScheme.scrim),
+ modifier
+ .element(Shade.Elements.BackgroundScrim)
+ .background(MaterialTheme.colorScheme.scrim),
)
Box {
Layout(
@@ -236,17 +239,7 @@ private fun SceneScope.ShadeScene(
check(measurables[1].size == 1)
val quickSettingsPlaceable = measurables[0][0].measure(constraints)
-
- val notificationsMeasurable = measurables[1][0]
- val notificationsScrimMaxHeight =
- constraints.maxHeight - ShadeHeader.Dimensions.CollapsedHeight.roundToPx()
- val notificationsPlaceable =
- notificationsMeasurable.measure(
- constraints.copy(
- minHeight = notificationsScrimMaxHeight,
- maxHeight = notificationsScrimMaxHeight
- )
- )
+ val notificationsPlaceable = measurables[1][0].measure(constraints)
maxNotifScrimTop.value = quickSettingsPlaceable.height.toFloat()
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index b9afb1409d91..8be48536f5c3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -1445,12 +1445,12 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
if (mAmbientState.isBouncerInTransit() && mQsExpansionFraction > 0f) {
fraction = BouncerPanelExpansionCalculator.aboutToShowBouncerProgress(fraction);
}
- final float stackY = MathUtils.lerp(0, endTopPosition, fraction);
// TODO(b/322228881): Clean up scene container vs legacy behavior in NSSL
if (SceneContainerFlag.isEnabled()) {
// stackY should be driven by scene container, not NSSL
mAmbientState.setStackY(mTopPadding);
} else {
+ final float stackY = MathUtils.lerp(0, endTopPosition, fraction);
mAmbientState.setStackY(stackY);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/data/repository/NotificationStackAppearanceRepository.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/data/repository/NotificationStackAppearanceRepository.kt
index 01972646f394..311ba83e85f1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/data/repository/NotificationStackAppearanceRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/data/repository/NotificationStackAppearanceRepository.kt
@@ -28,9 +28,6 @@ class NotificationStackAppearanceRepository @Inject constructor() {
/** The bounds of the notification stack in the current scene. */
val stackBounds = MutableStateFlow(NotificationContainerBounds())
- /** The corner radius of the notification stack, in dp. */
- val cornerRadiusDp = MutableStateFlow(32f)
-
/**
* The height in px of the contents of notification stack. Depending on the number of
* notifications, this can exceed the space available on screen to show notifications, at which
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractor.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractor.kt
index 8307397c57da..9984ba9c32ce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractor.kt
@@ -34,9 +34,6 @@ constructor(
/** The bounds of the notification stack in the current scene. */
val stackBounds: StateFlow<NotificationContainerBounds> = repository.stackBounds.asStateFlow()
- /** The corner radius of the notification stack, in dp. */
- val cornerRadiusDp: StateFlow<Float> = repository.cornerRadiusDp.asStateFlow()
-
/**
* The height in px of the contents of notification stack. Depending on the number of
* notifications, this can exceed the space available on screen to show notifications, at which
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationStackAppearanceViewBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationStackAppearanceViewBinder.kt
index 6c2cbbecb477..e69ab4066bcf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationStackAppearanceViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/NotificationStackAppearanceViewBinder.kt
@@ -30,6 +30,7 @@ import kotlinx.coroutines.launch
/** Binds the shared notification container to its view-model. */
object NotificationStackAppearanceViewBinder {
+ const val SCRIM_CORNER_RADIUS = 32f
@JvmStatic
fun bind(
@@ -48,8 +49,8 @@ object NotificationStackAppearanceViewBinder {
bounds.top.roundToInt(),
bounds.right.roundToInt(),
bounds.bottom.roundToInt(),
- viewModel.cornerRadiusDp.value.dpToPx(context),
- viewModel.cornerRadiusDp.value.dpToPx(context),
+ SCRIM_CORNER_RADIUS.dpToPx(context),
+ 0,
)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/SharedNotificationContainerBinder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/SharedNotificationContainerBinder.kt
index fe5bdd41a94f..f3d0d2c2e9fc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/SharedNotificationContainerBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewbinder/SharedNotificationContainerBinder.kt
@@ -136,8 +136,12 @@ object SharedNotificationContainerBinder {
.collect { y -> controller.setTranslationY(y) }
}
- launch {
- viewModel.expansionAlpha.collect { controller.setMaxAlphaForExpansion(it) }
+ if (!sceneContainerFlags.isEnabled()) {
+ launch {
+ viewModel.expansionAlpha.collect {
+ controller.setMaxAlphaForExpansion(it)
+ }
+ }
}
launch {
viewModel.glanceableHubAlpha.collect {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationStackAppearanceViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationStackAppearanceViewModel.kt
index 56ff7f9e50df..bdf1a6431549 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationStackAppearanceViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationStackAppearanceViewModel.kt
@@ -74,9 +74,6 @@ constructor(
/** The bounds of the notification stack in the current scene. */
val stackBounds: Flow<NotificationContainerBounds> = stackAppearanceInteractor.stackBounds
- /** The corner radius of the notification stack, in dp. */
- val cornerRadiusDp: StateFlow<Float> = stackAppearanceInteractor.cornerRadiusDp
-
/** The y-coordinate in px of top of the contents of the notification stack. */
val contentTop: StateFlow<Float> = stackAppearanceInteractor.contentTop
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt
index a436f1783a0c..8b8bf3a47e37 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModel.kt
@@ -26,7 +26,6 @@ import com.android.systemui.statusbar.notification.stack.domain.interactor.Notif
import com.android.systemui.statusbar.notification.stack.shared.flexiNotifsEnabled
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.StateFlow
/**
* ViewModel used by the Notification placeholders inside the scene container to update the
@@ -67,9 +66,6 @@ constructor(
interactor.setStackBounds(NotificationContainerBounds(left, top, right, bottom))
}
- /** The corner radius of the placeholder, in dp. */
- val cornerRadiusDp: StateFlow<Float> = interactor.cornerRadiusDp
-
/**
* The height in px of the contents of notification stack. Depending on the number of
* notifications, this can exceed the space available on screen to show notifications, at which