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
3
3
import com.lukaslechner.coroutineusecasesonandroid.mock.AndroidVersion
4
4
import com.lukaslechner.coroutineusecasesonandroid.mock.MockApi
5
5
import kotlinx.coroutines.CoroutineScope
6
- import kotlinx.coroutines.async
7
- import kotlinx.coroutines.launch
8
- import timber.log.Timber
9
6
10
7
class AndroidVersionRepository (
11
8
private var database : AndroidVersionDao ,
@@ -18,20 +15,10 @@ class AndroidVersionRepository(
18
15
}
19
16
20
17
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
+ }
31
20
32
21
fun clearDatabase () {
33
- scope.launch {
34
- database.clear()
35
- }
22
+
36
23
}
37
24
}
Original file line number Diff line number Diff line change 1
1
package com.lukaslechner.coroutineusecasesonandroid.usecases.coroutines.usecase14
2
2
3
+ import androidx.lifecycle.viewModelScope
3
4
import com.lukaslechner.coroutineusecasesonandroid.base.BaseViewModel
5
+ import kotlinx.coroutines.launch
4
6
5
7
class ContinueCoroutineWhenUserLeavesScreenViewModel (
6
8
private var repository : AndroidVersionRepository
7
9
) : BaseViewModel<UiState>() {
8
10
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
+
9
15
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
+ }
10
27
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
+ }
11
39
}
12
40
13
41
fun clearDatabase () {
14
-
42
+ repository.clearDatabase()
15
43
}
16
44
}
17
45
You can’t perform that action at this time.
0 commit comments