diff --git a/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt b/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt
index 88dfde68..304faee5 100644
--- a/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt
+++ b/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt
@@ -7,6 +7,7 @@ import android.graphics.Matrix
import android.graphics.RectF
import android.graphics.drawable.BitmapDrawable
import android.net.Uri
+import android.text.SpannableString
import android.text.SpannableStringBuilder
import android.text.Spanned
import androidx.car.app.CarContext
@@ -32,6 +33,8 @@ import net.vonforst.evmap.api.createApi
import net.vonforst.evmap.api.nameForPlugType
import net.vonforst.evmap.api.stringProvider
import net.vonforst.evmap.model.ChargeLocation
+import net.vonforst.evmap.model.Cost
+import net.vonforst.evmap.model.FaultReport
import net.vonforst.evmap.model.Favorite
import net.vonforst.evmap.storage.AppDatabase
import net.vonforst.evmap.storage.ChargeLocationsRepository
@@ -244,15 +247,9 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) :
val operatorText = generateOperatorText(charger)
setTitle(operatorText)
- charger.cost?.let { addText(it.getStatusText(carContext, emoji = true)) }
+ charger.cost?.let { addText(generateCostStatusText(it)) }
charger.faultReport?.let { fault ->
- addText(
- carContext.getString(
- R.string.auto_fault_report_date,
- fault.created?.atZone(ZoneId.systemDefault())
- ?.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT))
- )
- )
+ addText(generateFaultReportTitle(fault))
}
}.build())
} else {
@@ -267,20 +264,14 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) :
val operatorText = generateOperatorText(charger)
setTitle(operatorText)
charger.cost?.let {
- addText(it.getStatusText(carContext, emoji = true))
+ addText(generateCostStatusText(it))
it.getDetailText()?.let { addText(it) }
}
}.build())
// row 3: fault report (if exists)
charger.faultReport?.let { fault ->
rows.add(Row.Builder().apply {
- setTitle(
- carContext.getString(
- R.string.auto_fault_report_date,
- fault.created?.atZone(ZoneId.systemDefault())
- ?.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT))
- )
- )
+ setTitle(generateFaultReportTitle(fault))
fault.description?.let {
addText(
HtmlCompat.fromHtml(
@@ -305,6 +296,59 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) :
return rows
}
+ private fun generateCostStatusText(cost: Cost): CharSequence {
+ val string = SpannableString(cost.getStatusText(carContext, emoji = true))
+ // replace emoji with CarIcon
+ string.indexOf('⚡').takeIf { it >= 0 }?.let { index ->
+ string.setSpan(
+ CarIconSpan.create(
+ CarIcon.Builder(
+ IconCompat.createWithResource(
+ carContext,
+ R.drawable.ic_lightning
+ )
+ ).setTint(CarColor.YELLOW).build()
+ ), index, index + 1, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
+ )
+ }
+ string.indexOf('\uD83C').takeIf { it >= 0 }?.let { index ->
+ string.setSpan(
+ CarIconSpan.create(
+ CarIcon.Builder(
+ IconCompat.createWithResource(
+ carContext,
+ R.drawable.ic_parking
+ )
+ ).setTint(CarColor.BLUE).build()
+ ), index, index + 2, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
+ )
+ }
+ return string
+ }
+
+
+ private fun generateFaultReportTitle(fault: FaultReport): CharSequence {
+ val string = SpannableString(
+ carContext.getString(
+ R.string.auto_fault_report_date,
+ fault.created?.atZone(ZoneId.systemDefault())
+ ?.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT))
+ )
+ )
+ // replace emoji with CarIcon
+ string.setSpan(
+ CarIconSpan.create(
+ CarIcon.Builder(
+ IconCompat.createWithResource(
+ carContext,
+ R.drawable.ic_fault_report
+ )
+ ).setTint(CarColor.YELLOW).build()
+ ), 0, 1, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
+ )
+ return string
+ }
+
private fun generateChargepointsText(charger: ChargeLocation): SpannableStringBuilder {
val chargepointsText = SpannableStringBuilder()
charger.chargepointsMerged.forEachIndexed { i, cp ->
diff --git a/app/src/main/res/drawable/ic_lightning.xml b/app/src/main/res/drawable/ic_lightning.xml
new file mode 100644
index 00000000..449f1531
--- /dev/null
+++ b/app/src/main/res/drawable/ic_lightning.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_parking.xml b/app/src/main/res/drawable/ic_parking.xml
new file mode 100644
index 00000000..a9f5ff81
--- /dev/null
+++ b/app/src/main/res/drawable/ic_parking.xml
@@ -0,0 +1,10 @@
+
+
+