Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ad4536ec authored by Julia Tuttle's avatar Julia Tuttle
Browse files

Fade AOD RON in on AOD and out otherwise

Bug: 369151941
Flag: com.android.systemui.aod_ui_rich_ongoing
Test: manual: wake phone from AOD and let fall back asleep
Change-Id: I837a0267040b928662a23f16f3d6aef765a41d94
parent 9c9d401f
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -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)
                                    )
+18 −2
Original line number Diff line number Diff line
@@ -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,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) {
+16 −10
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import com.android.systemui.keyguard.KeyguardViewMediator
import com.android.systemui.keyguard.domain.interactor.KeyguardClockInteractor
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
@@ -180,6 +181,7 @@ object KeyguardRootViewBinder {
                        viewModel.translationY.collect { y ->
                            childViews[burnInLayerId]?.translationY = y
                            childViews[largeClockId]?.translationY = y
                            childViews[aodPromotedNotificationId]?.translationY = y
                            childViews[aodNotificationIconContainerId]?.translationY = y
                        }
                    }
@@ -191,6 +193,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) -> {
@@ -287,11 +290,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)
                        }
                    }

@@ -500,11 +509,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() {
@@ -538,6 +543,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
+10 −0
Original line number Diff line number Diff line
@@ -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(