Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/BurnInState.kt +5 −13 Original line number Diff line number Diff line Loading @@ -26,18 +26,16 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalDensity import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.viewmodel.BurnInParameters import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.plugins.clocks.ClockController import kotlin.math.min import kotlin.math.roundToInt /** Produces a [BurnInState] that can be used to query the `LockscreenBurnInViewModel` flows. */ @Composable fun rememberBurnIn( clockInteractor: KeyguardClockInteractor, ): BurnInState { val clock by clockInteractor.currentClock.collectAsStateWithLifecycle() fun rememberBurnIn(clockViewModel: KeyguardClockViewModel): BurnInState { val clock by clockViewModel.currentClock.collectAsStateWithLifecycle() val (smartspaceTop, onSmartspaceTopChanged) = remember { mutableStateOf<Float?>(null) } val (smallClockTop, onSmallClockTopChanged) = remember { mutableStateOf<Float?>(null) } Loading @@ -62,18 +60,12 @@ fun rememberBurnIn( } @Composable private fun rememberBurnInParameters( clock: ClockController?, topmostTop: Int, ): BurnInParameters { private fun rememberBurnInParameters(clock: ClockController?, topmostTop: Int): BurnInParameters { val density = LocalDensity.current val topInset = WindowInsets.systemBars.union(WindowInsets.displayCutout).getTop(density) return remember(clock, topInset, topmostTop) { BurnInParameters( topInset = topInset, minViewY = topmostTop, ) BurnInParameters(topInset = topInset, minViewY = topmostTop) } } Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt +4 −4 Original line number Diff line number Diff line Loading @@ -38,11 +38,11 @@ import com.android.compose.animation.scene.ContentScope import com.android.compose.modifiers.thenIf import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn import com.android.systemui.keyguard.ui.composable.modifier.burnInAware import com.android.systemui.keyguard.ui.viewmodel.AodBurnInViewModel import com.android.systemui.keyguard.ui.viewmodel.BurnInParameters import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.notifications.ui.composable.ConstrainedNotificationStack Loading Loading @@ -89,7 +89,7 @@ constructor( private val nicAodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val aodPromotedNotificationViewModelFactory: AODPromotedNotificationViewModel.Factory, private val systemBarUtilsState: SystemBarUtilsState, private val clockInteractor: KeyguardClockInteractor, private val keyguardClockViewModel: KeyguardClockViewModel, ) { init { Loading Loading @@ -118,7 +118,7 @@ constructor( val isVisible by keyguardRootViewModel.isAodPromotedNotifVisible.collectAsStateWithLifecycle() val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) AnimatedVisibility( visible = isVisible, Loading @@ -141,7 +141,7 @@ constructor( isVisible.stopAnimating() } } val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) AnimatedVisibility( visibleState = transitionState, enter = fadeIn(), Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/TopAreaSection.kt +4 −5 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.compose.animation.scene.ContentScope import com.android.compose.animation.scene.rememberMutableSceneTransitionLayoutState import com.android.compose.modifiers.thenIf import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.composable.blueprint.ClockScenes.largeClockScene import com.android.systemui.keyguard.ui.composable.blueprint.ClockScenes.smallClockScene import com.android.systemui.keyguard.ui.composable.blueprint.ClockScenes.splitShadeLargeClockScene Loading @@ -56,7 +55,7 @@ constructor( private val mediaCarouselSection: MediaCarouselSection, private val clockSection: DefaultClockSection, private val weatherClockSection: WeatherClockSection, private val clockInteractor: KeyguardClockInteractor, private val keyguardClockViewModel: KeyguardClockViewModel, ) { @Composable fun ContentScope.DefaultClockLayout( Loading Loading @@ -138,7 +137,7 @@ constructor( smartSpacePaddingTop: (Resources) -> Int, modifier: Modifier = Modifier, ) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) Column(modifier = modifier) { with(clockSection) { Loading @@ -163,7 +162,7 @@ constructor( smartSpacePaddingTop: (Resources) -> Int, shouldOffSetClockToOneHalf: Boolean = false, ) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) val isLargeClockVisible by clockViewModel.isLargeClockVisible.collectAsStateWithLifecycle() LaunchedEffect(isLargeClockVisible) { Loading Loading @@ -204,7 +203,7 @@ constructor( smartSpacePaddingTop: (Resources) -> Int, modifier: Modifier = Modifier, ) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) val isLargeClockVisible by clockViewModel.isLargeClockVisible.collectAsStateWithLifecycle() val currentClockState = clockViewModel.currentClock.collectAsStateWithLifecycle() Loading packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeOverlay.kt +3 −3 Original line number Diff line number Diff line Loading @@ -30,9 +30,9 @@ 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.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn import com.android.systemui.keyguard.ui.composable.section.DefaultClockSection import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.notifications.ui.viewmodel.NotificationsShadeOverlayActionsViewModel import com.android.systemui.notifications.ui.viewmodel.NotificationsShadeOverlayContentViewModel Loading @@ -57,7 +57,7 @@ constructor( private val shadeSession: SaveableSession, private val stackScrollView: Lazy<NotificationScrollView>, private val clockSection: DefaultClockSection, private val clockInteractor: KeyguardClockInteractor, private val keyguardClockViewModel: KeyguardClockViewModel, ) : Overlay { override val key = Overlays.NotificationsShade Loading Loading @@ -105,7 +105,7 @@ constructor( Box { Column { if (viewModel.showClock) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) with(clockSection) { SmallClock( Loading packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +8 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ import com.android.compose.animation.scene.UserActionResult import com.android.compose.animation.scene.observableTransitionState import com.android.compose.animation.scene.rememberMutableSceneTransitionLayoutState import com.android.compose.gesture.effect.rememberOffsetOverscrollEffectFactory import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn import com.android.systemui.keyguard.ui.composable.modifier.burnInAware import com.android.systemui.lifecycle.rememberActivated import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.qs.ui.composable.QuickSettingsTheme Loading Loading @@ -239,7 +241,12 @@ fun SceneContainer( BottomRightCornerRibbon( content = { Text(text = "flexi\uD83E\uDD43", color = Color.White) }, colorSaturation = { viewModel.ribbonColorSaturation }, modifier = Modifier.align(Alignment.BottomEnd), modifier = Modifier.align(Alignment.BottomEnd) .burnInAware( viewModel = viewModel.burnIn, params = rememberBurnIn(viewModel.clock).parameters, ), ) } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/BurnInState.kt +5 −13 Original line number Diff line number Diff line Loading @@ -26,18 +26,16 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalDensity import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.viewmodel.BurnInParameters import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.plugins.clocks.ClockController import kotlin.math.min import kotlin.math.roundToInt /** Produces a [BurnInState] that can be used to query the `LockscreenBurnInViewModel` flows. */ @Composable fun rememberBurnIn( clockInteractor: KeyguardClockInteractor, ): BurnInState { val clock by clockInteractor.currentClock.collectAsStateWithLifecycle() fun rememberBurnIn(clockViewModel: KeyguardClockViewModel): BurnInState { val clock by clockViewModel.currentClock.collectAsStateWithLifecycle() val (smartspaceTop, onSmartspaceTopChanged) = remember { mutableStateOf<Float?>(null) } val (smallClockTop, onSmallClockTopChanged) = remember { mutableStateOf<Float?>(null) } Loading @@ -62,18 +60,12 @@ fun rememberBurnIn( } @Composable private fun rememberBurnInParameters( clock: ClockController?, topmostTop: Int, ): BurnInParameters { private fun rememberBurnInParameters(clock: ClockController?, topmostTop: Int): BurnInParameters { val density = LocalDensity.current val topInset = WindowInsets.systemBars.union(WindowInsets.displayCutout).getTop(density) return remember(clock, topInset, topmostTop) { BurnInParameters( topInset = topInset, minViewY = topmostTop, ) BurnInParameters(topInset = topInset, minViewY = topmostTop) } } Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt +4 −4 Original line number Diff line number Diff line Loading @@ -38,11 +38,11 @@ import com.android.compose.animation.scene.ContentScope import com.android.compose.modifiers.thenIf import com.android.systemui.common.ui.ConfigurationState import com.android.systemui.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn import com.android.systemui.keyguard.ui.composable.modifier.burnInAware import com.android.systemui.keyguard.ui.viewmodel.AodBurnInViewModel import com.android.systemui.keyguard.ui.viewmodel.BurnInParameters import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardRootViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.notifications.ui.composable.ConstrainedNotificationStack Loading Loading @@ -89,7 +89,7 @@ constructor( private val nicAodIconViewStore: AlwaysOnDisplayNotificationIconViewStore, private val aodPromotedNotificationViewModelFactory: AODPromotedNotificationViewModel.Factory, private val systemBarUtilsState: SystemBarUtilsState, private val clockInteractor: KeyguardClockInteractor, private val keyguardClockViewModel: KeyguardClockViewModel, ) { init { Loading Loading @@ -118,7 +118,7 @@ constructor( val isVisible by keyguardRootViewModel.isAodPromotedNotifVisible.collectAsStateWithLifecycle() val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) AnimatedVisibility( visible = isVisible, Loading @@ -141,7 +141,7 @@ constructor( isVisible.stopAnimating() } } val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) AnimatedVisibility( visibleState = transitionState, enter = fadeIn(), Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/TopAreaSection.kt +4 −5 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.android.compose.animation.scene.ContentScope import com.android.compose.animation.scene.rememberMutableSceneTransitionLayoutState import com.android.compose.modifiers.thenIf import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.composable.blueprint.ClockScenes.largeClockScene import com.android.systemui.keyguard.ui.composable.blueprint.ClockScenes.smallClockScene import com.android.systemui.keyguard.ui.composable.blueprint.ClockScenes.splitShadeLargeClockScene Loading @@ -56,7 +55,7 @@ constructor( private val mediaCarouselSection: MediaCarouselSection, private val clockSection: DefaultClockSection, private val weatherClockSection: WeatherClockSection, private val clockInteractor: KeyguardClockInteractor, private val keyguardClockViewModel: KeyguardClockViewModel, ) { @Composable fun ContentScope.DefaultClockLayout( Loading Loading @@ -138,7 +137,7 @@ constructor( smartSpacePaddingTop: (Resources) -> Int, modifier: Modifier = Modifier, ) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) Column(modifier = modifier) { with(clockSection) { Loading @@ -163,7 +162,7 @@ constructor( smartSpacePaddingTop: (Resources) -> Int, shouldOffSetClockToOneHalf: Boolean = false, ) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) val isLargeClockVisible by clockViewModel.isLargeClockVisible.collectAsStateWithLifecycle() LaunchedEffect(isLargeClockVisible) { Loading Loading @@ -204,7 +203,7 @@ constructor( smartSpacePaddingTop: (Resources) -> Int, modifier: Modifier = Modifier, ) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) val isLargeClockVisible by clockViewModel.isLargeClockVisible.collectAsStateWithLifecycle() val currentClockState = clockViewModel.currentClock.collectAsStateWithLifecycle() Loading
packages/SystemUI/compose/features/src/com/android/systemui/notifications/ui/composable/NotificationsShadeOverlay.kt +3 −3 Original line number Diff line number Diff line Loading @@ -30,9 +30,9 @@ 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.dagger.SysUISingleton import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn import com.android.systemui.keyguard.ui.composable.section.DefaultClockSection import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel import com.android.systemui.lifecycle.rememberViewModel import com.android.systemui.notifications.ui.viewmodel.NotificationsShadeOverlayActionsViewModel import com.android.systemui.notifications.ui.viewmodel.NotificationsShadeOverlayContentViewModel Loading @@ -57,7 +57,7 @@ constructor( private val shadeSession: SaveableSession, private val stackScrollView: Lazy<NotificationScrollView>, private val clockSection: DefaultClockSection, private val clockInteractor: KeyguardClockInteractor, private val keyguardClockViewModel: KeyguardClockViewModel, ) : Overlay { override val key = Overlays.NotificationsShade Loading Loading @@ -105,7 +105,7 @@ constructor( Box { Column { if (viewModel.showClock) { val burnIn = rememberBurnIn(clockInteractor) val burnIn = rememberBurnIn(keyguardClockViewModel) with(clockSection) { SmallClock( Loading
packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/SceneContainer.kt +8 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ import com.android.compose.animation.scene.UserActionResult import com.android.compose.animation.scene.observableTransitionState import com.android.compose.animation.scene.rememberMutableSceneTransitionLayoutState import com.android.compose.gesture.effect.rememberOffsetOverscrollEffectFactory import com.android.systemui.keyguard.ui.composable.blueprint.rememberBurnIn import com.android.systemui.keyguard.ui.composable.modifier.burnInAware import com.android.systemui.lifecycle.rememberActivated import com.android.systemui.qs.ui.adapter.QSSceneAdapter import com.android.systemui.qs.ui.composable.QuickSettingsTheme Loading Loading @@ -239,7 +241,12 @@ fun SceneContainer( BottomRightCornerRibbon( content = { Text(text = "flexi\uD83E\uDD43", color = Color.White) }, colorSaturation = { viewModel.ribbonColorSaturation }, modifier = Modifier.align(Alignment.BottomEnd), modifier = Modifier.align(Alignment.BottomEnd) .burnInAware( viewModel = viewModel.burnIn, params = rememberBurnIn(viewModel.clock).parameters, ), ) } }