Fix crash when leaving group.

This commit is contained in:
Sagar
2025-04-25 20:39:13 +05:30
committed by Cody Henthorne
parent f73d929feb
commit 43b5cb0641
4 changed files with 31 additions and 3 deletions

View File

@@ -25,6 +25,10 @@ sealed class ConversationSettingsEvent {
val failureReason: GroupChangeFailureReason val failureReason: GroupChangeFailureReason
) : ConversationSettingsEvent() ) : ConversationSettingsEvent()
class ShowBlockGroupError(
val failureReason: GroupChangeFailureReason
) : ConversationSettingsEvent()
class ShowGroupInvitesSentDialog( class ShowGroupInvitesSentDialog(
val invitesSentTo: List<Recipient> val invitesSentTo: List<Recipient>
) : ConversationSettingsEvent() ) : ConversationSettingsEvent()

View File

@@ -294,6 +294,7 @@ class ConversationSettingsFragment : DSLSettingsFragment(
is ConversationSettingsEvent.AddMembersToGroup -> handleAddMembersToGroup(event) is ConversationSettingsEvent.AddMembersToGroup -> handleAddMembersToGroup(event)
ConversationSettingsEvent.ShowGroupHardLimitDialog -> showGroupHardLimitDialog() ConversationSettingsEvent.ShowGroupHardLimitDialog -> showGroupHardLimitDialog()
is ConversationSettingsEvent.ShowAddMembersToGroupError -> showAddMembersToGroupError(event) is ConversationSettingsEvent.ShowAddMembersToGroupError -> showAddMembersToGroupError(event)
is ConversationSettingsEvent.ShowBlockGroupError -> showBlockGroupError(event)
is ConversationSettingsEvent.ShowGroupInvitesSentDialog -> showGroupInvitesSentDialog(event) is ConversationSettingsEvent.ShowGroupInvitesSentDialog -> showGroupInvitesSentDialog(event)
is ConversationSettingsEvent.ShowMembersAdded -> showMembersAdded(event) is ConversationSettingsEvent.ShowMembersAdded -> showMembersAdded(event)
} }
@@ -972,6 +973,10 @@ class ConversationSettingsFragment : DSLSettingsFragment(
Toast.makeText(requireContext(), GroupErrors.getUserDisplayMessage(showAddMembersToGroupError.failureReason), Toast.LENGTH_LONG).show() 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) { private fun showGroupInvitesSentDialog(showGroupInvitesSentDialog: ConversationSettingsEvent.ShowGroupInvitesSentDialog) {
GroupInviteSentDialog.showInvitesSent(requireContext(), viewLifecycleOwner, showGroupInvitesSentDialog.invitesSentTo) GroupInviteSentDialog.showInvitesSent(requireContext(), viewLifecycleOwner, showGroupInvitesSentDialog.invitesSentTo)
} }

View File

@@ -24,6 +24,8 @@ import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.groups.GroupProtoUtil import org.thoughtcrime.securesms.groups.GroupProtoUtil
import org.thoughtcrime.securesms.groups.GroupsInCommonRepository import org.thoughtcrime.securesms.groups.GroupsInCommonRepository
import org.thoughtcrime.securesms.groups.LiveGroup 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.GroupAddMembersResult
import org.thoughtcrime.securesms.groups.v2.GroupManagementRepository import org.thoughtcrime.securesms.groups.v2.GroupManagementRepository
import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.keyvalue.SignalStore
@@ -187,10 +189,15 @@ class ConversationSettingsRepository(
} }
} }
fun block(groupId: GroupId) { @WorkerThread
SignalExecutors.BOUNDED.execute { fun block(groupId: GroupId): GroupChangeResult {
return try {
val recipient = Recipient.externalGroupExact(groupId) val recipient = Recipient.externalGroupExact(groupId)
RecipientUtil.block(context, recipient) RecipientUtil.block(context, recipient)
GroupChangeResult.SUCCESS
} catch (e: Exception) {
Log.w(TAG, "Failed to block group.", e)
GroupChangeResult.failure(GroupChangeFailureReason.fromException(e))
} }
} }

View File

@@ -6,6 +6,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.distinctUntilChanged import androidx.lifecycle.distinctUntilChanged
import androidx.lifecycle.map import androidx.lifecycle.map
import androidx.lifecycle.viewModelScope
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Maybe import io.reactivex.rxjava3.core.Maybe
import io.reactivex.rxjava3.core.Observable 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.kotlin.plusAssign
import io.reactivex.rxjava3.subjects.PublishSubject import io.reactivex.rxjava3.subjects.PublishSubject
import io.reactivex.rxjava3.subjects.Subject 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.Result
import org.signal.core.util.ThreadUtil 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.concurrent.SignalExecutors
import org.signal.core.util.readToList import org.signal.core.util.readToList
import org.thoughtcrime.securesms.components.settings.conversation.preferences.ButtonStripPreference import org.thoughtcrime.securesms.components.settings.conversation.preferences.ButtonStripPreference
@@ -476,7 +480,15 @@ sealed class ConversationSettingsViewModel(
} }
override fun block() { 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() { override fun unblock() {