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