diff options
| author | 2025-01-21 03:42:38 -0800 | |
|---|---|---|
| committer | 2025-01-21 03:42:38 -0800 | |
| commit | 11611d23ba70335c849c505975e809c697e9b7e5 (patch) | |
| tree | 9d87b05e73555c64826368d22117f888d3ac3731 | |
| parent | 016826ea9d67d3b7bec1f041b5a5b2a9701d750a (diff) | |
| parent | ebbc30cfe846f24f3bd3138cf61c798760a7f6a3 (diff) | |
Merge "[Dual Shade] Define the user action distance for the notification shade." into main
2 files changed, 17 insertions, 3 deletions
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToNotificationsShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToNotificationsShadeTransition.kt index 019639da48c5..b4c60037b426 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToNotificationsShadeTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToNotificationsShadeTransition.kt @@ -17,8 +17,11 @@ package com.android.systemui.scene.ui.composable.transitions import androidx.compose.animation.core.tween +import com.android.compose.animation.scene.ContentKey import com.android.compose.animation.scene.Edge import com.android.compose.animation.scene.TransitionBuilder +import com.android.compose.animation.scene.UserActionDistance +import com.android.compose.animation.scene.UserActionDistanceScope import com.android.systemui.keyguard.ui.composable.blueprint.ClockElementKeys import com.android.systemui.notifications.ui.composable.Notifications import com.android.systemui.notifications.ui.composable.NotificationsShade @@ -28,6 +31,10 @@ import kotlin.time.Duration.Companion.milliseconds fun TransitionBuilder.toNotificationsShadeTransition(durationScale: Double = 1.0) { spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) + distance = UserActionDistance { _, shadeContentKey, _ -> + calculateShadePanelTargetPositionY(shadeContentKey) + } + // Ensure the clock isn't clipped by the shade outline during the transition from lockscreen. sharedElement( ClockElementKeys.smallClockElementKey, @@ -43,4 +50,12 @@ fun TransitionBuilder.toNotificationsShadeTransition(durationScale: Double = 1.0 fractionRange(start = .5f) { fade(Notifications.Elements.NotificationScrim) } } +/** Returns the Y position of the bottom of the shade container panel within [shadeOverlayKey]. */ +fun UserActionDistanceScope.calculateShadePanelTargetPositionY(shadeOverlayKey: ContentKey): Float { + val marginTop = OverlayShade.Elements.Panel.targetOffset(shadeOverlayKey)?.y ?: 0f + val panelHeight = + OverlayShade.Elements.Panel.targetSize(shadeOverlayKey)?.height?.toFloat() ?: 0f + return marginTop + panelHeight +} + private val DefaultDuration = 300.milliseconds diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsShadeTransition.kt b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsShadeTransition.kt index faccf14767b5..c9fbb4da9ffb 100644 --- a/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsShadeTransition.kt +++ b/packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsShadeTransition.kt @@ -25,9 +25,8 @@ import kotlin.time.Duration.Companion.milliseconds fun TransitionBuilder.toQuickSettingsShadeTransition(durationScale: Double = 1.0) { spec = tween(durationMillis = (DefaultDuration * durationScale).inWholeMilliseconds.toInt()) - distance = UserActionDistance { fromContent, _, _ -> - val fromContentSize = checkNotNull(fromContent.targetSize()) - fromContentSize.height.toFloat() * 2 / 3f + distance = UserActionDistance { _, shadeContentKey, _ -> + calculateShadePanelTargetPositionY(shadeContentKey) } translate(OverlayShade.Elements.Panel, Edge.Top) |