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