diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 2192f6daa9..c467c1cbb0 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -495,15 +495,20 @@ public class AdapterMessage extends RecyclerView.Adapter 0) { @@ -530,14 +535,10 @@ public class AdapterMessage extends RecyclerView.Adapter emailContactInfo = new HashMap<>(); + + private static final long CACHE_DURATION = 60 * 1000L; ContactInfo() { } @@ -70,7 +78,11 @@ public class ContactInfo { return (lookupUri != null); } - static ContactInfo get(Context context, Address[] addresses) { + private boolean isExpired() { + return (new Date().getTime() - time > CACHE_DURATION); + } + + static ContactInfo get(Context context, Address[] addresses, boolean cached) { if (addresses == null || addresses.length == 0) return null; @@ -78,6 +90,16 @@ public class ContactInfo { != PackageManager.PERMISSION_GRANTED) return null; + String email = ((InternetAddress) addresses[0]).getAddress(); + + synchronized (emailContactInfo) { + ContactInfo info = emailContactInfo.get(email); + if (info != null && !info.isExpired()) + return info; + } + if (cached) + return null; + try { Cursor cursor = null; try { @@ -90,7 +112,7 @@ public class ContactInfo { }, ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?", new String[]{ - ((InternetAddress) addresses[0]).getAddress() + email }, null); if (cursor != null && cursor.moveToNext()) { @@ -106,6 +128,12 @@ public class ContactInfo { info.is = ContactsContract.Contacts.openContactPhotoInputStream(resolver, lookupUri); info.displayName = cursor.getString(colDisplayName); info.lookupUri = lookupUri; + info.time = new Date().getTime(); + + synchronized (emailContactInfo) { + emailContactInfo.put(email, info); + } + return info; } } finally { diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 1b205d595d..228b34df2c 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -489,7 +489,9 @@ public class ServiceSynchronize extends LifecycleService { // Get contact info Map messageContact = new HashMap<>(); for (TupleMessageEx message : messages) { - ContactInfo info = ContactInfo.get(this, message.from); + ContactInfo info = ContactInfo.get(this, message.from, true); + if (info == null) + info = ContactInfo.get(this, message.from, false); if (info == null) info = new ContactInfo(MessageHelper.formatAddressesShort(message.from)); messageContact.put(message, info);