diff --git a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java index 3480b2fe4..a9698d271 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java @@ -160,6 +160,8 @@ public class ContactsController extends BaseController implements SearchView.OnQ private MenuItem doneMenuItem; + private Set selectedUserIds; + private Set selectedGroupIds; public ContactsController() { super(); setHasOptionsMenu(true); @@ -171,6 +173,9 @@ public class ContactsController extends BaseController implements SearchView.OnQ if (args.containsKey(BundleKeys.KEY_NEW_CONVERSATION)) { isNewConversationView = true; } + + selectedGroupIds = new HashSet<>(); + selectedUserIds = new HashSet<>(); } @Override @@ -227,32 +232,15 @@ public class ContactsController extends BaseController implements SearchView.OnQ } private void selectionDone() { - List abstractFlexibleItemList = adapter.getCurrentItems(); - - ArrayList userIds = new ArrayList<>(); - ArrayList groupIds = new ArrayList<>(); - - UserItem userItem; - for (int i = 0; i < abstractFlexibleItemList.size(); i++) { - if (abstractFlexibleItemList.get(i) instanceof UserItem) { - userItem = (UserItem) abstractFlexibleItemList.get(i); - if ("groups".equals(userItem.getModel().getSource())) { - groupIds.add(userItem.getModel().getUserId()); - } else { - userIds.add(userItem.getModel().getUserId()); - } - } - } - - if (!isPublicCall && (groupIds.size() + userIds.size() == 1)) { + if (!isPublicCall && (selectedGroupIds.size() + selectedUserIds.size() == 1)) { String userId; String roomType = "1"; - if (groupIds.size() == 1) { + if (selectedGroupIds.size() == 1) { roomType = "2"; - userId = groupIds.get(0); + userId = selectedGroupIds.iterator().next(); } else { - userId = userIds.get(0); + userId = selectedUserIds.iterator().next(); } RetrofitBucket retrofitBucket = ApiUtils.getRetrofitBucketForCreateRoom(currentUser.getBaseUrl(), roomType, @@ -315,9 +303,13 @@ public class ContactsController extends BaseController implements SearchView.OnQ roomType = Conversation.ConversationType.ROOM_GROUP_CALL; } + ArrayList userIdsArray = new ArrayList<>(selectedUserIds); + ArrayList groupIdsArray = new ArrayList<>(selectedGroupIds); + + bundle.putParcelable(BundleKeys.KEY_CONVERSATION_TYPE, Parcels.wrap(roomType)); - bundle.putStringArrayList(BundleKeys.KEY_INVITED_PARTICIPANTS, userIds); - bundle.putStringArrayList(BundleKeys.KEY_INVITED_GROUP, groupIds); + bundle.putStringArrayList(BundleKeys.KEY_INVITED_PARTICIPANTS, userIdsArray); + bundle.putStringArrayList(BundleKeys.KEY_INVITED_GROUP, groupIdsArray); bundle.putInt(BundleKeys.KEY_OPERATION_CODE, 11); prepareAndShowBottomSheetWithBundle(bundle, true); } @@ -714,11 +706,9 @@ public class ContactsController extends BaseController implements SearchView.OnQ @Override public boolean onQueryTextChange(String newText) { if (!newText.equals("") && adapter.hasNewFilter(newText)) { - Log.d("MARIO", "SETTING FILTER TO " + newText); adapter.setFilter(newText); fetchData(true); } else if (newText.equals("")) { - Log.d("MARIO", "SETTING FILTER TO " + "CLEARING FILTER"); adapter.setFilter(""); adapter.updateDataSet(contactItems); } @@ -737,7 +727,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ private void checkAndHandleDoneMenuItem() { if (adapter != null && doneMenuItem != null) { - if (adapter.getSelectedItemCount() > 0 || isPublicCall) { + if ((selectedGroupIds.size() + selectedUserIds.size() > 0) || isPublicCall) { doneMenuItem.setVisible(true); } else { doneMenuItem.setVisible(false); @@ -882,6 +872,20 @@ public class ContactsController extends BaseController implements SearchView.OnQ Participant participant = ((UserItem) adapter.getItem(position)).getModel(); participant.setSelected(!participant.isSelected()); + if ("groups".equals(participant.getSource())) { + if (participant.isSelected()) { + selectedGroupIds.add(participant.getUserId()); + } else { + selectedGroupIds.remove(participant.getUserId()); + } + } else { + if (participant.isSelected()) { + selectedUserIds.add(participant.getUserId()); + } else { + selectedUserIds.remove(participant.getUserId()); + } + } + if (currentUser.hasSpreedCapabilityWithName("last-room-activity") && !currentUser.hasSpreedCapabilityWithName("invite-groups-and-mails") && "groups".equals(((UserItem) adapter.getItem(position)).getModel().getSource()) && @@ -894,6 +898,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ if (internalParticipant.getUserId().equals(participant.getUserId()) && "groups".equals(internalParticipant.getSource()) && internalParticipant.isSelected()) { internalParticipant.setSelected(false); + selectedGroupIds.remove(internalParticipant.getUserId()); } } @@ -929,6 +934,7 @@ public class ContactsController extends BaseController implements SearchView.OnQ internalParticipant = ((UserItem) currentItems.get(i)).getModel(); if ("groups".equals(internalParticipant.getSource()) && internalParticipant.isSelected()) { internalParticipant.setSelected(false); + selectedGroupIds.remove(internalParticipant.getUserId()); } } }