diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 600d19d25..5aac7cb14 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -356,6 +356,12 @@ Vos amis pourront vous joindre plus facilement si vous associez votre compte à
Désactivé
Obligatoire
Préferré
+ Dégradation du niveau de sécurité
+ Dégradation du niveau de sécurité par %s
+ Multiples instances détectées
+ Multiples instances de %s
+ Alerte de sécurité
+ Alerte de sécurité par %s
Réseau
Utiliser WiFi uniquement
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 718a6d331..cd7d9bfb7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -214,8 +214,12 @@
%s has left
new device for %s
device for %s removed
- Security of chatroom have been compromised by %s
- Security of chatroom have been compromised
+ Degradation of security level
+ Degradation of security level from %s
+ Multidevice detected
+ Multidevice detected from %s
+ Security alert
+ Security alert from %s
new subject: %s
%s is admin
%s is no longer admin
diff --git a/src/android/org/linphone/chat/ChatEventsAdapter.java b/src/android/org/linphone/chat/ChatEventsAdapter.java
index 807495b45..ff4fb0d28 100644
--- a/src/android/org/linphone/chat/ChatEventsAdapter.java
+++ b/src/android/org/linphone/chat/ChatEventsAdapter.java
@@ -26,6 +26,7 @@ import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -399,62 +400,84 @@ public class ChatEventsAdapter extends ListSelectionAdapter {
holder.bubbleLayout.setLayoutParams(layoutParams);
} else if (!isOneToOne) { // Event is not chat message
holder.eventLayout.setVisibility(View.VISIBLE);
-
- Address address = event.getParticipantAddress();
- String displayName = null;
- if (address != null) {
- LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(address);
- if (contact != null) {
- displayName = contact.getFullName();
- } else {
- displayName = LinphoneUtils.getAddressDisplayName(address);
- }
- }
-
- switch (event.getType()) {
- case ConferenceCreated:
- holder.eventMessage.setText(mContext.getString(R.string.conference_created));
- break;
- case ConferenceTerminated:
- holder.eventMessage.setText(mContext.getString(R.string.conference_destroyed));
- break;
- case ConferenceParticipantAdded:
- holder.eventMessage.setText(mContext.getString(R.string.participant_added).replace("%s", displayName));
- break;
- case ConferenceParticipantRemoved:
- holder.eventMessage.setText(mContext.getString(R.string.participant_removed).replace("%s", displayName));
- break;
- case ConferenceSubjectChanged:
- holder.eventMessage.setText(mContext.getString(R.string.subject_changed).replace("%s", event.getSubject()));
- break;
- case ConferenceParticipantSetAdmin:
- holder.eventMessage.setText(mContext.getString(R.string.admin_set).replace("%s", displayName));
- break;
- case ConferenceParticipantUnsetAdmin:
- holder.eventMessage.setText(mContext.getString(R.string.admin_unset).replace("%s", displayName));
- break;
- case ConferenceParticipantDeviceAdded:
- holder.eventMessage.setText(mContext.getString(R.string.device_added).replace("%s", displayName));
- break;
- case ConferenceParticipantDeviceRemoved:
- holder.eventMessage.setText(mContext.getString(R.string.device_removed).replace("%s", displayName));
- break;
- case ConferenceSecurityAlert:
- String message;
- if (event.getSecurityAlertFaultyDevice() != null && event.getSecurityAlertFaultyDevice().getUsername() != null ) {
- message = mContext.getString(R.string.security_alert_address).replace("%s", event.getSecurityAlertFaultyDevice().asStringUriOnly());
- } else {
- message = mContext.getString(R.string.security_alert);
- }
- holder.eventMessage.setText(message);
- break;
- case None:
- default:
- //TODO
- break;
- }
}
+ Address address = event.getParticipantAddress();
+ String displayName = null;
+ if (address != null) {
+ LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(address);
+ if (contact != null) {
+ displayName = contact.getFullName();
+ } else {
+ displayName = LinphoneUtils.getAddressDisplayName(address);
+ }
+ }
+
+ holder.eventMessage.setTextColor(Color.BLACK);
+ switch (event.getType()) {
+ case ConferenceCreated:
+ holder.eventMessage.setText(mContext.getString(R.string.conference_created));
+ break;
+ case ConferenceTerminated:
+ holder.eventMessage.setText(mContext.getString(R.string.conference_destroyed));
+ break;
+ case ConferenceParticipantAdded:
+ holder.eventMessage.setText(mContext.getString(R.string.participant_added).replace("%s", displayName));
+ break;
+ case ConferenceParticipantRemoved:
+ holder.eventMessage.setText(mContext.getString(R.string.participant_removed).replace("%s", displayName));
+ break;
+ case ConferenceSubjectChanged:
+ holder.eventMessage.setText(mContext.getString(R.string.subject_changed).replace("%s", event.getSubject()));
+ break;
+ case ConferenceParticipantSetAdmin:
+ holder.eventMessage.setText(mContext.getString(R.string.admin_set).replace("%s", displayName));
+ break;
+ case ConferenceParticipantUnsetAdmin:
+ holder.eventMessage.setText(mContext.getString(R.string.admin_unset).replace("%s", displayName));
+ break;
+ case ConferenceParticipantDeviceAdded:
+ holder.eventMessage.setText(mContext.getString(R.string.device_added).replace("%s", displayName));
+ break;
+ case ConferenceParticipantDeviceRemoved:
+ holder.eventMessage.setText(mContext.getString(R.string.device_removed).replace("%s", displayName));
+ break;
+ case ConferenceSecurityEvent:
+ String message;
+ holder.eventLayout.setVisibility(View.VISIBLE);
+ switch (event.getSecurityEventType()) {
+ case SecurityLevelDowngraded:
+ message = mContext.getString(R.string.security_level_degraded);
+ break;
+ case MultideviceParticipantDetected:
+ holder.eventMessage.setTextColor(Color.RED);
+ if (event.getSecurityEventFaultyDevice() != null) {
+ message = mContext.getString(R.string.security_alert_multidevice_from).replace("%s", event.getSecurityEventFaultyDevice().getUsername());
+ } else {
+ message = mContext.getString(R.string.security_alert_multidevice);
+ }
+ break;
+ case ManInTheMiddleDetected:
+ case LimeIdentityKeyChanged:
+ holder.eventMessage.setTextColor(Color.RED);
+ if (event.getSecurityEventFaultyDevice() != null) {
+ message = mContext.getString(R.string.security_alert_from).replace("%s", event.getSecurityEventFaultyDevice().getUsername());
+ } else {
+ message = mContext.getString(R.string.security_alert);
+ }
+ break;
+ default:
+ message = "";
+ holder.eventLayout.setVisibility(View.GONE);
+ }
+ holder.eventMessage.setText(message);
+ break;
+ case None:
+ default:
+ //TODO
+ break;
+ }
+
return view;
}
diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java
index 09ca02b3a..2f7fde1da 100644
--- a/src/android/org/linphone/chat/GroupChatFragment.java
+++ b/src/android/org/linphone/chat/GroupChatFragment.java
@@ -580,11 +580,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
private void displayChatRoomHistory() {
if (mChatRoom == null) return;
- if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) {
- mEventsAdapter = new ChatEventsAdapter(this, mSelectionHelper, mInflater, mChatRoom.getHistoryMessageEvents(0), mParticipants, true);
- } else {
- mEventsAdapter = new ChatEventsAdapter(this, mSelectionHelper, mInflater, mChatRoom.getHistoryEvents(0), mParticipants, false);
- }
+ mEventsAdapter = new ChatEventsAdapter(this, mSelectionHelper, mInflater, mChatRoom.getHistoryEvents(0), mParticipants, mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()));
mSelectionHelper.setAdapter(mEventsAdapter);
mChatEventsList.setAdapter(mEventsAdapter);
}
@@ -946,7 +942,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
}
@Override
- public void onSecurityAlert(ChatRoom cr, EventLog event) {
+ public void onSecurityEvent(ChatRoom cr, EventLog event) {
mEventsAdapter.addToHistory(event);
}
diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java
index d1460e9a6..3971cd85f 100644
--- a/src/android/org/linphone/chat/GroupInfoFragment.java
+++ b/src/android/org/linphone/chat/GroupInfoFragment.java
@@ -502,7 +502,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
}
@Override
- public void onSecurityAlert(ChatRoom cr, EventLog eventLog) {
+ public void onSecurityEvent(ChatRoom cr, EventLog eventLog) {
}
diff --git a/submodules/bctoolbox b/submodules/bctoolbox
index 405da744b..125bdcc89 160000
--- a/submodules/bctoolbox
+++ b/submodules/bctoolbox
@@ -1 +1 @@
-Subproject commit 405da744b62e299d4324988de7bcdbf9779b21ac
+Subproject commit 125bdcc893a7636ec49745ab8f14b5d23d39f73d
diff --git a/submodules/linphone b/submodules/linphone
index d9d7f754d..5460eefe4 160000
--- a/submodules/linphone
+++ b/submodules/linphone
@@ -1 +1 @@
-Subproject commit d9d7f754d2ddc87eeb0b35bb05b482e78541f358
+Subproject commit 5460eefe4c196cc1159b3013ee3b7f8d31e0ae49