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;
|
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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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>) {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user