summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Dupin <dupin@google.com> 2021-03-22 11:00:35 -0700
committer Lucas Dupin <dupin@google.com> 2021-03-22 11:00:35 -0700
commite7e80b5031fbf2fbda4611b47b677944044c49f2 (patch)
tree9fa09b043cd219305ecff850ebc057f2126bef34
parent406c9fb61c516fe8f771868f7f3a526262ef8568 (diff)
Do not call WM until we have a window token
Ensuring that we won't ask WM to set a zoom until we have a window token, also guarding against it on WallpaperManager. Test: atest NotificationShadeDepthControllerTest Fixes: 177637619 Change-Id: I0c775acf3a1045fc5b1b6540d981dea92fda91d6
-rw-r--r--core/java/android/app/WallpaperManager.java12
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt3
3 files changed, 13 insertions, 4 deletions
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 3ef6757ade60..6a71c92fbc37 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -1962,14 +1962,20 @@ public class WallpaperManager {
}
/**
- * Set the current zoom out level of the wallpaper
+ * Set the current zoom out level of the wallpaper.
+ *
+ * @param windowToken window requesting wallpaper zoom. Zoom level will only be applier while
+ * such window is visible.
* @param zoom from 0 to 1 (inclusive) where 1 means fully zoomed out, 0 means fully zoomed in
*
* @hide
*/
- public void setWallpaperZoomOut(IBinder windowToken, float zoom) {
+ public void setWallpaperZoomOut(@NonNull IBinder windowToken, float zoom) {
if (zoom < 0 || zoom > 1f) {
- throw new IllegalArgumentException("zoom must be between 0 and one: " + zoom);
+ throw new IllegalArgumentException("zoom must be between 0 and 1: " + zoom);
+ }
+ if (windowToken == null) {
+ throw new IllegalArgumentException("windowToken must not be null");
}
try {
WindowManagerGlobal.getWindowSession().setWallpaperZoomOut(windowToken, zoom);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index ead6d32f3a7f..e27c1a21b8cb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -189,7 +189,7 @@ class NotificationShadeDepthController @Inject constructor(
blurUtils.applyBlur(blurRoot?.viewRootImpl ?: root.viewRootImpl, blur)
val zoomOut = blurUtils.ratioOfBlurRadius(blur)
try {
- if (root.isAttachedToWindow) {
+ if (root.isAttachedToWindow && root.windowToken != null) {
wallpaperManager.setWallpaperZoomOut(root.windowToken, zoomOut)
} else {
Log.i(TAG, "Won't set zoom. Window not attached $root")
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
index 0bf1ac31c9dd..e65db5ea4192 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationShadeDepthControllerTest.kt
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar
import android.app.WallpaperManager
+import android.os.IBinder
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper.RunWithLooper
import android.view.Choreographer
@@ -64,6 +65,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
@Mock private lateinit var dumpManager: DumpManager
@Mock private lateinit var root: View
@Mock private lateinit var viewRootImpl: ViewRootImpl
+ @Mock private lateinit var windowToken: IBinder
@Mock private lateinit var shadeSpring: NotificationShadeDepthController.DepthAnimation
@Mock private lateinit var shadeAnimation: NotificationShadeDepthController.DepthAnimation
@Mock private lateinit var globalActionsSpring: NotificationShadeDepthController.DepthAnimation
@@ -80,6 +82,7 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
@Before
fun setup() {
`when`(root.viewRootImpl).thenReturn(viewRootImpl)
+ `when`(root.windowToken).thenReturn(windowToken)
`when`(root.isAttachedToWindow).thenReturn(true)
`when`(statusBarStateController.state).then { statusBarState }
`when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer ->