diff options
14 files changed, 156 insertions, 57 deletions
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 d78097815b5e..8ad2bb78f5d6 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 @@ -72,6 +72,7 @@ import com.android.systemui.notifications.ui.composable.Notifications.Transition import com.android.systemui.notifications.ui.composable.Notifications.TransitionThresholds.EXPANSION_FOR_MAX_SCRIM_ALPHA import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.shade.ui.composable.ShadeHeader +import com.android.systemui.statusbar.notification.stack.shared.model.StackRounding 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 @@ -156,6 +157,8 @@ fun SceneScope.NotificationScrollingStack( val contentHeight = viewModel.intrinsicContentHeight.collectAsState() + val stackRounding = viewModel.stackRounding.collectAsState() + // the offset for the notifications scrim. Its upper bound is 0, and its lower bound is // calculated in minScrimOffset. The scrim is the same height as the screen minus the // height of the Shade Header, and at rest (scrimOffset = 0) its top bound is at maxScrimStartY. @@ -226,12 +229,7 @@ fun SceneScope.NotificationScrollingStack( { expansionFraction }, layoutState.isTransitioningBetween(Scenes.Gone, Scenes.Shade) ) - .let { - RoundedCornerShape( - topStart = it, - topEnd = it, - ) - } + .let { stackRounding.value.toRoundedCornerShape(it) } clip = true } ) { @@ -367,7 +365,7 @@ private fun calculateCornerRadius( lerp( start = screenCornerRadius.value, stop = SCRIM_CORNER_RADIUS, - fraction = (expansionFraction() / EXPANSION_FOR_MAX_CORNER_RADIUS).coerceAtMost(1f), + fraction = (expansionFraction() / EXPANSION_FOR_MAX_CORNER_RADIUS).coerceIn(0f, 1f), ) .dp } else { @@ -394,5 +392,16 @@ private fun Modifier.debugBackground( this } +fun StackRounding.toRoundedCornerShape(radius: Dp): RoundedCornerShape { + val topRadius = if (roundTop) radius else 0.dp + val bottomRadius = if (roundBottom) radius else 0.dp + return RoundedCornerShape( + topStart = topRadius, + topEnd = topRadius, + bottomStart = bottomRadius, + bottomEnd = bottomRadius, + ) +} + private const val TAG = "FlexiNotifs" private val DEBUG_COLOR = Color(1f, 0f, 0f, 0.2f) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt index 2689fc111142..94539a39869e 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/NotificationStackAppearanceIntegrationTest.kt @@ -22,7 +22,6 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.compose.animation.scene.ObservableTransitionState import com.android.systemui.SysuiTestCase -import com.android.systemui.common.shared.model.NotificationContainerBounds import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.Flags import com.android.systemui.flags.fakeFeatureFlagsClassic @@ -31,6 +30,7 @@ import com.android.systemui.scene.domain.interactor.sceneInteractor import com.android.systemui.scene.shared.flag.fakeSceneContainerFlags import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.fakeSceneDataSource +import com.android.systemui.statusbar.notification.stack.shared.model.StackBounds import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationStackAppearanceViewModel import com.android.systemui.statusbar.notification.stack.ui.viewmodel.notificationsPlaceholderViewModel import com.android.systemui.testKosmos @@ -64,7 +64,7 @@ class NotificationStackAppearanceIntegrationTest : SysuiTestCase() { @Test fun updateBounds() = testScope.runTest { - val bounds by collectLastValue(appearanceViewModel.stackBounds) + val clipping by collectLastValue(appearanceViewModel.stackClipping) val top = 200f val left = 0f @@ -76,15 +76,8 @@ class NotificationStackAppearanceIntegrationTest : SysuiTestCase() { right = right, bottom = bottom ) - assertThat(bounds) - .isEqualTo( - NotificationContainerBounds( - left = left, - top = top, - right = right, - bottom = bottom - ) - ) + assertThat(clipping?.bounds) + .isEqualTo(StackBounds(left = left, top = top, right = right, bottom = bottom)) } @Test diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractorTest.kt index ffe6e6df6b48..6dd425c2afbc 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/domain/interactor/NotificationStackAppearanceInteractorTest.kt @@ -19,10 +19,10 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase -import com.android.systemui.common.shared.model.NotificationContainerBounds import com.android.systemui.coroutines.collectLastValue import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.testScope +import com.android.systemui.statusbar.notification.stack.shared.model.StackBounds import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest import org.junit.Test @@ -43,19 +43,17 @@ class NotificationStackAppearanceInteractorTest : SysuiTestCase() { val stackBounds by collectLastValue(underTest.stackBounds) val bounds1 = - NotificationContainerBounds( + StackBounds( top = 100f, bottom = 200f, - isAnimated = true, ) underTest.setStackBounds(bounds1) assertThat(stackBounds).isEqualTo(bounds1) val bounds2 = - NotificationContainerBounds( + StackBounds( top = 200f, bottom = 300f, - isAnimated = false, ) underTest.setStackBounds(bounds2) assertThat(stackBounds).isEqualTo(bounds2) @@ -65,7 +63,7 @@ class NotificationStackAppearanceInteractorTest : SysuiTestCase() { fun setStackBounds_withImproperBounds_throwsException() = testScope.runTest { underTest.setStackBounds( - NotificationContainerBounds( + StackBounds( top = 100f, bottom = 99f, ) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelTest.kt index 693de55211f8..2ccc8b44eff8 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationsPlaceholderViewModelTest.kt @@ -22,6 +22,7 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.NotificationContainerBounds import com.android.systemui.keyguard.domain.interactor.keyguardInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationStackAppearanceInteractor +import com.android.systemui.statusbar.notification.stack.shared.model.StackBounds import com.android.systemui.testKosmos import com.google.common.truth.Truth.assertThat import org.junit.Test @@ -36,9 +37,9 @@ class NotificationsPlaceholderViewModelTest : SysuiTestCase() { fun onBoundsChanged_setsNotificationContainerBounds() { underTest.onBoundsChanged(left = 5f, top = 5f, right = 5f, bottom = 5f) assertThat(kosmos.keyguardInteractor.notificationContainerBounds.value) - .isEqualTo(NotificationContainerBounds(left = 5f, top = 5f, right = 5f, bottom = 5f)) + .isEqualTo(NotificationContainerBounds(top = 5f, bottom = 5f)) assertThat(kosmos.notificationStackAppearanceInteractor.stackBounds.value) - .isEqualTo(NotificationContainerBounds(left = 5f, top = 5f, right = 5f, bottom = 5f)) + .isEqualTo(StackBounds(left = 5f, top = 5f, right = 5f, bottom = 5f)) } @Test fun onContentTopChanged_setsContentTop() { diff --git a/packages/SystemUI/src/com/android/systemui/common/shared/model/NotificationContainerBounds.kt b/packages/SystemUI/src/com/android/systemui/common/shared/model/NotificationContainerBounds.kt index 3063ebd60b0c..fdd98bec0a2d 100644 --- a/packages/SystemUI/src/com/android/systemui/common/shared/model/NotificationContainerBounds.kt +++ b/packages/SystemUI/src/com/android/systemui/common/shared/model/NotificationContainerBounds.kt @@ -18,12 +18,8 @@ package com.android.systemui.common.shared.model /** Models the bounds of the notification container. */ data class NotificationContainerBounds( - /** The position of the left of the container in its window coordinate system, in pixels. */ - val left: Float = 0f, /** The position of the top of the container in its window coordinate system, in pixels. */ val top: Float = 0f, - /** The position of the right of the container in its window coordinate system, in pixels. */ - val right: Float = 0f, /** The position of the bottom of the container in its window coordinate system, in pixels. */ val bottom: Float = 0f, /** Whether any modifications to top/bottom should be smoothly animated. */ diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java index 8ba0544d5b7a..8dbceadbb7a8 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsControllerImpl.java @@ -1280,18 +1280,20 @@ public class QuickSettingsControllerImpl implements QuickSettingsController, Dum mScrimController.setScrimCornerRadius(radius); - // Convert global clipping coordinates to local ones, - // relative to NotificationStackScrollLayout - int nsslLeft = calculateNsslLeft(left); - int nsslRight = calculateNsslRight(right); - int nsslTop = getNotificationsClippingTopBounds(top); - int nsslBottom = bottom - mNotificationStackScrollLayoutController.getTop(); - int bottomRadius = mSplitShadeEnabled ? radius : 0; - // TODO (b/265193930): remove dependency on NPVC - int topRadius = mSplitShadeEnabled - && mPanelViewControllerLazy.get().isExpandingFromHeadsUp() ? 0 : radius; - mNotificationStackScrollLayoutController.setRoundedClippingBounds( - nsslLeft, nsslTop, nsslRight, nsslBottom, topRadius, bottomRadius); + if (!SceneContainerFlag.isEnabled()) { + // Convert global clipping coordinates to local ones, + // relative to NotificationStackScrollLayout + int nsslLeft = calculateNsslLeft(left); + int nsslRight = calculateNsslRight(right); + int nsslTop = getNotificationsClippingTopBounds(top); + int nsslBottom = bottom - mNotificationStackScrollLayoutController.getTop(); + int bottomRadius = mSplitShadeEnabled ? radius : 0; + // TODO (b/265193930): remove dependency on NPVC + int topRadius = mSplitShadeEnabled + && mPanelViewControllerLazy.get().isExpandingFromHeadsUp() ? 0 : radius; + mNotificationStackScrollLayoutController.setRoundedClippingBounds( + nsslLeft, nsslTop, nsslRight, nsslBottom, topRadius, bottomRadius); + } } /** 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 9efe632f5dbb..9fffb66ac831 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 @@ -17,8 +17,9 @@ package com.android.systemui.statusbar.notification.stack.data.repository -import com.android.systemui.common.shared.model.NotificationContainerBounds import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.statusbar.notification.stack.shared.model.StackBounds +import com.android.systemui.statusbar.notification.stack.shared.model.StackRounding import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow @@ -26,7 +27,11 @@ import kotlinx.coroutines.flow.MutableStateFlow @SysUISingleton class NotificationStackAppearanceRepository @Inject constructor() { /** The bounds of the notification stack in the current scene. */ - val stackBounds = MutableStateFlow(NotificationContainerBounds()) + val stackBounds = MutableStateFlow(StackBounds()) + + /** The whether the corners of the notification stack should be rounded */ + // TODO: replace with the logic from QSController + val stackRounding = MutableStateFlow(StackRounding(roundTop = true, roundBottom = false)) /** * The height in px of the contents of notification stack. Depending on the number of 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 08df47388556..5a56ca1444dc 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 @@ -17,9 +17,10 @@ package com.android.systemui.statusbar.notification.stack.domain.interactor -import com.android.systemui.common.shared.model.NotificationContainerBounds import com.android.systemui.dagger.SysUISingleton import com.android.systemui.statusbar.notification.stack.data.repository.NotificationStackAppearanceRepository +import com.android.systemui.statusbar.notification.stack.shared.model.StackBounds +import com.android.systemui.statusbar.notification.stack.shared.model.StackRounding import javax.inject.Inject import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow @@ -33,7 +34,10 @@ constructor( private val repository: NotificationStackAppearanceRepository, ) { /** The bounds of the notification stack in the current scene. */ - val stackBounds: StateFlow<NotificationContainerBounds> = repository.stackBounds.asStateFlow() + val stackBounds: StateFlow<StackBounds> = repository.stackBounds.asStateFlow() + + /** The rounding of the notification stack. */ + val stackRounding: StateFlow<StackRounding> = repository.stackRounding.asStateFlow() /** * The height in px of the contents of notification stack. Depending on the number of @@ -59,7 +63,7 @@ constructor( val syntheticScroll: Flow<Float> = repository.syntheticScroll.asStateFlow() /** Sets the position of the notification stack in the current scene. */ - fun setStackBounds(bounds: NotificationContainerBounds) { + fun setStackBounds(bounds: StackBounds) { check(bounds.top <= bounds.bottom) { "Invalid bounds: $bounds" } repository.stackBounds.value = bounds } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackBounds.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackBounds.kt new file mode 100644 index 000000000000..1fc9a182a10c --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackBounds.kt @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.stack.shared.model + +/** Models the bounds of the notification stack. */ +data class StackBounds( + /** The position of the left of the stack in its window coordinate system, in pixels. */ + val left: Float = 0f, + /** The position of the top of the stack in its window coordinate system, in pixels. */ + val top: Float = 0f, + /** The position of the right of the stack in its window coordinate system, in pixels. */ + val right: Float = 0f, + /** The position of the bottom of the stack in its window coordinate system, in pixels. */ + val bottom: Float = 0f, +) { + /** The current height of the notification container. */ + val height: Float = bottom - top +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackClipping.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackClipping.kt new file mode 100644 index 000000000000..0c92b5023d1d --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackClipping.kt @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.stack.shared.model + +/** Models the clipping rounded rectangle of the notification stack */ +data class StackClipping(val bounds: StackBounds, val rounding: StackRounding) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackRounding.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackRounding.kt new file mode 100644 index 000000000000..ddc5d7ea0d7f --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/shared/model/StackRounding.kt @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.notification.stack.shared.model + +/** Models the corner rounds of the notification stack. */ +data class StackRounding( + /** Whether the top corners of the notification stack should be rounded. */ + val roundTop: Boolean = false, + /** Whether the bottom corners of the notification stack should be rounded. */ + val roundBottom: Boolean = false, +) 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 f10e5f1ab022..189c5e03ce07 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 @@ -47,16 +47,17 @@ object NotificationStackAppearanceViewBinder { return view.repeatWhenAttached(mainImmediateDispatcher) { repeatOnLifecycle(Lifecycle.State.CREATED) { launch { - viewModel.stackBounds.collect { bounds -> + viewModel.stackClipping.collect { (bounds, rounding) -> val viewLeft = controller.view.left val viewTop = controller.view.top + val roundRadius = SCRIM_CORNER_RADIUS.dpToPx(context) controller.setRoundedClippingBounds( bounds.left.roundToInt() - viewLeft, bounds.top.roundToInt() - viewTop, bounds.right.roundToInt() - viewLeft, bounds.bottom.roundToInt() - viewTop, - SCRIM_CORNER_RADIUS.dpToPx(context), - 0, + if (rounding.roundTop) roundRadius else 0, + if (rounding.roundBottom) roundRadius else 0, ) } } 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 b6167e1ef0fb..a7cbc3374a0e 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 @@ -18,7 +18,6 @@ package com.android.systemui.statusbar.notification.stack.ui.viewmodel import com.android.compose.animation.scene.ObservableTransitionState -import com.android.systemui.common.shared.model.NotificationContainerBounds import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dump.DumpManager @@ -27,6 +26,7 @@ import com.android.systemui.scene.shared.model.Scenes import com.android.systemui.scene.shared.model.Scenes.Shade import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationStackAppearanceInteractor +import com.android.systemui.statusbar.notification.stack.shared.model.StackClipping import com.android.systemui.util.kotlin.FlowDumperImpl import javax.inject.Inject import kotlinx.coroutines.CoroutineScope @@ -83,8 +83,13 @@ constructor( .dumpWhileCollecting("expandFraction") /** The bounds of the notification stack in the current scene. */ - val stackBounds: Flow<NotificationContainerBounds> = - stackAppearanceInteractor.stackBounds.dumpValue("stackBounds") + val stackClipping: Flow<StackClipping> = + combine( + stackAppearanceInteractor.stackBounds, + stackAppearanceInteractor.stackRounding, + ::StackClipping + ) + .dumpWhileCollecting("stackClipping") /** The y-coordinate in px of top of the contents of the notification stack. */ val contentTop: StateFlow<Float> = stackAppearanceInteractor.contentTop.dumpValue("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 9e2497d5bb41..ed44f20868b8 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 @@ -24,8 +24,11 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor import com.android.systemui.scene.shared.flag.SceneContainerFlags import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.NotificationStackAppearanceInteractor +import com.android.systemui.statusbar.notification.stack.shared.model.StackBounds +import com.android.systemui.statusbar.notification.stack.shared.model.StackRounding 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 @@ -61,12 +64,17 @@ constructor( right: Float, bottom: Float, ) { - val notificationContainerBounds = - NotificationContainerBounds(top = top, bottom = bottom, left = left, right = right) - keyguardInteractor.setNotificationContainerBounds(notificationContainerBounds) - interactor.setStackBounds(notificationContainerBounds) + keyguardInteractor.setNotificationContainerBounds( + NotificationContainerBounds(top = top, bottom = bottom) + ) + interactor.setStackBounds( + StackBounds(top = top, bottom = bottom, left = left, right = right) + ) } + /** Corner rounding of the stack */ + val stackRounding: StateFlow<StackRounding> = interactor.stackRounding + /** * 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 |