Scale all StatusBarIconView status icons to 17dp

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
This commit is contained in:
Fabian Kozynski
2019-05-02 17:28:02 -04:00
parent 56c006f5a6
commit 718dab9de2
2 changed files with 29 additions and 6 deletions

View 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);

View 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,