diff --git a/prepare.conf b/prepare.conf
index d8d2c2899..e7679c94b 100644
--- a/prepare.conf
+++ b/prepare.conf
@@ -18,3 +18,6 @@
-DENABLE_VPX=ON
-DENABLE_X264=OFF
-DENABLE_CODEC2=OFF
+-DENABLE_QRCODE=ON
+-DENABLE_LIME=OFF
+-DENABLE_LIME_X3DH=ON
diff --git a/res/layout-sw533dp-land/call.xml b/res/layout-sw533dp-land/call.xml
index 0000828cf..66cd87a37 100644
--- a/res/layout-sw533dp-land/call.xml
+++ b/res/layout-sw533dp-land/call.xml
@@ -92,19 +92,20 @@
+ android:adjustViewBounds="true"
+ android:contentDescription="@string/content_description_contact_picture"
+ android:src="@drawable/avatar_big_secure1"/>
+ android:adjustViewBounds="true"
+ android:contentDescription="@string/content_description_contact_picture"
+ android:src="@drawable/avatar_mask_border"
+ android:visibility="gone"/>
@@ -223,13 +224,13 @@
+ android:src="@drawable/footer_dialer"/>
-
+
-
+ android:src="@drawable/footer_chat"/>
+
+ android:layout_weight="1"
+ >
+ android:contentDescription="@string/content_description_switch_video"
+ android:padding="20dp"
+ android:src="@drawable/camera_default"/>
+ android:visibility="gone"/>
+ android:contentDescription="@string/content_description_toggle_micro"
+ android:padding="10dp"
+ android:src="@drawable/micro_default"/>
+ android:contentDescription="@string/content_description_toggle_speaker"
+ android:padding="15dp"
+ android:src="@drawable/speaker_default"/>
+ android:contentDescription="@string/content_description_audio_route"
+ android:padding="15dp"
+ android:src="@drawable/routes_default"
+ android:visibility="gone"/>
+ android:contentDescription="@string/content_description_call_options"
+ android:padding="15dp"
+ android:src="@drawable/options_default"/>
diff --git a/res/layout-sw533dp/dialer.xml b/res/layout-sw533dp/dialer.xml
index 086933d0e..5bd0a531d 100644
--- a/res/layout-sw533dp/dialer.xml
+++ b/res/layout-sw533dp/dialer.xml
@@ -7,7 +7,9 @@
diff --git a/res/layout-sw533dp/main.xml b/res/layout-sw533dp/main.xml
index 782047885..182eba750 100644
--- a/res/layout-sw533dp/main.xml
+++ b/res/layout-sw533dp/main.xml
@@ -9,8 +9,8 @@
android:id="@+id/status"
android:name="org.linphone.fragments.StatusFragment"
android:layout_width="match_parent"
- android:layout_height="40dp"
- tools:layout="@layout/status" />
+ android:layout_height="30dp"
+ tools:layout="@layout/status"/>
+ android:dividerHeight="1dp"
+ android:listSelector="@color/colorH"/>
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/colorH">
+ android:orientation="vertical">
+ android:src="@drawable/delete"
+ android:visibility="invisible"/>
+ android:src="@drawable/edit"
+ android:visibility="invisible"/>
@@ -59,9 +61,9 @@
+ android:orientation="vertical"
+ android:paddingTop="20dp">
+ android:contentDescription="@string/content_description_contact_picture"
+ android:src="@drawable/avatar"/>
+ android:src="@drawable/avatar_mask"/>
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:maxLines="1"/>
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:maxLines="1"/>
+ android:paddingTop="10dp"
+ android:stretchColumns="*"/>
@@ -117,6 +119,8 @@
-
+
\ No newline at end of file
diff --git a/res/layout/empty_fragment.xml b/res/layout/empty_fragment.xml
index 684b8b6dd..1b68845aa 100644
--- a/res/layout/empty_fragment.xml
+++ b/res/layout/empty_fragment.xml
@@ -7,9 +7,9 @@
android:background="@color/colorH">
+ android:layout_height="60dp"
+ android:background="@color/colorH"
+ android:orientation="horizontal"/>
diff --git a/res/layout/main.xml b/res/layout/main.xml
index 8b9e58d81..346537def 100644
--- a/res/layout/main.xml
+++ b/res/layout/main.xml
@@ -24,30 +24,30 @@
+ android:layout_alignParentTop="true"
+ android:background="@color/colorH"
+ android:visibility="gone">
+ android:gravity="center_vertical"
+ android:text="@string/settings"/>
+ android:contentDescription="@string/content_description_dialer_back"
+ android:padding="15dp"
+ android:src="@drawable/dialer_back"/>
diff --git a/res/raw/linphonerc_factory b/res/raw/linphonerc_factory
index 43b30d2d4..2bfcbe3d5 100644
--- a/res/raw/linphonerc_factory
+++ b/res/raw/linphonerc_factory
@@ -47,7 +47,7 @@ debug=1
[app]
activation_code_length=4
-prefer_basic_chat_room=1
+prefer_basic_chat_room=0
show_login_view=1
debug_popup_magic=#1234
debug=1
diff --git a/res/values-sw533dp/non_localizable_strings.xml b/res/values-sw533dp/non_localizable_strings.xml
new file mode 100644
index 000000000..40efdfed5
--- /dev/null
+++ b/res/values-sw533dp/non_localizable_strings.xml
@@ -0,0 +1,4 @@
+
+
+ true
+
diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java
index 2f57820ea..6cbd92156 100644
--- a/src/android/org/linphone/LinphoneManager.java
+++ b/src/android/org/linphone/LinphoneManager.java
@@ -772,6 +772,8 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
accountCreator.setListener(this);
callGsmON = false;
+ //lc.enableLimeV2(true);
+
updateMissedChatCount();
}
diff --git a/src/android/org/linphone/LinphoneUtils.java b/src/android/org/linphone/LinphoneUtils.java
index 05bd4f9c4..fa6629068 100644
--- a/src/android/org/linphone/LinphoneUtils.java
+++ b/src/android/org/linphone/LinphoneUtils.java
@@ -55,6 +55,8 @@ import org.linphone.core.AccountCreator;
import org.linphone.core.Address;
import org.linphone.core.Call;
import org.linphone.core.Call.State;
+import org.linphone.core.ChatRoom;
+import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.core.Core;
import org.linphone.core.Factory;
import org.linphone.core.Friend;
@@ -903,5 +905,13 @@ public final class LinphoneUtils {
}
return null;
}
+
+ public static ChatRoomSecurityLevel getSecurityLevelForSipUri(Core lc, String sipUri) {
+ ChatRoom cr = lc.getChatRoomFromUri(sipUri);
+
+ if (cr != null) return cr.getSecurityLevel();
+
+ return ChatRoomSecurityLevel.ClearText;
+ }
}
diff --git a/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java b/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java
index c92490542..4752b6af1 100644
--- a/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java
+++ b/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java
@@ -57,7 +57,11 @@ import android.widget.Toast;
import java.io.ByteArrayInputStream;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
import java.security.spec.KeySpec;
+import java.util.Arrays;
import java.util.Base64;
import javax.crypto.Cipher;
@@ -353,34 +357,53 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick
private boolean decryptQrcode() {
try {
- byte[] unBased64Data = qrcodeString.getBytes();
+ /*byte[] unBased64Data = qrcodeString.getBytes();
ByteArrayInputStream inputStream = new ByteArrayInputStream(unBased64Data);
- byte[] salt = new byte[16];
- byte[] iv = new byte[256 / 8];
- byte[] contentToDecrypt = new byte[unBased64Data.length - 48];
+ byte[] contentToDecrypt = new byte[unBased64Data.length];
- inputStream.read(salt);
- inputStream.read(iv);
inputStream.read(contentToDecrypt);
- String saltString = new String(salt);
- BigInteger saltHex = new BigInteger(saltString, 16);
- String ivString = new String(iv);
- BigInteger ivHex = new BigInteger(ivString, 16);
+ BigInteger saltHex = new BigInteger(, 16);
+ BigInteger ivHex = new BigInteger("F58B8C9A49B321DBA000000000000000", 16);
byte[] saltByte = removeUselessByte(saltHex.toByteArray(), 8);
byte[] ivByte = removeUselessByte(ivHex.toByteArray(), 16);
- SecretKeyFactory factory = SecretKeyFactory.getInstance("AES/CBC/PKCS5Padding");
+ SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEwithMD5AND128BITAES-CBC-OPENSSL");
KeySpec keySpec = new PBEKeySpec(code_sms.getText().toString().toCharArray(), saltByte, 10000, 128);
SecretKey tmpSecretKey = factory.generateSecret(keySpec);
SecretKeySpec secretKeySpec = new SecretKeySpec(tmpSecretKey.getEncoded(), "AES");
- Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(ivByte));
- remoteUrl = new String(cipher.doFinal(Base64.getDecoder().decode(contentToDecrypt)));
+ remoteUrl = new String(cipher.doFinal(Base64.getDecoder().decode(contentToDecrypt)));*/
+ final byte[] pass = code_sms.getText().toString().getBytes(StandardCharsets.US_ASCII);
+
+ final Base64.Decoder decoder = Base64.getDecoder();
+ final byte[] inBytes = decoder.decode(qrcodeString.getBytes());
+
+ final byte[] salt = "F000000000000000".getBytes(StandardCharsets.US_ASCII);
+
+ final byte[] passAndSalt = concat(pass, salt);
+
+ byte[] hash = new byte[0];
+ byte[] keyAndIv = new byte[0];
+ for (int i = 0; i < 3; i++) {
+ final byte[] data = concat(hash, passAndSalt);
+ final MessageDigest md = MessageDigest.getInstance("MD5");
+ hash = md.digest(data);
+ keyAndIv = concat(keyAndIv, hash);
+ }
+
+ final byte[] keyValue = Arrays.copyOfRange(keyAndIv, 0, 32);
+ final byte[] iv = Arrays.copyOfRange(keyAndIv, 32, 48);
+ final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
+ final SecretKeySpec key = new SecretKeySpec(keyValue, "AES");
+ cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv));
+ final byte[] clear = cipher.doFinal(inBytes, 16, inBytes.length - 16);
+ remoteUrl = new String(clear, StandardCharsets.ISO_8859_1);
} catch (Exception ex) {
Toast.makeText(RemoteProvisioningLoginActivity.this, "Code mauvais", Toast.LENGTH_LONG).show();
Log.e("RemoteProvisioningLoginActivity: Decrypt problem: " + ex);
@@ -390,6 +413,13 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick
return true;
}
+ private static byte[] concat(final byte[] a, final byte[] b) {
+ final byte[] c = new byte[a.length + b.length];
+ System.arraycopy(a, 0, c, 0, a.length);
+ System.arraycopy(b, 0, c, a.length, b.length);
+ return c;
+ }
+
private boolean storeAccount(String url) {
LinphonePreferences.instance().setRemoteProvisioningUrl(url);
//TODO
diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java
index a941ea942..0536a4d26 100644
--- a/src/android/org/linphone/chat/ChatRoomsAdapter.java
+++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java
@@ -41,6 +41,7 @@ import org.linphone.core.ChatMessage;
import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomCapabilities;
import org.linphone.core.ChatRoomListenerStub;
+import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.core.EventLog;
import org.linphone.ui.ListSelectionAdapter;
import org.linphone.ui.ListSelectionHelper;
@@ -230,12 +231,28 @@ public class ChatRoomsAdapter extends ListSelectionAdapter {
}
if (chatRoom.limeAvailable()) {
- holder.contactPicture.setImageResource(R.drawable.avatar_big_secure2);
+ if (chatRoom.getSecurityLevel() == ChatRoomSecurityLevel.Safe) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_big_secure2);
+ } else if (chatRoom.getSecurityLevel() == ChatRoomSecurityLevel.Unsafe) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_big_unsecure);
+ } else if (chatRoom.getSecurityLevel() == ChatRoomSecurityLevel.Encrypted) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_big_secure1);
+ } else {
+ holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered);
+ }
}
} else {
holder.displayName.setText(chatRoom.getSubject());
if (chatRoom.limeAvailable()) {
- holder.contactPicture.setImageResource(R.drawable.avatar_group_small_secure2);
+ if (chatRoom.getSecurityLevel() == ChatRoomSecurityLevel.Safe) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_group_small_secure2);
+ } else if (chatRoom.getSecurityLevel() == ChatRoomSecurityLevel.Unsafe) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_group_small_unsecure);
+ } else if (chatRoom.getSecurityLevel() == ChatRoomSecurityLevel.Encrypted) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_group_small_secure1);
+ } else {
+ holder.contactPicture.setImageResource(R.drawable.avatar_group_small_unregistered);
+ }
} else {
holder.contactPicture.setImageBitmap(mDefaultGroupBitmap);
}
diff --git a/src/android/org/linphone/chat/GroupInfoAdapter.java b/src/android/org/linphone/chat/GroupInfoAdapter.java
index f0aee0504..5a40e96c5 100644
--- a/src/android/org/linphone/chat/GroupInfoAdapter.java
+++ b/src/android/org/linphone/chat/GroupInfoAdapter.java
@@ -27,17 +27,21 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import org.linphone.LinphoneManager;
import org.linphone.LinphoneUtils;
import org.linphone.R;
import org.linphone.activities.LinphoneActivity;
import org.linphone.contacts.ContactAddress;
import org.linphone.contacts.LinphoneContact;
import org.linphone.core.ChatRoom;
+import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.core.Participant;
import java.util.ArrayList;
import java.util.List;
+import static org.linphone.LinphoneUtils.getSecurityLevelForSipUri;
+
public class GroupInfoAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List mItems;
@@ -88,9 +92,20 @@ public class GroupInfoAdapter extends BaseAdapter {
name.setText((c.getFullName() != null) ? c.getFullName() :
(ca.getDisplayName() != null) ? ca.getDisplayName() : ca.getUsername());
- if (c.hasPhoto()) {
+ /*if (c.hasPhoto()) {
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), avatar, c.getThumbnailUri());
- }
+ }*/
+ //Spec Obiane
+ ChatRoomSecurityLevel securityLevel = getSecurityLevelForSipUri(LinphoneManager.getLc(), ca.getAddress().asStringUriOnly());
+ if (securityLevel == ChatRoomSecurityLevel.Safe) {
+ avatar.setImageResource(R.drawable.avatar_big_secure2);
+ } else if (securityLevel == ChatRoomSecurityLevel.Unsafe) {
+ avatar.setImageResource(R.drawable.avatar_big_unsecure);
+ } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) {
+ avatar.setImageResource(R.drawable.avatar_big_secure1);
+ } else {
+ avatar.setImageResource(R.drawable.avatar_medium_unregistered);
+ }
delete.setOnClickListener(new View.OnClickListener() {
@Override
@@ -115,6 +130,17 @@ public class GroupInfoAdapter extends BaseAdapter {
}
});
+ if (securityLevel == ChatRoomSecurityLevel.Safe) {
+ secure.setImageResource(R.drawable.security_ok);
+ } else if (securityLevel == ChatRoomSecurityLevel.Unsafe) {
+ secure.setImageResource(R.drawable.security_ko);
+ } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) {
+ secure.setImageResource(R.drawable.security_pending);
+ } else {
+ secure.setOnClickListener(null);
+ secure.setVisibility(View.INVISIBLE);
+ }
+
isAdmin.setVisibility(ca.isAdmin() ? View.VISIBLE : View.GONE);
isNotAdmin.setVisibility(ca.isAdmin() ? View.GONE : View.VISIBLE);
diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/src/android/org/linphone/chat/ImdnFragment.java
index b3eb3ab47..cce833199 100644
--- a/src/android/org/linphone/chat/ImdnFragment.java
+++ b/src/android/org/linphone/chat/ImdnFragment.java
@@ -44,10 +44,13 @@ import org.linphone.core.Address;
import org.linphone.core.ChatMessage;
import org.linphone.core.ChatMessageListenerStub;
import org.linphone.core.ChatRoom;
+import org.linphone.core.ChatRoomSecurityLevel;
import org.linphone.core.Core;
import org.linphone.core.ParticipantImdnState;
import org.linphone.fragments.FragmentsAvailable;
+import static org.linphone.LinphoneUtils.getSecurityLevelForSipUri;
+
public class ImdnFragment extends Fragment {
private LayoutInflater mInflater;
private LinearLayout mRead, mReadHeader, mDelivered, mDeliveredHeader, mSent, mSentHeader, mUndelivered, mUndeliveredHeader;
@@ -157,6 +160,19 @@ public class ImdnFragment extends Fragment {
refreshInfo();
}
+ private void setPictureForContact(ImageView img, String sipUri) {
+ ChatRoomSecurityLevel securityLevel = getSecurityLevelForSipUri(LinphoneManager.getLc(), sipUri);
+ if (securityLevel == ChatRoomSecurityLevel.Safe) {
+ img.setImageResource(R.drawable.avatar_big_secure2);
+ } else if (securityLevel == ChatRoomSecurityLevel.Unsafe) {
+ img.setImageResource(R.drawable.avatar_big_unsecure);
+ } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) {
+ img.setImageResource(R.drawable.avatar_big_secure1);
+ } else {
+ img.setImageResource(R.drawable.avatar_medium_unregistered);
+ }
+ }
+
private void refreshInfo() {
Address remoteSender = mMessage.getFromAddress();
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(remoteSender);
@@ -212,11 +228,12 @@ public class ImdnFragment extends Fragment {
v.findViewById(R.id.separator).setVisibility(first ? View.GONE : View.VISIBLE);
((TextView)v.findViewById(R.id.time)).setText(LinphoneUtils.timestampToHumanDate(getActivity(), participant.getStateChangeTime(), R.string.messages_date_format));
((TextView)v.findViewById(R.id.name)).setText(participantDisplayName);
- if (participantContact != null && participantContact.hasPhoto()) {
+ /*if (participantContact != null && participantContact.hasPhoto()) {
LinphoneUtils.setThumbnailPictureFromUri(getActivity(), ((ImageView)v.findViewById(R.id.contact_picture)), participantContact.getThumbnailUri());
} else {
((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
- }
+ }*/
+ setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address.asStringUriOnly());
mRead.addView(v);
first = false;
@@ -235,11 +252,12 @@ public class ImdnFragment extends Fragment {
v.findViewById(R.id.separator).setVisibility(first ? View.GONE : View.VISIBLE);
((TextView)v.findViewById(R.id.time)).setText(LinphoneUtils.timestampToHumanDate(getActivity(), participant.getStateChangeTime(), R.string.messages_date_format));
((TextView)v.findViewById(R.id.name)).setText(participantDisplayName);
- if (participantContact != null && participantContact.hasPhoto()) {
+ /*if (participantContact != null && participantContact.hasPhoto()) {
LinphoneUtils.setThumbnailPictureFromUri(getActivity(), ((ImageView)v.findViewById(R.id.contact_picture)), participantContact.getThumbnailUri());
} else {
((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
- }
+ }*/
+ setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address.asStringUriOnly());
mDelivered.addView(v);
first = false;
@@ -258,11 +276,12 @@ public class ImdnFragment extends Fragment {
v.findViewById(R.id.separator).setVisibility(first ? View.GONE : View.VISIBLE);
((TextView)v.findViewById(R.id.time)).setText(LinphoneUtils.timestampToHumanDate(getActivity(), participant.getStateChangeTime(), R.string.messages_date_format));
((TextView)v.findViewById(R.id.name)).setText(participantDisplayName);
- if (participantContact != null && participantContact.hasPhoto()) {
+ /*if (participantContact != null && participantContact.hasPhoto()) {
LinphoneUtils.setThumbnailPictureFromUri(getActivity(), ((ImageView)v.findViewById(R.id.contact_picture)), participantContact.getThumbnailUri());
} else {
((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
- }
+ }*/
+ setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address.asStringUriOnly());
mSent.addView(v);
first = false;
@@ -280,11 +299,12 @@ public class ImdnFragment extends Fragment {
View v = mInflater.inflate(R.layout.chat_imdn_cell, mContainer, false);
v.findViewById(R.id.separator).setVisibility(first ? View.GONE : View.VISIBLE);
((TextView)v.findViewById(R.id.name)).setText(participantDisplayName);
- if (participantContact != null && participantContact.hasPhoto()) {
+ /*if (participantContact != null && participantContact.hasPhoto()) {
LinphoneUtils.setThumbnailPictureFromUri(getActivity(), ((ImageView)v.findViewById(R.id.contact_picture)), participantContact.getThumbnailUri());
} else {
((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
- }
+ }*/
+ setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address.asStringUriOnly());
mUndelivered.addView(v);
first = false;
diff --git a/src/android/org/linphone/contacts/ContactsListFragment.java b/src/android/org/linphone/contacts/ContactsListFragment.java
index cef44ae6b..683d46046 100644
--- a/src/android/org/linphone/contacts/ContactsListFragment.java
+++ b/src/android/org/linphone/contacts/ContactsListFragment.java
@@ -392,7 +392,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
}*/
// Obiane spec
if (LinphoneActivity.isInstanciated() && contact.getFriend() != null && contact.getFriend().getAddress() != null) {
- LinphoneActivity.instance().displayHistoryDetail(contact.getFriend().getAddress().asStringUriOnly(), null);
+ LinphoneActivity.instance().displayContact(contact, false);
}
}
diff --git a/src/android/org/linphone/fragments/HistoryListFragment.java b/src/android/org/linphone/fragments/HistoryListFragment.java
index abe6d9187..b30a4fa79 100644
--- a/src/android/org/linphone/fragments/HistoryListFragment.java
+++ b/src/android/org/linphone/fragments/HistoryListFragment.java
@@ -36,6 +36,7 @@ import org.linphone.core.Call;
import org.linphone.core.Address;
import org.linphone.core.CallLog;
import org.linphone.core.Call.Status;
+import org.linphone.core.ChatRoomSecurityLevel;
import android.annotation.SuppressLint;
import android.app.Dialog;
@@ -59,6 +60,8 @@ import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
+import static org.linphone.LinphoneUtils.getSecurityLevelForSipUri;
+
public class HistoryListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener {
private ListView historyList;
private LayoutInflater mInflater;
@@ -480,11 +483,22 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(address);
String displayName = null;
final String sipUri = (address != null) ? address.asString() : "";
- if (c != null) {
+ /*if (c != null) {
displayName = c.getFullName();
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, c.getThumbnailUri());
} else {
holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
+ }*/
+ //Spec Obiane
+ ChatRoomSecurityLevel securityLevel = getSecurityLevelForSipUri(LinphoneManager.getLc(), sipUri);
+ if (securityLevel == ChatRoomSecurityLevel.Safe) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_big_secure2);
+ } else if (securityLevel == ChatRoomSecurityLevel.Unsafe) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_big_unsecure);
+ } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) {
+ holder.contactPicture.setImageResource(R.drawable.avatar_big_secure1);
+ } else {
+ holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered);
}
if (displayName == null) {
diff --git a/submodules/lime b/submodules/lime
index 619bb9107..547a58b19 160000
--- a/submodules/lime
+++ b/submodules/lime
@@ -1 +1 @@
-Subproject commit 619bb91077cdbf3e2e3922588b80a1b053bc2809
+Subproject commit 547a58b195ed92def2cc5be327529128fc6e537d
diff --git a/submodules/mediastreamer2 b/submodules/mediastreamer2
index db95e67be..d05ff1f27 160000
--- a/submodules/mediastreamer2
+++ b/submodules/mediastreamer2
@@ -1 +1 @@
-Subproject commit db95e67bef9084b5ea7cd8ff53ff717299933223
+Subproject commit d05ff1f27f0ce9fd9612c2adcb02c203f49d5230