Browse Source

Fix #404

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 5 years ago
parent
commit
fe77d46ebe

+ 32 - 26
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<String> selectedUserIds;
+    private Set<String> 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<String> userIds = new ArrayList<>();
-        ArrayList<String> 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<String> userIdsArray = new ArrayList<>(selectedUserIds);
+            ArrayList<String> 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());
                     }
                 }
             }