Minor Android Auto improvements (#3218)

- Fix low res entity icons
 - Fix domains not being translated
 - Add support for input_button
 - Use domain extension property
This commit is contained in:
Joris Pelgröm 2023-01-12 21:26:40 +01:00 committed by GitHub
parent d1e0f29486
commit d6fbc1e95d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 19 deletions

View file

@ -15,6 +15,7 @@ import androidx.car.app.model.Template
import androidx.lifecycle.lifecycleScope
import com.mikepenz.iconics.IconicsDrawable
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
import com.mikepenz.iconics.utils.sizeDp
import com.mikepenz.iconics.utils.toAndroidIconCompat
import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
@ -57,7 +58,11 @@ class EntityGridVehicleScreen(
.setTitle(entity.friendlyName)
.setText(entity.friendlyState)
.setImage(
CarIcon.Builder(IconicsDrawable(carContext, icon).toAndroidIconCompat())
CarIcon.Builder(
IconicsDrawable(carContext, icon).apply {
sizeDp = 64
}.toAndroidIconCompat()
)
.setTint(CarColor.DEFAULT)
.build()
)

View file

@ -11,12 +11,12 @@ import androidx.car.app.model.ListTemplate
import androidx.car.app.model.Row
import androidx.car.app.model.Template
import androidx.lifecycle.lifecycleScope
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.common.data.integration.IntegrationRepository
import io.homeassistant.companion.android.common.data.integration.domain
import kotlinx.coroutines.launch
import java.util.Locale
import io.homeassistant.companion.android.common.R as commonR
@RequiresApi(Build.VERSION_CODES.O)
class MainVehicleScreen(
@ -27,16 +27,18 @@ class MainVehicleScreen(
companion object {
private const val TAG = "MainVehicleScreen"
private val SUPPORTED_DOMAINS = listOf(
"button",
"cover",
"input_boolean",
"light",
"lock",
"scene",
"script",
"switch",
private val SUPPORTED_DOMAINS_WITH_STRING = mapOf(
"button" to commonR.string.buttons,
"cover" to commonR.string.covers,
"input_boolean" to commonR.string.input_booleans,
"input_button" to commonR.string.input_buttons,
"light" to commonR.string.lights,
"lock" to commonR.string.locks,
"scene" to commonR.string.scenes,
"script" to commonR.string.scripts,
"switch" to commonR.string.switches,
)
private val SUPPORTED_DOMAINS = SUPPORTED_DOMAINS_WITH_STRING.keys
}
private val domains = mutableSetOf<String>()
@ -45,7 +47,7 @@ class MainVehicleScreen(
init {
lifecycleScope.launch {
integrationRepository.getEntities()?.forEach { entity ->
val domain = entity.entityId.split(".")[0]
val domain = entity.domain
if (domain in SUPPORTED_DOMAINS) {
entities[entity.entityId] = entity
domains.add(domain)
@ -58,11 +60,13 @@ class MainVehicleScreen(
override fun onGetTemplate(): Template {
val listBuilder = ItemList.Builder()
domains.forEach { domain ->
val friendlyDomain = domain.split("_").joinToString(" ") { word ->
word.replaceFirstChar {
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
}
}
val friendlyDomain =
SUPPORTED_DOMAINS_WITH_STRING[domain]?.let { carContext.getString(it) }
?: domain.split("_").joinToString(" ") { word ->
word.replaceFirstChar {
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
}
}
listBuilder.addItem(
Row.Builder()
.setTitle(friendlyDomain)

View file

@ -414,9 +414,10 @@ suspend fun <T> Entity<T>.onPressed(
"cover" -> {
if (state == "open") "close_cover" else "open_cover"
}
"button",
"input_button",
"scene",
"script",
"button" -> "press"
"script" -> "press"
"fan",
"input_boolean",
"switch" -> {