From 3c4abf1701760d3c67e92bfa7d9907c577e1ab69 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 18 Jan 2019 20:25:19 +0000 Subject: [PATCH] Let cached contact info expire --- .../main/java/eu/faircode/email/EntityMessage.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EntityMessage.java b/app/src/main/java/eu/faircode/email/EntityMessage.java index 1416006793..fe0efd2abc 100644 --- a/app/src/main/java/eu/faircode/email/EntityMessage.java +++ b/app/src/main/java/eu/faircode/email/EntityMessage.java @@ -50,7 +50,6 @@ import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; import androidx.room.Entity; import androidx.room.ForeignKey; -import androidx.room.Ignore; import androidx.room.Index; import androidx.room.PrimaryKey; @@ -152,8 +151,8 @@ public class EntityMessage implements Serializable { public String error; // volatile public Long last_attempt; // send - @Ignore private static final Map emailContactInfo = new HashMap<>(); + private static final long MAX_CACHED_CONTACTINFO_AGE = 20 * 60 * 1000L; // milliseconds static String generateMessageId() { StringBuilder sb = new StringBuilder(); @@ -216,10 +215,17 @@ public class EntityMessage implements Serializable { private class ContactInfo { Uri lookupUri; String displayName; + long time; ContactInfo(Uri lookupUri, String displayName) { this.lookupUri = lookupUri; this.displayName = displayName; + this.time = new Date().getTime(); + } + + boolean isValid() { + long age = new Date().getTime() - this.time; + return age < MAX_CACHED_CONTACTINFO_AGE; } } @@ -235,8 +241,8 @@ public class EntityMessage implements Serializable { String email = address.getAddress(); synchronized (emailContactInfo) { - if (emailContactInfo.containsKey(email)) { - ContactInfo info = emailContactInfo.get(email); + ContactInfo info = emailContactInfo.get(email); + if (info != null && info.isValid()) { this.avatar = info.lookupUri.toString(); if (!TextUtils.isEmpty(info.displayName)) address.setPersonal(info.displayName);