Merge "Disable blurs when in battery saver" into sc-dev
This commit is contained in:
@@ -73,14 +73,14 @@ public final class CrossWindowBlurListeners {
|
||||
return instance;
|
||||
}
|
||||
|
||||
boolean isCrossWindowBlurEnabled() {
|
||||
public boolean isCrossWindowBlurEnabled() {
|
||||
synchronized (sLock) {
|
||||
attachInternalListenerIfNeededLocked();
|
||||
return mCrossWindowBlurEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
void addListener(@NonNull @CallbackExecutor Executor executor,
|
||||
public void addListener(@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull Consumer<Boolean> listener) {
|
||||
Preconditions.checkNotNull(listener, "listener 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");
|
||||
|
||||
synchronized (sLock) {
|
||||
|
||||
@@ -63,6 +63,7 @@ import android.service.dreams.IDreamManager;
|
||||
import android.telecom.TelecomManager;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.view.CrossWindowBlurListeners;
|
||||
import android.view.IWindowManager;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.WindowManager;
|
||||
@@ -138,6 +139,12 @@ public class FrameworkServicesModule {
|
||||
return context.getSystemService(DevicePolicyManager.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
static CrossWindowBlurListeners provideCrossWindowBlurListeners() {
|
||||
return CrossWindowBlurListeners.getInstance();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@DisplayId
|
||||
static int provideDisplayId(Context context) {
|
||||
|
||||
@@ -22,6 +22,7 @@ import android.app.ActivityManager
|
||||
import android.content.res.Resources
|
||||
import android.util.IndentingPrintWriter
|
||||
import android.util.MathUtils
|
||||
import android.view.CrossWindowBlurListeners
|
||||
import android.view.SurfaceControl
|
||||
import android.view.ViewRootImpl
|
||||
import androidx.annotation.VisibleForTesting
|
||||
@@ -37,6 +38,7 @@ import javax.inject.Inject
|
||||
@SysUISingleton
|
||||
open class BlurUtils @Inject constructor(
|
||||
@Main private val resources: Resources,
|
||||
private val crossWindowBlurListeners: CrossWindowBlurListeners,
|
||||
dumpManager: DumpManager
|
||||
) : Dumpable {
|
||||
val minBlurRadius = resources.getDimensionPixelSize(R.dimen.min_window_blur_radius)
|
||||
@@ -97,7 +99,8 @@ open class BlurUtils @Inject constructor(
|
||||
* @return {@code true} when supported.
|
||||
*/
|
||||
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>) {
|
||||
|
||||
@@ -186,7 +186,7 @@ class NotificationShadeDepthController @Inject constructor(
|
||||
var blur = max(shadeRadius.toInt(), globalActionsRadius)
|
||||
|
||||
// Make blur be 0 if it is necessary to stop blur effect.
|
||||
if (scrimsVisible) {
|
||||
if (scrimsVisible || !blurUtils.supportsBlursOnWindows()) {
|
||||
blur = 0
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.systemui.statusbar
|
||||
|
||||
import android.content.res.Resources
|
||||
import android.view.CrossWindowBlurListeners
|
||||
import android.view.SurfaceControl
|
||||
import android.view.ViewRootImpl
|
||||
import androidx.test.filters.SmallTest
|
||||
@@ -37,11 +38,13 @@ class BlurUtilsTest : SysuiTestCase() {
|
||||
@Mock lateinit var resources: Resources
|
||||
@Mock lateinit var dumpManager: DumpManager
|
||||
@Mock lateinit var transaction: SurfaceControl.Transaction
|
||||
@Mock lateinit var corssWindowBlurListeners: CrossWindowBlurListeners
|
||||
lateinit var blurUtils: BlurUtils
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
`when`(corssWindowBlurListeners.isCrossWindowBlurEnabled).thenReturn(true)
|
||||
blurUtils = TestableBlurUtils()
|
||||
}
|
||||
|
||||
@@ -71,7 +74,7 @@ class BlurUtilsTest : SysuiTestCase() {
|
||||
verify(transaction).apply()
|
||||
}
|
||||
|
||||
inner class TestableBlurUtils() : BlurUtils(resources, dumpManager) {
|
||||
inner class TestableBlurUtils() : BlurUtils(resources, corssWindowBlurListeners, dumpManager) {
|
||||
override fun supportsBlursOnWindows(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -47,6 +47,7 @@ import org.mockito.Mockito.anyString
|
||||
import org.mockito.Mockito.clearInvocations
|
||||
import org.mockito.Mockito.doThrow
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.reset
|
||||
import org.mockito.Mockito.times
|
||||
import org.mockito.Mockito.verify
|
||||
import org.mockito.junit.MockitoJUnit
|
||||
@@ -90,7 +91,8 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
|
||||
`when`(blurUtils.blurRadiusOfRatio(anyFloat())).then { answer ->
|
||||
(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)
|
||||
|
||||
notificationShadeDepthController = NotificationShadeDepthController(
|
||||
@@ -190,6 +192,14 @@ class NotificationShadeDepthControllerTest : SysuiTestCase() {
|
||||
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
|
||||
fun updateGlobalDialogVisibility_animatesBlur() {
|
||||
notificationShadeDepthController.updateGlobalDialogVisibility(0.5f, root)
|
||||
|
||||
Reference in New Issue
Block a user