Skip to content

Commit

Permalink
Attempt to fix Wear OS concurrent modification bug
Browse files Browse the repository at this point in the history
  • Loading branch information
dshokouhi committed Oct 2, 2024
1 parent f4c3e9f commit 07f83e6
Showing 1 changed file with 9 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,7 @@ class MainViewModel @Inject constructor(

if (!isFavoritesOnly) {
areaRegistry = getAreaRegistry.await()?.also {
areas.clear()
areas.addAll(it)
areas = it.toMutableList()
}
deviceRegistry = getDeviceRegistry.await()
}
Expand Down Expand Up @@ -269,10 +268,7 @@ class MainViewModel @Inject constructor(
}
homePresenter.getAreaRegistryUpdates()?.throttleLatest(1000)?.collect {
areaRegistry = homePresenter.getAreaRegistry()
areas.clear()
areaRegistry?.let {
areas.addAll(it)
}
areas = areaRegistry.orEmpty().toMutableList()
updateEntityDomains()
}
}
Expand Down Expand Up @@ -318,35 +314,22 @@ class MainViewModel @Inject constructor(
.map { it as Entity<Map<String, Any>> }
.sortedBy { (it.attributes["friendly_name"] ?: it.entityId) as String }
)
entitiesByArea[area.areaId]?.let {
it.clear()
it.addAll(entitiesInArea)
} ?: run {
entitiesByArea[area.areaId] = entitiesInArea
}
entitiesByArea[area.areaId] = entitiesInArea.toMutableStateList()
}
entitiesByAreaOrder.clear()
entitiesByAreaOrder.addAll(areasList.map { it.areaId })
entitiesByAreaOrder = areasList.map { it.areaId }.toMutableStateList()

// Quick check: are there any areas in the list that no longer exist?
entitiesByArea.forEach {
if (!areasList.any { item -> item.areaId == it.key }) {
entitiesByArea.remove(it.key)
}
entitiesByArea.keys.removeAll { areaId ->
!areasList.any { it.areaId == areaId }
}

// Create a list with all discovered domains + their entities
domainsList.forEach { domain ->
val entitiesInDomain = mutableStateListOf<Entity<*>>()
entitiesInDomain.addAll(entitiesList.filter { it.domain == domain })
entitiesByDomain[domain]?.let {
it.clear()
it.addAll(entitiesInDomain)
} ?: run {
entitiesByDomain[domain] = entitiesInDomain
}
entitiesByDomain[domain] = entitiesInDomain
}
entitiesByDomainOrder.clear()
entitiesByDomainOrder.addAll(domainsList)
entitiesByDomainOrder = domainsList.toMutableStateList()
}

fun toggleEntity(entityId: String, state: String) {
Expand Down

0 comments on commit 07f83e6

Please sign in to comment.