diff --git a/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java b/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java index 268c38f127..a194dd7b8f 100644 --- a/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java +++ b/app/src/main/java/eu/faircode/email/ServiceAuthenticator.java @@ -151,6 +151,8 @@ public class ServiceAuthenticator extends Authenticator { long now = new Date().getTime(); Long expiration = authState.getAccessTokenExpirationTime(); boolean needsRefresh = (expiration != null && expiration < now); + if (needsRefresh) + authState.setNeedsTokenRefresh(true); if (!needsRefresh && forceRefresh && expiration != null && diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index e127576aed..2248b69b6a 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -64,6 +64,8 @@ import com.sun.mail.imap.IMAPStore; import com.sun.mail.imap.protocol.IMAPProtocol; import com.sun.mail.imap.protocol.IMAPResponse; +import net.openid.appauth.AuthState; + import org.json.JSONObject; import java.io.File; @@ -2356,7 +2358,10 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (!account.isTransient(this)) { Long expirationTime = iservice.getAccessTokenExpirationTime(); - if (expirationTime != null && expirationTime < trigger) { + if (expirationTime != null && + expirationTime < trigger && + expirationTime > new Date().getTime()) { + expirationTime += AuthState.EXPIRY_TIME_TOLERANCE_MS; EntityLog.log(this, EntityLog.Type.Debug, "Expedite keep alive" + " from " + new Date(trigger) + " to " + new Date(expirationTime)); trigger = expirationTime;