mirror of
https://github.com/moparisthebest/k-9
synced 2025-01-12 06:08:25 -05:00
Caching also the calculated anonymous bitmap as proposed by maniac103. This removes a lot of code for special handling unknown contacts.
This commit is contained in:
parent
d45c8b053b
commit
df5766ba3a
@ -33,17 +33,6 @@ public class ContactPictureLoader {
|
|||||||
*/
|
*/
|
||||||
private static final int PICTURE_SIZE = 40;
|
private static final int PICTURE_SIZE = 40;
|
||||||
|
|
||||||
/**
|
|
||||||
* Maximum number of email addresses to store in {@link #mUnknownContactsCache}.
|
|
||||||
*/
|
|
||||||
private static final int MAX_UNKNOWN_CONTACTS = 1000;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used as lightweight dummy value for entries in {@link #mUnknownContactsCache}.
|
|
||||||
*/
|
|
||||||
private static final int[] DUMMY_INT_ARRAY = new int[0];
|
|
||||||
|
|
||||||
|
|
||||||
private ContentResolver mContentResolver;
|
private ContentResolver mContentResolver;
|
||||||
private Resources mResources;
|
private Resources mResources;
|
||||||
private Contacts mContactsHelper;
|
private Contacts mContactsHelper;
|
||||||
@ -54,19 +43,6 @@ public class ContactPictureLoader {
|
|||||||
*/
|
*/
|
||||||
private final LruCache<String, Bitmap> mBitmapCache;
|
private final LruCache<String, Bitmap> mBitmapCache;
|
||||||
|
|
||||||
/**
|
|
||||||
* LRU cache of email addresses that don't belong to a contact we have a picture for.
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* We don't store the default picture for unknown contacts or contacts without a picture in
|
|
||||||
* {@link #mBitmapCache}, because that would lead to an unnecessarily complex implementation of
|
|
||||||
* the {@code LruCache.sizeOf()} method. Instead, we save the email addresses we know don't
|
|
||||||
* belong to one of our contacts with a picture. Knowing this, we can avoid querying the
|
|
||||||
* contacts database for those addresses and immediately return the default picture.
|
|
||||||
* </p>
|
|
||||||
*/
|
|
||||||
private final LruCache<String, int[]> mUnknownContactsCache;
|
|
||||||
|
|
||||||
private final static int CONTACT_DUMMY_COLORS_ARGB[] = {
|
private final static int CONTACT_DUMMY_COLORS_ARGB[] = {
|
||||||
0xffff0000, // 0 R, G, B
|
0xffff0000, // 0 R, G, B
|
||||||
0xff00ff00,
|
0xff00ff00,
|
||||||
@ -112,8 +88,6 @@ public class ContactPictureLoader {
|
|||||||
return bitmap.getRowBytes() * bitmap.getHeight();
|
return bitmap.getRowBytes() * bitmap.getHeight();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
mUnknownContactsCache = new LruCache<String, int[]>(MAX_UNKNOWN_CONTACTS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -142,10 +116,6 @@ public class ContactPictureLoader {
|
|||||||
if (bitmap != null) {
|
if (bitmap != null) {
|
||||||
// The picture was found in the bitmap cache
|
// The picture was found in the bitmap cache
|
||||||
badge.setImageBitmap(bitmap);
|
badge.setImageBitmap(bitmap);
|
||||||
} else if (isEmailInUnknownContactsCache(email)) {
|
|
||||||
// This email address doesn't belong to a contact we have a picture for. Use the
|
|
||||||
// default picture.
|
|
||||||
badge.setImageBitmap(calculateFallbackBitmap(address));
|
|
||||||
} else if (cancelPotentialWork(email, badge)) {
|
} else if (cancelPotentialWork(email, badge)) {
|
||||||
// Query the contacts database in a background thread and try to load the contact
|
// Query the contacts database in a background thread and try to load the contact
|
||||||
// picture, if there is one.
|
// picture, if there is one.
|
||||||
@ -218,16 +188,6 @@ public class ContactPictureLoader {
|
|||||||
return mBitmapCache.get(key);
|
return mBitmapCache.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addEmailToUnknownContactsCache(String key) {
|
|
||||||
if (!isEmailInUnknownContactsCache(key)) {
|
|
||||||
mUnknownContactsCache.put(key, DUMMY_INT_ARRAY);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isEmailInUnknownContactsCache(String key) {
|
|
||||||
return mUnknownContactsCache.get(key) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if a {@code ContactPictureRetrievalTask} was already created to load the contact
|
* Checks if a {@code ContactPictureRetrievalTask} was already created to load the contact
|
||||||
* picture for the supplied email address.
|
* picture for the supplied email address.
|
||||||
@ -329,7 +289,7 @@ public class ContactPictureLoader {
|
|||||||
bitmap = calculateFallbackBitmap(mAddress);
|
bitmap = calculateFallbackBitmap(mAddress);
|
||||||
|
|
||||||
// Remember that we don't have a contact picture for this email address
|
// Remember that we don't have a contact picture for this email address
|
||||||
addEmailToUnknownContactsCache(email);
|
addBitmapToCache(email, bitmap);
|
||||||
} else {
|
} else {
|
||||||
// Save the picture of the contact with that email address in the memory cache
|
// Save the picture of the contact with that email address in the memory cache
|
||||||
addBitmapToCache(email, bitmap);
|
addBitmapToCache(email, bitmap);
|
||||||
|
Loading…
Reference in New Issue
Block a user