OSDN Git Service

Scrim opacity varies based on notification count
authorLucas Dupin <dupin@google.com>
Thu, 25 May 2017 00:04:47 +0000 (17:04 -0700)
committerLucas Dupin <dupin@google.com>
Fri, 26 May 2017 23:39:44 +0000 (16:39 -0700)
Test: visual
Bug: 62068907
Change-Id: I7055f47443bf6520e42c00797d5c76108a824465

packages/SystemUI/src/com/android/systemui/statusbar/ScrimView.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

index a6c0cd1..ae6667f 100644 (file)
@@ -250,8 +250,7 @@ public class ScrimView extends View implements ConfigurationController.Configura
         }
     }
 
-    @VisibleForTesting
-    float getViewAlpha() {
+    public float getViewAlpha() {
         return mViewAlpha;
     }
 
index 01f740f..69f5135 100644 (file)
@@ -25,9 +25,8 @@ import android.content.Context;
 import android.graphics.Color;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
-import android.support.v4.graphics.ColorUtils;
 import android.util.Log;
-import android.util.TypedValue;
+import android.util.MathUtils;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
@@ -57,8 +56,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
             = new PathInterpolator(0f, 0, 0.7f, 1f);
     public static final Interpolator KEYGUARD_FADE_OUT_INTERPOLATOR_LOCKED
             = new PathInterpolator(0.3f, 0f, 0.8f, 1f);
-    public static final float GRADIENT_SCRIM_ALPHA = 0.75f;
-    protected static final float SCRIM_BEHIND_ALPHA_KEYGUARD = 0.45f;
+    // Default alpha value for most scrims, if unsure use this constant
+    public static final float GRADIENT_SCRIM_ALPHA = 0.60f;
+    // A scrim varies its opacity based on a busyness factor, for example
+    // how many notifications are currently visible.
+    public static final float GRADIENT_SCRIM_ALPHA_BUSY = 0.90f;
+    protected static final float SCRIM_BEHIND_ALPHA_KEYGUARD = GRADIENT_SCRIM_ALPHA;
     protected static final float SCRIM_BEHIND_ALPHA_UNLOCKING = 0.2f;
     private static final float SCRIM_IN_FRONT_ALPHA = GRADIENT_SCRIM_ALPHA;
     private static final float SCRIM_IN_FRONT_ALPHA_LOCKED = GRADIENT_SCRIM_ALPHA;
@@ -256,6 +259,19 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
         return mDozeInFrontAlpha;
     }
 
+    public void setNotificationCount(int notificationCount) {
+        final float maxNotificationDensity = 3;
+        float notificationDensity = Math.min(notificationCount / maxNotificationDensity, 1f);
+        float newAlpha = MathUtils.map(0, 1,
+                GRADIENT_SCRIM_ALPHA, GRADIENT_SCRIM_ALPHA_BUSY,
+                notificationDensity);
+        if (mScrimBehindAlphaKeyguard != newAlpha) {
+            mScrimBehindAlphaKeyguard = newAlpha;
+            mAnimateChange = true;
+            scheduleUpdate();
+        }
+    }
+
     private float getScrimInFrontAlpha() {
         return mKeyguardUpdateMonitor.needsSlowUnlockTransition()
                 ? SCRIM_IN_FRONT_ALPHA_LOCKED
index 01bab3f..d7487ec 100644 (file)
@@ -6772,6 +6772,9 @@ public class StatusBar extends SystemUI implements DemoMode,
         // another "changeViewPosition" call is ever added.
         mStackScroller.changeViewPosition(mNotificationShelf,
                 mStackScroller.getChildCount() - offsetFromEnd);
+
+        // Scrim opacity varies based on notification count
+        mScrimController.setNotificationCount(mStackScroller.getNotGoneChildCount());
     }
 
     public boolean shouldShowOnKeyguard(StatusBarNotification sbn) {