mirror of
https://github.com/home-assistant/android
synced 2024-10-02 22:34:46 +00:00
Switch from viewModelScope
to lifecycleScope
for external collections (#3045)
* Switch from viewmodelscope to lifecyclescope for external collections * Check loading state before collecting * Revert previous changes for checking loading state * Skip collection if not connected * Simplify launching collections
This commit is contained in:
parent
5bac66c0c7
commit
33d1e30cb1
|
@ -6,11 +6,15 @@ import android.os.Bundle
|
|||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.home.views.LoadHomePage
|
||||
import io.homeassistant.companion.android.onboarding.OnboardingActivity
|
||||
import io.homeassistant.companion.android.onboarding.integration.MobileAppIntegrationActivity
|
||||
import io.homeassistant.companion.android.sensors.SensorWorker
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
|
@ -40,6 +44,15 @@ class HomeActivity : ComponentActivity(), HomeView {
|
|||
}
|
||||
|
||||
mainViewModel.init(presenter)
|
||||
|
||||
lifecycleScope.launch {
|
||||
lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||
launch { mainViewModel.entityUpdates() }
|
||||
launch { mainViewModel.areaUpdates() }
|
||||
launch { mainViewModel.deviceUpdates() }
|
||||
launch { mainViewModel.entityRegistryUpdates() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
|
|
|
@ -167,38 +167,6 @@ class MainViewModel @Inject constructor(
|
|||
} else {
|
||||
LoadingState.ERROR
|
||||
}
|
||||
|
||||
// Listen for updates
|
||||
viewModelScope.launch {
|
||||
homePresenter.getEntityUpdates()?.collect {
|
||||
if (supportedDomains().contains(it.domain)) {
|
||||
entities[it.entityId] = it
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
}
|
||||
viewModelScope.launch {
|
||||
homePresenter.getAreaRegistryUpdates()?.collect {
|
||||
areaRegistry = homePresenter.getAreaRegistry()
|
||||
areas.clear()
|
||||
areaRegistry?.let {
|
||||
areas.addAll(it)
|
||||
}
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
viewModelScope.launch {
|
||||
homePresenter.getDeviceRegistryUpdates()?.collect {
|
||||
deviceRegistry = homePresenter.getDeviceRegistry()
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
viewModelScope.launch {
|
||||
homePresenter.getEntityRegistryUpdates()?.collect {
|
||||
entityRegistry = homePresenter.getEntityRegistry()
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Exception while loading entities", e)
|
||||
loadingState.value = LoadingState.ERROR
|
||||
|
@ -206,6 +174,48 @@ class MainViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
suspend fun entityUpdates() {
|
||||
if (!homePresenter.isConnected())
|
||||
return
|
||||
homePresenter.getEntityUpdates()?.collect {
|
||||
if (supportedDomains().contains(it.domain)) {
|
||||
entities[it.entityId] = it
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun areaUpdates() {
|
||||
if (!homePresenter.isConnected())
|
||||
return
|
||||
homePresenter.getAreaRegistryUpdates()?.collect {
|
||||
areaRegistry = homePresenter.getAreaRegistry()
|
||||
areas.clear()
|
||||
areaRegistry?.let {
|
||||
areas.addAll(it)
|
||||
}
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun deviceUpdates() {
|
||||
if (!homePresenter.isConnected())
|
||||
return
|
||||
homePresenter.getDeviceRegistryUpdates()?.collect {
|
||||
deviceRegistry = homePresenter.getDeviceRegistry()
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun entityRegistryUpdates() {
|
||||
if (!homePresenter.isConnected())
|
||||
return
|
||||
homePresenter.getEntityRegistryUpdates()?.collect {
|
||||
entityRegistry = homePresenter.getEntityRegistry()
|
||||
updateEntityDomains()
|
||||
}
|
||||
}
|
||||
|
||||
fun updateEntityDomains() {
|
||||
val entitiesList = entities.values.toList().sortedBy { it.entityId }
|
||||
val areasList = areaRegistry.orEmpty().sortedBy { it.name }
|
||||
|
|
Loading…
Reference in a new issue