summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Hugh Chen <hughchen@google.com> 2020-06-08 13:48:33 +0800
committer Hugh Chen <hughchen@google.com> 2020-06-08 17:20:42 +0800
commit280d945d00325323ef784868b65d11b987494e19 (patch)
tree5049245dffd7bb24b0eb345b3e6d4c12fbcd13e0
parent8083336a8897437f8290de43d30e7fb1b62e9fda (diff)
Fix advanced icon will incorrect when change display size
The value of radius will change when user adjust display size. This CL will calculate the radius rate base on display size to draw the icon. Bug: 156689249 Test: build pass Change-Id: I2701624742c3ecf8667a5626e2a621ee7aaf0ecb
-rw-r--r--packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java23
1 files changed, 22 insertions, 1 deletions
diff --git a/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java b/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java
index 4438893dabfc..3bf43dd4d1bf 100644
--- a/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java
+++ b/packages/SettingsLib/AdaptiveIcon/src/com/android/settingslib/widget/AdaptiveOutlineDrawable.java
@@ -29,7 +29,12 @@ import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.DrawableWrapper;
+import android.os.RemoteException;
+import android.util.DisplayMetrics;
import android.util.PathParser;
+import android.view.Display;
+import android.view.IWindowManager;
+import android.view.WindowManagerGlobal;
import androidx.annotation.IntDef;
import androidx.annotation.VisibleForTesting;
@@ -56,6 +61,7 @@ public class AdaptiveOutlineDrawable extends DrawableWrapper {
private int mStrokeWidth;
private Bitmap mBitmap;
private int mType;
+ private float mDensity;
public AdaptiveOutlineDrawable(Resources resources, Bitmap bitmap) {
super(new AdaptiveIconShapeDrawable(resources));
@@ -77,6 +83,7 @@ public class AdaptiveOutlineDrawable extends DrawableWrapper {
mPath = new Path(PathParser.createPathFromPathData(
resources.getString(com.android.internal.R.string.config_icon_mask)));
mStrokeWidth = resources.getDimensionPixelSize(R.dimen.adaptive_outline_stroke);
+ mDensity = resources.getDisplayMetrics().density;
mOutlinePaint = new Paint();
mOutlinePaint.setColor(getColor(resources, type));
mOutlinePaint.setStyle(Paint.Style.STROKE);
@@ -130,7 +137,12 @@ public class AdaptiveOutlineDrawable extends DrawableWrapper {
if (mType == TYPE_DEFAULT) {
canvas.drawPath(mPath, mOutlinePaint);
} else {
- canvas.drawCircle(2 * mInsetPx, 2 * mInsetPx, 2 * mInsetPx - mStrokeWidth,
+ final float defaultDensity = getDefaultDisplayDensity(Display.DEFAULT_DISPLAY)
+ / (float) DisplayMetrics.DENSITY_DEFAULT;
+ final int insetPx =
+ Math.round(mInsetPx / (float) (Math.floor(
+ (mDensity / defaultDensity) * 100) / 100.0));
+ canvas.drawCircle(2 * insetPx, 2 * insetPx, 2 * insetPx - mStrokeWidth,
mOutlinePaint);
}
canvas.restoreToCount(count);
@@ -139,6 +151,15 @@ public class AdaptiveOutlineDrawable extends DrawableWrapper {
canvas.drawBitmap(mBitmap, bounds.left + mInsetPx, bounds.top + mInsetPx, null);
}
+ private static int getDefaultDisplayDensity(int displayId) {
+ try {
+ final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
+ return wm.getInitialDisplayDensity(displayId);
+ } catch (RemoteException exc) {
+ return -1;
+ }
+ }
+
@Override
public int getIntrinsicHeight() {
return mBitmap.getHeight() + 2 * mInsetPx;