@@ -5,7 +5,6 @@ import androidx.lifecycle.viewModelScope
5
5
import kotlinx.coroutines.CoroutineExceptionHandler
6
6
import kotlinx.coroutines.Job
7
7
import kotlinx.coroutines.flow.MutableStateFlow
8
- import kotlinx.coroutines.flow.StateFlow
9
8
import kotlinx.coroutines.flow.asStateFlow
10
9
import kotlinx.coroutines.isActive
11
10
import kotlinx.coroutines.launch
@@ -14,6 +13,7 @@ import org.wikipedia.R
14
13
import org.wikipedia.WikipediaApp
15
14
import org.wikipedia.dataclient.ServiceFactory
16
15
import org.wikipedia.dataclient.mwapi.SiteMatrix
16
+ import org.wikipedia.util.UiState
17
17
import org.wikipedia.util.log.L
18
18
19
19
class AddLanguagesViewModel : ViewModel () {
@@ -25,12 +25,12 @@ class AddLanguagesViewModel : ViewModel() {
25
25
private val _siteInfoList = MutableStateFlow <List <SiteMatrix .SiteInfo >>(emptyList())
26
26
27
27
// UI state exposed to Compose
28
- private val _uiState = MutableStateFlow <LanguageListUiState >( LanguageListUiState .Loading )
29
- val uiState: StateFlow < LanguageListUiState > = _uiState .asStateFlow()
28
+ private val _uiState = MutableStateFlow <UiState < List < LanguageListItem >>>( UiState .Loading )
29
+ val uiState = _uiState .asStateFlow()
30
30
31
31
private val handler = CoroutineExceptionHandler { _, throwable ->
32
32
L .e(throwable)
33
- _uiState .value = LanguageListUiState .Error (throwable)
33
+ _uiState .value = UiState .Error (throwable)
34
34
}
35
35
36
36
private var fetchJob: Job ? = null
@@ -43,50 +43,31 @@ class AddLanguagesViewModel : ViewModel() {
43
43
fetchJob?.cancel()
44
44
45
45
// Set to loading state
46
- _uiState .value = LanguageListUiState .Loading
46
+ _uiState .value = UiState .Loading
47
47
48
48
// fetch site matrix
49
49
fetchJob = viewModelScope.launch(handler) {
50
- _uiState .value = LanguageListUiState .Loading
50
+ _uiState .value = UiState .Loading
51
51
val siteMatrix = ServiceFactory .get(WikipediaApp .instance.wikiSite).getSiteMatrix()
52
52
val sites = SiteMatrix .getSites(siteMatrix)
53
53
_siteInfoList .value = sites
54
54
55
55
// isActive checks if the job is still active
56
56
// does not update the list if the coroutine has been cancelled
57
57
if (isActive) {
58
- updateSearchTerm(getCurrentSearchTerm(), siteInfoAvailable = true )
58
+ updateSearchTerm(" " )
59
59
}
60
60
}
61
61
}
62
62
63
- fun updateSearchTerm (term : String , siteInfoAvailable : Boolean = isSiteInfoLoaded() ) {
63
+ fun updateSearchTerm (term : String ) {
64
64
viewModelScope.launch {
65
- _uiState .value = LanguageListUiState .Success (
66
- searchTerm = term,
67
- languagesItems = getFilteredLanguageList(term, siteInfoAvailable),
68
- isSiteInfoLoaded = siteInfoAvailable
69
- )
70
- }
71
- }
72
-
73
- private fun isSiteInfoLoaded (): Boolean {
74
- return when (val state = _uiState .value) {
75
- is LanguageListUiState .Success -> state.isSiteInfoLoaded
76
- else -> false
77
- }
78
- }
79
-
80
- private fun getCurrentSearchTerm (): String {
81
- return when (val state = _uiState .value) {
82
- is LanguageListUiState .Success -> state.searchTerm
83
- else -> " "
65
+ _uiState .value = UiState .Success (getFilteredLanguageList(term))
84
66
}
85
67
}
86
68
87
69
private fun getFilteredLanguageList (
88
70
searchTerm : String ,
89
- siteInfoAvailable : Boolean
90
71
): List <LanguageListItem > {
91
72
val results = mutableListOf<LanguageListItem >()
92
73
val filter = StringUtils .stripAccents(searchTerm)
@@ -95,16 +76,14 @@ class AddLanguagesViewModel : ViewModel() {
95
76
filter,
96
77
suggestedLanguageCodes,
97
78
WikipediaApp .instance.getString(R .string.languages_list_suggested_text),
98
- results,
99
- siteInfoAvailable
79
+ results
100
80
)
101
81
102
82
addFilteredLanguageListItems(
103
83
filter,
104
84
nonSuggestedLanguageCodes,
105
85
WikipediaApp .instance.getString(R .string.languages_list_all_text),
106
- results,
107
- siteInfoAvailable
86
+ results
108
87
)
109
88
110
89
return results
@@ -115,7 +94,6 @@ class AddLanguagesViewModel : ViewModel() {
115
94
codes : List <String >,
116
95
headerText : String ,
117
96
results : MutableList <LanguageListItem >,
118
- siteInfoAvailable : Boolean
119
97
) {
120
98
var first = true
121
99
for (code in codes) {
@@ -124,9 +102,7 @@ class AddLanguagesViewModel : ViewModel() {
124
102
)
125
103
126
104
// Only attempt to get canonical name if the site is available
127
- val canonicalName = if (siteInfoAvailable) {
128
- StringUtils .stripAccents(getCanonicalName(code))
129
- } else " "
105
+ val canonicalName = StringUtils .stripAccents(getCanonicalName(code))
130
106
131
107
if (filter.isEmpty() || code.contains(filter, true ) ||
132
108
localizedName.contains(filter, true ) ||
@@ -163,13 +139,3 @@ data class LanguageListItem(
163
139
val canonicalName : String = " " ,
164
140
val headerText : String = " " ,
165
141
)
166
-
167
- sealed interface LanguageListUiState {
168
- data object Loading : LanguageListUiState
169
- data class Error (val error : Throwable ) : LanguageListUiState
170
- data class Success (
171
- val searchTerm : String ,
172
- val languagesItems : List <LanguageListItem > = emptyList(),
173
- val isSiteInfoLoaded : Boolean = false
174
- ) : LanguageListUiState
175
- }
0 commit comments