Convert WhoCanFindMeByPhoneNumber to StateFlow.

This commit is contained in:
Alex Hart
2025-11-07 10:41:39 -04:00
committed by Michelle Tang
parent ba378d28f4
commit d241aebade
2 changed files with 24 additions and 28 deletions

View File

@@ -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()
})
}
}
}

View File

@@ -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()
}
}