summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Julia Tuttle <juliatuttle@google.com> 2025-01-29 14:28:10 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-01-29 14:28:10 -0800
commit26e656a3fe4e77a99f7ea67a665609bd88cf51f2 (patch)
tree9b6e5c29f8bb07eeb16be7158383c21b18bd8daf
parent77cf181a41ce883ea5ad2ab2ed149580222b6948 (diff)
parentad4536ecf7fabe9cbbf25ee81aadb2f96776a46b (diff)
Merge "Fade AOD RON in on AOD and out otherwise" into main
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt9
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt20
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt26
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt10
4 files changed, 46 insertions, 19 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt
index 478970f4e210..d3417022565b 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/blueprint/DefaultBlueprint.kt
@@ -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
@@ -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)
)
@@ -145,9 +142,7 @@ constructor(
}
} else {
Column {
- if (PromotedNotificationUiAod.isEnabled) {
- AodPromotedNotification()
- }
+ AodPromotedNotificationArea()
AodNotificationIcons(
modifier = Modifier.padding(start = aodIconPadding)
)
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt
index b66690c2fe89..abf7fdc05f2e 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/keyguard/ui/composable/section/NotificationSection.kt
@@ -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
@@ -110,8 +111,23 @@ constructor(
}
@Composable
- fun AodPromotedNotification() {
- AODPromotedNotification(aodPromotedNotificationViewModelFactory)
+ 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
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
index 70a52afeb8c2..017fe169ca88 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
@@ -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
@@ -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
}
}
@@ -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) -> {
@@ -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)
}
}
@@ -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() {
@@ -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
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
index f0c924f99033..11a509a4fa61 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
@@ -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(