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
) : ConversationSettingsEvent()
class ShowBlockGroupError(
val failureReason: GroupChangeFailureReason
) : ConversationSettingsEvent()
class ShowGroupInvitesSentDialog(
val invitesSentTo: List<Recipient>
) : ConversationSettingsEvent()

View File

@@ -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)
}

View File

@@ -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))
}
}

View File

@@ -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,9 +480,17 @@ sealed class ConversationSettingsViewModel(
}
override fun block() {
viewModelScope.launch {
val result = withContext(SignalDispatchers.IO) {
repository.block(groupId)
}
if (!result.isSuccess) {
internalEvents.onNext(ConversationSettingsEvent.ShowBlockGroupError(result.getFailureReason()))
}
}
}
override fun unblock() {
repository.unblock(groupId)
}