Skip to content

Commit 0c960ce

Browse files
chore: Migrate LiveData to Flow
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
1 parent 4826da0 commit 0c960ce

2 files changed

Lines changed: 8 additions & 12 deletions

File tree

app/src/main/java/com/nextcloud/talk/location/components/GeocodingScreen.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import androidx.compose.material3.Scaffold
2222
import androidx.compose.material3.TopAppBar
2323
import androidx.compose.runtime.Composable
2424
import androidx.compose.runtime.LaunchedEffect
25+
import androidx.compose.runtime.collectAsState
2526
import androidx.compose.runtime.getValue
26-
import androidx.compose.runtime.livedata.observeAsState
2727
import androidx.compose.runtime.mutableStateOf
2828
import androidx.compose.runtime.remember
2929
import androidx.compose.runtime.saveable.rememberSaveable
@@ -42,15 +42,15 @@ import fr.dudie.nominatim.model.Address
4242

4343
@Composable
4444
fun GeocodingScreen(viewModel: GeoCodingViewModel, onBack: () -> Unit, onAddressSelected: (Address) -> Unit) {
45-
val results by viewModel.getGeocodingResultsLiveData().observeAsState(viewModel.getGeocodingResults())
45+
val results by viewModel.geocodingResults.collectAsState()
4646
val initialQuery = viewModel.getQuery()
4747
var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) {
4848
mutableStateOf(TextFieldValue(initialQuery, TextRange(initialQuery.length)))
4949
}
5050
val keyboardController = LocalSoftwareKeyboardController.current
5151

5252
LaunchedEffect(Unit) {
53-
if (viewModel.getQuery().isNotEmpty() && viewModel.getGeocodingResults().isEmpty()) {
53+
if (viewModel.getQuery().isNotEmpty() && results.isEmpty()) {
5454
viewModel.searchLocation()
5555
}
5656
}

app/src/main/java/com/nextcloud/talk/viewmodels/GeoCodingViewModel.kt

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,30 @@
77
package com.nextcloud.talk.viewmodels
88

99
import android.util.Log
10-
import androidx.lifecycle.LiveData
11-
import androidx.lifecycle.MutableLiveData
1210
import androidx.lifecycle.ViewModel
1311
import fr.dudie.nominatim.client.TalkJsonNominatimClient
1412
import fr.dudie.nominatim.model.Address
1513
import kotlinx.coroutines.CoroutineScope
1614
import kotlinx.coroutines.Dispatchers
15+
import kotlinx.coroutines.flow.MutableStateFlow
16+
import kotlinx.coroutines.flow.StateFlow
1717
import kotlinx.coroutines.launch
1818
import okhttp3.OkHttpClient
1919
import java.io.IOException
2020

2121
class GeoCodingViewModel : ViewModel() {
22-
private val geocodingResultsLiveData = MutableLiveData<List<Address>>()
22+
private val _geocodingResults = MutableStateFlow<List<Address>>(emptyList())
23+
val geocodingResults: StateFlow<List<Address>> = _geocodingResults
2324
private val nominatimClient: TalkJsonNominatimClient
2425
private val okHttpClient: OkHttpClient = OkHttpClient.Builder().build()
25-
private var geocodingResults: List<Address> = ArrayList()
2626
private var query: String = ""
27-
fun getGeocodingResultsLiveData(): LiveData<List<Address>> = geocodingResultsLiveData
2827

2928
fun getQuery(): String = query
3029

3130
fun setQuery(query: String) {
3231
this.query = query
3332
}
3433

35-
fun getGeocodingResults(): List<Address> = geocodingResults
36-
3734
init {
3835
nominatimClient = TalkJsonNominatimClient(
3936
"https://nominatim.openstreetmap.org/",
@@ -47,8 +44,7 @@ class GeoCodingViewModel : ViewModel() {
4744
CoroutineScope(Dispatchers.IO).launch {
4845
try {
4946
val results = nominatimClient.search(query) as ArrayList<Address>
50-
geocodingResults = results
51-
geocodingResultsLiveData.postValue(results)
47+
_geocodingResults.value = results
5248
} catch (e: IOException) {
5349
Log.e(TAG, "Failed to get geocoded addresses", e)
5450
}

0 commit comments

Comments
 (0)