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