Delta Chat currently has a single contact list. Contacts are added there from all groups you participate in. While incoming chat is in the “contact request” state, its members are not added, but as soon as you accept it or send a message there (e.g. from another device), all members are added to your contact list. Similarly, joining a group or channel via QR code or invite link adds the inviter to your contact list.
Users have many times requested that Delta Chat does not add group members to the contact list:
- I did not add to the contacts, the members of the groups
- Don't add every mail address to the adress book
- Please do not automatically add everyone to the address book when entering the group again
- Favourite contacts
- Show provenance of contact in contact's profile view
I have recently proposed to stop adding contacts to the contact list in a simple scenario when the group contact request is accepted: Accepting group contact request adds group members to contact list · Issue #7592 · chatmail/core · GitHub
This was not implemented because it breaks the other scenario.
If a family or a small group of friends starts using Delta Chat and creates a group, they can start 1:1 chats with each other easily by clicking the “+” button and selecting the display name there or searching for it. If we do not add contacts to the contact list, users will have to go into the group member list and select the contact from there or click on the avatar next to the message sent by this member to start a 1:1 chat.
So we want to solve two problems:
- Have a contact list that can be trusted to only have contacts that the user actually knows. Others should not be able to add contacts to your contact list, e.g. by inviting someone to a group that you participate in.
- Make it easy to start conversations with contacts without manually adding them to the contact list first. This should be as easy as clicking the “+” floating button on the chatlist activity, searching for the display name and selecting the contact there.
We also have another constraint: searching in any list should not show results that you cannot find by scrolling through the list. See Increase minimal origin for contact list by link2xt · Pull Request #2411 · chatmail/core · GitHub for the proposal that implemented filtering the contact list without search, but showing more results when searching for specific contact, this was not accepted for this reason.
However, when searching, we can show multiple sections, like “contacts”, “group members” etc.
This is what Telegram does: screenshot.
Signal also has sections in the search accessible from the does something similar, see below.
Testing
I have tested XMPP and Signal because I also use them and can relatively easily check how this is implemented there.
XMPP
XMPP has a roster, your contact list stored on the server. I have tested Dino and Conversations, they both offer very similar options. You add contacts to your contact list manually, so it does not get littered with contacts you don’t know. However, there is no easy way to start a conversation with someone from the group, you have to go into this particular group member list. Basically XMPP clients I tested have a clean contact list but fail the second goal of making it easy to start 1:1 chats.
Dino
On Desktop I have tested Dino 0.5.1. There is a “+” button in the titlebar, tooltip for it says “Start Conversation”. Clicking on the “Start Conversation” button opens “Start Conversation” dialog with a short list of contacts that does not include everyone from any group ever joined. There is a search field, entering something into it filters this contact list but does not allow to find contacts from group chats. “Start Conversation” dialog has its own “+” button which opens “Add Contact” dialog. “Add Contact” dialog has an “Account” field (allowing to select one of my XMPP accounts),
“JID” field (where I can enter contact address manually) and “alias” field (I assume it is the display name).
I did not find a way to search all contacts that appear in any group by display name. Starting a 1:1 chat with group member requires going into the group chat, opening Members list, selecting one of the members and clicking “Start private conversation”.
Conversations
On Android I have tested Conversations version 2.19.7+free installed from F-Droid. When I open the app, I have a “Start chat” button. Clicking on it opens “New chat” activity with two tabs: “Contacts” and “Group chats”. “Contacts” is the same short list as the “Start Conversation” in Dino. “Group chats” tab is some list of group chats, not interesting for “contact list” testing.
On the “new chat” activity there is a floating “+” button, it offers options to “Add contact”, “Create private group chat”, “Join public channel”, “Create public channel”, “Discover channels”. Clicking on “Add contact” offers a small dialog with “Your account” and “XMPP address” fields.
Signal
Signal has clean contact list and makes it easy to start 1:1 conversations by searching for all known contacts from the main screen on Android. However, the search result sections are different on Android and Desktop, and documentation is unclear about what “contact list” means, so we cannot just copy what they do.
I have tested Signal (actually Molly). I do not share my phone address book to Signal. When I click on then “pencil” floating button on my Android phone, “New message” activity appears. There I see my contact list and it does not include everyone from the group. If I start typing there into the search bar, the contact list gets filtered, but no new contacts appear, e.g. I cannot find anyone who is not in my contact list.
However, if I go to the chatlist screen and search there for some display name of someone who is in the group, search results include two sections:
- Group members: this includes all groups that have a member with this display name.
- Contacts: this includes members who are in the group but are not in my “contact list”, I cannot find them in the “New message” activity but can click on them here.
Signal has an answer to question “Who appears in the contact list?”. It says:
- Other Signal users who are saved to your phone’s contact list.
- Other Signal users who are not saved to your phone and you share a group with,
have previously messaged or have explicitly approved.
However, I do not see “Signal users … you share a group with” in the contact list, so it is not clear what they call the “contact list”.
Signal Desktop also does not show “Group members” section, this only happens on Android to me, so the behavior is inconsistent.