Loading packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt +12 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.systemui.keyguard.ui.composable.section import android.view.ViewGroup import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition import androidx.compose.animation.core.MutableTransitionState import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut Loading Loading @@ -115,12 +117,19 @@ constructor( val isVisible by keyguardRootViewModel.isAodPromotedNotifVisible.collectAsStateWithLifecycle() val transitionState = remember { MutableTransitionState(isVisible.value) } LaunchedEffect(key1 = isVisible, key2 = transitionState.isIdle) { transitionState.targetState = isVisible.value if (isVisible.isAnimating && transitionState.isIdle) { isVisible.stopAnimating() } } val burnIn = rememberBurnIn(keyguardClockViewModel) AnimatedVisibility( visible = isVisible, enter = fadeIn(), exit = fadeOut(), visibleState = transitionState, enter = if (isVisible.isAnimating) fadeIn() else EnterTransition.None, exit = if (isVisible.isAnimating) fadeOut() else ExitTransition.None, modifier = modifier.burnInAware(aodBurnInViewModel, burnIn.parameters), ) { AODPromotedNotification(aodPromotedNotificationViewModelFactory) Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +1 −1 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ object KeyguardRootViewBinder { } launch { viewModel.isNotifIconContainerVisible.collect { isVisible -> viewModel.isAodPromotedNotifVisible.collect { isVisible -> if (isVisible.value) { blueprintViewModel.refreshBlueprint() } Loading packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +15 −5 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.ui.viewmodel.NotificationShadeWindowModel import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.promoted.domain.interactor.AODPromotedNotificationInteractor import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf Loading Loading @@ -84,6 +85,7 @@ constructor( private val notificationsKeyguardInteractor: NotificationsKeyguardInteractor, private val pulseExpansionInteractor: PulseExpansionInteractor, notificationShadeWindowModel: NotificationShadeWindowModel, private val aodPromotedNotificationInteractor: AODPromotedNotificationInteractor, private val aodNotificationIconViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, private val alternateBouncerToAodTransitionViewModel: AlternateBouncerToAodTransitionViewModel, private val alternateBouncerToGoneTransitionViewModel: Loading Loading @@ -327,14 +329,22 @@ constructor( .map { BurnInScaleViewModel(scale = it.scale, scaleClockOnly = it.scaleClockOnly) } .dumpWhileCollecting("scale") val isAodPromotedNotifVisible: StateFlow<Boolean> = keyguardTransitionInteractor .transitionValue(AOD) .map { it == 1f } val isAodPromotedNotifVisible: StateFlow<AnimatedValue<Boolean>> = combine( areNotifsFullyHiddenAnimated(), isPulseExpandingAnimated(), aodPromotedNotificationInteractor.isPresent, ) { notifsFullyHiddenAnimated, pulseExpandingAnimated, haveAodPromotedNotif -> zip(notifsFullyHiddenAnimated, pulseExpandingAnimated) { notifsFullyHidden, pulseExpanding -> notifsFullyHidden && !pulseExpanding && haveAodPromotedNotif } } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), initialValue = false, initialValue = AnimatedValue.NotAnimating(false), ) .dumpValue("isAodPromotedNotifVisible") Loading packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.ui.viewmodel.notificationShadeWindowModel import com.android.systemui.statusbar.notification.icon.ui.viewmodel.notificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.promoted.domain.interactor.aodPromotedNotificationInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor import com.android.systemui.statusbar.phone.dozeParameters import com.android.systemui.statusbar.phone.screenOffAnimationController Loading @@ -42,6 +43,7 @@ val Kosmos.keyguardRootViewModel by Fixture { keyguardTransitionInteractor = keyguardTransitionInteractor, notificationsKeyguardInteractor = notificationsKeyguardInteractor, pulseExpansionInteractor = pulseExpansionInteractor, aodPromotedNotificationInteractor = aodPromotedNotificationInteractor, aodNotificationIconViewModel = notificationIconContainerAlwaysOnDisplayViewModel, notificationShadeWindowModel = notificationShadeWindowModel, alternateBouncerToAodTransitionViewModel = alternateBouncerToAodTransitionViewModel, Loading Loading
packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt +12 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ package com.android.systemui.keyguard.ui.composable.section import android.view.ViewGroup import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition import androidx.compose.animation.core.MutableTransitionState import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut Loading Loading @@ -115,12 +117,19 @@ constructor( val isVisible by keyguardRootViewModel.isAodPromotedNotifVisible.collectAsStateWithLifecycle() val transitionState = remember { MutableTransitionState(isVisible.value) } LaunchedEffect(key1 = isVisible, key2 = transitionState.isIdle) { transitionState.targetState = isVisible.value if (isVisible.isAnimating && transitionState.isIdle) { isVisible.stopAnimating() } } val burnIn = rememberBurnIn(keyguardClockViewModel) AnimatedVisibility( visible = isVisible, enter = fadeIn(), exit = fadeOut(), visibleState = transitionState, enter = if (isVisible.isAnimating) fadeIn() else EnterTransition.None, exit = if (isVisible.isAnimating) fadeOut() else ExitTransition.None, modifier = modifier.burnInAware(aodBurnInViewModel, burnIn.parameters), ) { AODPromotedNotification(aodPromotedNotificationViewModelFactory) Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt +1 −1 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ object KeyguardRootViewBinder { } launch { viewModel.isNotifIconContainerVisible.collect { isVisible -> viewModel.isAodPromotedNotifVisible.collect { isVisible -> if (isVisible.value) { blueprintViewModel.refreshBlueprint() } Loading
packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt +15 −5 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.shade.ui.viewmodel.NotificationShadeWindowModel import com.android.systemui.statusbar.notification.domain.interactor.NotificationsKeyguardInteractor import com.android.systemui.statusbar.notification.icon.ui.viewmodel.NotificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.promoted.domain.interactor.AODPromotedNotificationInteractor import com.android.systemui.statusbar.phone.DozeParameters import com.android.systemui.statusbar.phone.ScreenOffAnimationController import com.android.systemui.util.kotlin.BooleanFlowOperators.anyOf Loading Loading @@ -84,6 +85,7 @@ constructor( private val notificationsKeyguardInteractor: NotificationsKeyguardInteractor, private val pulseExpansionInteractor: PulseExpansionInteractor, notificationShadeWindowModel: NotificationShadeWindowModel, private val aodPromotedNotificationInteractor: AODPromotedNotificationInteractor, private val aodNotificationIconViewModel: NotificationIconContainerAlwaysOnDisplayViewModel, private val alternateBouncerToAodTransitionViewModel: AlternateBouncerToAodTransitionViewModel, private val alternateBouncerToGoneTransitionViewModel: Loading Loading @@ -327,14 +329,22 @@ constructor( .map { BurnInScaleViewModel(scale = it.scale, scaleClockOnly = it.scaleClockOnly) } .dumpWhileCollecting("scale") val isAodPromotedNotifVisible: StateFlow<Boolean> = keyguardTransitionInteractor .transitionValue(AOD) .map { it == 1f } val isAodPromotedNotifVisible: StateFlow<AnimatedValue<Boolean>> = combine( areNotifsFullyHiddenAnimated(), isPulseExpandingAnimated(), aodPromotedNotificationInteractor.isPresent, ) { notifsFullyHiddenAnimated, pulseExpandingAnimated, haveAodPromotedNotif -> zip(notifsFullyHiddenAnimated, pulseExpandingAnimated) { notifsFullyHidden, pulseExpanding -> notifsFullyHidden && !pulseExpanding && haveAodPromotedNotif } } .stateIn( scope = applicationScope, started = SharingStarted.WhileSubscribed(), initialValue = false, initialValue = AnimatedValue.NotAnimating(false), ) .dumpValue("isAodPromotedNotifVisible") Loading
packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModelKosmos.kt +2 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.kosmos.applicationCoroutineScope import com.android.systemui.shade.domain.interactor.shadeInteractor import com.android.systemui.shade.ui.viewmodel.notificationShadeWindowModel import com.android.systemui.statusbar.notification.icon.ui.viewmodel.notificationIconContainerAlwaysOnDisplayViewModel import com.android.systemui.statusbar.notification.promoted.domain.interactor.aodPromotedNotificationInteractor import com.android.systemui.statusbar.notification.stack.domain.interactor.notificationsKeyguardInteractor import com.android.systemui.statusbar.phone.dozeParameters import com.android.systemui.statusbar.phone.screenOffAnimationController Loading @@ -42,6 +43,7 @@ val Kosmos.keyguardRootViewModel by Fixture { keyguardTransitionInteractor = keyguardTransitionInteractor, notificationsKeyguardInteractor = notificationsKeyguardInteractor, pulseExpansionInteractor = pulseExpansionInteractor, aodPromotedNotificationInteractor = aodPromotedNotificationInteractor, aodNotificationIconViewModel = notificationIconContainerAlwaysOnDisplayViewModel, notificationShadeWindowModel = notificationShadeWindowModel, alternateBouncerToAodTransitionViewModel = alternateBouncerToAodTransitionViewModel, Loading