diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt index 6a7a83900..6c94998d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt @@ -82,6 +82,7 @@ import org.thoughtcrime.securesms.stories.viewer.StoryViewerActivity import org.thoughtcrime.securesms.util.CommunicationActions import org.thoughtcrime.securesms.util.ContextUtil import org.thoughtcrime.securesms.util.ExpirationUtil +import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.Material3OnScrollHelper import org.thoughtcrime.securesms.util.ViewUtil import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter @@ -141,6 +142,7 @@ class ConversationSettingsFragment : DSLSettingsFragment( private lateinit var addToGroupStoryDelegate: AddToGroupStoryDelegate private val navController get() = Navigation.findNavController(requireView()) + private val lifecycleDisposable = LifecycleDisposable() override fun onAttach(context: Context) { super.onAttach(context) @@ -256,7 +258,8 @@ class ConversationSettingsFragment : DSLSettingsFragment( } } - viewModel.events.observe(viewLifecycleOwner) { event -> + lifecycleDisposable.bindTo(viewLifecycleOwner) + lifecycleDisposable += viewModel.events.subscribe { event -> @Exhaustive when (event) { is ConversationSettingsEvent.AddToAGroup -> handleAddToAGroup(event) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt index 70ef4263d..ef6770790 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt @@ -6,8 +6,12 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Transformations import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign +import io.reactivex.rxjava3.subjects.PublishSubject +import io.reactivex.rxjava3.subjects.Subject import org.signal.core.util.CursorUtil import org.signal.core.util.ThreadUtil import org.signal.core.util.concurrent.SignalExecutors @@ -24,7 +28,6 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientUtil import org.thoughtcrime.securesms.util.FeatureFlags -import org.thoughtcrime.securesms.util.SingleLiveEvent import org.thoughtcrime.securesms.util.livedata.LiveDataUtil import org.thoughtcrime.securesms.util.livedata.Store import java.util.Optional @@ -44,12 +47,12 @@ sealed class ConversationSettingsViewModel( specificSettingsState = specificSettingsState ) ) - protected val internalEvents = SingleLiveEvent() + protected val internalEvents: Subject = PublishSubject.create() private val sharedMediaUpdateTrigger = MutableLiveData(Unit) val state: LiveData = store.stateLiveData - val events: LiveData = internalEvents + val events: Observable = internalEvents.observeOn(AndroidSchedulers.mainThread()) protected val disposable = CompositeDisposable() @@ -210,7 +213,7 @@ sealed class ConversationSettingsViewModel( override fun onAddToGroup() { repository.getGroupMembership(recipientId) { - internalEvents.postValue(ConversationSettingsEvent.AddToAGroup(recipientId, it)) + internalEvents.onNext(ConversationSettingsEvent.AddToAGroup(recipientId, it)) } } @@ -404,7 +407,7 @@ sealed class ConversationSettingsViewModel( repository.getGroupCapacity(groupId) { capacityResult -> if (capacityResult.getRemainingCapacity() > 0) { - internalEvents.postValue( + internalEvents.onNext( ConversationSettingsEvent.AddMembersToGroup( groupId, capacityResult.getSelectionWarning(), @@ -414,7 +417,7 @@ sealed class ConversationSettingsViewModel( ) ) } else { - internalEvents.postValue(ConversationSettingsEvent.ShowGroupHardLimitDialog) + internalEvents.onNext(ConversationSettingsEvent.ShowGroupHardLimitDialog) } } } @@ -426,14 +429,14 @@ sealed class ConversationSettingsViewModel( when (it) { is GroupAddMembersResult.Success -> { if (it.newMembersInvited.isNotEmpty()) { - internalEvents.postValue(ConversationSettingsEvent.ShowGroupInvitesSentDialog(it.newMembersInvited)) + internalEvents.onNext(ConversationSettingsEvent.ShowGroupInvitesSentDialog(it.newMembersInvited)) } if (it.numberOfMembersAdded > 0) { - internalEvents.postValue(ConversationSettingsEvent.ShowMembersAdded(it.numberOfMembersAdded)) + internalEvents.onNext(ConversationSettingsEvent.ShowMembersAdded(it.numberOfMembersAdded)) } } - is GroupAddMembersResult.Failure -> internalEvents.postValue(ConversationSettingsEvent.ShowAddMembersToGroupError(it.reason)) + is GroupAddMembersResult.Failure -> internalEvents.onNext(ConversationSettingsEvent.ShowAddMembersToGroupError(it.reason)) } } } @@ -468,7 +471,7 @@ sealed class ConversationSettingsViewModel( override fun initiateGroupUpgrade() { repository.getExternalPossiblyMigratedGroupRecipientId(groupId) { - internalEvents.postValue(ConversationSettingsEvent.InitiateGroupMigration(it)) + internalEvents.onNext(ConversationSettingsEvent.InitiateGroupMigration(it)) } } }