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