Basic support for adding by jid on group chat create

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/ui/ChooseContactActivity.java     | 35 
src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java |  2 
2 files changed, 28 insertions(+), 9 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/ChooseContactActivity.java 🔗

@@ -55,6 +55,7 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im
     private final ArrayList<String> mActivatedAccounts = new ArrayList<>();
     private final Set<String> selected = new HashSet<>();
     private Set<String> filterContacts;
+    private Set<ListItem> extraContacts = new HashSet<>();
 
     private boolean showEnterJid = false;
     private boolean startSearching = false;
@@ -291,6 +292,12 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im
         for (final var account : xmppConnectionService.getAccounts()) {
             if (mActivatedAccounts.contains(account.getJid().asBareJid().toEscapedString())) accounts.add(account);
         }
+        for (final var contact : extraContacts) {
+            if (!filterContacts.contains(contact.getJid().asBareJid().toString())
+                    && contact.match(this, needle)) {
+                getListItems().add(contact);
+            }
+        }
         for (final Account account : accounts) {
             for (final Contact contact : account.getRoster().getContacts()) {
                 if (contact.showInContactList() &&
@@ -352,14 +359,26 @@ public class ChooseContactActivity extends AbstractSearchableListItemActivity im
         );
 
         dialog.setOnEnterJidDialogPositiveListener((accountJid, contactJid, x, y) -> {
-            final Intent request = getIntent();
-            final Intent data = new Intent();
-            data.putExtra("contact", contactJid.toString());
-            data.putExtra(EXTRA_ACCOUNT, accountJid.toEscapedString());
-            data.putExtra(EXTRA_SELECT_MULTIPLE, false);
-            copy(request, data);
-            setResult(RESULT_OK, data);
-            finish();
+            for (final Account account : xmppConnectionService.getAccounts()) {
+                if (account.getJid().asBareJid().equals(accountJid)) {
+                    final var contact = account.getRoster().getContact(contactJid);
+                    if (multiple) {
+                        extraContacts.add(contact);
+                        selected.add(contactJid.toString());
+                        if (mMenuSearchView != null) {
+                            binding.fab.postDelayed(() -> {
+                                mMenuSearchView.expandActionView();
+                                mSearchEditText.setText("");
+                                mSearchEditText.append(contactJid.toString());
+                            }, 200L);
+                            filterContacts(contactJid.toString());
+                            binding.fab.setImageResource(R.drawable.ic_navigate_next_24dp);
+                        }
+                    } else {
+                        onListItemClicked(contact);
+                    }
+                }
+            }
 
             return true;
         });

src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java 🔗

@@ -1450,7 +1450,7 @@ public class StartConversationActivity extends XmppActivity
             return;
         }
         Intent intent = new Intent(getApplicationContext(), ChooseContactActivity.class);
-        intent.putExtra(ChooseContactActivity.EXTRA_SHOW_ENTER_JID, false);
+        intent.putExtra(ChooseContactActivity.EXTRA_SHOW_ENTER_JID, true);
         intent.putExtra(ChooseContactActivity.EXTRA_SELECT_MULTIPLE, true);
         intent.putExtra(ChooseContactActivity.EXTRA_GROUP_CHAT_NAME, name.trim());
         intent.putExtra(