diff --git a/src/org/linphone/CallActivity.java b/src/org/linphone/CallActivity.java index e70ca1867..8b63cd8fd 100644 --- a/src/org/linphone/CallActivity.java +++ b/src/org/linphone/CallActivity.java @@ -1327,7 +1327,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList LinphoneContact lContact = ContactsManager.getInstance().findContactFromAddress(lAddress); if (lContact == null) { contactName.setText(LinphoneUtils.getAddressDisplayName(lAddress)); - contactPicture.setImageResource(R.drawable.avatar); + contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } else { contactName.setText(lContact.getFullName()); LinphoneUtils.setImagePictureFromUri(contactPicture.getContext(), contactPicture, lContact.getPhotoUri(), lContact.getThumbnailUri()); diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index cc8b68ea5..5e0bc96a3 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -1110,15 +1110,15 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC displayName = contact.getFullName(); } if (contact.hasPhoto()) { - LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri()); } else { - holder.contactPicture.setImageResource(R.drawable.avatar); + holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } } else { - holder.contactPicture.setImageResource(R.drawable.avatar); + holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } } else { - holder.contactPicture.setImageResource(R.drawable.avatar); + holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } holder.contactName.setText(timestampToHumanDate(context, message.getTime()) + " - " + displayName); diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java index 4eb79ff82..0a0165398 100644 --- a/src/org/linphone/ChatListFragment.java +++ b/src/org/linphone/ChatListFragment.java @@ -422,9 +422,9 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte if (contact != null) { - LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri()); } else { - holder.contactPicture.setImageResource(R.drawable.avatar); + holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } if (unreadMessagesCount > 0) { diff --git a/src/org/linphone/ContactDetailsFragment.java b/src/org/linphone/ContactDetailsFragment.java index 8c806d0c1..fb71c90bd 100644 --- a/src/org/linphone/ContactDetailsFragment.java +++ b/src/org/linphone/ContactDetailsFragment.java @@ -107,7 +107,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener if (contact.hasPhoto()) { LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); } else { - contactPicture.setImageResource(R.drawable.avatar); + contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } TextView contactName = (TextView) view.findViewById(R.id.contact_name); diff --git a/src/org/linphone/ContactEditorFragment.java b/src/org/linphone/ContactEditorFragment.java index 6df23f8f2..54df95532 100644 --- a/src/org/linphone/ContactEditorFragment.java +++ b/src/org/linphone/ContactEditorFragment.java @@ -261,7 +261,7 @@ public class ContactEditorFragment extends Fragment { if (contact != null) { LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); } else { - contactPicture.setImageResource(R.drawable.avatar); + contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } contactPicture.setOnClickListener(new OnClickListener() { diff --git a/src/org/linphone/ContactsListFragment.java b/src/org/linphone/ContactsListFragment.java index 156a49f4f..fdb30c7d6 100644 --- a/src/org/linphone/ContactsListFragment.java +++ b/src/org/linphone/ContactsListFragment.java @@ -524,9 +524,9 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O } if (contact.hasPhoto()) { - LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri()); } else { - holder.contactPicture.setImageResource(R.drawable.avatar); + holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } boolean isOrgVisible = getResources().getBoolean(R.bool.display_contact_organization); diff --git a/src/org/linphone/ContactsManager.java b/src/org/linphone/ContactsManager.java index 81e8b408d..0f66e437c 100644 --- a/src/org/linphone/ContactsManager.java +++ b/src/org/linphone/ContactsManager.java @@ -43,6 +43,8 @@ import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.database.MatrixCursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.net.Uri; import android.os.AsyncTask; import android.os.Handler; @@ -64,6 +66,7 @@ public class ContactsManager extends ContentObserver { private ContactsFetchTask contactsFetchTask; private HashMap contactsCache; private LinphoneContact contactNotFound; + private Bitmap defaultAvatar; private static ArrayList contactsUpdatedListeners; public static void addContactsListener(ContactsUpdatedListener listener) { @@ -82,6 +85,7 @@ public class ContactsManager extends ContentObserver { private ContactsManager(Handler handler) { super(handler); + defaultAvatar = BitmapFactory.decodeResource(LinphoneService.instance().getResources(), R.drawable.avatar); contactNotFound = new LinphoneContact(); contactsCache = new HashMap(); contactsUpdatedListeners = new ArrayList(); @@ -93,8 +97,14 @@ public class ContactsManager extends ContentObserver { if (contactsFetchTask != null && !contactsFetchTask.isCancelled()) { contactsFetchTask.cancel(true); } + defaultAvatar.recycle(); instance = null; } + + + public Bitmap getDefaultAvatarBitmap() { + return defaultAvatar; + } @Override public void onChange(boolean selfChange) { diff --git a/src/org/linphone/HistoryDetailFragment.java b/src/org/linphone/HistoryDetailFragment.java index 50ca7c366..fa3f30564 100644 --- a/src/org/linphone/HistoryDetailFragment.java +++ b/src/org/linphone/HistoryDetailFragment.java @@ -121,7 +121,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { goToContact.setVisibility(View.VISIBLE); } else { contactName.setText(displayName == null ? LinphoneUtils.getAddressDisplayName(sipUri) : displayName); - contactPicture.setImageResource(R.drawable.avatar); + contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); addToContacts.setVisibility(View.VISIBLE); goToContact.setVisibility(View.GONE); } diff --git a/src/org/linphone/HistoryListFragment.java b/src/org/linphone/HistoryListFragment.java index fb2ed93ba..f19529c15 100644 --- a/src/org/linphone/HistoryListFragment.java +++ b/src/org/linphone/HistoryListFragment.java @@ -473,9 +473,9 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On final String sipUri = address.asString(); if (c != null) { displayName = c.getFullName(); - LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, c.getPhotoUri(), c.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, c.getThumbnailUri()); } else { - holder.contactPicture.setImageResource(R.drawable.avatar); + holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } if (displayName == null) { diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java index 8d1e0ae2b..a58a37471 100644 --- a/src/org/linphone/LinphoneUtils.java +++ b/src/org/linphone/LinphoneUtils.java @@ -229,8 +229,8 @@ public final class LinphoneUtils { public static void setImagePictureFromUri(Context c, ImageView view, Uri pictureUri, Uri thumbnailUri) { - if (pictureUri == null) { - view.setImageResource(R.drawable.avatar); + if (pictureUri == null && thumbnailUri == null) { + view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); return; } if (pictureUri.getScheme().startsWith("http")) { @@ -252,14 +252,14 @@ public final class LinphoneUtils { if (bm != null) { view.setImageBitmap(bm); } else { - view.setImageResource(R.drawable.avatar); + view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } } } public static void setThumbnailPictureFromUri(Context c, ImageView view, Uri tUri) { if (tUri == null) { - view.setImageResource(R.drawable.avatar); + view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); return; } if (tUri.getScheme().startsWith("http")) { @@ -273,8 +273,10 @@ public final class LinphoneUtils { } catch (IOException e) { view.setImageURI(tUri); } - if(bm != null) { + if (bm != null) { view.setImageBitmap(bm); + } else { + view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } } }