Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt +2 −7 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import com.android.systemui.keyguard.ui.composable.section.StatusBarSection import com.android.systemui.keyguard.ui.composable.section.TopAreaSection import com.android.systemui.keyguard.ui.viewmodel.LockscreenContentViewModel import com.android.systemui.res.R import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiAod import java.util.Optional import javax.inject.Inject import kotlin.math.roundToInt Loading Loading @@ -130,9 +129,7 @@ constructor( if (!isShadeLayoutWide && !isBypassEnabled) { Box(modifier = Modifier.weight(weight = 1f)) { Column(Modifier.align(alignment = Alignment.TopStart)) { if (PromotedNotificationUiAod.isEnabled) { AodPromotedNotification() } AodPromotedNotificationArea() AodNotificationIcons( modifier = Modifier.padding(start = aodIconPadding) ) Loading @@ -145,9 +142,7 @@ constructor( } } else { Column { if (PromotedNotificationUiAod.isEnabled) { AodPromotedNotification() } AodPromotedNotificationArea() AodNotificationIcons( modifier = Modifier.padding(start = aodIconPadding) ) Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt +18 −2 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import com.android.systemui.statusbar.notification.icon.ui.viewbinder.Notificati import com.android.systemui.statusbar.notification.icon.ui.viewbinder.StatusBarIconViewBindingFailureTracker import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.promoted.AODPromotedNotification import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiAod import com.android.systemui.statusbar.notification.promoted.ui.viewmodel.AODPromotedNotificationViewModel import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScrollView Loading Loading @@ -110,9 +111,24 @@ constructor( } @Composable fun AodPromotedNotification() { fun AodPromotedNotificationArea(modifier: Modifier = Modifier) { if (!PromotedNotificationUiAod.isEnabled) { return } val isVisible by keyguardRootViewModel.isAodPromotedNotifVisible.collectAsStateWithLifecycle() val burnIn = rememberBurnIn(clockInteractor) AnimatedVisibility( visible = isVisible, enter = fadeIn(), exit = fadeOut(), modifier = modifier.burnInAware(aodBurnInViewModel, burnIn.parameters), ) { AODPromotedNotification(aodPromotedNotificationViewModelFactory) } } @Composable fun AodNotificationIcons(modifier: Modifier = Modifier) { Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +16 −10 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.domain.interactor.WallpaperFocalAreaInteractor import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.ui.view.layout.sections.AodPromotedNotificationSection import com.android.systemui.keyguard.ui.viewmodel.BurnInParameters import com.android.systemui.keyguard.ui.viewmodel.KeyguardBlueprintViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel Loading Loading @@ -184,6 +185,7 @@ object KeyguardRootViewBinder { viewModel.translationY.collect { y -> childViews[burnInLayerId]?.translationY = y childViews[largeClockId]?.translationY = y childViews[aodPromotedNotificationId]?.translationY = y childViews[aodNotificationIconContainerId]?.translationY = y } } Loading @@ -195,6 +197,7 @@ object KeyguardRootViewBinder { state.isToOrFrom(KeyguardState.AOD) -> { // Large Clock is not translated in the x direction childViews[burnInLayerId]?.translationX = px childViews[aodPromotedNotificationId]?.translationX = px childViews[aodNotificationIconContainerId]?.translationX = px } state.isToOrFrom(KeyguardState.GLANCEABLE_HUB) -> { Loading Loading @@ -291,11 +294,17 @@ object KeyguardRootViewBinder { blueprintViewModel.refreshBlueprint() } childViews[aodNotificationIconContainerId] ?.setAodNotifIconContainerIsVisible( isVisible, iconsAppearTranslationPx.value, screenOffAnimationController, ) ?.setAodNotifIconContainerIsVisible(isVisible) } } launch { viewModel.isNotifIconContainerVisible.collect { isVisible -> if (isVisible.value) { blueprintViewModel.refreshBlueprint() } childViews[aodPromotedNotificationId] ?.setAodNotifIconContainerIsVisible(isVisible) } } Loading Loading @@ -524,11 +533,7 @@ object KeyguardRootViewBinder { } } private fun View.setAodNotifIconContainerIsVisible( isVisible: AnimatedValue<Boolean>, iconsAppearTranslationPx: Int, screenOffAnimationController: ScreenOffAnimationController, ) { private fun View.setAodNotifIconContainerIsVisible(isVisible: AnimatedValue<Boolean>) { animate().cancel() val animatorListener = object : AnimatorListenerAdapter() { Loading Loading @@ -563,6 +568,7 @@ object KeyguardRootViewBinder { } private val burnInLayerId = R.id.burn_in_layer private val aodPromotedNotificationId = AodPromotedNotificationSection.viewId private val aodNotificationIconContainerId = R.id.aod_notification_icon_container private val largeClockId = customR.id.lockscreen_clock_view_large private val smallClockId = customR.id.lockscreen_clock_view Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +10 −0 Original line number Diff line number Diff line Loading @@ -307,6 +307,16 @@ constructor( BurnInScaleViewModel(scale = it.scale, scaleClockOnly = it.scaleClockOnly) } val isAodPromotedNotifVisible: StateFlow<Boolean> = keyguardTransitionInteractor .transitionValue(AOD) .map { it == 1f } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), initialValue = false, ) /** Is the notification icon container visible? */ val isNotifIconContainerVisible: StateFlow<AnimatedValue<Boolean>> = combine( Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt +2 −7 Original line number Diff line number Diff line Loading @@ -45,7 +45,6 @@ import com.android.systemui.keyguard.ui.composable.section.StatusBarSection import com.android.systemui.keyguard.ui.composable.section.TopAreaSection import com.android.systemui.keyguard.ui.viewmodel.LockscreenContentViewModel import com.android.systemui.res.R import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiAod import java.util.Optional import javax.inject.Inject import kotlin.math.roundToInt Loading Loading @@ -130,9 +129,7 @@ constructor( if (!isShadeLayoutWide && !isBypassEnabled) { Box(modifier = Modifier.weight(weight = 1f)) { Column(Modifier.align(alignment = Alignment.TopStart)) { if (PromotedNotificationUiAod.isEnabled) { AodPromotedNotification() } AodPromotedNotificationArea() AodNotificationIcons( modifier = Modifier.padding(start = aodIconPadding) ) Loading @@ -145,9 +142,7 @@ constructor( } } else { Column { if (PromotedNotificationUiAod.isEnabled) { AodPromotedNotification() } AodPromotedNotificationArea() AodNotificationIcons( modifier = Modifier.padding(start = aodIconPadding) ) Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt +18 −2 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ import com.android.systemui.statusbar.notification.icon.ui.viewbinder.Notificati import com.android.systemui.statusbar.notification.icon.ui.viewbinder.StatusBarIconViewBindingFailureTracker import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.promoted.AODPromotedNotification import com.android.systemui.statusbar.notification.promoted.PromotedNotificationUiAod import com.android.systemui.statusbar.notification.promoted.ui.viewmodel.AODPromotedNotificationViewModel import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout import com.android.systemui.statusbar.notification.stack.ui.view.NotificationScrollView Loading Loading @@ -110,9 +111,24 @@ constructor( } @Composable fun AodPromotedNotification() { fun AodPromotedNotificationArea(modifier: Modifier = Modifier) { if (!PromotedNotificationUiAod.isEnabled) { return } val isVisible by keyguardRootViewModel.isAodPromotedNotifVisible.collectAsStateWithLifecycle() val burnIn = rememberBurnIn(clockInteractor) AnimatedVisibility( visible = isVisible, enter = fadeIn(), exit = fadeOut(), modifier = modifier.burnInAware(aodBurnInViewModel, burnIn.parameters), ) { AODPromotedNotification(aodPromotedNotificationViewModelFactory) } } @Composable fun AodNotificationIcons(modifier: Modifier = Modifier) { Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +16 −10 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor import com.android.systemui.keyguard.domain.interactor.WallpaperFocalAreaInteractor import com.android.systemui.keyguard.shared.model.KeyguardState import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.keyguard.ui.view.layout.sections.AodPromotedNotificationSection import com.android.systemui.keyguard.ui.viewmodel.BurnInParameters import com.android.systemui.keyguard.ui.viewmodel.KeyguardBlueprintViewModel import com.android.systemui.keyguard.ui.viewmodel.KeyguardClockViewModel Loading Loading @@ -184,6 +185,7 @@ object KeyguardRootViewBinder { viewModel.translationY.collect { y -> childViews[burnInLayerId]?.translationY = y childViews[largeClockId]?.translationY = y childViews[aodPromotedNotificationId]?.translationY = y childViews[aodNotificationIconContainerId]?.translationY = y } } Loading @@ -195,6 +197,7 @@ object KeyguardRootViewBinder { state.isToOrFrom(KeyguardState.AOD) -> { // Large Clock is not translated in the x direction childViews[burnInLayerId]?.translationX = px childViews[aodPromotedNotificationId]?.translationX = px childViews[aodNotificationIconContainerId]?.translationX = px } state.isToOrFrom(KeyguardState.GLANCEABLE_HUB) -> { Loading Loading @@ -291,11 +294,17 @@ object KeyguardRootViewBinder { blueprintViewModel.refreshBlueprint() } childViews[aodNotificationIconContainerId] ?.setAodNotifIconContainerIsVisible( isVisible, iconsAppearTranslationPx.value, screenOffAnimationController, ) ?.setAodNotifIconContainerIsVisible(isVisible) } } launch { viewModel.isNotifIconContainerVisible.collect { isVisible -> if (isVisible.value) { blueprintViewModel.refreshBlueprint() } childViews[aodPromotedNotificationId] ?.setAodNotifIconContainerIsVisible(isVisible) } } Loading Loading @@ -524,11 +533,7 @@ object KeyguardRootViewBinder { } } private fun View.setAodNotifIconContainerIsVisible( isVisible: AnimatedValue<Boolean>, iconsAppearTranslationPx: Int, screenOffAnimationController: ScreenOffAnimationController, ) { private fun View.setAodNotifIconContainerIsVisible(isVisible: AnimatedValue<Boolean>) { animate().cancel() val animatorListener = object : AnimatorListenerAdapter() { Loading Loading @@ -563,6 +568,7 @@ object KeyguardRootViewBinder { } private val burnInLayerId = R.id.burn_in_layer private val aodPromotedNotificationId = AodPromotedNotificationSection.viewId private val aodNotificationIconContainerId = R.id.aod_notification_icon_container private val largeClockId = customR.id.lockscreen_clock_view_large private val smallClockId = customR.id.lockscreen_clock_view Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +10 −0 Original line number Diff line number Diff line Loading @@ -307,6 +307,16 @@ constructor( BurnInScaleViewModel(scale = it.scale, scaleClockOnly = it.scaleClockOnly) } val isAodPromotedNotifVisible: StateFlow<Boolean> = keyguardTransitionInteractor .transitionValue(AOD) .map { it == 1f } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), initialValue = false, ) /** Is the notification icon container visible? */ val isNotifIconContainerVisible: StateFlow<AnimatedValue<Boolean>> = combine( Loading