From bef966bdfed4b0912d25646b20b9f5498444ee8d Mon Sep 17 00:00:00 2001 From: Uladzislau Petrushkevich Date: Mon, 15 Sep 2025 22:55:05 +0200 Subject: [PATCH] Improvement - do not allocate Paint() in onDraw for Checkmark/Number Button View --- .../habits/list/views/CheckmarkButtonView.kt | 9 ++++++++- .../habits/list/views/NumberButtonView.kt | 10 +++++++++- .../org/isoron/uhabits/utils/ViewExtensions.kt | 17 +++++++++++------ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt index cdd929b29..4d4c53154 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt @@ -135,6 +135,7 @@ class CheckmarkButtonView( private val bgColor = sres.getColor(R.attr.cardBgColor) private val lowContrastColor = sres.getColor(R.attr.contrast40) private val mediumContrastColor = sres.getColor(R.attr.contrast60) + private val pNotesIndicator = Paint() private val paint = TextPaint().apply { typeface = getFontAwesome() @@ -192,7 +193,13 @@ class CheckmarkButtonView( canvas.drawText(label, rect.centerX(), rect.centerY(), paint) } - drawNotesIndicator(canvas, color, em, notes) + drawNotesIndicator( + pNotesIndicator = pNotesIndicator, + canvas = canvas, + color = color, + size = em, + notes = notes, + ) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt index 24b36c186..959e9e1c2 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt @@ -145,6 +145,8 @@ class NumberButtonView( private val lowContrast: Int private val mediumContrast: Int + private val pNotesIndicator = Paint() + private val paint = TextPaint().apply { typeface = getFontAwesome() isAntiAlias = true @@ -234,7 +236,13 @@ class NumberButtonView( canvas.drawText(trimmedUnits, rect.centerX(), rect.centerY(), pUnit) } - drawNotesIndicator(canvas, color, em, notes) + drawNotesIndicator( + pNotesIndicator = pNotesIndicator, + canvas = canvas, + color = color, + size = em, + notes = notes, + ) } } } diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt index d5be78834..3d39093ff 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt @@ -210,13 +210,18 @@ fun View.sp(value: Float) = InterfaceUtils.spToPixels(context, value) fun View.dp(value: Float) = InterfaceUtils.dpToPixels(context, value) fun View.str(id: Int) = resources.getString(id) -fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, notes: String) { - val pNotesIndicator = Paint() +fun View.drawNotesIndicator( + pNotesIndicator: Paint, + canvas: Canvas, + color: Int, + size: Float, + notes: String, +) { + if (notes.isBlank()) return + pNotesIndicator.color = color - if (notes.isNotBlank()) { - val cy = 0.8f * size - canvas.drawCircle(width.toFloat() - cy, cy, 8f, pNotesIndicator) - } + val cy = 0.8f * size + canvas.drawCircle(width.toFloat() - cy, cy, 8f, pNotesIndicator) } val View.sres: StyledResources