mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-20 02:58:45 +00:00
Convert WhoCanFindMeByPhoneNumber to StateFlow.
This commit is contained in:
@@ -4,10 +4,12 @@ import android.os.Bundle
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.setFragmentResult
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||
import org.signal.core.util.concurrent.LifecycleDisposable
|
||||
import kotlinx.coroutines.launch
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.components.ViewBinderDelegate
|
||||
import org.thoughtcrime.securesms.components.settings.DSLConfiguration
|
||||
@@ -33,21 +35,25 @@ class WhoCanFindMeByPhoneNumberFragment : DSLSettingsFragment(
|
||||
}
|
||||
|
||||
private val viewModel: WhoCanFindMeByPhoneNumberViewModel by viewModels()
|
||||
private val lifecycleDisposable = LifecycleDisposable()
|
||||
|
||||
private val binding by ViewBinderDelegate(WhoCanFindMeByPhoneNumberFragmentBinding::bind)
|
||||
|
||||
override fun bindAdapter(adapter: MappingAdapter) {
|
||||
lifecycleDisposable += viewModel.state.subscribe {
|
||||
adapter.submitList(getConfiguration(it).toMappingModelList())
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
viewModel.state.collect { state ->
|
||||
adapter.submitList(getConfiguration(state).toMappingModelList())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
binding.save.setOnClickListener {
|
||||
binding.save.isEnabled = false
|
||||
lifecycleDisposable += viewModel.onSave().subscribeBy(onComplete = {
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
viewModel.onSave()
|
||||
setFragmentResult(REQUEST_KEY, Bundle())
|
||||
findNavController().popBackStack()
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,38 +1,28 @@
|
||||
package org.thoughtcrime.securesms.profiles.edit.pnp
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Completable
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable
|
||||
import org.thoughtcrime.securesms.util.rx.RxStore
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.rx3.await
|
||||
|
||||
class WhoCanFindMeByPhoneNumberViewModel : ViewModel() {
|
||||
|
||||
private val repository = WhoCanFindMeByPhoneNumberRepository()
|
||||
private val store = RxStore(repository.getCurrentState())
|
||||
private val disposables = CompositeDisposable()
|
||||
|
||||
val state: Flowable<WhoCanFindMeByPhoneNumberState> = store.stateFlowable.subscribeOn(AndroidSchedulers.mainThread())
|
||||
private val internalState = MutableStateFlow(repository.getCurrentState())
|
||||
val state: StateFlow<WhoCanFindMeByPhoneNumberState> = internalState.asStateFlow()
|
||||
|
||||
fun onEveryoneCanFindMeByPhoneNumberSelected() {
|
||||
store.update {
|
||||
WhoCanFindMeByPhoneNumberState.EVERYONE
|
||||
}
|
||||
internalState.update { WhoCanFindMeByPhoneNumberState.EVERYONE }
|
||||
}
|
||||
|
||||
fun onNobodyCanFindMeByPhoneNumberSelected() {
|
||||
store.update {
|
||||
WhoCanFindMeByPhoneNumberState.NOBODY
|
||||
}
|
||||
internalState.update { WhoCanFindMeByPhoneNumberState.NOBODY }
|
||||
}
|
||||
|
||||
fun onSave(): Completable {
|
||||
return repository.onSave(store.state).observeOn(AndroidSchedulers.mainThread())
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
disposables.clear()
|
||||
store.dispose()
|
||||
suspend fun onSave() {
|
||||
repository.onSave(internalState.value).await()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user