diff --git a/res/drawable-xhdpi/security_alert_button.png b/res/drawable-xhdpi/security_alert_button.png
deleted file mode 100644
index a75123692..000000000
Binary files a/res/drawable-xhdpi/security_alert_button.png and /dev/null differ
diff --git a/res/layout/chat.xml b/res/layout/chat.xml
index 313dbaadb..2efc5cdac 100644
--- a/res/layout/chat.xml
+++ b/res/layout/chat.xml
@@ -192,11 +192,12 @@
+ android:layout_marginTop="6dp"
+ android:layout_marginRight="6dp"/>
diff --git a/res/raw/linphonerc_factory b/res/raw/linphonerc_factory
index edb966667..60069b9b0 100644
--- a/res/raw/linphonerc_factory
+++ b/res/raw/linphonerc_factory
@@ -42,6 +42,7 @@ enable_basic_to_client_group_chat_room_migration=0
enable_simple_group_chat_message_state=0
aggregate_imdn=1
version_check_url_root=https://www.linphone.org/releases
+xmlrpc_server_url=https://subscribe.linphone.org:444/wizard.php
[app]
activation_code_length=4
@@ -60,3 +61,11 @@ username_max_length=64
username_min_length=1
username_regex=^[a-z0-9_.\-]*$
xmlrpc_url=https://subscribe.linphone.org:444/wizard.php
+
+[lime]
+lime_v2=1
+x3dh_server_url=http://54.37.202.229:80/flexisip-account-manager/x3dh-25519.php
+lime_update_threshold=86400
+max_nb_device_per_participant=255
+allow_message_in_unsafe_chatroom=0
+unsafe_if_sas_refused=1
diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java
index 34546f5ad..89baf5af4 100644
--- a/src/android/org/linphone/activities/LinphoneActivity.java
+++ b/src/android/org/linphone/activities/LinphoneActivity.java
@@ -682,7 +682,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
}
}
- public void goToChatCreator(String address, ArrayList selectedContacts, String subject, boolean isGoBack, Bundle shareInfos, boolean createGroupChat) {
+ public void goToChatCreator(String address, ArrayList selectedContacts, String subject, boolean isGoBack, Bundle shareInfos,
+ boolean createGroupChat, boolean isChatRoomEncrypted) {
if (currentFragment == FragmentsAvailable.INFO_GROUP_CHAT && isGoBack) {
getFragmentManager().popBackStackImmediate();
getFragmentManager().popBackStackImmediate();
@@ -692,6 +693,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
extras.putString("subject", subject);
extras.putString("groupChatRoomAddress", address);
extras.putBoolean("createGroupChatRoom", createGroupChat);
+ extras.putBoolean("encrypted", isChatRoomEncrypted);
if (shareInfos != null) {
if (shareInfos.getString("fileSharedUri") != null)
@@ -731,7 +733,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
displayMissedChats(LinphoneManager.getInstance().getUnreadMessageCount());
}
- public void goToChatGroupInfos(String address, ArrayList contacts, String subject, boolean isEditionEnabled, boolean isGoBack, Bundle shareInfos) {
+ public void goToChatGroupInfos(String address, ArrayList contacts, String subject,
+ boolean isEditionEnabled, boolean isGoBack, Bundle shareInfos, boolean enableEncryption) {
if (currentFragment == FragmentsAvailable.CREATE_CHAT && isGoBack) {
getFragmentManager().popBackStackImmediate();
getFragmentManager().popBackStackImmediate();
@@ -741,6 +744,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
extras.putBoolean("isEditionEnabled", isEditionEnabled);
extras.putSerializable("ContactAddress", contacts);
extras.putString("subject", subject);
+ extras.putBoolean("encryptionEnabled", enableEncryption);
if (shareInfos != null) {
if (shareInfos.getString("fileSharedUri") != null)
diff --git a/src/android/org/linphone/assistant/CreateAccountFragment.java b/src/android/org/linphone/assistant/CreateAccountFragment.java
index 80ce6dd08..12508bc87 100644
--- a/src/android/org/linphone/assistant/CreateAccountFragment.java
+++ b/src/android/org/linphone/assistant/CreateAccountFragment.java
@@ -54,8 +54,7 @@ import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-public class CreateAccountFragment extends Fragment implements CompoundButton.OnCheckedChangeListener
- , OnClickListener, AccountCreatorListener {
+public class CreateAccountFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, OnClickListener, AccountCreatorListener {
private EditText phoneNumberEdit, usernameEdit, passwordEdit, passwordConfirmEdit, emailEdit, dialCode;
private TextView phoneNumberError, passwordError, passwordConfirmError, emailError, assisstantTitle, sipUri, skip, instruction;
private ImageView phoneNumberInfo;
diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java
index 5d7eb43fb..245e822b6 100644
--- a/src/android/org/linphone/chat/ChatCreationFragment.java
+++ b/src/android/org/linphone/chat/ChatCreationFragment.java
@@ -79,6 +79,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
private ImageView mSecurityToggleOff, mSecurityToggleOn;
private Switch mSecurityToggle;
private boolean mCreateGroupChatRoom;
+ private boolean mChatRoomEncrypted;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -97,6 +98,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
mChatRoomSubject = getArguments().getString("subject");
mChatRoomAddress = getArguments().getString("groupChatRoomAddress");
mCreateGroupChatRoom = getArguments().getBoolean("createGroupChatRoom", false);
+ mChatRoomEncrypted = getArguments().getBoolean("encrypted", false);
}
mWaitLayout = view.findViewById(R.id.waitScreen);
@@ -170,6 +172,13 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
}
});
+ mSecurityToggle.setChecked(mChatRoomEncrypted);
+ if (mChatRoomSubject != null && mChatRoomAddress != null) {
+ mSecurityToggle.setEnabled(false);
+ mSecurityToggleOn.setOnClickListener(null);
+ mSecurityToggleOff.setOnClickListener(null);
+ }
+
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
mContactsList.setAdapter(mSearchAdapter);
@@ -389,7 +398,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
}
- private void removeContactFromSelection(ContactAddress ca) {
+ private void addOrRemoveContactFromSelection(ContactAddress ca) {
updateContactsClick(ca, mSearchAdapter.getContactsSelectedList());
mSearchAdapter.notifyDataSetChanged();
updateListSelected();
@@ -447,7 +456,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
if (chatRoom == null) {
ProxyConfig lpc = lc.getDefaultProxyConfig();
if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) {
- mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject), true);
+ mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject), true, mSecurityToggle.isChecked());
mChatRoom.addListener(mChatRoomCreationListener);
mChatRoom.addParticipant(participant);
} else {
@@ -459,17 +468,17 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
}
} else {
mContactsSelectedLayout.removeAllViews();
- LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false, mShareInfos);
+ LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false, mShareInfos, mSecurityToggle.isChecked());
}
} else {
- LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true, mShareInfos);
+ LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true, mShareInfos, mSecurityToggle.isChecked());
}
} else if (id == R.id.clearSearchField) {
mSearchField.setText("");
mSearchAdapter.searchContacts("", mContactsList);
} else if (id == R.id.contactChatDelete) {
ContactAddress ca = (ContactAddress) view.getTag();
- removeContactFromSelection(ca);
+ addOrRemoveContactFromSelection(ca);
}
}
@@ -479,10 +488,16 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
ProxyConfig lpc = lc.getDefaultProxyConfig();
if (lpc == null || lpc.getConferenceFactoryUri() == null || mCreateGroupChatRoom == false) {
- ChatRoom chatRoom = lc.getChatRoom(ca.getAddress());
- LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos, chatRoom.getLocalAddress().asString());
+ if (mSecurityToggle.isChecked() && lpc != null && lpc.getConferenceFactoryUri() != null) {
+ mChatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject), true, mSecurityToggle.isChecked());
+ mChatRoom.addListener(mChatRoomCreationListener);
+ mChatRoom.addParticipant(ca.getAddress());
+ } else {
+ ChatRoom chatRoom = lc.getChatRoom(ca.getAddress());
+ LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos, chatRoom.getLocalAddress().asString());
+ }
} else {
- removeContactFromSelection(ca);
+ addOrRemoveContactFromSelection(ca);
}
}
diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java
index 0cb6075cb..bdc2e8861 100644
--- a/src/android/org/linphone/chat/ChatListFragment.java
+++ b/src/android/org/linphone/chat/ChatListFragment.java
@@ -101,14 +101,14 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene
mNewDiscussionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- LinphoneActivity.instance().goToChatCreator(null, null, null, false, null, false);
+ LinphoneActivity.instance().goToChatCreator(null, null, null, false, null, false, false);
}
});
mNewGroupDiscussionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- LinphoneActivity.instance().goToChatCreator(null, null, null, false, null, true);
+ LinphoneActivity.instance().goToChatCreator(null, null, null, false, null, true, false);
}
});
diff --git a/src/android/org/linphone/chat/ChatRoomViewHolder.java b/src/android/org/linphone/chat/ChatRoomViewHolder.java
index 08116fc45..1e0ce6e23 100644
--- a/src/android/org/linphone/chat/ChatRoomViewHolder.java
+++ b/src/android/org/linphone/chat/ChatRoomViewHolder.java
@@ -154,17 +154,28 @@ public class ChatRoomViewHolder extends RecyclerView.ViewHolder implements View.
if (mRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) {
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(mRoom.getPeerAddress());
if (contact != null) {
- ContactAvatar.displayAvatar(contact, avatarLayout);
+ if (mRoom.hasCapability(ChatRoomCapabilities.Encrypted.toInt())) {
+ ContactAvatar.displayAvatar(contact, mRoom.getSecurityLevel(), avatarLayout);
+ } else {
+ ContactAvatar.displayAvatar(contact, avatarLayout);
+ }
} else {
String username = mRoom.getPeerAddress().getDisplayName();
if (username == null) {
username = mRoom.getPeerAddress().getUsername();
}
- ContactAvatar.displayAvatar(username, avatarLayout);
+ if (mRoom.hasCapability(ChatRoomCapabilities.Encrypted.toInt())) {
+ ContactAvatar.displayAvatar(username, mRoom.getSecurityLevel(), avatarLayout);
+ } else {
+ ContactAvatar.displayAvatar(username, avatarLayout);
+ }
}
} else {
- ((ImageView)avatarLayout.findViewById(R.id.contact_picture)).setImageBitmap(mDefaultGroupBitmap);
- avatarLayout.findViewById(R.id.generated_avatar).setVisibility(View.GONE);
+ if (mRoom.hasCapability(ChatRoomCapabilities.Encrypted.toInt())) {
+ ContactAvatar.displayGroupChatAvatar(mRoom.getSecurityLevel(), avatarLayout);
+ } else {
+ ContactAvatar.displayGroupChatAvatar(avatarLayout);
+ }
}
}
diff --git a/src/android/org/linphone/chat/DeviceAdapter.java b/src/android/org/linphone/chat/DeviceAdapter.java
index a3775275f..5bcffd9c6 100644
--- a/src/android/org/linphone/chat/DeviceAdapter.java
+++ b/src/android/org/linphone/chat/DeviceAdapter.java
@@ -30,6 +30,7 @@ import org.linphone.R;
import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact;
import org.linphone.core.Address;
+import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.core.Participant;
import org.linphone.core.ParticipantDevice;
import org.linphone.ui.ContactAvatar;
@@ -76,6 +77,21 @@ public class DeviceAdapter extends BaseExpandableListAdapter {
Address deviceAddress = device.getAddress();
holder.deviceName.setText(deviceAddress.getUriParam("gr")); //TODO
+
+ ChatRoomSecurityLevel level = device.getSecurityLevel();
+ switch (level) {
+ case Safe:
+ holder.securityLevel.setImageResource(R.drawable.security_2_indicator);
+ break;
+ case Encrypted:
+ holder.securityLevel.setImageResource(R.drawable.security_1_indicator);
+ break;
+ case ClearText:
+ case Unsafe:
+ default:
+ holder.securityLevel.setImageResource(R.drawable.security_alert_indicator);
+ break;
+ }
} else {
Participant participant = (Participant) getGroup(groupPosition);
@@ -97,11 +113,11 @@ public class DeviceAdapter extends BaseExpandableListAdapter {
Address participantAddress = participant.getAddress();
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(participantAddress);
if (contact != null) {
- ContactAvatar.displayAvatar(contact, holder.avatarLayout);
+ ContactAvatar.displayAvatar(contact, participant.getSecurityLevel(), holder.avatarLayout);
holder.participantName.setText(contact.getFullName());
} else {
String displayName = LinphoneUtils.getAddressDisplayName(participantAddress);
- ContactAvatar.displayAvatar(displayName, holder.avatarLayout);
+ ContactAvatar.displayAvatar(displayName, participant.getSecurityLevel(), holder.avatarLayout);
holder.participantName.setText(displayName);
}
@@ -132,7 +148,21 @@ public class DeviceAdapter extends BaseExpandableListAdapter {
Address deviceAddress = device.getAddress();
holder.deviceName.setText(deviceAddress.getUriParam("gr")); //TODO
- //holder.securityLevel.setImageResource();
+
+ ChatRoomSecurityLevel level = device.getSecurityLevel();
+ switch (level) {
+ case Safe:
+ holder.securityLevel.setImageResource(R.drawable.security_2_indicator);
+ break;
+ case Encrypted:
+ holder.securityLevel.setImageResource(R.drawable.security_1_indicator);
+ break;
+ case ClearText:
+ case Unsafe:
+ default:
+ holder.securityLevel.setImageResource(R.drawable.security_alert_indicator);
+ break;
+ }
return view;
}
diff --git a/src/android/org/linphone/chat/DevicesFragment.java b/src/android/org/linphone/chat/DevicesFragment.java
index 507e34b22..3e6d636c4 100644
--- a/src/android/org/linphone/chat/DevicesFragment.java
+++ b/src/android/org/linphone/chat/DevicesFragment.java
@@ -146,7 +146,6 @@ public class DevicesFragment extends Fragment {
boolean onlyDisplayChilds = mRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt());
- //TODO get list of participants and devices
if (mRoom != null && mRoom.getNbParticipants() > 0) {
mAdapter.updateListItems(Arrays.asList(mRoom.getParticipants()), onlyDisplayChilds);
}
diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java
index 623926066..10ae3f423 100644
--- a/src/android/org/linphone/chat/GroupChatFragment.java
+++ b/src/android/org/linphone/chat/GroupChatFragment.java
@@ -69,6 +69,7 @@ import org.linphone.core.ChatMessage;
import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomCapabilities;
import org.linphone.core.ChatRoomListener;
+import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.core.Content;
import org.linphone.core.Core;
import org.linphone.core.EventLog;
@@ -186,7 +187,9 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
ContactAddress ca = new ContactAddress(c, a.asString(), "", c.isFriend(), p.isAdmin());
participants.add(ca);
}
- LinphoneActivity.instance().goToChatGroupInfos(mRemoteSipAddress.asString(), participants, mChatRoom.getSubject(), mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false, false, null);
+ LinphoneActivity.instance().goToChatGroupInfos(mRemoteSipAddress.asString(), participants, mChatRoom.getSubject(),
+ mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false, false, null,
+ mChatRoom.hasCapability(ChatRoomCapabilities.Encrypted.toInt()));
}
});
@@ -634,11 +637,23 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
setReadOnly();
}
- if (mChatRoom.hasCapability(ChatRoomCapabilities.Basic.toInt())) {
+ if (!mChatRoom.hasCapability(ChatRoomCapabilities.Encrypted.toInt())) {
mChatRoomSecurityLevel.setVisibility(View.GONE);
} else {
- //TODO
- //mChatRoomSecurityLevel.setImageResource();
+ ChatRoomSecurityLevel level = mChatRoom.getSecurityLevel();
+ switch (level) {
+ case Safe:
+ mChatRoomSecurityLevel.setImageResource(R.drawable.security_2_indicator);
+ break;
+ case Encrypted:
+ mChatRoomSecurityLevel.setImageResource(R.drawable.security_1_indicator);
+ break;
+ case ClearText:
+ case Unsafe:
+ mChatRoomSecurityLevel.setImageResource(R.drawable.security_alert_indicator);
+ break;
+
+ }
}
}
@@ -1032,6 +1047,12 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
}
+ @Override
+ public void onSecurityEvent(ChatRoom cr, EventLog eventLog) {
+ mEventsAdapter.addToHistory(eventLog);
+ scrollToBottom();
+ }
+
@Override
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
if (mChatRoom.hasBeenLeft()) {
diff --git a/src/android/org/linphone/chat/GroupInfoAdapter.java b/src/android/org/linphone/chat/GroupInfoAdapter.java
index 3c7f582e5..f658d9fbd 100644
--- a/src/android/org/linphone/chat/GroupInfoAdapter.java
+++ b/src/android/org/linphone/chat/GroupInfoAdapter.java
@@ -35,6 +35,7 @@ import org.linphone.activities.LinphoneActivity;
import org.linphone.contacts.ContactAddress;
import org.linphone.contacts.LinphoneContact;
import org.linphone.core.ChatRoom;
+import org.linphone.core.ChatRoomCapabilities;
import org.linphone.core.Participant;
import org.linphone.ui.ContactAvatar;
diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java
index a628ed94f..525b850be 100644
--- a/src/android/org/linphone/chat/GroupInfoFragment.java
+++ b/src/android/org/linphone/chat/GroupInfoFragment.java
@@ -80,6 +80,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
private Bundle mShareInfos;
private Context mContext;
private LinearLayoutManager layoutManager;
+ private boolean mIsEncryptionEnabled;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -113,6 +114,8 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
mIsEditionEnabled = false;
}
+ mIsEncryptionEnabled = getArguments().getBoolean("encryptionEnabled", false);
+
mParticipantsList = view.findViewById(R.id.chat_room_participants);
mAdapter = new GroupInfoAdapter(mParticipants, !mIsEditionEnabled, !mIsAlreadyCreatedGroup);
mAdapter.setOnDeleteClickListener(new View.OnClickListener() {
@@ -160,7 +163,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
getFragmentManager().popBackStack();
}
} else {
- LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true, mShareInfos, true);
+ LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true, mShareInfos, true, mIsEncryptionEnabled);
}
}
});
@@ -205,7 +208,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
@Override
public void onClick(View view) {
if (mIsEditionEnabled) {
- LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null, true);
+ LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null, true, mIsEncryptionEnabled);
}
}
});
@@ -213,7 +216,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
mAddParticipantsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
- LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null, true);
+ LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null, true, mIsEncryptionEnabled);
}
});
@@ -258,7 +261,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
public void onClick(View view) {
if (!mIsAlreadyCreatedGroup) {
mWaitLayout.setVisibility(View.VISIBLE);
- mTempChatRoom = LinphoneManager.getLc().createClientGroupChatRoom(mSubjectField.getText().toString(), mParticipants.size() == 1);
+ mTempChatRoom = LinphoneManager.getLc().createClientGroupChatRoom(mSubjectField.getText().toString(), mParticipants.size() == 1, mIsEncryptionEnabled);
mTempChatRoom.addListener(mChatRoomCreationListener);
Address addresses[] = new Address[mParticipants.size()];
@@ -492,6 +495,11 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
}
+ @Override
+ public void onSecurityEvent(ChatRoom cr, EventLog eventLog) {
+ refreshParticipantsList();
+ }
+
@Override
public void onUndecryptableMessageReceived(ChatRoom cr, ChatMessage msg) {
diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/src/android/org/linphone/contacts/SearchContactsListAdapter.java
index ef176513d..d63b9db87 100644
--- a/src/android/org/linphone/contacts/SearchContactsListAdapter.java
+++ b/src/android/org/linphone/contacts/SearchContactsListAdapter.java
@@ -146,6 +146,7 @@ public class SearchContactsListAdapter extends RecyclerView.Adapter