From 5da827473a284abcd18fcc384731891bbeb9284f Mon Sep 17 00:00:00 2001 From: Joshua Soberg Date: Sun, 2 Mar 2025 10:14:12 -0500 Subject: [PATCH] fix #1616 (a11y): Use SP font size for marker labels on the map (#1630) * Use and SP font size for marker labels on the map * Fix detekt issue --- .../java/com/geeksville/mesh/android/ContextExtensions.kt | 5 +++++ .../java/com/geeksville/mesh/model/map/MarkerWithLabel.kt | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/geeksville/mesh/android/ContextExtensions.kt b/app/src/main/java/com/geeksville/mesh/android/ContextExtensions.kt index 47ee3f37e..0035f4b7f 100644 --- a/app/src/main/java/com/geeksville/mesh/android/ContextExtensions.kt +++ b/app/src/main/java/com/geeksville/mesh/android/ContextExtensions.kt @@ -19,6 +19,7 @@ package com.geeksville.mesh.android import android.app.Activity import android.content.Context +import android.util.TypedValue import android.view.inputmethod.InputMethodManager import android.widget.Toast @@ -35,3 +36,7 @@ fun Activity.hideKeyboard() { imm?.hideSoftInputFromWindow(v.windowToken, 0) } } + +// Converts SP to pixels. +fun Context.spToPx(sp: Float): Int = + TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, resources.displayMetrics).toInt() diff --git a/app/src/main/java/com/geeksville/mesh/model/map/MarkerWithLabel.kt b/app/src/main/java/com/geeksville/mesh/model/map/MarkerWithLabel.kt index f0b6824ac..9b5af2560 100644 --- a/app/src/main/java/com/geeksville/mesh/model/map/MarkerWithLabel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/map/MarkerWithLabel.kt @@ -22,6 +22,7 @@ import android.graphics.Color import android.graphics.Paint import android.graphics.RectF import android.view.MotionEvent +import com.geeksville.mesh.android.spToPx import org.osmdroid.views.MapView import org.osmdroid.views.overlay.Marker import org.osmdroid.views.overlay.Polygon @@ -31,6 +32,8 @@ class MarkerWithLabel(mapView: MapView?, label: String, emoji: String? = null) : companion object { private const val LABEL_CORNER_RADIUS = 12F private const val LABEL_Y_OFFSET = 100F + private const val FONT_SIZE_SP = 14f + private const val EMOJI_FONT_SIZE_SP = 20f } private var nodeColor: Int = Color.GRAY @@ -69,14 +72,14 @@ class MarkerWithLabel(mapView: MapView?, label: String, emoji: String? = null) : private val mLabel = label private val mEmoji = emoji private val textPaint = Paint().apply { - textSize = 40f + textSize = mapView?.context?.spToPx(FONT_SIZE_SP)?.toFloat() ?: 40f color = Color.DKGRAY isAntiAlias = true isFakeBoldText = true textAlign = Paint.Align.CENTER } private val emojiPaint = Paint().apply { - textSize = 80f + textSize = mapView?.context?.spToPx(EMOJI_FONT_SIZE_SP)?.toFloat() ?: 80f isAntiAlias = true textAlign = Paint.Align.CENTER }