Android Auto: display fault reports

This commit is contained in:
Johan von Forstner
2021-01-02 16:01:21 +01:00
committed by johan12345
parent f74bb8e4a5
commit bb92d26be9
4 changed files with 33 additions and 15 deletions

View File

@@ -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) {

View File

@@ -14,4 +14,5 @@
<string name="grant_on_phone">Auf Telefon zulassen</string>
<string name="auto_chargers_closeby">In der Nähe</string>
<string name="auto_favorites">Favoriten</string>
<string name="auto_fault_report_date">⚠️ Störungsmeldung (%s)</string>
</resources>

View File

@@ -19,4 +19,5 @@
<string name="grant_on_phone">Grant on phone</string>
<string name="auto_chargers_closeby">Nearby chargers</string>
<string name="auto_favorites">Favorites</string>
<string name="auto_fault_report_date">⚠️ Fault report (%s)</string>
</resources>

View File

@@ -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(),