From e316a70b6ce8cab130b5b96341e0cb7e4e1604cc Mon Sep 17 00:00:00 2001 From: Alan Evans Date: Fri, 28 Aug 2020 14:22:14 -0300 Subject: [PATCH] Fix group limit enforcement and display. --- .../ContactSelectionListFragment.java | 2 +- .../ui/managegroup/ManageGroupRepository.java | 18 ++++++++++++++++++ .../ui/managegroup/ManageGroupViewModel.java | 6 +++--- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index 12ac506bfc..e6641d7ba7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -512,7 +512,7 @@ public final class ContactSelectionListFragment extends LoggingFragment } private boolean selectionLimitReached() { - return getChipCount() >= selectionLimit; + return getChipCount() + currentSelection.size() >= selectionLimit; } private void markContactSelected(@NonNull SelectedContact selectedContact) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupRepository.java index 89fc951bfe..3e4419e642 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupRepository.java @@ -32,6 +32,7 @@ import org.thoughtcrime.securesms.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import java.io.IOException; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -197,6 +198,23 @@ final class ManageGroupRepository { public int getTotalCapacity() { return totalCapacity; } + + public int getRemainingCapacity() { + return totalCapacity - members.size(); + } + + public @NonNull ArrayList getMembersWithoutSelf() { + ArrayList recipientIds = new ArrayList<>(members.size()); + RecipientId selfId = Recipient.self().getId(); + + for (RecipientId recipientId : members) { + if (!recipientId.equals(selfId)) { + recipientIds.add(recipientId); + } + } + + return recipientIds; + } } } 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 23df816de5..397a2f64c3 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 @@ -314,15 +314,15 @@ public class ManageGroupViewModel extends ViewModel { public void onAddMembersClick(@NonNull Fragment fragment, int resultCode) { manageGroupRepository.getGroupCapacity(capacity -> { - int remainingCapacity = capacity.getTotalCapacity(); + int remainingCapacity = capacity.getRemainingCapacity(); if (remainingCapacity <= 0) { Toast.makeText(fragment.requireContext(), R.string.ContactSelectionListFragment_the_group_is_full, Toast.LENGTH_SHORT).show(); } else { Intent intent = new Intent(fragment.requireActivity(), AddMembersActivity.class); intent.putExtra(AddMembersActivity.GROUP_ID, manageGroupRepository.getGroupId().toString()); intent.putExtra(ContactSelectionListFragment.DISPLAY_MODE, ContactsCursorLoader.DisplayMode.FLAG_PUSH); - intent.putExtra(ContactSelectionListFragment.TOTAL_CAPACITY, remainingCapacity); - intent.putParcelableArrayListExtra(ContactSelectionListFragment.CURRENT_SELECTION, new ArrayList<>(capacity.getMembers())); + intent.putExtra(ContactSelectionListFragment.TOTAL_CAPACITY, capacity.getTotalCapacity() - 1); + intent.putParcelableArrayListExtra(ContactSelectionListFragment.CURRENT_SELECTION, capacity.getMembersWithoutSelf()); fragment.startActivityForResult(intent, resultCode); } });