Use cached anonymous contact info

pull/212/head
M66B 2 years ago
parent a1679e9ac4
commit 1e6d41ce10

@ -29,6 +29,7 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
@ -97,6 +98,8 @@ public class ContactInfo {
static final int FAVICON_READ_BYTES = 50 * 1024;
private static final Object lock = new Object();
private static ContactInfo anonymous = null;
private static Map<String, Lookup> emailLookup = new ConcurrentHashMap<>();
private static final Map<String, ContactInfo> emailContactInfo = new HashMap<>();
@ -226,14 +229,27 @@ public class ContactInfo {
}
private static ContactInfo[] get(Context context, long account, String folderType, String selector, Address[] addresses, boolean cacheOnly) {
if (addresses == null || addresses.length == 0)
return new ContactInfo[]{new ContactInfo()};
if (addresses == null || addresses.length == 0) {
ContactInfo anonymous = getAnonymous(context);
return new ContactInfo[]{anonymous == null ? new ContactInfo() : anonymous};
}
ContactInfo[] result = new ContactInfo[addresses.length];
for (int i = 0; i < addresses.length; i++) {
result[i] = _get(context, account, folderType, selector, (InternetAddress) addresses[i], cacheOnly);
if (result[i] == null)
return null;
if (result[i] == null) {
if (cacheOnly)
return null;
ContactInfo anonymous = getAnonymous(context);
if (anonymous == null)
return null;
result[i] = anonymous;
} else if (result[i].bitmap == null) {
if (!cacheOnly) {
ContactInfo anonymous = getAnonymous(context);
result[i].bitmap = (anonymous == null ? null : anonymous.bitmap);
}
}
}
return result;
@ -577,6 +593,35 @@ public class ContactInfo {
return info;
}
private static ContactInfo getAnonymous(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean avatars = prefs.getBoolean("avatars", true);
boolean bimi = (prefs.getBoolean("bimi", false) && !BuildConfig.PLAY_STORE_RELEASE);
boolean gravatars = (prefs.getBoolean("gravatars", false) && !BuildConfig.PLAY_STORE_RELEASE);
boolean libravatars = (prefs.getBoolean("libravatars", false) && !BuildConfig.PLAY_STORE_RELEASE);
boolean favicons = prefs.getBoolean("favicons", false);
boolean generated = prefs.getBoolean("generated_icons", true);
boolean identicons = prefs.getBoolean("identicons", false);
if (avatars || bimi || gravatars || libravatars || favicons || generated || identicons) {
synchronized (lock) {
if (anonymous == null) {
Drawable d = context.getDrawable(R.drawable.twotone_person_24);
Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
d.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
d.setTint(Helper.resolveColor(context, R.attr.colorSeparator));
d.draw(canvas);
anonymous = new ContactInfo();
anonymous.bitmap = bitmap;
}
return anonymous;
}
}
return null;
}
private static Favicon parseFavicon(URL base, int scaleToPixels, Context context) throws IOException {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean favicons_partial = prefs.getBoolean("favicons_partial", true);

Loading…
Cancel
Save