summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Danny Burakov <burakov@google.com> 2025-01-21 03:42:38 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-01-21 03:42:38 -0800
commit11611d23ba70335c849c505975e809c697e9b7e5 (patch)
tree9d87b05e73555c64826368d22117f888d3ac3731
parent016826ea9d67d3b7bec1f041b5a5b2a9701d750a (diff)
parentebbc30cfe846f24f3bd3138cf61c798760a7f6a3 (diff)
Merge "[Dual Shade] Define the user action distance for the notification shade." into main
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToNotificationsShadeTransition.kt15
-rw-r--r--packages/SystemUI/compose/features/src/com/android/systemui/scene/ui/composable/transitions/ToQuickSettingsShadeTransition.kt5
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)