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

Commit fd28f1fb authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊
Browse files

feat: adjust dot size accordingly

parent 1d7c8aae
Loading
Loading
Loading
Loading
+17 −34
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ public class DotRenderer {
        }
        ShadowGenerator.Builder builder = new ShadowGenerator.Builder(Color.TRANSPARENT);
        builder.ambientShadowAlpha = 88;
        mBackgroundWithShadow = builder.setupBlurForSize(size).createPill(size, size);
        mBackgroundWithShadow = builder.setupBlurForSize(size).createPill(size, displayCount ? (size - 25) : size);
        mCircleRadius = builder.radius;

        mBitmapOffset = -mBackgroundWithShadow.getHeight() * 0.5f; // Same as width.
@@ -161,27 +161,32 @@ public class DotRenderer {

        mCirclePaint.setColor(params.dotColor);
        mCircleShadowPaint.setColor(params.shadowDotColor);
        if (numNotifications > 9 && numNotifications < 100) {
            canvas.drawRoundRect(new RectF(-mCircleRadius - 10, -mCircleRadius, mCircleRadius + 10, mCircleRadius + 3), 50, 50, mCircleShadowPaint);
            canvas.drawRoundRect(new RectF(-mCircleRadius - 10, -mCircleRadius, mCircleRadius + 10, mCircleRadius), 50, 50, mCirclePaint);
        } else if (numNotifications > 99 && numNotifications < 1000) {
            canvas.drawRoundRect(new RectF(-mCircleRadius - 20, -mCircleRadius, mCircleRadius + 20, mCircleRadius + 3), 50, 50, mCircleShadowPaint);
            canvas.drawRoundRect(new RectF(-mCircleRadius - 20, -mCircleRadius, mCircleRadius + 20, mCircleRadius), 50, 50, mCirclePaint);

        if (numNotifications >= 10 && numNotifications < 1000) {
            canvas.drawRoundRect(new RectF(-mCircleRadius + 10, -mCircleRadius, mCircleRadius + 20, mCircleRadius), 50, 50, mCircleShadowPaint);
            canvas.drawRoundRect(new RectF(-mCircleRadius + 10, -mCircleRadius, mCircleRadius + 20, mCircleRadius), 50, 50, mCirclePaint);
        } else {
            canvas.drawCircle(0, 3, mCircleRadius, mCircleShadowPaint);
            canvas.drawCircle(0, 0, mCircleRadius, mCirclePaint);
            canvas.drawCircle(5, 10, mCircleRadius, mCircleShadowPaint);
            canvas.drawCircle(5, 10, mCircleRadius, mCirclePaint);
        }

        if (mDisplayCount && numNotifications > 0) {
            // Draw the numNotifications text
            mTextPaint.setColor(getCounterTextColor(Color.WHITE));
            mTextPaint.setTextSize(42f);
            mTextPaint.setTypeface(Typeface.DEFAULT_BOLD);
            mTextPaint.setTextSize(32f);
            String text = numToNotation(numNotifications);
            mTextPaint.getTextBounds(text, 0, text.length(), mTextRect);
            float x = (-mTextRect.width() / 2f - mTextRect.left) * getAdjustment(numNotifications);
            float y = mTextRect.height() / 2f - mTextRect.bottom;
            canvas.drawText(text, x, y, mTextPaint);
            if (numNotifications < 10) {
                canvas.drawText(text, -4f, 22f, mTextPaint);
            } else if (numNotifications < 100) {
                canvas.drawText(text, -4f, y, mTextPaint);
            } else if (numNotifications >= 1000) {
                canvas.drawText(text, -14f, 20f, mTextPaint);
            } else {
                canvas.drawText(text, -14f, y, mTextPaint);
            }
        }

        canvas.restore();
@@ -224,26 +229,4 @@ public class DotRenderer {
        @ViewDebug.ExportedProperty(category = "notification dot", formatToHexString = true)
        public int shadowDotColor;
    }

    /**
     * An attempt to adjust digits to their perceived center, they were tuned with Roboto but should
     * (hopefully) work with other OEM fonts as well.
     */
    private float getAdjustment(int number) {
        switch (number) {
            case 1:
                return 1.01f;
            case 2:
                return 0.99f;
            case 3:
            case 4:
            case 6:
                return 0.98f;
            case 7:
                return 1.02f;
            case 9:
                return 0.9f;
        }
        return 1f;
    }
}