extensions: Strip out logic for shared pref callback into extension
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -6,21 +6,15 @@
|
||||
package com.aurora.store.viewmodel.dispenser
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import androidx.core.content.edit
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.aurora.extensions.observeAsStateFlow
|
||||
import com.aurora.store.util.Preferences
|
||||
import com.aurora.store.util.Preferences.PREFERENCE_DISPENSER_URLS
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
import kotlinx.coroutines.flow.SharingStarted
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.callbackFlow
|
||||
import kotlinx.coroutines.flow.stateIn
|
||||
import javax.inject.Inject
|
||||
import kotlin.collections.toMutableSet
|
||||
|
||||
@HiltViewModel
|
||||
class DispenserViewModel @Inject constructor(
|
||||
@@ -33,21 +27,12 @@ class DispenserViewModel @Inject constructor(
|
||||
set(value) = sharedPreferences.edit { putStringSet(PREFERENCE_DISPENSER_URLS, value) }
|
||||
get() = sharedPreferences.getStringSet(PREFERENCE_DISPENSER_URLS, emptySet()) ?: emptySet()
|
||||
|
||||
val dispensers: StateFlow<Set<String>>
|
||||
get() {
|
||||
return callbackFlow {
|
||||
val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, changedKey ->
|
||||
if (changedKey == PREFERENCE_DISPENSER_URLS) trySend(_dispensers)
|
||||
}
|
||||
|
||||
trySend(_dispensers)
|
||||
|
||||
sharedPreferences.registerOnSharedPreferenceChangeListener(listener)
|
||||
awaitClose {
|
||||
sharedPreferences.unregisterOnSharedPreferenceChangeListener(listener)
|
||||
}
|
||||
}.stateIn(viewModelScope, SharingStarted.Eagerly, emptySet())
|
||||
}
|
||||
val dispensers = sharedPreferences.observeAsStateFlow(
|
||||
key = PREFERENCE_DISPENSER_URLS,
|
||||
scope = viewModelScope,
|
||||
initial = emptySet(),
|
||||
valueProvider = { _dispensers }
|
||||
)
|
||||
|
||||
fun addDispenser(url: String) {
|
||||
_dispensers = _dispensers.toMutableSet().apply {
|
||||
|
||||
Reference in New Issue
Block a user