Merge "Disable blurs when in battery saver" into sc-dev am: 26308cd40f

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15070038

Change-Id: Iaedeea9c69a08cdaed92d527f684da12982b31b8
This commit is contained in:
Lucas Dupin
2021-06-23 18:59:05 +00:00
committed by Automerger Merge Worker
6 changed files with 30 additions and 7 deletions

View File

@@ -73,14 +73,14 @@ public final class CrossWindowBlurListeners {
return instance; return instance;
} }
boolean isCrossWindowBlurEnabled() { public boolean isCrossWindowBlurEnabled() {
synchronized (sLock) { synchronized (sLock) {
attachInternalListenerIfNeededLocked(); attachInternalListenerIfNeededLocked();
return mCrossWindowBlurEnabled; return mCrossWindowBlurEnabled;
} }
} }
void addListener(@NonNull @CallbackExecutor Executor executor, public void addListener(@NonNull @CallbackExecutor Executor executor,
@NonNull Consumer<Boolean> listener) { @NonNull Consumer<Boolean> listener) {
Preconditions.checkNotNull(listener, "listener cannot be null"); Preconditions.checkNotNull(listener, "listener cannot be null");
Preconditions.checkNotNull(executor, "executor cannot be null"); Preconditions.checkNotNull(executor, "executor cannot be null");
@@ -94,7 +94,7 @@ public final class CrossWindowBlurListeners {
} }
void removeListener(Consumer<Boolean> listener) { public void removeListener(Consumer<Boolean> listener) {
Preconditions.checkNotNull(listener, "listener cannot be null"); Preconditions.checkNotNull(listener, "listener cannot be null");
synchronized (sLock) { synchronized (sLock) {

View File

@@ -63,6 +63,7 @@ import android.service.dreams.IDreamManager;
import android.telecom.TelecomManager; import android.telecom.TelecomManager;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.view.CrossWindowBlurListeners;
import android.view.IWindowManager; import android.view.IWindowManager;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.view.WindowManager; import android.view.WindowManager;
@@ -138,6 +139,12 @@ public class FrameworkServicesModule {
return context.getSystemService(DevicePolicyManager.class); return context.getSystemService(DevicePolicyManager.class);
} }
@Provides
@Singleton
static CrossWindowBlurListeners provideCrossWindowBlurListeners() {
return CrossWindowBlurListeners.getInstance();
}
@Provides @Provides
@DisplayId @DisplayId
static int provideDisplayId(Context context) { static int provideDisplayId(Context context) {

View File

@@ -22,6 +22,7 @@ import android.app.ActivityManager
import android.content.res.Resources import android.content.res.Resources
import android.util.IndentingPrintWriter import android.util.IndentingPrintWriter
import android.util.MathUtils import android.util.MathUtils
import android.view.CrossWindowBlurListeners
import android.view.SurfaceControl import android.view.SurfaceControl
import android.view.ViewRootImpl import android.view.ViewRootImpl
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
@@ -37,6 +38,7 @@ import javax.inject.Inject
@SysUISingleton @SysUISingleton
open class BlurUtils @Inject constructor( open class BlurUtils @Inject constructor(
@Main private val resources: Resources, @Main private val resources: Resources,
private val crossWindowBlurListeners: CrossWindowBlurListeners,
dumpManager: DumpManager dumpManager: DumpManager
) : Dumpable { ) : Dumpable {
val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius) val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius)
@@ -97,7 +99,8 @@ open class BlurUtils @Inject constructor(
* @return {@code true} when supported. * @return {@code true} when supported.
*/ */
open fun supportsBlursOnWindows(): Boolean { open fun supportsBlursOnWindows(): Boolean {
return CROSS_WINDOW_BLUR_SUPPORTED && ActivityManager.isHighEndGfx() return CROSS_WINDOW_BLUR_SUPPORTED && ActivityManager.isHighEndGfx() &&
crossWindowBlurListeners.isCrossWindowBlurEnabled()
} }
override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) { override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {

View File

@@ -186,7 +186,7 @@ class NotificationShadeDepthController @Inject constructor(
var blur = max(shadeRadius.toInt(), globalActionsRadius) var blur = max(shadeRadius.toInt(), globalActionsRadius)
// Make blur be 0 if it is necessary to stop blur effect. // Make blur be 0 if it is necessary to stop blur effect.
if (scrimsVisible) { if (scrimsVisible || !blurUtils.supportsBlursOnWindows()) {
blur = 0 blur = 0
} }

View File

@@ -17,6 +17,7 @@
package com.android.systemui.statusbar package com.android.systemui.statusbar
import android.content.res.Resources import android.content.res.Resources
import android.view.CrossWindowBlurListeners
import android.view.SurfaceControl import android.view.SurfaceControl
import android.view.ViewRootImpl import android.view.ViewRootImpl
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
@@ -37,11 +38,13 @@ class BlurUtilsTest : SysuiTestCase() {
@Mock lateinit var resources: Resources @Mock lateinit var resources: Resources
@Mock lateinit var dumpManager: DumpManager @Mock lateinit var dumpManager: DumpManager
@Mock lateinit var transaction: SurfaceControl.Transaction @Mock lateinit var transaction: SurfaceControl.Transaction
@Mock lateinit var corssWindowBlurListeners: CrossWindowBlurListeners
lateinit var blurUtils: BlurUtils lateinit var blurUtils: BlurUtils
@Before @Before
fun setup() { fun setup() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
`when`(corssWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true)
blurUtils = TestableBlurUtils() blurUtils = TestableBlurUtils()
} }
@@ -71,7 +74,7 @@ class BlurUtilsTest : SysuiTestCase() {
verify(transaction).apply() verify(transaction).apply()
} }
inner class TestableBlurUtils() : BlurUtils(resources, dumpManager) { inner class TestableBlurUtils() : BlurUtils(resources, corssWindowBlurListeners, dumpManager) {
override fun supportsBlursOnWindows(): Boolean { override fun supportsBlursOnWindows(): Boolean {
return true return true
} }

View File

@@ -47,6 +47,7 @@ import org.mockito.Mockito.anyString
import org.mockito.Mockito.clearInvocations import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.doThrow import org.mockito.Mockito.doThrow
import org.mockito.Mockito.never import org.mockito.Mockito.never
import org.mockito.Mockito.reset
import org.mockito.Mockito.times import org.mockito.Mockito.times
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.junit.MockitoJUnit import org.mockito.junit.MockitoJUnit
@@ -90,7 +91,8 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
`when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer -> `when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer ->
(answer.arguments[0] as Float * maxBlur).toInt() (answer.arguments[0] as Float * maxBlur).toInt()
} }
`when`(blurUtils.minBlurRadius).thenReturn(0) `when`(blurUtils.supportsBlursOnWindows()).thenReturn(true)
`when`(blurUtils.maxBlurRadius).thenReturn(maxBlur)
`when`(blurUtils.maxBlurRadius).thenReturn(maxBlur) `when`(blurUtils.maxBlurRadius).thenReturn(maxBlur)
notificationShadeDepthController = NotificationShadeDepthController( notificationShadeDepthController = NotificationShadeDepthController(
@@ -190,6 +192,14 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false)) verify(blurUtils).applyBlur(any(), eq(maxBlur), eq(false))
} }
@Test
fun setFullShadeTransition_appliesBlur_onlyIfSupported() {
reset(blurUtils)
notificationShadeDepthController.transitionToFullShadeProgress = 1f
notificationShadeDepthController.updateBlurCallback.doFrame(0)
verify(blurUtils).applyBlur(any(), eq(0), eq(false))
}
@Test @Test
fun updateGlobalDialogVisibility_animatesBlur() { fun updateGlobalDialogVisibility_animatesBlur() {
notificationShadeDepthController.updateGlobalDialogVisibility(0.5f, root) notificationShadeDepthController.updateGlobalDialogVisibility(0.5f, root)