summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Julia Tuttle <juliatuttle@google.com> 2024-08-21 13:45:37 -0400
committer Julia Tuttle <juliatuttle@google.com> 2024-08-21 15:05:26 -0400
commit23ec5976b00dfba151554bbe2b67a989ea898aba (patch)
treed89b1c1b3c94b1a4278b3a86ea39d8616e09c7cd
parentab7548ec0406600fe8c27f7fcc8b042a5fbe2966 (diff)
Clean up NotificationScrollViewModel.expandFraction
It got kind of tangly and squished with all the (necessary) nested logic, so split some things out into helper functions. Bug: 347769238 Flag: com.android.systemui.scene_container Test: manual: examine various scene transitions involving the stack Change-Id: I02fe1a1558614bbf45621cde06d076dcc9b259b1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt81
1 files changed, 46 insertions, 35 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
index a20517981f77..afae7065e4d9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/ui/viewmodel/NotificationScrollViewModel.kt
@@ -63,6 +63,37 @@ constructor(
activateFlowDumper()
}
+ private fun expandFractionForScene(scene: SceneKey, shadeExpansion: Float): Float =
+ when (scene) {
+ Scenes.Lockscreen,
+ Scenes.QuickSettings -> 1f
+ else -> shadeExpansion
+ }
+
+ private fun expandFractionForTransition(
+ state: ObservableTransitionState.Transition,
+ shadeExpansion: Float,
+ shadeMode: ShadeMode,
+ qsExpansion: Float,
+ quickSettingsScene: SceneKey
+ ): Float =
+ if (
+ state.isBetween({ it == Scenes.Lockscreen }, { it in SceneFamilies.NotifShade }) ||
+ state.isBetween({ it in SceneFamilies.NotifShade }, { it == quickSettingsScene })
+ ) {
+ 1f
+ } else if (
+ shadeMode != ShadeMode.Split &&
+ state.isBetween({ it in SceneFamilies.Home }, { it == quickSettingsScene })
+ ) {
+ // during QS expansion, increase fraction at same rate as scrim alpha,
+ // but start when scrim alpha is at EXPANSION_FOR_DELAYED_STACK_FADE_IN.
+ (qsExpansion / EXPANSION_FOR_MAX_SCRIM_ALPHA - EXPANSION_FOR_DELAYED_STACK_FADE_IN)
+ .coerceIn(0f, 1f)
+ } else {
+ shadeExpansion
+ }
+
/**
* The expansion fraction of the notification stack. It should go from 0 to 1 when transitioning
* from Gone to Shade scenes, and remain at 1 when in Lockscreen or Shade scenes and while
@@ -77,41 +108,16 @@ constructor(
sceneInteractor.resolveSceneFamily(SceneFamilies.QuickSettings),
) { shadeExpansion, shadeMode, qsExpansion, transitionState, quickSettingsScene ->
when (transitionState) {
- is ObservableTransitionState.Idle -> {
- when (transitionState.currentScene) {
- Scenes.Lockscreen,
- Scenes.QuickSettings -> 1f
- else -> shadeExpansion
- }
- }
- is ObservableTransitionState.Transition -> {
- if (
- (transitionState.fromScene in SceneFamilies.NotifShade &&
- transitionState.toScene == quickSettingsScene) ||
- (transitionState.fromScene in quickSettingsScene &&
- transitionState.toScene in SceneFamilies.NotifShade) ||
- (transitionState.fromScene == Scenes.Lockscreen &&
- transitionState.toScene in SceneFamilies.NotifShade) ||
- (transitionState.fromScene in SceneFamilies.NotifShade &&
- transitionState.toScene == Scenes.Lockscreen)
- ) {
- 1f
- } else if (
- shadeMode != ShadeMode.Split &&
- (transitionState.fromScene in SceneFamilies.Home &&
- transitionState.toScene == quickSettingsScene) ||
- (transitionState.fromScene == quickSettingsScene &&
- transitionState.toScene in SceneFamilies.Home)
- ) {
- // during QS expansion, increase fraction at same rate as scrim alpha,
- // but start when scrim alpha is at EXPANSION_FOR_DELAYED_STACK_FADE_IN.
- (qsExpansion / EXPANSION_FOR_MAX_SCRIM_ALPHA -
- EXPANSION_FOR_DELAYED_STACK_FADE_IN)
- .coerceIn(0f, 1f)
- } else {
- shadeExpansion
- }
- }
+ is ObservableTransitionState.Idle ->
+ expandFractionForScene(transitionState.currentScene, shadeExpansion)
+ is ObservableTransitionState.Transition ->
+ expandFractionForTransition(
+ transitionState,
+ shadeExpansion,
+ shadeMode,
+ qsExpansion,
+ quickSettingsScene
+ )
}
}
.distinctUntilChanged()
@@ -200,3 +206,8 @@ constructor(
fun create(): NotificationScrollViewModel
}
}
+
+private fun ObservableTransitionState.Transition.isBetween(
+ a: (SceneKey) -> Boolean,
+ b: (SceneKey) -> Boolean
+): Boolean = (a(fromScene) && b(toScene)) || (b(fromScene) && a(toScene))