mirror of
https://github.com/home-assistant/android
synced 2024-10-07 00:29:32 +00:00
Hide hidden entities from android auto domains (#3731)
* Hide hidden entities from android auto domains * Fix import order
This commit is contained in:
parent
862301ce3f
commit
0be1749f4c
|
@ -9,6 +9,7 @@ import androidx.car.app.model.CarColor
|
|||
import androidx.car.app.model.CarIcon
|
||||
import androidx.car.app.model.GridItem
|
||||
import androidx.car.app.model.ItemList
|
||||
import androidx.lifecycle.LifecycleCoroutineScope
|
||||
import com.mikepenz.iconics.IconicsDrawable
|
||||
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
|
||||
import com.mikepenz.iconics.utils.sizeDp
|
||||
|
@ -20,7 +21,9 @@ import io.homeassistant.companion.android.common.data.integration.domain
|
|||
import io.homeassistant.companion.android.common.data.integration.getIcon
|
||||
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
|
||||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse
|
||||
import io.homeassistant.companion.android.common.util.capitalize
|
||||
import io.homeassistant.companion.android.util.RegistriesDataHandler
|
||||
import io.homeassistant.companion.android.vehicle.ChangeServerScreen
|
||||
import io.homeassistant.companion.android.vehicle.DomainListScreen
|
||||
import io.homeassistant.companion.android.vehicle.EntityGridVehicleScreen
|
||||
|
@ -28,6 +31,7 @@ import io.homeassistant.companion.android.vehicle.MapVehicleScreen
|
|||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Calendar
|
||||
import java.util.Locale
|
||||
|
||||
|
@ -113,7 +117,9 @@ fun getDomainList(
|
|||
serverManager: ServerManager,
|
||||
serverId: StateFlow<Int>,
|
||||
prefsRepository: PrefsRepository,
|
||||
allEntities: Flow<Map<String, Entity<*>>>
|
||||
allEntities: Flow<Map<String, Entity<*>>>,
|
||||
entityRegistry: List<EntityRegistryResponse>?,
|
||||
lifecycleScope: LifecycleCoroutineScope
|
||||
): ItemList.Builder {
|
||||
val listBuilder = ItemList.Builder()
|
||||
domains.forEach { domain ->
|
||||
|
@ -131,40 +137,57 @@ fun getDomainList(
|
|||
null
|
||||
).getIcon(carContext)
|
||||
|
||||
listBuilder.addItem(
|
||||
GridItem.Builder().apply {
|
||||
if (icon != null) {
|
||||
setImage(
|
||||
CarIcon.Builder(
|
||||
IconicsDrawable(carContext, icon)
|
||||
.apply {
|
||||
sizeDp = 64
|
||||
}.toAndroidIconCompat()
|
||||
)
|
||||
.setTint(CarColor.DEFAULT)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
val entityList = allEntities.map {
|
||||
it.values.filter { entity ->
|
||||
entity.domain == domain && RegistriesDataHandler.getHiddenByForEntity(
|
||||
entity.entityId,
|
||||
entityRegistry
|
||||
) == null
|
||||
}
|
||||
.setTitle(friendlyDomain)
|
||||
.setOnClickListener {
|
||||
Log.i(TAG, "Domain:$domain clicked")
|
||||
screenManager.push(
|
||||
EntityGridVehicleScreen(
|
||||
carContext,
|
||||
serverManager,
|
||||
serverId,
|
||||
prefsRepository,
|
||||
serverManager.integrationRepository(serverId.value),
|
||||
friendlyDomain,
|
||||
domains,
|
||||
allEntities.map { it.values.filter { entity -> entity.domain == domain } },
|
||||
allEntities
|
||||
) { }
|
||||
)
|
||||
}
|
||||
var domainIsEmpty = false
|
||||
lifecycleScope.launch {
|
||||
entityList.collect {
|
||||
domainIsEmpty = it.isEmpty()
|
||||
}
|
||||
}
|
||||
if (!domainIsEmpty) {
|
||||
listBuilder.addItem(
|
||||
GridItem.Builder().apply {
|
||||
if (icon != null) {
|
||||
setImage(
|
||||
CarIcon.Builder(
|
||||
IconicsDrawable(carContext, icon)
|
||||
.apply {
|
||||
sizeDp = 64
|
||||
}.toAndroidIconCompat()
|
||||
)
|
||||
.setTint(CarColor.DEFAULT)
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
||||
.build()
|
||||
)
|
||||
.setTitle(friendlyDomain)
|
||||
.setOnClickListener {
|
||||
Log.i(TAG, "Domain:$domain clicked")
|
||||
screenManager.push(
|
||||
EntityGridVehicleScreen(
|
||||
carContext,
|
||||
serverManager,
|
||||
serverId,
|
||||
prefsRepository,
|
||||
serverManager.integrationRepository(serverId.value),
|
||||
friendlyDomain,
|
||||
entityRegistry,
|
||||
domains,
|
||||
entityList,
|
||||
allEntities
|
||||
) { }
|
||||
)
|
||||
}
|
||||
.build()
|
||||
)
|
||||
}
|
||||
}
|
||||
return listBuilder
|
||||
}
|
||||
|
@ -177,7 +200,8 @@ fun getDomainsGridItem(
|
|||
integrationRepository: IntegrationRepository,
|
||||
serverId: StateFlow<Int>,
|
||||
allEntities: Flow<Map<String, Entity<*>>>,
|
||||
prefsRepository: PrefsRepository
|
||||
prefsRepository: PrefsRepository,
|
||||
entityRegistry: List<EntityRegistryResponse>?
|
||||
): GridItem.Builder {
|
||||
return GridItem.Builder().apply {
|
||||
setTitle(carContext.getString(R.string.all_entities))
|
||||
|
@ -202,7 +226,8 @@ fun getDomainsGridItem(
|
|||
integrationRepository,
|
||||
serverId,
|
||||
allEntities,
|
||||
prefsRepository
|
||||
prefsRepository,
|
||||
entityRegistry
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import io.homeassistant.companion.android.common.data.integration.IntegrationRep
|
|||
import io.homeassistant.companion.android.common.data.integration.domain
|
||||
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
|
||||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse
|
||||
import io.homeassistant.companion.android.util.vehicle.SUPPORTED_DOMAINS
|
||||
import io.homeassistant.companion.android.util.vehicle.getDomainList
|
||||
import io.homeassistant.companion.android.util.vehicle.nativeModeActionStrip
|
||||
|
@ -29,7 +30,8 @@ class DomainListScreen(
|
|||
val integrationRepository: IntegrationRepository,
|
||||
private val serverId: StateFlow<Int>,
|
||||
private val allEntities: Flow<Map<String, Entity<*>>>,
|
||||
private val prefsRepository: PrefsRepository
|
||||
private val prefsRepository: PrefsRepository,
|
||||
private val entityRegistry: List<EntityRegistryResponse>?
|
||||
) : BaseVehicleScreen(carContext) {
|
||||
|
||||
companion object {
|
||||
|
@ -68,7 +70,9 @@ class DomainListScreen(
|
|||
serverManager,
|
||||
serverId,
|
||||
prefsRepository,
|
||||
allEntities
|
||||
allEntities,
|
||||
entityRegistry,
|
||||
lifecycleScope
|
||||
)
|
||||
|
||||
return GridTemplate.Builder().apply {
|
||||
|
|
|
@ -33,6 +33,7 @@ import io.homeassistant.companion.android.common.data.integration.isExecuting
|
|||
import io.homeassistant.companion.android.common.data.integration.onPressed
|
||||
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
|
||||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse
|
||||
import io.homeassistant.companion.android.util.vehicle.MAP_DOMAINS
|
||||
import io.homeassistant.companion.android.util.vehicle.NOT_ACTIONABLE_DOMAINS
|
||||
import io.homeassistant.companion.android.util.vehicle.SUPPORTED_DOMAINS
|
||||
|
@ -53,6 +54,7 @@ class EntityGridVehicleScreen(
|
|||
val prefsRepository: PrefsRepository,
|
||||
val integrationRepository: IntegrationRepository,
|
||||
val title: String,
|
||||
private val entityRegistry: List<EntityRegistryResponse>?,
|
||||
private val domains: MutableSet<String>,
|
||||
private val entitiesFlow: Flow<List<Entity<*>>>,
|
||||
private val allEntities: Flow<Map<String, Entity<*>>>,
|
||||
|
@ -92,7 +94,9 @@ class EntityGridVehicleScreen(
|
|||
serverManager,
|
||||
serverId,
|
||||
prefsRepository,
|
||||
allEntities
|
||||
allEntities,
|
||||
entityRegistry,
|
||||
lifecycleScope
|
||||
)
|
||||
}
|
||||
if (isFavorites) {
|
||||
|
@ -112,7 +116,8 @@ class EntityGridVehicleScreen(
|
|||
integrationRepository,
|
||||
serverId,
|
||||
allEntities,
|
||||
prefsRepository
|
||||
prefsRepository,
|
||||
entityRegistry
|
||||
).build()
|
||||
)
|
||||
if (shouldSwitchServers) {
|
||||
|
|
|
@ -17,6 +17,7 @@ import io.homeassistant.companion.android.common.data.integration.Entity
|
|||
import io.homeassistant.companion.android.common.data.integration.domain
|
||||
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
|
||||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse
|
||||
import io.homeassistant.companion.android.sensors.SensorReceiver
|
||||
import io.homeassistant.companion.android.util.vehicle.SUPPORTED_DOMAINS
|
||||
import io.homeassistant.companion.android.util.vehicle.getChangeServerGridItem
|
||||
|
@ -45,6 +46,7 @@ class MainVehicleScreen(
|
|||
}
|
||||
|
||||
private var favoritesEntities: List<Entity<*>> = listOf()
|
||||
private var entityRegistry: List<EntityRegistryResponse>? = null
|
||||
private var favoritesList = emptyList<String>()
|
||||
private var isLoggedIn: Boolean? = null
|
||||
private val domains = mutableSetOf<String>()
|
||||
|
@ -66,6 +68,7 @@ class MainVehicleScreen(
|
|||
.getSessionState() == SessionState.CONNECTED
|
||||
invalidate()
|
||||
}
|
||||
entityRegistry = serverManager.webSocketRepository(serverId.value).getEntityRegistry()
|
||||
allEntities.collect { entities ->
|
||||
val newDomains = entities.values
|
||||
.map { it.domain }
|
||||
|
@ -112,6 +115,7 @@ class MainVehicleScreen(
|
|||
prefsRepository,
|
||||
serverManager.integrationRepository(serverId.value),
|
||||
carContext.getString(commonR.string.favorites),
|
||||
entityRegistry,
|
||||
domains,
|
||||
flowOf(),
|
||||
allEntities
|
||||
|
@ -126,7 +130,9 @@ class MainVehicleScreen(
|
|||
serverManager,
|
||||
serverId,
|
||||
prefsRepository,
|
||||
allEntities
|
||||
allEntities,
|
||||
entityRegistry,
|
||||
lifecycleScope
|
||||
)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue