OSDN Git Service

Scale all StatusBarIconView status icons to 17dp
authorFabian Kozynski <kozynski@google.com>
Thu, 2 May 2019 21:28:02 +0000 (17:28 -0400)
committerFabian Kozynski <kozynski@google.com>
Tue, 7 May 2019 14:26:40 +0000 (10:26 -0400)
StatusBarIconView will scale status icons to 17dp regardless of the
intrinsic size of the drawable. It uses the intrinisc height of the
icon as that's the most visible when the icons are not the same heihgt.

Also change permission icons in PhoneStatusBarPolicy to use the same as
PrivacyType and guarantee consistency.

Test: observe existing icons, they are same size as before
Test: open camera and maps and observe permission icons, they are same
height as other icons
Test: change themes and check that icons change and are the right size

Fixes: 131851643

Change-Id: Ied8a2f1d96e6a0e5ee456f2babb2b68b803445c9

packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java

index acacc8f..033c4fb 100644 (file)
@@ -40,6 +40,7 @@ import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
 import android.text.TextUtils;
 import android.util.AttributeSet;
+import android.util.DisplayMetrics;
 import android.util.FloatProperty;
 import android.util.Log;
 import android.util.Property;
@@ -73,7 +74,10 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi
      * want to scale them (in a way that doesn't require an asset dump) down 2dp. So
      * 17dp * (15 / 17) = 15dp, the new height.
      */
-    private static final float SYSTEM_ICON_SCALE = 15.f / 17.f;
+    private static final float SYSTEM_ICON_DESIRED_HEIGHT = 15f;
+    private static final float SYSTEM_ICON_INTRINSIC_HEIGHT = 17f;
+    private static final float SYSTEM_ICON_SCALE =
+            SYSTEM_ICON_DESIRED_HEIGHT / SYSTEM_ICON_INTRINSIC_HEIGHT;
     private final int ANIMATION_DURATION_FAST = 100;
 
     public static final int STATE_ICON = 0;
@@ -202,8 +206,25 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi
         updatePivot();
     }
 
+    // Makes sure that all icons are scaled to the same height (15dp). If we cannot get a height
+    // for the icon, it uses the default SCALE (15f / 17f) which is the old behavior
     private void updateIconScaleForSystemIcons() {
-        mIconScale = SYSTEM_ICON_SCALE;
+        float iconHeight = getIconHeightInDps();
+        if (iconHeight != 0) {
+            mIconScale = SYSTEM_ICON_DESIRED_HEIGHT / iconHeight;
+        } else {
+            mIconScale = SYSTEM_ICON_SCALE;
+        }
+    }
+
+    private float getIconHeightInDps() {
+        Drawable d = getDrawable();
+        if (d != null) {
+            return ((float) getDrawable().getIntrinsicHeight() * DisplayMetrics.DENSITY_DEFAULT)
+                    / mDensity;
+        } else {
+            return SYSTEM_ICON_INTRINSIC_HEIGHT;
+        }
     }
 
     public float getIconScaleFullyDark() {
@@ -221,8 +242,8 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi
         if (density != mDensity) {
             mDensity = density;
             reloadDimens();
-            maybeUpdateIconScaleDimens();
             updateDrawable();
+            maybeUpdateIconScaleDimens();
         }
         boolean nightMode = (newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK)
                 == Configuration.UI_MODE_NIGHT_YES;
@@ -305,6 +326,8 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi
             if (!updateDrawable(false /* no clear */)) return false;
             // we have to clear the grayscale tag since it may have changed
             setTag(R.id.icon_is_grayscale, null);
+            // Maybe set scale based on icon height
+            maybeUpdateIconScaleDimens();
         }
         if (!levelEquals) {
             setImageLevel(icon.iconLevel);
index 27368de..50e406f 100644 (file)
@@ -86,7 +86,7 @@ public class PhoneStatusBarPolicy
     private static final String TAG = "PhoneStatusBarPolicy";
     private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
-    public static final int LOCATION_STATUS_ICON_ID = R.drawable.stat_sys_location;
+    public static final int LOCATION_STATUS_ICON_ID = PrivacyType.TYPE_LOCATION.getIconId();
 
     private final String mSlotCast;
     private final String mSlotHotspot;
@@ -230,10 +230,10 @@ public class PhoneStatusBarPolicy
         mIconController.setIconVisibility(mSlotDataSaver, false);
 
         // privacy items
-        mIconController.setIcon(mSlotMicrophone, R.drawable.stat_sys_mic_none,
+        mIconController.setIcon(mSlotMicrophone, PrivacyType.TYPE_MICROPHONE.getIconId(),
                 PrivacyType.TYPE_MICROPHONE.getName(mContext));
         mIconController.setIconVisibility(mSlotMicrophone, false);
-        mIconController.setIcon(mSlotCamera, R.drawable.stat_sys_camera,
+        mIconController.setIcon(mSlotCamera, PrivacyType.TYPE_CAMERA.getIconId(),
                 PrivacyType.TYPE_CAMERA.getName(mContext));
         mIconController.setIconVisibility(mSlotCamera, false);
         mIconController.setIcon(mSlotLocation, LOCATION_STATUS_ICON_ID,