diff options
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 |