Improved use of default avatar + use thumbnail instead of full picture when avatar is small to improve scroll speed

This commit is contained in:
Sylvain Berfini 2017-01-06 17:49:57 +01:00
parent 6122078e30
commit 41bbf3592c
10 changed files with 31 additions and 19 deletions

View file

@ -1327,7 +1327,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
LinphoneContact lContact = ContactsManager.getInstance().findContactFromAddress(lAddress); LinphoneContact lContact = ContactsManager.getInstance().findContactFromAddress(lAddress);
if (lContact == null) { if (lContact == null) {
contactName.setText(LinphoneUtils.getAddressDisplayName(lAddress)); contactName.setText(LinphoneUtils.getAddressDisplayName(lAddress));
contactPicture.setImageResource(R.drawable.avatar); contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} else { } else {
contactName.setText(lContact.getFullName()); contactName.setText(lContact.getFullName());
LinphoneUtils.setImagePictureFromUri(contactPicture.getContext(), contactPicture, lContact.getPhotoUri(), lContact.getThumbnailUri()); LinphoneUtils.setImagePictureFromUri(contactPicture.getContext(), contactPicture, lContact.getPhotoUri(), lContact.getThumbnailUri());

View file

@ -1110,15 +1110,15 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
displayName = contact.getFullName(); displayName = contact.getFullName();
} }
if (contact.hasPhoto()) { if (contact.hasPhoto()) {
LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri());
} else { } else {
holder.contactPicture.setImageResource(R.drawable.avatar); holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
} else { } else {
holder.contactPicture.setImageResource(R.drawable.avatar); holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
} else { } else {
holder.contactPicture.setImageResource(R.drawable.avatar); holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
holder.contactName.setText(timestampToHumanDate(context, message.getTime()) + " - " + displayName); holder.contactName.setText(timestampToHumanDate(context, message.getTime()) + " - " + displayName);

View file

@ -422,9 +422,9 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
if (contact != null) { if (contact != null) {
LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri());
} else { } else {
holder.contactPicture.setImageResource(R.drawable.avatar); holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
if (unreadMessagesCount > 0) { if (unreadMessagesCount > 0) {

View file

@ -107,7 +107,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
if (contact.hasPhoto()) { if (contact.hasPhoto()) {
LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri());
} else { } else {
contactPicture.setImageResource(R.drawable.avatar); contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
TextView contactName = (TextView) view.findViewById(R.id.contact_name); TextView contactName = (TextView) view.findViewById(R.id.contact_name);

View file

@ -261,7 +261,7 @@ public class ContactEditorFragment extends Fragment {
if (contact != null) { if (contact != null) {
LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); LinphoneUtils.setImagePictureFromUri(getActivity(), contactPicture, contact.getPhotoUri(), contact.getThumbnailUri());
} else { } else {
contactPicture.setImageResource(R.drawable.avatar); contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
contactPicture.setOnClickListener(new OnClickListener() { contactPicture.setOnClickListener(new OnClickListener() {

View file

@ -524,9 +524,9 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
} }
if (contact.hasPhoto()) { if (contact.hasPhoto()) {
LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri());
} else { } else {
holder.contactPicture.setImageResource(R.drawable.avatar); holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
boolean isOrgVisible = getResources().getBoolean(R.bool.display_contact_organization); boolean isOrgVisible = getResources().getBoolean(R.bool.display_contact_organization);

View file

@ -43,6 +43,8 @@ import android.content.Context;
import android.database.ContentObserver; import android.database.ContentObserver;
import android.database.Cursor; import android.database.Cursor;
import android.database.MatrixCursor; import android.database.MatrixCursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Handler; import android.os.Handler;
@ -64,6 +66,7 @@ public class ContactsManager extends ContentObserver {
private ContactsFetchTask contactsFetchTask; private ContactsFetchTask contactsFetchTask;
private HashMap<String, LinphoneContact> contactsCache; private HashMap<String, LinphoneContact> contactsCache;
private LinphoneContact contactNotFound; private LinphoneContact contactNotFound;
private Bitmap defaultAvatar;
private static ArrayList<ContactsUpdatedListener> contactsUpdatedListeners; private static ArrayList<ContactsUpdatedListener> contactsUpdatedListeners;
public static void addContactsListener(ContactsUpdatedListener listener) { public static void addContactsListener(ContactsUpdatedListener listener) {
@ -82,6 +85,7 @@ public class ContactsManager extends ContentObserver {
private ContactsManager(Handler handler) { private ContactsManager(Handler handler) {
super(handler); super(handler);
defaultAvatar = BitmapFactory.decodeResource(LinphoneService.instance().getResources(), R.drawable.avatar);
contactNotFound = new LinphoneContact(); contactNotFound = new LinphoneContact();
contactsCache = new HashMap<String, LinphoneContact>(); contactsCache = new HashMap<String, LinphoneContact>();
contactsUpdatedListeners = new ArrayList<ContactsUpdatedListener>(); contactsUpdatedListeners = new ArrayList<ContactsUpdatedListener>();
@ -93,9 +97,15 @@ public class ContactsManager extends ContentObserver {
if (contactsFetchTask != null && !contactsFetchTask.isCancelled()) { if (contactsFetchTask != null && !contactsFetchTask.isCancelled()) {
contactsFetchTask.cancel(true); contactsFetchTask.cancel(true);
} }
defaultAvatar.recycle();
instance = null; instance = null;
} }
public Bitmap getDefaultAvatarBitmap() {
return defaultAvatar;
}
@Override @Override
public void onChange(boolean selfChange) { public void onChange(boolean selfChange) {
onChange(selfChange, null); onChange(selfChange, null);

View file

@ -121,7 +121,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
goToContact.setVisibility(View.VISIBLE); goToContact.setVisibility(View.VISIBLE);
} else { } else {
contactName.setText(displayName == null ? LinphoneUtils.getAddressDisplayName(sipUri) : displayName); contactName.setText(displayName == null ? LinphoneUtils.getAddressDisplayName(sipUri) : displayName);
contactPicture.setImageResource(R.drawable.avatar); contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
addToContacts.setVisibility(View.VISIBLE); addToContacts.setVisibility(View.VISIBLE);
goToContact.setVisibility(View.GONE); goToContact.setVisibility(View.GONE);
} }

View file

@ -473,9 +473,9 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
final String sipUri = address.asString(); final String sipUri = address.asString();
if (c != null) { if (c != null) {
displayName = c.getFullName(); displayName = c.getFullName();
LinphoneUtils.setImagePictureFromUri(getActivity(), holder.contactPicture, c.getPhotoUri(), c.getThumbnailUri()); LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, c.getThumbnailUri());
} else { } else {
holder.contactPicture.setImageResource(R.drawable.avatar); holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
if (displayName == null) { if (displayName == null) {

View file

@ -229,8 +229,8 @@ public final class LinphoneUtils {
public static void setImagePictureFromUri(Context c, ImageView view, Uri pictureUri, Uri thumbnailUri) { public static void setImagePictureFromUri(Context c, ImageView view, Uri pictureUri, Uri thumbnailUri) {
if (pictureUri == null) { if (pictureUri == null && thumbnailUri == null) {
view.setImageResource(R.drawable.avatar); view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
return; return;
} }
if (pictureUri.getScheme().startsWith("http")) { if (pictureUri.getScheme().startsWith("http")) {
@ -252,14 +252,14 @@ public final class LinphoneUtils {
if (bm != null) { if (bm != null) {
view.setImageBitmap(bm); view.setImageBitmap(bm);
} else { } else {
view.setImageResource(R.drawable.avatar); view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
} }
} }
public static void setThumbnailPictureFromUri(Context c, ImageView view, Uri tUri) { public static void setThumbnailPictureFromUri(Context c, ImageView view, Uri tUri) {
if (tUri == null) { if (tUri == null) {
view.setImageResource(R.drawable.avatar); view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
return; return;
} }
if (tUri.getScheme().startsWith("http")) { if (tUri.getScheme().startsWith("http")) {
@ -275,6 +275,8 @@ public final class LinphoneUtils {
} }
if (bm != null) { if (bm != null) {
view.setImageBitmap(bm); view.setImageBitmap(bm);
} else {
view.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
} }
} }
} }