Merge "Do not crash if window is invalid" into rvc-dev am: 12a7967791
Change-Id: Id1d5159e79c64263d3abba9c5d2520869a2a0ca1
This commit is contained in:
@@ -20,6 +20,7 @@ import android.animation.Animator
|
||||
import android.animation.AnimatorListenerAdapter
|
||||
import android.animation.ValueAnimator
|
||||
import android.app.WallpaperManager
|
||||
import android.util.Log
|
||||
import android.view.Choreographer
|
||||
import android.view.View
|
||||
import androidx.annotation.VisibleForTesting
|
||||
@@ -38,6 +39,7 @@ import com.android.systemui.statusbar.phone.PanelExpansionListener
|
||||
import com.android.systemui.statusbar.policy.KeyguardStateController
|
||||
import java.io.FileDescriptor
|
||||
import java.io.PrintWriter
|
||||
import java.lang.IllegalArgumentException
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
import kotlin.math.max
|
||||
@@ -58,6 +60,7 @@ class NotificationShadeDepthController @Inject constructor(
|
||||
) : PanelExpansionListener, Dumpable {
|
||||
companion object {
|
||||
private const val WAKE_UP_ANIMATION_ENABLED = true
|
||||
private const val TAG = "DepthController"
|
||||
}
|
||||
|
||||
lateinit var root: View
|
||||
@@ -84,12 +87,18 @@ class NotificationShadeDepthController @Inject constructor(
|
||||
/**
|
||||
* Callback that updates the window blur value and is called only once per frame.
|
||||
*/
|
||||
private val updateBlurCallback = Choreographer.FrameCallback {
|
||||
@VisibleForTesting
|
||||
val updateBlurCallback = Choreographer.FrameCallback {
|
||||
updateScheduled = false
|
||||
|
||||
val blur = max(max(shadeSpring.radius, wakeAndUnlockBlurRadius), globalActionsSpring.radius)
|
||||
blurUtils.applyBlur(blurRoot?.viewRootImpl ?: root.viewRootImpl, blur)
|
||||
wallpaperManager.setWallpaperZoomOut(root.windowToken, blurUtils.ratioOfBlurRadius(blur))
|
||||
try {
|
||||
wallpaperManager.setWallpaperZoomOut(root.windowToken,
|
||||
blurUtils.ratioOfBlurRadius(blur))
|
||||
} catch (e: IllegalArgumentException) {
|
||||
Log.w(TAG, "Can't set zoom. Window is gone: ${root.windowToken}", e)
|
||||
}
|
||||
notificationShadeWindowController.setBackgroundBlurRadius(blur)
|
||||
}
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.mockito.ArgumentCaptor
|
||||
import org.mockito.ArgumentMatchers.anyInt
|
||||
import org.mockito.ArgumentMatchers.eq
|
||||
import org.mockito.Mock
|
||||
import org.mockito.Mockito.`when`
|
||||
@@ -41,8 +42,10 @@ import org.mockito.Mockito.any
|
||||
import org.mockito.Mockito.anyFloat
|
||||
import org.mockito.Mockito.anyString
|
||||
import org.mockito.Mockito.clearInvocations
|
||||
import org.mockito.Mockito.doThrow
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.junit.MockitoJUnit
|
||||
import java.lang.IllegalArgumentException
|
||||
|
||||
@RunWith(AndroidTestingRunner::class)
|
||||
@RunWithLooper
|
||||
@@ -116,6 +119,21 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
|
||||
verify(globalActionsSpring).animateTo(eq(maxBlur / 2), safeEq(root))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun updateBlurCallback_setsBlurAndZoom() {
|
||||
notificationShadeDepthController.updateBlurCallback.doFrame(0)
|
||||
verify(wallpaperManager).setWallpaperZoomOut(any(), anyFloat())
|
||||
verify(blurUtils).applyBlur(any(), anyInt())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun updateBlurCallback_invalidWindow() {
|
||||
doThrow(IllegalArgumentException("test exception")).`when`(wallpaperManager)
|
||||
.setWallpaperZoomOut(any(), anyFloat())
|
||||
notificationShadeDepthController.updateBlurCallback.doFrame(0)
|
||||
verify(wallpaperManager).setWallpaperZoomOut(any(), anyFloat())
|
||||
}
|
||||
|
||||
private fun <T : Any> safeEq(value: T): T {
|
||||
return eq(value) ?: value
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user