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

Commit 89b96e5b authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[flexiglass] Fade out the lock screen UI when opening an overlay." into main

parents 63506baa bb9a2948
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package com.android.systemui.keyguard.ui.composable.layout
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.HorizontalAlignmentLine
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.layout.VerticalAlignmentLine
@@ -26,6 +28,8 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.IntRect
import androidx.compose.ui.unit.dp
import com.android.compose.animation.scene.ContentScope
import com.android.compose.modifiers.thenIf
import com.android.systemui.plugins.keyguard.ui.composable.elements.LockscreenElementContext
import com.android.systemui.plugins.keyguard.ui.composable.elements.LockscreenElementFactory
import com.android.systemui.plugins.keyguard.ui.composable.elements.LockscreenElementFactory.Companion.lockscreenElement
@@ -109,7 +113,7 @@ object LockIconAlignmentLines {
 *   as it may be drawn on top of the UDFPS (under display fingerprint sensor)
 */
@Composable
fun LockscreenSceneLayout(
fun ContentScope.LockscreenSceneLayout(
    elementFactory: LockscreenElementFactory,
    elementContext: LockscreenElementContext,
    modifier: Modifier = Modifier,
@@ -126,7 +130,8 @@ fun LockscreenSceneLayout(
            elementFactory.lockscreenElement(LockscreenElementKeys.LockIcon, elementContext)
            elementFactory.lockscreenElement(LockscreenElementKeys.SettingsMenu, elementContext)
        },
        modifier = modifier,
        // Hide the lock screen elements when an overlay is shown above.
        modifier = modifier.thenIf(isIdleWithOverlay()) { Modifier.graphicsLayer { alpha = 0f } },
    ) { measurables, constraints ->
        check(measurables.size == 5)
        val statusBarMeasurable = measurables[0]
@@ -154,7 +159,7 @@ fun LockscreenSceneLayout(
        val lockIconConstrainedMaxHeight =
            lockIconBounds.top - spacingAboveLockIconPx - statusBarPlaceable.measuredHeight

        val contentPlaceableOrNull =
        val contentPlaceable =
            contentMeasurable.measure(
                Constraints(
                    minWidth = 0,
@@ -171,7 +176,7 @@ fun LockscreenSceneLayout(

        layout(constraints.maxWidth, constraints.maxHeight) {
            statusBarPlaceable.place(0, 0)
            contentPlaceableOrNull?.placeRelative(0, statusBarPlaceable.measuredHeight)
            contentPlaceable.placeRelative(0, statusBarPlaceable.measuredHeight)
            bottomAreaPlaceable.place(0, constraints.maxHeight - bottomAreaPlaceable.measuredHeight)
            lockIconPlaceable.place(x = lockIconBounds.left, y = lockIconBounds.top)
            settingsMenuPleaceable.placeRelative(
@@ -181,3 +186,7 @@ fun LockscreenSceneLayout(
        }
    }
}

private fun ContentScope.isIdleWithOverlay(): Boolean {
    return !layoutState.isTransitioning() && layoutState.currentOverlays.isNotEmpty()
}
+35 −12
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ import com.android.systemui.scene.shared.model.TransitionKeys.SlightlyFasterShad
import com.android.systemui.scene.shared.model.TransitionKeys.ToSplitShade
import com.android.systemui.scene.ui.composable.transitions.bouncerToGoneTransition
import com.android.systemui.scene.ui.composable.transitions.bouncerToLockscreenPreview
import com.android.systemui.scene.ui.composable.transitions.bouncerToLockscreenTransition
import com.android.systemui.scene.ui.composable.transitions.communalToBouncerTransition
import com.android.systemui.scene.ui.composable.transitions.communalToShadeTransition
import com.android.systemui.scene.ui.composable.transitions.dreamToBouncerTransition
@@ -23,14 +24,16 @@ import com.android.systemui.scene.ui.composable.transitions.dreamToGoneTransitio
import com.android.systemui.scene.ui.composable.transitions.dreamToShadeTransition
import com.android.systemui.scene.ui.composable.transitions.fromBouncerTransition
import com.android.systemui.scene.ui.composable.transitions.goneToQuickSettingsTransition
import com.android.systemui.scene.ui.composable.transitions.goneToShadeTransition
import com.android.systemui.scene.ui.composable.transitions.goneToShadeSceneTransition
import com.android.systemui.scene.ui.composable.transitions.goneToSplitShadeTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToBouncerTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToCommunalTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToDreamTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToGoneTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToShadeTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToNotificationsShadeTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsOverlayTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToQuickSettingsSceneTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToShadeSceneTransition
import com.android.systemui.scene.ui.composable.transitions.lockscreenToSplitShadeTransition
import com.android.systemui.scene.ui.composable.transitions.shadeToQuickSettingsTransition
import com.android.systemui.scene.ui.composable.transitions.toBouncerTransition
@@ -75,7 +78,7 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                to = Scenes.Shade,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                goneToShadeTransition()
                goneToShadeSceneTransition()
            }
            from(
                Scenes.Gone,
@@ -91,7 +94,7 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                goneToShadeTransition(durationScale = 0.9)
                goneToShadeSceneTransition(durationScale = 0.9)
            }
            from(
                Scenes.Gone,
@@ -116,7 +119,7 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                to = Scenes.Shade,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                lockscreenToShadeTransition()
                lockscreenToShadeSceneTransition()
            }
            from(
                Scenes.Lockscreen,
@@ -133,14 +136,14 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                lockscreenToShadeTransition(durationScale = 0.9)
                lockscreenToShadeSceneTransition(durationScale = 0.9)
            }
            from(
                Scenes.Lockscreen,
                to = Scenes.QuickSettings,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                lockscreenToQuickSettingsTransition()
                lockscreenToQuickSettingsSceneTransition()
            }
            from(Scenes.Lockscreen, to = Scenes.Gone) { lockscreenToGoneTransition() }
            from(
@@ -172,7 +175,7 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                to = Scenes.Lockscreen,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                reversed { lockscreenToShadeTransition() }
                reversed { lockscreenToShadeSceneTransition() }
                sharedElement(Notifications.Elements.NotificationStackPlaceholder, enabled = false)
                sharedElement(
                    Notifications.Elements.HeadsUpNotificationPlaceholder,
@@ -203,7 +206,7 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
            from(Scenes.Dream, to = Overlays.Bouncer) { dreamToBouncerTransition() }
            from(Overlays.Bouncer, to = Scenes.Dream) { fromBouncerTransition() }
            from(Scenes.Lockscreen, to = Overlays.Bouncer) { lockscreenToBouncerTransition() }
            from(Overlays.Bouncer, to = Scenes.Lockscreen) { fromBouncerTransition() }
            from(Overlays.Bouncer, to = Scenes.Lockscreen) { bouncerToLockscreenTransition() }
            from(
                Scenes.Lockscreen,
                to = Overlays.Bouncer,
@@ -255,25 +258,45 @@ class SceneContainerTransitions : SceneContainerTransitionsBuilder {
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Lockscreen,
                to = Overlays.NotificationsShade,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                lockscreenToNotificationsShadeTransition(
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Lockscreen,
                to = Overlays.NotificationsShade,
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toNotificationsShadeTransition(
                lockscreenToNotificationsShadeTransition(
                    durationScale = 0.9,
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Lockscreen,
                to = Overlays.QuickSettingsShade,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                lockscreenToQuickSettingsOverlayTransition(
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
                )
            }
            from(
                Scenes.Lockscreen,
                to = Overlays.QuickSettingsShade,
                key = SlightlyFasterShadeCollapse,
                cuj = Cuj.CUJ_NOTIFICATION_SHADE_QS_EXPAND_COLLAPSE, // NOTYPO
            ) {
                toQuickSettingsShadeTransition(
                lockscreenToQuickSettingsOverlayTransition(
                    durationScale = 0.9,
                    shadeExpansionMotion = shadeExpansionMotion,
                    revealHaptics = revealHaptics,
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.scene.ui.composable.transitions

import androidx.compose.animation.core.tween
import com.android.compose.animation.scene.TransitionBuilder
import com.android.systemui.plugins.keyguard.ui.composable.elements.LockscreenElementKeys
import kotlin.time.Duration.Companion.milliseconds

fun TransitionBuilder.bouncerToLockscreenTransition(durationScale: Double = 1.0) {
    spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt())

    fromBouncerTransition()

    fractionRange(start = 0.95f) { fade(LockscreenElementKeys.StatusBar) }
    fractionRange(start = 0.8f) { fade(LockscreenElementKeys.Root) }
}

private val DefaultDuration = 500.milliseconds
+1 −1
Original line number Diff line number Diff line
@@ -19,5 +19,5 @@ package com.android.systemui.scene.ui.composable.transitions
import com.android.compose.animation.scene.TransitionBuilder

fun TransitionBuilder.communalToShadeTransition() {
    toShadeTransition()
    toShadeSceneTransition()
}
+1 −1
Original line number Diff line number Diff line
@@ -19,5 +19,5 @@ package com.android.systemui.scene.ui.composable.transitions
import com.android.compose.animation.scene.TransitionBuilder

fun TransitionBuilder.dreamToShadeTransition(durationScale: Double = 1.0) {
    toShadeTransition(durationScale = durationScale)
    toShadeSceneTransition(durationScale = durationScale)
}
Loading