From 351138dabd82e93dd31c4917599a7702a2dcb927 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Wed, 5 Sep 2018 10:14:06 +0200 Subject: [PATCH] Fix event in OneToOne chat room --- res/values-fr/strings.xml | 6 + res/values/strings.xml | 8 +- .../org/linphone/chat/ChatEventsAdapter.java | 131 ++++++++++-------- .../org/linphone/chat/GroupChatFragment.java | 8 +- .../org/linphone/chat/GroupInfoFragment.java | 2 +- submodules/bctoolbox | 2 +- submodules/linphone | 2 +- 7 files changed, 94 insertions(+), 65 deletions(-) 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