summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tracy Zhou <tracyzhou@google.com> 2025-02-01 21:06:42 -0800
committer Tracy Zhou <tracyzhou@google.com> 2025-02-03 09:44:30 -0800
commit16bb8044eda5ee42154a586dba3ad795afc6bc49 (patch)
treeaa0e89a00aadee190d64c32a23698498d1ead120
parent6c1a7411b2667ef912193477a92e5bfa8828e925 (diff)
Pipe depth signal to keyguard for spatial model zoom out
Lockscreen should be pushed back when the shade is pulled down. The pushback level is 5%, the same as the homescreen. For the most part of the spatial model work, the implementation is done in WMShell. It scales down the entire display area while filtering out a few specific windows (e.g. nav bar, status bar, shade). Since the lockscreen and the shade share the same window, pushing back the lockscreen has to be done at the view level (we are scaling the root view of the lockscreen here). Bug: 391901376 Test: video in the bug Flag: com.android.systemui.spatial_model_app_pushback Change-Id: I6aad1bf074a43949644f03ef738b392a7865b504
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt3
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt10
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt7
-rw-r--r--packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt3
-rw-r--r--packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt5
7 files changed, 39 insertions, 0 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
index 0a0564994e69..19c20f5e7b22 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
@@ -29,6 +29,7 @@ import com.android.systemui.Flags
import com.android.systemui.SysuiTestCase
import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.dump.DumpManager
+import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.kosmos.testScope
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.res.R
@@ -80,6 +81,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
@Mock private lateinit var blurUtils: BlurUtils
@Mock private lateinit var biometricUnlockController: BiometricUnlockController
@Mock private lateinit var keyguardStateController: KeyguardStateController
+ @Mock private lateinit var keyguardInteractor: KeyguardInteractor
@Mock private lateinit var choreographer: Choreographer
@Mock private lateinit var wallpaperController: WallpaperController
@Mock private lateinit var notificationShadeWindowController: NotificationShadeWindowController
@@ -123,6 +125,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
blurUtils,
biometricUnlockController,
keyguardStateController,
+ keyguardInteractor,
choreographer,
wallpaperController,
notificationShadeWindowController,
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
index 621cc4666d31..da682c6036ee 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/repository/KeyguardRepository.kt
@@ -79,6 +79,8 @@ interface KeyguardRepository {
val panelAlpha: MutableStateFlow<Float>
+ val zoomOut: StateFlow<Float>
+
/**
* Observable for whether the keyguard is showing.
*
@@ -278,6 +280,9 @@ interface KeyguardRepository {
/** Temporary shim for fading out content when the brightness slider is used */
fun setPanelAlpha(alpha: Float)
+ /** Sets the zoom out scale of spatial model pushback from e.g. pulling down the shade. */
+ fun setZoomOut(zoomOutFromShadeRadius: Float)
+
/** Whether the device is actively dreaming */
fun setDreaming(isDreaming: Boolean)
@@ -384,6 +389,7 @@ constructor(
override val onCameraLaunchDetected = MutableStateFlow(CameraLaunchSourceModel())
override val panelAlpha: MutableStateFlow<Float> = MutableStateFlow(1f)
+ override val zoomOut: MutableStateFlow<Float> = MutableStateFlow(0f)
override val topClippingBounds = MutableStateFlow<Int?>(null)
override val isKeyguardShowing: MutableStateFlow<Boolean> =
@@ -665,6 +671,10 @@ constructor(
panelAlpha.value = alpha
}
+ override fun setZoomOut(zoomOutFromShadeRadius: Float) {
+ zoomOut.value = zoomOutFromShadeRadius
+ }
+
override fun setDreaming(isDreaming: Boolean) {
this.isDreaming.value = isDreaming
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
index 75178f0ffef0..82e150bf8a02 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardInteractor.kt
@@ -334,6 +334,9 @@ constructor(
@Deprecated("SceneContainer uses NotificationStackAppearanceInteractor")
val panelAlpha: StateFlow<Float> = repository.panelAlpha.asStateFlow()
+ /** Sets the zoom out scale of spatial model pushback from e.g. pulling down the shade. */
+ val zoomOut: StateFlow<Float> = repository.zoomOut
+
/**
* When the lockscreen can be dismissed, emit an alpha value as the user swipes up. This is
* useful just before the code commits to moving to GONE.
@@ -472,6 +475,10 @@ constructor(
repository.setPanelAlpha(alpha)
}
+ fun setZoomOut(zoomOutFromShadeRadius: Float) {
+ repository.setZoomOut(zoomOutFromShadeRadius)
+ }
+
fun setAnimateDozingTransitions(animate: Boolean) {
repository.setAnimateDozingTransitions(animate)
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
index 70a52afeb8c2..ec2c9ab47225 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/binder/KeyguardRootViewBinder.kt
@@ -177,6 +177,13 @@ object KeyguardRootViewBinder {
}
}
+ launch("$TAG#zoomOut") {
+ viewModel.scaleFromZoomOut.collect { scaleFromZoomOut ->
+ view.scaleX = scaleFromZoomOut
+ view.scaleY = scaleFromZoomOut
+ }
+ }
+
launch("$TAG#translationY") {
// When translation happens in burnInLayer, it won't be weather clock large
// clock isn't added to burnInLayer due to its scale transition so we also
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
index f0c924f99033..deb43f1ac9c8 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/ui/viewmodel/KeyguardRootViewModel.kt
@@ -287,6 +287,9 @@ constructor(
.distinctUntilChanged()
}
+ val scaleFromZoomOut: Flow<Float> =
+ keyguardInteractor.zoomOut.map { 1 - it * PUSHBACK_SCALE_FOR_LOCKSCREEN }
+
val translationY: Flow<Float> = aodBurnInViewModel.movement.map { it.translationY.toFloat() }
val translationX: Flow<StateToValue> =
@@ -408,5 +411,6 @@ constructor(
companion object {
private const val TAG = "KeyguardRootViewModel"
+ private const val PUSHBACK_SCALE_FOR_LOCKSCREEN = 0.05f
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index a2a840942f3c..e3b36df9aed7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -40,6 +40,7 @@ import com.android.systemui.animation.ShadeInterpolation
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dump.DumpManager
+import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
import com.android.systemui.plugins.statusbar.StatusBarStateController
import com.android.systemui.shade.ShadeExpansionChangeEvent
import com.android.systemui.shade.ShadeExpansionListener
@@ -74,6 +75,7 @@ constructor(
private val blurUtils: BlurUtils,
private val biometricUnlockController: BiometricUnlockController,
private val keyguardStateController: KeyguardStateController,
+ private val keyguardInteractor: KeyguardInteractor,
private val choreographer: Choreographer,
private val wallpaperController: WallpaperController,
private val notificationShadeWindowController: NotificationShadeWindowController,
@@ -281,6 +283,7 @@ constructor(
appZoomOutOptional.ifPresent { appZoomOut ->
appZoomOut.setProgress(zoomOutFromShadeRadius)
}
+ keyguardInteractor.setZoomOut(zoomOutFromShadeRadius)
}
listeners.forEach {
it.onWallpaperZoomOutChanged(zoomOutFromShadeRadius)
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
index 8ea80081a871..1952f26b4e6a 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/keyguard/data/repository/FakeKeyguardRepository.kt
@@ -114,6 +114,7 @@ class FakeKeyguardRepository @Inject constructor() : KeyguardRepository {
override val keyguardAlpha: StateFlow<Float> = _keyguardAlpha
override val panelAlpha: MutableStateFlow<Float> = MutableStateFlow(1f)
+ override val zoomOut: MutableStateFlow<Float> = MutableStateFlow(0f)
override val lastRootViewTapPosition: MutableStateFlow<Point?> = MutableStateFlow(null)
@@ -272,6 +273,10 @@ class FakeKeyguardRepository @Inject constructor() : KeyguardRepository {
panelAlpha.value = alpha
}
+ override fun setZoomOut(zoomOutFromShadeRadius: Float) {
+ zoomOut.value = zoomOutFromShadeRadius
+ }
+
fun setIsEncryptedOrLockdown(value: Boolean) {
_isEncryptedOrLockdown.value = value
}