File tree Expand file tree Collapse file tree 2 files changed +32
-17
lines changed
app/src/main/java/com/lukaslechner/coroutineusecasesonandroid/usecases/coroutines/usecase14 Expand file tree Collapse file tree 2 files changed +32
-17
lines changed Original file line number Diff line number Diff line change @@ -3,9 +3,6 @@ package com.lukaslechner.coroutineusecasesonandroid.usecases.coroutines.usecase1
33import com.lukaslechner.coroutineusecasesonandroid.mock.AndroidVersion
44import com.lukaslechner.coroutineusecasesonandroid.mock.MockApi
55import kotlinx.coroutines.CoroutineScope
6- import kotlinx.coroutines.async
7- import kotlinx.coroutines.launch
8- import timber.log.Timber
96
107class AndroidVersionRepository (
118 private var database : AndroidVersionDao ,
@@ -18,20 +15,10 @@ class AndroidVersionRepository(
1815 }
1916
2017 suspend fun loadAndStoreRemoteAndroidVersions (): List <AndroidVersion > {
21- return scope.async {
22- val recentVersions = api.getRecentAndroidVersions()
23- Timber .d(" Recent Android versions loaded" )
24- for (recentVersion in recentVersions) {
25- Timber .d(" Insert $recentVersion to database" )
26- database.insert(recentVersion.mapToEntity())
27- }
28- recentVersions
29- }.await()
30- }
18+ return emptyList()
19+ }
3120
3221 fun clearDatabase () {
33- scope.launch {
34- database.clear()
35- }
22+
3623 }
3724}
Original file line number Diff line number Diff line change 11package com.lukaslechner.coroutineusecasesonandroid.usecases.coroutines.usecase14
22
3+ import androidx.lifecycle.viewModelScope
34import com.lukaslechner.coroutineusecasesonandroid.base.BaseViewModel
5+ import kotlinx.coroutines.launch
46
57class ContinueCoroutineWhenUserLeavesScreenViewModel (
68 private var repository : AndroidVersionRepository
79) : BaseViewModel<UiState>() {
810
11+ // more information in this blogpost about "Coroutines & Patterns for work that shouldn't
12+ // be cancelled" =>
13+ // https://medium.com/androiddevelopers/coroutines-patterns-for-work-that-shouldnt-be-cancelled-e26c40f142ad
14+
915 fun loadData () {
16+ uiState.value = UiState .Loading .LoadFromDb
17+
18+ viewModelScope.launch {
19+ val localVersions = repository.getLocalAndroidVersions()
20+ if (localVersions.isNotEmpty()) {
21+ uiState.value =
22+ UiState .Success (DataSource .Database , localVersions)
23+ } else {
24+ uiState.value =
25+ UiState .Error (DataSource .Database , " Database empty!" )
26+ }
1027
28+ uiState.value = UiState .Loading .LoadFromNetwork
29+
30+ try {
31+ uiState.value = UiState .Success (
32+ DataSource .Network ,
33+ repository.loadAndStoreRemoteAndroidVersions()
34+ )
35+ } catch (exception: Exception ) {
36+ uiState.value = UiState .Error (DataSource .Network , " Network Request failed" )
37+ }
38+ }
1139 }
1240
1341 fun clearDatabase () {
14-
42+ repository.clearDatabase()
1543 }
1644}
1745
You can’t perform that action at this time.
0 commit comments