diff --git a/app/src/google/java/net/vonforst/evmap/auto/CarAppService.kt b/app/src/google/java/net/vonforst/evmap/auto/CarAppService.kt index f815d43b..ab7b53a5 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/CarAppService.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/CarAppService.kt @@ -42,7 +42,10 @@ import net.vonforst.evmap.ui.availabilityText import net.vonforst.evmap.ui.getMarkerTint import net.vonforst.evmap.utils.distanceBetween import java.time.Duration +import java.time.ZoneId import java.time.ZonedDateTime +import java.time.format.DateTimeFormatter +import java.time.format.FormatStyle import kotlin.math.roundToInt interface LocationAwareScreen { @@ -421,8 +424,7 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) : GoingElectricApi.create(apikey, context = ctx) } - private val iconScale = 64f / 44 - private val iconGen = ChargerIconGenerator(carContext, null, oversize = iconScale) + private val iconGen = ChargerIconGenerator(carContext, null, oversize = 1.4f, height = 64) override fun getTemplate(): Template { if (charger == null) loadCharger() @@ -436,8 +438,7 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) : val icon = iconGen.getBitmap( tint = getMarkerTint(charger), fault = charger.faultReport != null, - multi = charger.isMulti(), - scale = iconScale + multi = charger.isMulti() ) setImage( CarIcon.of(IconCompat.createWithBitmap(icon)), @@ -482,6 +483,15 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) : setTitle(operatorText) charger.cost?.let { addText(it.getStatusText(carContext, emoji = true)) } + charger.faultReport?.created?.let { + addText( + carContext.getString( + R.string.auto_fault_report_date, + it.atZone(ZoneId.systemDefault()) + .format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)) + ) + ) + } /*val types = charger.chargepoints.map { it.type }.distinct() if (types.size == 1) { diff --git a/app/src/google/res/values-de/values.xml b/app/src/google/res/values-de/values.xml index f9ac7f37..3953081d 100644 --- a/app/src/google/res/values-de/values.xml +++ b/app/src/google/res/values-de/values.xml @@ -14,4 +14,5 @@ Auf Telefon zulassen In der Nähe Favoriten + ⚠️ Störungsmeldung (%s) \ No newline at end of file diff --git a/app/src/google/res/values/values.xml b/app/src/google/res/values/values.xml index 02695d37..4e2db896 100644 --- a/app/src/google/res/values/values.xml +++ b/app/src/google/res/values/values.xml @@ -19,4 +19,5 @@ Grant on phone Nearby chargers Favorites + ⚠️ Fault report (%s) \ No newline at end of file diff --git a/app/src/main/java/net/vonforst/evmap/ui/IconGenerators.kt b/app/src/main/java/net/vonforst/evmap/ui/IconGenerators.kt index f2ad37f1..e6660d19 100644 --- a/app/src/main/java/net/vonforst/evmap/ui/IconGenerators.kt +++ b/app/src/main/java/net/vonforst/evmap/ui/IconGenerators.kt @@ -46,7 +46,8 @@ class ChargerIconGenerator( val context: Context, val factory: BitmapDescriptorFactory?, val scaleResolution: Int = 20, - val oversize: Float = 1.4f // increase to add padding for fault icon or scale > 1 + val oversize: Float = 1.4f, // increase to add padding for fault icon or scale > 1 + val height: Int = 44 ) { private data class BitmapData( val tint: Int, @@ -142,17 +143,22 @@ class ChargerIconGenerator( DrawableCompat.setTint(vd, ContextCompat.getColor(context, data.tint)); DrawableCompat.setTintMode(vd, PorterDuff.Mode.MULTIPLY); - val leftPadding = vd.intrinsicWidth * (oversize - 1) / 2 - val topPadding = vd.intrinsicHeight * (oversize - 1) + val density = context.resources.displayMetrics.density + val width = + (height.toFloat() * density / vd.intrinsicHeight * vd.intrinsicWidth).roundToInt() + val height = (height * density).roundToInt() + + val leftPadding = width * (oversize - 1) / 2 + val topPadding = height * (oversize - 1) vd.setBounds( leftPadding.toInt(), topPadding.toInt(), - leftPadding.toInt() + vd.intrinsicWidth, - topPadding.toInt() + vd.intrinsicHeight + leftPadding.toInt() + width, + topPadding.toInt() + height ) vd.alpha = data.alpha val bm = Bitmap.createBitmap( - (vd.intrinsicWidth * oversize).toInt(), (vd.intrinsicHeight * oversize).toInt(), + (width * oversize).toInt(), (height * oversize).toInt(), Bitmap.Config.ARGB_8888 ) val canvas = Canvas(bm) @@ -161,8 +167,8 @@ class ChargerIconGenerator( canvas.scale( scale, scale, - leftPadding + vd.intrinsicWidth / 2f, - topPadding + vd.intrinsicHeight.toFloat() + leftPadding + width / 2f, + topPadding + height.toFloat() ) vd.draw(canvas) @@ -172,8 +178,8 @@ class ChargerIconGenerator( val highlightDrawable = ContextCompat.getDrawable(context, hIcon)!! highlightDrawable.setBounds( leftPadding.toInt(), topPadding.toInt(), - leftPadding.toInt() + vd.intrinsicWidth, - topPadding.toInt() + vd.intrinsicHeight + leftPadding.toInt() + width, + topPadding.toInt() + height ) highlightDrawable.alpha = data.alpha highlightDrawable.draw(canvas) @@ -183,7 +189,7 @@ class ChargerIconGenerator( val faultDrawable = ContextCompat.getDrawable(context, faultIcon)!! val faultSize = 0.75 val faultShift = 0.25 - val base = vd.intrinsicWidth + val base = width faultDrawable.setBounds( (leftPadding.toInt() + base * (1 - faultSize + faultShift)).toInt(), (topPadding.toInt() - base * faultShift).toInt(),