Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23cf917f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix advanced icon will incorrect when change display size" into rvc-dev...

Merge "Fix advanced icon will incorrect when change display size" into rvc-dev am: 7e751a08 am: 69c4bfc6 am: f3b15841

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11782204

Change-Id: I7f0d15f267f2ebd9b49d966664c0c6808db44190
parents 0e7b9837 f3b15841
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -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;