From d1f6a924fb6f493f57cc5ee7390a415f6724e303 Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Thu, 28 Jan 2021 11:45:11 -0400 Subject: [PATCH] Allow block of any recipient except MMS groups still. --- .../groups/ui/managegroup/ManageGroupFragment.java | 6 ++---- .../groups/ui/managegroup/ManageGroupViewModel.java | 8 +++++++- .../jobs/MultiDeviceMessageRequestResponseJob.java | 4 ++++ .../securesms/recipients/RecipientUtil.java | 7 +++++-- .../ui/managerecipient/ManageRecipientFragment.java | 10 +++++----- .../ui/managerecipient/ManageRecipientViewModel.java | 8 +++++++- 6 files changed, 30 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java index 0e42e5be5e..6892c8d54e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java @@ -352,10 +352,8 @@ public class ManageGroupFragment extends LoggingFragment { viewModel.getMentionSetting().observe(getViewLifecycleOwner(), value -> mentionsValue.setText(value)); viewModel.getCanLeaveGroup().observe(getViewLifecycleOwner(), canLeave -> leaveGroup.setVisibility(canLeave ? View.VISIBLE : View.GONE)); - viewModel.getCanBlockGroup().observe(getViewLifecycleOwner(), canBlock -> { - blockGroup.setVisibility(canBlock ? View.VISIBLE : View.GONE); - unblockGroup.setVisibility(canBlock ? View.GONE : View.VISIBLE); - }); + viewModel.getCanBlockGroup().observe(getViewLifecycleOwner(), canBlock -> blockGroup.setVisibility(canBlock ? View.VISIBLE : View.GONE)); + viewModel.getCanUnblockGroup().observe(getViewLifecycleOwner(), canUnblock -> unblockGroup.setVisibility(canUnblock ? View.VISIBLE : View.GONE)); viewModel.getGroupInfoMessage().observe(getViewLifecycleOwner(), message -> { switch (message) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java index f175604183..bbc60d9326 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupViewModel.java @@ -77,6 +77,7 @@ public class ManageGroupViewModel extends ViewModel { private final DefaultValueLiveData memberListCollapseState = new DefaultValueLiveData<>(CollapseState.COLLAPSED); private final LiveData canLeaveGroup; private final LiveData canBlockGroup; + private final LiveData canUnblockGroup; private final LiveData showLegacyIndicator; private final LiveData mentionSetting; private final LiveData groupLinkOn; @@ -119,7 +120,8 @@ public class ManageGroupViewModel extends ViewModel { this.hasCustomNotifications = Transformations.map(this.groupRecipient, recipient -> recipient.getNotificationChannel() != null || !NotificationChannels.supported()); this.canLeaveGroup = liveGroup.isActive(); - this.canBlockGroup = Transformations.map(this.groupRecipient, recipient -> !recipient.isBlocked()); + this.canBlockGroup = Transformations.map(this.groupRecipient, recipient -> RecipientUtil.isBlockable(recipient) && !recipient.isBlocked()); + this.canUnblockGroup = Transformations.map(this.groupRecipient, Recipient::isBlocked); this.mentionSetting = Transformations.distinctUntilChanged(Transformations.map(this.groupRecipient, recipient -> MentionUtil.getMentionSettingDisplayValue(context, recipient.getMentionSetting()))); this.groupLinkOn = Transformations.map(liveGroup.getGroupLink(), GroupLinkUrlAndStatus::isEnabled); @@ -220,6 +222,10 @@ public class ManageGroupViewModel extends ViewModel { return canBlockGroup; } + LiveData getCanUnblockGroup() { + return canUnblockGroup; + } + LiveData getCanLeaveGroup() { return canLeaveGroup; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java index ce4fd845c5..2365261568 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceMessageRequestResponseJob.java @@ -91,6 +91,10 @@ public class MultiDeviceMessageRequestResponseJob extends BaseJob { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); Recipient recipient = Recipient.resolved(threadRecipient); + if (!recipient.hasServiceIdentifier()) { + Log.i(TAG, "Queued for recipient without service identifier"); + return; + } MessageRequestResponseMessage response; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index 192c3cdff0..9a3a0c461b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -111,7 +111,7 @@ public class RecipientUtil { public static boolean isBlockable(@NonNull Recipient recipient) { Recipient resolved = recipient.resolve(); - return resolved.isPushGroup() || resolved.hasServiceIdentifier(); + return !resolved.isMmsGroup(); } public static List getEligibleForSending(@NonNull List recipients) { @@ -177,7 +177,10 @@ public class RecipientUtil { DatabaseFactory.getRecipientDatabase(context).setProfileSharing(recipient.getId(), true); ApplicationDependencies.getJobManager().add(new MultiDeviceBlockedUpdateJob()); StorageSyncHelper.scheduleSyncForDataChange(); - ApplicationDependencies.getJobManager().add(MultiDeviceMessageRequestResponseJob.forAccept(recipient.getId())); + + if (recipient.hasServiceIdentifier()) { + ApplicationDependencies.getJobManager().add(MultiDeviceMessageRequestResponseJob.forAccept(recipient.getId())); + } } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java index d4ec162ed2..e96dba1599 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientFragment.java @@ -51,7 +51,6 @@ import org.thoughtcrime.securesms.recipients.RecipientExporter; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.ui.notifications.CustomNotificationsDialogFragment; import org.thoughtcrime.securesms.util.DateUtils; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.LifecycleCursorWrapper; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.Util; @@ -261,10 +260,11 @@ public class ManageRecipientFragment extends LoggingFragment { }); } - viewModel.getCanBlock().observe(getViewLifecycleOwner(), canBlock -> { - block.setVisibility(canBlock ? View.VISIBLE : View.GONE); - unblock.setVisibility(canBlock ? View.GONE : View.VISIBLE); - }); + viewModel.getCanBlock().observe(getViewLifecycleOwner(), + canBlock -> block.setVisibility(canBlock ? View.VISIBLE : View.GONE)); + + viewModel.getCanUnblock().observe(getViewLifecycleOwner(), + canUnblock -> unblock.setVisibility(canUnblock ? View.VISIBLE : View.GONE)); messageButton.setOnClickListener(v -> { if (fromConversation) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java index b1348dd3f9..da00d258d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/managerecipient/ManageRecipientViewModel.java @@ -63,6 +63,7 @@ public final class ManageRecipientViewModel extends ViewModel { private final LiveData canCollapseMemberList; private final DefaultValueLiveData groupListCollapseState; private final LiveData canBlock; + private final LiveData canUnblock; private final LiveData> visibleSharedGroups; private final LiveData sharedGroupsCountSummary; private final LiveData canAddToAGroup; @@ -79,7 +80,8 @@ public final class ManageRecipientViewModel extends ViewModel { this.disappearingMessageTimer = Transformations.map(this.recipient, r -> ExpirationUtil.getExpirationDisplayValue(context, r.getExpireMessages())); this.muteState = Transformations.map(this.recipient, r -> new MuteState(r.getMuteUntil(), r.isMuted())); this.hasCustomNotifications = Transformations.map(this.recipient, r -> r.getNotificationChannel() != null || !NotificationChannels.supported()); - this.canBlock = Transformations.map(this.recipient, r -> !r.isBlocked()); + this.canBlock = Transformations.map(this.recipient, r -> RecipientUtil.isBlockable(r) && !r.isBlocked()); + this.canUnblock = Transformations.map(this.recipient, Recipient::isBlocked); this.internalDetails = Transformations.map(this.recipient, this::populateInternalDetails); manageRecipientRepository.getThreadId(this::onThreadIdLoaded); @@ -181,6 +183,10 @@ public final class ManageRecipientViewModel extends ViewModel { return canBlock; } + LiveData getCanUnblock() { + return canUnblock; + } + void handleExpirationSelection(@NonNull Context context) { withRecipient(recipient -> ExpirationDialog.show(context,