diff options
| author | 2020-06-08 13:48:33 +0800 | |
|---|---|---|
| committer | 2020-06-08 17:20:42 +0800 | |
| commit | 280d945d00325323ef784868b65d11b987494e19 (patch) | |
| tree | 5049245dffd7bb24b0eb345b3e6d4c12fbcd13e0 | |
| parent | 8083336a8897437f8290de43d30e7fb1b62e9fda (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.java | 23 |
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; |