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

Commit 84f26ac1 authored by Robyn Coultas's avatar Robyn Coultas Committed by Isaac Katzenelson
Browse files

speed-up and fix leak to draw the circle timer's diamond

Bug: 7278898

Change-Id: Icc2e986fc1a5091e51ac1e19a9c08e7527ef71f8
parent fb1c2831
Loading
Loading
Loading
Loading
−633 B
Loading image diff...
−538 B
Loading image diff...
−750 B
Loading image diff...
+12 −23
Original line number Diff line number Diff line
@@ -4,17 +4,9 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.View;

@@ -38,8 +30,9 @@ public class CircleTimerView extends View {
    private static float mDiamondStrokeSize = 12;
    private static float mMarkerStrokeSize = 2;
    private final Paint mPaint = new Paint();
    private final Paint mFill = new Paint();
    private final RectF mArcRect = new RectF();
    private Bitmap mDiamondBitmap = null;
    private float mRectHalfWidth = 6f;
    private Resources mResources;
    private float mRadiusOffset;   // amount to remove from radius to account for markers on circle
    private float mScreenDensity;
@@ -135,9 +128,12 @@ public class CircleTimerView extends View {
        mPaint.setStyle(Paint.Style.STROKE);
        mWhiteColor = mResources.getColor(R.color.clock_white);
        mRedColor = mResources.getColor(R.color.clock_red);
        mDiamondBitmap = BitmapFactory.decodeResource(mResources, R.drawable.ic_diamond_red);
        mScreenDensity = mResources.getDisplayMetrics().density;
        mRadiusOffset = Math.max(mStrokeSize, Math.max(mDiamondStrokeSize, mMarkerStrokeSize));
        mFill.setAntiAlias(true);
        mFill.setStyle(Paint.Style.FILL);
        mFill.setColor(mRedColor);
        mRectHalfWidth = mDiamondStrokeSize / 2f;
    }

    public void setTimerMode(boolean mode) {
@@ -208,20 +204,13 @@ public class CircleTimerView extends View {
                diamondPercent = 270 + redPercent * 360;
            }

            Matrix rotator = new Matrix();
            final int width = mDiamondBitmap.getWidth();
            final int height = mDiamondBitmap.getHeight();
            rotator.setRotate(diamondPercent, (float) width / 2, (float) height / 2);
            Bitmap rotatedDiamondBitmap =
                    Bitmap.createBitmap(mDiamondBitmap, 0, 0, width, height, rotator, true);
            canvas.save();
            final double diamondRadians = Math.toRadians(diamondPercent);
            final float diamondXPos =
                    (float) (xCenter + radius * Math.cos(diamondRadians)) -
                            rotatedDiamondBitmap.getWidth() / 2;
            final float diamondYPos =
                    (float) (yCenter + radius * Math.sin(diamondRadians)) -
                            rotatedDiamondBitmap.getHeight() / 2;
            canvas.drawBitmap(rotatedDiamondBitmap, diamondXPos, diamondYPos, mPaint);
            canvas.translate(xCenter + (float) (radius * Math.cos(diamondRadians)),
                    yCenter + (float) (radius * Math.sin(diamondRadians)));
            canvas.rotate(diamondPercent + 45f);
            canvas.drawRect(-mRectHalfWidth, -mRectHalfWidth, mRectHalfWidth, mRectHalfWidth, mFill);
            canvas.restore();
         }
    }