diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberFragment.kt index c1d4d17a26..52f212602c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberFragment.kt @@ -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() - }) + } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberViewModel.kt index 2b0567a60d..0970522713 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/pnp/WhoCanFindMeByPhoneNumberViewModel.kt @@ -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 = store.stateFlowable.subscribeOn(AndroidSchedulers.mainThread()) + private val internalState = MutableStateFlow(repository.getCurrentState()) + val state: StateFlow = 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() } }