summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/ImageWallpaper.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt30
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java13
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java4
4 files changed, 45 insertions, 6 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 23fa645eff16..5442299881c0 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -120,7 +120,7 @@ public class ImageWallpaper extends WallpaperService {
private void init(DozeParameters dozeParameters) {
mIsHighEndGfx = ActivityManager.isHighEndGfx();
mDisplayNeedsBlanking = dozeParameters.getDisplayNeedsBlanking();
- mNeedTransition = mIsHighEndGfx && !mDisplayNeedsBlanking;
+ mNeedTransition = false;
// We will preserve EGL context when we are in lock screen or aod
// to avoid janking in following transition, we need to release when back to home.
@@ -137,7 +137,7 @@ public class ImageWallpaper extends WallpaperService {
mRenderer = getRendererInstance();
getDisplayContext().getDisplay().getDisplayInfo(mDisplayInfo);
setFixedSizeAllowed(true);
- setOffsetNotificationsEnabled(true);
+ setOffsetNotificationsEnabled(mNeedTransition);
updateSurfaceSize();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
index 55d3e8372b01..729f934937da 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShadeDepthController.kt
@@ -38,6 +38,7 @@ import com.android.systemui.statusbar.phone.BiometricUnlockController
import com.android.systemui.statusbar.phone.BiometricUnlockController.MODE_WAKE_AND_UNLOCK
import com.android.systemui.statusbar.phone.NotificationShadeWindowController
import com.android.systemui.statusbar.phone.PanelExpansionListener
+import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.statusbar.policy.KeyguardStateController
import java.io.FileDescriptor
import java.io.PrintWriter
@@ -107,6 +108,16 @@ class NotificationShadeDepthController @Inject constructor(
}
/**
+ * Force stop blur effect when necessary.
+ */
+ private var scrimsVisible: Boolean = false
+ set(value) {
+ if (field == value) return
+ field = value
+ scheduleUpdate()
+ }
+
+ /**
* Blur radius of the wake-up animation on this frame.
*/
private var wakeAndUnlockBlurRadius = 0
@@ -142,7 +153,13 @@ class NotificationShadeDepthController @Inject constructor(
if (showingHomeControls) {
globalActionsRadius = 0
}
- val blur = max(shadeRadius.toInt(), globalActionsRadius)
+ var blur = max(shadeRadius.toInt(), globalActionsRadius)
+
+ // Make blur be 0 if it is necessary to stop blur effect.
+ if (scrimsVisible) {
+ blur = 0
+ }
+
blurUtils.applyBlur(blurRoot?.viewRootImpl ?: root.viewRootImpl, blur)
try {
wallpaperManager.setWallpaperZoomOut(root.windowToken,
@@ -202,6 +219,10 @@ class NotificationShadeDepthController @Inject constructor(
brightnessMirrorSpring.finishIfRunning()
}
}
+
+ override fun onDozeAmountChanged(linear: Float, eased: Float) {
+ wakeAndUnlockBlurRadius = blurUtils.blurRadiusOfRatio(eased)
+ }
}
init {
@@ -210,6 +231,10 @@ class NotificationShadeDepthController @Inject constructor(
keyguardStateController.addCallback(keyguardStateCallback)
}
statusBarStateController.addCallback(statusBarStateCallback)
+ notificationShadeWindowController.setScrimsVisibilityListener {
+ // Stop blur effect when scrims is opaque to avoid unnecessary GPU composition.
+ visibility -> scrimsVisible = visibility == ScrimController.OPAQUE
+ }
}
/**
@@ -225,7 +250,8 @@ class NotificationShadeDepthController @Inject constructor(
private fun updateShadeBlur() {
var newBlur = 0
- if (statusBarStateController.state == StatusBarState.SHADE) {
+ val state = statusBarStateController.state
+ if (state == StatusBarState.SHADE || state == StatusBarState.SHADE_LOCKED) {
val animatedBlur =
Interpolators.SHADE_ANIMATION.getInterpolation(
MathUtils.constrain(shadeExpansion / 0.15f, 0f, 1f))
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
index e1e679f06eef..462b42a44c17 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowController.java
@@ -61,6 +61,7 @@ import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.function.Consumer;
import javax.inject.Inject;
import javax.inject.Singleton;
@@ -92,6 +93,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
private final State mCurrentState = new State();
private OtherwisedCollapsedListener mListener;
private ForcePluginOpenListener mForcePluginOpenListener;
+ private Consumer<Integer> mScrimsVisibilityListener;
private final ArrayList<WeakReference<StatusBarWindowCallback>>
mCallbacks = Lists.newArrayList();
@@ -150,6 +152,16 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
mCallbacks.add(new WeakReference<StatusBarWindowCallback>(callback));
}
+ /**
+ * Register a listener to monitor scrims visibility
+ * @param listener A listener to monitor scrims visibility
+ */
+ public void setScrimsVisibilityListener(Consumer<Integer> listener) {
+ if (listener != null && mScrimsVisibilityListener != listener) {
+ mScrimsVisibilityListener = listener;
+ }
+ }
+
private boolean shouldEnableKeyguardScreenRotation() {
Resources res = mContext.getResources();
return SystemProperties.getBoolean("lockscreen.rot_override", false)
@@ -477,6 +489,7 @@ public class NotificationShadeWindowController implements Callback, Dumpable,
public void setScrimsVisibility(int scrimsVisibility) {
mCurrentState.mScrimsVisibility = scrimsVisibility;
apply(mCurrentState);
+ mScrimsVisibilityListener.accept(scrimsVisibility);
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
index 475023e2506d..5227aaf01249 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/ImageWallpaperTest.java
@@ -160,7 +160,7 @@ public class ImageWallpaperTest extends SysuiTestCase {
LOW_BMP_HEIGHT /* bmpHeight */,
LOW_BMP_WIDTH /* surfaceWidth */,
LOW_BMP_HEIGHT /* surfaceHeight */,
- true /* assertion */);
+ false /* assertion */);
}
@Test
@@ -172,7 +172,7 @@ public class ImageWallpaperTest extends SysuiTestCase {
INVALID_BMP_HEIGHT /* bmpHeight */,
ImageWallpaper.GLEngine.MIN_SURFACE_WIDTH /* surfaceWidth */,
ImageWallpaper.GLEngine.MIN_SURFACE_HEIGHT /* surfaceHeight */,
- true /* assertion */);
+ false /* assertion */);
}
private void verifySurfaceSizeAndAssertTransition(int bmpWidth, int bmpHeight,