mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 20:48:43 +00:00
Fix crash when leaving group.
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,9 +480,17 @@ sealed class ConversationSettingsViewModel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun block() {
|
override fun block() {
|
||||||
|
viewModelScope.launch {
|
||||||
|
val result = withContext(SignalDispatchers.IO) {
|
||||||
repository.block(groupId)
|
repository.block(groupId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!result.isSuccess) {
|
||||||
|
internalEvents.onNext(ConversationSettingsEvent.ShowBlockGroupError(result.getFailureReason()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun unblock() {
|
override fun unblock() {
|
||||||
repository.unblock(groupId)
|
repository.unblock(groupId)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user