From 43b5cb0641c907c7457f16d2181c9cc4580c58b9 Mon Sep 17 00:00:00 2001 From: Sagar <85388413+Sagar0-0@users.noreply.github.com> Date: Fri, 25 Apr 2025 20:39:13 +0530 Subject: [PATCH] Fix crash when leaving group. --- .../conversation/ConversationSettingsEvent.kt | 4 ++++ .../conversation/ConversationSettingsFragment.kt | 5 +++++ .../conversation/ConversationSettingsRepository.kt | 11 +++++++++-- .../conversation/ConversationSettingsViewModel.kt | 14 +++++++++++++- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsEvent.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsEvent.kt index faa7900876..fdf6604000 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsEvent.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsEvent.kt @@ -25,6 +25,10 @@ sealed class ConversationSettingsEvent { val failureReason: GroupChangeFailureReason ) : ConversationSettingsEvent() + class ShowBlockGroupError( + val failureReason: GroupChangeFailureReason + ) : ConversationSettingsEvent() + class ShowGroupInvitesSentDialog( val invitesSentTo: List ) : ConversationSettingsEvent() 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 2bc4047a42..4aa5d2c403 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 @@ -294,6 +294,7 @@ class ConversationSettingsFragment : DSLSettingsFragment( is ConversationSettingsEvent.AddMembersToGroup -> handleAddMembersToGroup(event) ConversationSettingsEvent.ShowGroupHardLimitDialog -> showGroupHardLimitDialog() is ConversationSettingsEvent.ShowAddMembersToGroupError -> showAddMembersToGroupError(event) + is ConversationSettingsEvent.ShowBlockGroupError -> showBlockGroupError(event) is ConversationSettingsEvent.ShowGroupInvitesSentDialog -> showGroupInvitesSentDialog(event) is ConversationSettingsEvent.ShowMembersAdded -> showMembersAdded(event) } @@ -972,6 +973,10 @@ class ConversationSettingsFragment : DSLSettingsFragment( Toast.makeText(requireContext(), GroupErrors.getUserDisplayMessage(showAddMembersToGroupError.failureReason), Toast.LENGTH_LONG).show() } + private fun showBlockGroupError(showBlockGroupError: ConversationSettingsEvent.ShowBlockGroupError) { + Toast.makeText(requireContext(), GroupErrors.getUserDisplayMessage(showBlockGroupError.failureReason), Toast.LENGTH_LONG).show() + } + private fun showGroupInvitesSentDialog(showGroupInvitesSentDialog: ConversationSettingsEvent.ShowGroupInvitesSentDialog) { GroupInviteSentDialog.showInvitesSent(requireContext(), viewLifecycleOwner, showGroupInvitesSentDialog.invitesSentTo) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt index 54a5051814..5e731df844 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt @@ -24,6 +24,8 @@ import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.groups.GroupProtoUtil import org.thoughtcrime.securesms.groups.GroupsInCommonRepository import org.thoughtcrime.securesms.groups.LiveGroup +import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason +import org.thoughtcrime.securesms.groups.ui.GroupChangeResult import org.thoughtcrime.securesms.groups.v2.GroupAddMembersResult import org.thoughtcrime.securesms.groups.v2.GroupManagementRepository import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -187,10 +189,15 @@ class ConversationSettingsRepository( } } - fun block(groupId: GroupId) { - SignalExecutors.BOUNDED.execute { + @WorkerThread + fun block(groupId: GroupId): GroupChangeResult { + return try { val recipient = Recipient.externalGroupExact(groupId) RecipientUtil.block(context, recipient) + GroupChangeResult.SUCCESS + } catch (e: Exception) { + Log.w(TAG, "Failed to block group.", e) + GroupChangeResult.failure(GroupChangeFailureReason.fromException(e)) } } 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 d0a4e1f462..ecb5d8c069 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,6 +6,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.distinctUntilChanged import androidx.lifecycle.map +import androidx.lifecycle.viewModelScope import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.core.Observable @@ -13,8 +14,11 @@ 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 kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.signal.core.util.Result import org.signal.core.util.ThreadUtil +import org.signal.core.util.concurrent.SignalDispatchers import org.signal.core.util.concurrent.SignalExecutors import org.signal.core.util.readToList import org.thoughtcrime.securesms.components.settings.conversation.preferences.ButtonStripPreference @@ -476,7 +480,15 @@ sealed class ConversationSettingsViewModel( } override fun block() { - repository.block(groupId) + viewModelScope.launch { + val result = withContext(SignalDispatchers.IO) { + repository.block(groupId) + } + + if (!result.isSuccess) { + internalEvents.onNext(ConversationSettingsEvent.ShowBlockGroupError(result.getFailureReason())) + } + } } override fun unblock() {