diff --git a/src/android/org/linphone/call/CallIncomingActivity.java b/src/android/org/linphone/call/CallIncomingActivity.java index 010c8655e..db1d833ec 100644 --- a/src/android/org/linphone/call/CallIncomingActivity.java +++ b/src/android/org/linphone/call/CallIncomingActivity.java @@ -49,6 +49,8 @@ import org.linphone.core.CallParams; import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.Core; import org.linphone.core.CoreListenerStub; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered; @@ -252,7 +254,17 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { contactPicture.setImageResource(R.drawable.avatar_big_secure1); } else { - contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && contact.getFriend() != null) { + PresenceModel presenceModel = contact.getFriend().getPresenceModel(); + if (presenceModel != null) { + contactPicture.setImageResource(R.drawable.avatar_medium_secure1); + } else { + contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } + } + else { + contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } } } else { name.setText(LinphoneUtils.getAddressDisplayName(address)); diff --git a/src/android/org/linphone/call/CallOutgoingActivity.java b/src/android/org/linphone/call/CallOutgoingActivity.java index f8a03830c..3880f456f 100644 --- a/src/android/org/linphone/call/CallOutgoingActivity.java +++ b/src/android/org/linphone/call/CallOutgoingActivity.java @@ -36,6 +36,8 @@ import org.linphone.core.Call.State; import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.Core; import org.linphone.core.CoreListenerStub; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import org.linphone.core.Reason; import org.linphone.mediastream.Log; @@ -194,7 +196,6 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC if (contact != null) { LinphoneUtils.setImagePictureFromUri(this, contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); name.setText(contact.getFullName()); - ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig(); Address ourUri = (prx != null) ? prx.getIdentityAddress() : null; ChatRoomSecurityLevel securityLevel = getSecurityLevelForSipUri(LinphoneManager.getLc(), ourUri, contact.getFriend().getAddress()); @@ -205,7 +206,16 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { contactPicture.setImageResource(R.drawable.avatar_big_secure1); } else { - contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && contact.getFriend() != null) { + PresenceModel presenceModel = contact.getFriend().getPresenceModel(); + if (presenceModel != null) { + contactPicture.setImageResource(R.drawable.avatar_medium_secure1); + } else { + contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } } } else { name.setText(LinphoneUtils.getAddressDisplayName(address)); diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index a6ca53a2b..2bd921852 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -45,6 +45,8 @@ import org.linphone.core.ChatRoomCapabilities; import org.linphone.core.ChatRoomListenerStub; import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.EventLog; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.ui.ListSelectionAdapter; import org.linphone.ui.ListSelectionHelper; @@ -260,7 +262,16 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { } else if (level == ChatRoomSecurityLevel.Encrypted) { holder.contactPicture.setImageResource(R.drawable.avatar_small_secure1); } else { - holder.contactPicture.setImageResource(R.drawable.avatar_small_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && contact != null && contact.getFriend() != null) { + PresenceModel presenceModel = contact.getFriend().getPresenceModel(); + if (presenceModel != null) { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_secure1); + } else { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } } } } else { diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 7ba2a48a2..09ca02b3a 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -75,6 +75,8 @@ import org.linphone.core.Factory; import org.linphone.core.LimeState; import org.linphone.core.Participant; import org.linphone.contacts.ContactsUpdatedListener; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.Reason; import org.linphone.fragments.FragmentsAvailable; import org.linphone.mediastream.Log; @@ -542,7 +544,17 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con } else if (level == ChatRoomSecurityLevel.Safe) { avatarTop.setImageResource(R.drawable.avatar_small_secure2); } else { - avatarTop.setImageResource(R.drawable.avatar_small_unsecure); + LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(mChatRoom.getParticipants()[0].getAddress()); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && c != null && c.getFriend() != null) { + PresenceModel presenceModel = c.getFriend().getPresenceModel(); + if (presenceModel != null) { + avatarTop.setImageResource(R.drawable.avatar_medium_secure1); + } else { + avatarTop.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + avatarTop.setImageResource(R.drawable.avatar_medium_unregistered); + } } } else { mCallButton.setVisibility(View.GONE); diff --git a/src/android/org/linphone/chat/GroupInfoAdapter.java b/src/android/org/linphone/chat/GroupInfoAdapter.java index 993b4b290..161f114a1 100644 --- a/src/android/org/linphone/chat/GroupInfoAdapter.java +++ b/src/android/org/linphone/chat/GroupInfoAdapter.java @@ -32,11 +32,14 @@ import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.activities.LinphoneActivity; import org.linphone.contacts.ContactAddress; +import org.linphone.contacts.ContactsManager; import org.linphone.contacts.LinphoneContact; import org.linphone.core.Address; import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.Participant; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import java.util.ArrayList; @@ -109,7 +112,16 @@ public class GroupInfoAdapter extends BaseAdapter { } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { avatar.setImageResource(R.drawable.avatar_big_secure1); } else { - avatar.setImageResource(R.drawable.avatar_medium_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && c != null && c.getFriend() != null) { + PresenceModel presenceModel = c.getFriend().getPresenceModel(); + if (presenceModel != null) { + avatar.setImageResource(R.drawable.avatar_medium_secure1); + } else { + avatar.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + avatar.setImageResource(R.drawable.avatar_medium_unregistered); + } } delete.setOnClickListener(new View.OnClickListener() { diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/src/android/org/linphone/chat/ImdnFragment.java index c8b41afad..d5a91b743 100644 --- a/src/android/org/linphone/chat/ImdnFragment.java +++ b/src/android/org/linphone/chat/ImdnFragment.java @@ -20,7 +20,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package org.linphone.chat; import android.app.Fragment; -import android.media.Image; import android.os.Bundle; import android.support.annotation.Nullable; import android.text.Spanned; @@ -47,8 +46,9 @@ import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.Core; import org.linphone.core.ParticipantImdnState; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; -import org.linphone.fragments.FragmentsAvailable; import static org.linphone.LinphoneUtils.getSecurityLevelForSipUri; @@ -161,7 +161,7 @@ public class ImdnFragment extends Fragment { refreshInfo(); } - private void setPictureForContact(ImageView img, Address sipUri) { + private void setPictureForContact(ImageView img, Address sipUri, LinphoneContact contact) { ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig(); Address ourUri = (prx != null) ? prx.getIdentityAddress() : null; ChatRoomSecurityLevel securityLevel = getSecurityLevelForSipUri(LinphoneManager.getLc(), ourUri, sipUri); @@ -172,7 +172,16 @@ public class ImdnFragment extends Fragment { } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { img.setImageResource(R.drawable.avatar_big_secure1); } else { - img.setImageResource(R.drawable.avatar_medium_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && contact != null && contact.getFriend() != null) { + PresenceModel presenceModel = contact.getFriend().getPresenceModel(); + if (presenceModel != null) { + img.setImageResource(R.drawable.avatar_medium_secure1); + } else { + img.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + img.setImageResource(R.drawable.avatar_medium_unregistered); + } } } @@ -236,7 +245,7 @@ public class ImdnFragment extends Fragment { } else { ((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); }*/ - setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address); + setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address, participantContact); mRead.addView(v); first = false; @@ -260,7 +269,7 @@ public class ImdnFragment extends Fragment { } else { ((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); }*/ - setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address); + setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address, participantContact); mDelivered.addView(v); first = false; @@ -284,7 +293,7 @@ public class ImdnFragment extends Fragment { } else { ((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); }*/ - setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address); + setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address, participantContact); mSent.addView(v); first = false; @@ -307,7 +316,7 @@ public class ImdnFragment extends Fragment { } else { ((ImageView)v.findViewById(R.id.contact_picture)).setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); }*/ - setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address); + setPictureForContact(((ImageView)v.findViewById(R.id.contact_picture)), address, participantContact); mUndelivered.addView(v); first = false; diff --git a/src/android/org/linphone/contacts/ContactsListFragment.java b/src/android/org/linphone/contacts/ContactsListFragment.java index 6c2f0ae48..707a62b37 100644 --- a/src/android/org/linphone/contacts/ContactsListFragment.java +++ b/src/android/org/linphone/contacts/ContactsListFragment.java @@ -48,6 +48,8 @@ import android.widget.TextView; import org.linphone.core.Address; import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.FriendList; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import org.linphone.fragments.FragmentsAvailable; import org.linphone.LinphoneManager; @@ -624,34 +626,26 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O holder.delete.setVisibility(View.INVISIBLE); } - /*Friend[] friends = LinphoneManager.getLc().getFriendsLists(); - if (!ContactsManager.getInstance().isContactPresenceDisabled() && friends != null) { - holder.friendStatus.setVisibility(View.VISIBLE); - PresenceActivityType presenceActivity = friends[0].getPresenceModel().getActivity().getType(); - if (presenceActivity == PresenceActivityType.Online) { - holder.friendStatus.setImageResource(R.drawable.led_connected); - } else if (presenceActivity == PresenceActivityType.Busy) { - holder.friendStatus.setImageResource(R.drawable.led_error); - } else if (presenceActivity == PresenceActivityType.Away) { - holder.friendStatus.setImageResource(R.drawable.led_inprogress); - } else if (presenceActivity == PresenceActivityType.Offline) { - holder.friendStatus.setImageResource(R.drawable.led_disconnected); - } else { - holder.friendStatus.setImageResource(R.drawable.call_quality_indicator_0); - } - }*/ - ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig(); Address ourUri = (prx != null) ? prx.getIdentityAddress() : null; ChatRoomSecurityLevel securityLevel = getSecurityLevelForSipUri(LinphoneManager.getLc(), ourUri, contact.getFriend().getAddress()); if (securityLevel == ChatRoomSecurityLevel.Safe) { - holder.contactPicture.setImageResource(R.drawable.avatar_big_secure2); + holder.contactPicture.setImageResource(R.drawable.avatar_medium_secure2); } else if (securityLevel == ChatRoomSecurityLevel.Unsafe) { - holder.contactPicture.setImageResource(R.drawable.avatar_big_unsecure); + holder.contactPicture.setImageResource(R.drawable.avatar_medium_unsecure); } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { - holder.contactPicture.setImageResource(R.drawable.avatar_big_secure1); + holder.contactPicture.setImageResource(R.drawable.avatar_medium_secure1); } else { - holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && contact != null && contact.getFriend() != null) { + PresenceModel presenceModel = contact.getFriend().getPresenceModel(); + if (presenceModel != null) { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_secure1); + } else { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } } return view; diff --git a/src/android/org/linphone/contacts/ContactsManager.java b/src/android/org/linphone/contacts/ContactsManager.java index 3eb5c3c60..35f421c55 100644 --- a/src/android/org/linphone/contacts/ContactsManager.java +++ b/src/android/org/linphone/contacts/ContactsManager.java @@ -64,7 +64,7 @@ public class ContactsManager extends ContentObserver { private List contacts, sipContacts; private MagicSearch magicSearch; - private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true; + private boolean preferLinphoneContacts = false, isContactPresenceDisabled = false; private ContentResolver contentResolver; private Context context; private HashMap androidContactsCache; diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/src/android/org/linphone/contacts/SearchContactsListAdapter.java index 094d6f474..0be745771 100644 --- a/src/android/org/linphone/contacts/SearchContactsListAdapter.java +++ b/src/android/org/linphone/contacts/SearchContactsListAdapter.java @@ -35,6 +35,8 @@ import org.linphone.activities.LinphoneActivity; import org.linphone.core.Address; import org.linphone.core.ChatRoomSecurityLevel; import org.linphone.core.Factory; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import org.linphone.core.SearchResult; @@ -280,7 +282,16 @@ public class SearchContactsListAdapter extends BaseAdapter { } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { holder.avatar.setImageResource(R.drawable.avatar_big_secure1); } else { - holder.avatar.setImageResource(R.drawable.avatar_medium_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && c != null && c.getFriend() != null) { + PresenceModel presenceModel = c.getFriend().getPresenceModel(); + if (presenceModel != null) { + holder.avatar.setImageResource(R.drawable.avatar_medium_secure1); + } else { + holder.avatar.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + holder.avatar.setImageResource(R.drawable.avatar_medium_unregistered); + } } view.setTag(R.id.contact_search_name, address != null ? address : a); if (listener != null) diff --git a/src/android/org/linphone/fragments/HistoryListFragment.java b/src/android/org/linphone/fragments/HistoryListFragment.java index 1412a3997..74b1cf319 100644 --- a/src/android/org/linphone/fragments/HistoryListFragment.java +++ b/src/android/org/linphone/fragments/HistoryListFragment.java @@ -37,6 +37,8 @@ import org.linphone.core.Address; import org.linphone.core.CallLog; import org.linphone.core.Call.Status; import org.linphone.core.ChatRoomSecurityLevel; +import org.linphone.core.PresenceActivity; +import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import android.annotation.SuppressLint; @@ -503,7 +505,16 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On } else if (securityLevel == ChatRoomSecurityLevel.Encrypted) { holder.contactPicture.setImageResource(R.drawable.avatar_big_secure1); } else { - holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + if (!ContactsManager.getInstance().isContactPresenceDisabled() && c != null && c.getFriend() != null) { + PresenceModel presenceModel = c.getFriend().getPresenceModel(); + if (presenceModel != null) { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_secure1); + } else { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } + } else { + holder.contactPicture.setImageResource(R.drawable.avatar_medium_unregistered); + } } displayName = (c != null) ? c.getFullName() : null;