diff --git a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index 16695b8f7c..eefb058468 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -362,6 +362,8 @@ public class NewConversationActivity extends ContactSelectionActivity handleManualRefresh(); displaySnackbar(R.string.NewConversationActivity__s_has_been_blocked, recipient.getDisplayName(this)); contactsFragment.reset(); + }, (throwable) -> { + displaySnackbar(R.string.NewConversationActivity__block_failed); })); }) ); 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 5e731df844..774a649c01 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 @@ -171,14 +171,19 @@ class ConversationSettingsRepository( } } - fun block(recipientId: RecipientId) { - SignalExecutors.BOUNDED.execute { + @WorkerThread + fun block(recipientId: RecipientId): GroupChangeResult { + return try { val recipient = Recipient.resolved(recipientId) if (recipient.isGroup) { RecipientUtil.block(context, recipient) } else { RecipientUtil.blockNonGroup(context, recipient) } + GroupChangeResult.SUCCESS + } catch (e: Exception) { + Log.w(TAG, "Failed to block recipient.", 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 ecb5d8c069..200ff2bf00 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 @@ -266,7 +266,15 @@ sealed class ConversationSettingsViewModel( } override fun block() { - repository.block(recipientId) + viewModelScope.launch { + val result = withContext(SignalDispatchers.IO) { + repository.block(recipientId) + } + + if (!result.isSuccess) { + internalEvents.onNext(ConversationSettingsEvent.ShowBlockGroupError(result.getFailureReason())) + } + } } override fun unblock() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java index 3ecb17bb75..adce51e674 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java @@ -80,7 +80,8 @@ public final class GroupManager { throws GroupChangeBusyException, GroupChangeFailedException, IOException { if (!groupId.isV2()) { - throw new GroupChangeFailedException("Not gv2"); + Log.w(TAG, "Not gv2"); + return; } try (GroupManagerV2.GroupEditor edit = new GroupManagerV2(context).edit(groupId.requireV2())) { @@ -101,7 +102,8 @@ public final class GroupManager { throws IOException, GroupChangeBusyException, GroupChangeFailedException { if (!groupId.isV2()) { - throw new GroupChangeFailedException("Not gv2"); + Log.w(TAG, "Not gv2"); + return; } leaveGroup(context, groupId.requireV2(), true); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 12cfa0d8e9..b27a586c8f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5843,6 +5843,8 @@ %1$s has been removed %1$s has been blocked + + Block failed Unable to remove %1$s