From ca352cd2b93954022a4d5240e2f2dd3d42681cf7 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 7 Dec 2023 19:42:28 +0100 Subject: [PATCH] Wait for installing security provider --- .../eu/faircode/email/ApplicationSecure.java | 3 +++ .../eu/faircode/email/ApplicationSecure.java | 3 +++ .../java/eu/faircode/email/EmailService.java | 3 +++ .../eu/faircode/email/ApplicationSecure.java | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/app/src/amazon/java/eu/faircode/email/ApplicationSecure.java b/app/src/amazon/java/eu/faircode/email/ApplicationSecure.java index acfc328304..6a1f6b4290 100644 --- a/app/src/amazon/java/eu/faircode/email/ApplicationSecure.java +++ b/app/src/amazon/java/eu/faircode/email/ApplicationSecure.java @@ -1,4 +1,7 @@ package eu.faircode.email; public class ApplicationSecure extends ApplicationEx { + public static boolean waitProviderInstalled() { + return true; + } } diff --git a/app/src/fdroid/java/eu/faircode/email/ApplicationSecure.java b/app/src/fdroid/java/eu/faircode/email/ApplicationSecure.java index acfc328304..6a1f6b4290 100644 --- a/app/src/fdroid/java/eu/faircode/email/ApplicationSecure.java +++ b/app/src/fdroid/java/eu/faircode/email/ApplicationSecure.java @@ -1,4 +1,7 @@ package eu.faircode.email; public class ApplicationSecure extends ApplicationEx { + public static boolean waitProviderInstalled() { + return true; + } } diff --git a/app/src/main/java/eu/faircode/email/EmailService.java b/app/src/main/java/eu/faircode/email/EmailService.java index 0a77115167..97471b0445 100644 --- a/app/src/main/java/eu/faircode/email/EmailService.java +++ b/app/src/main/java/eu/faircode/email/EmailService.java @@ -1212,12 +1212,14 @@ public class EmailService implements AutoCloseable { @Override public Socket createSocket(String host, int port) throws IOException { + ApplicationSecure.waitProviderInstalled(); return configure(factory.createSocket(server, port)); } @Override public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { configureSocketOptions(s); + ApplicationSecure.waitProviderInstalled(); return configure(factory.createSocket(s, server, port, autoClose)); } @@ -1229,6 +1231,7 @@ public class EmailService implements AutoCloseable { @Override public Socket createSocket(String host, int port, InetAddress clientAddress, int clientPort) throws IOException { + ApplicationSecure.waitProviderInstalled(); return configure(factory.createSocket(server, port, clientAddress, clientPort)); } diff --git a/app/src/play/java/eu/faircode/email/ApplicationSecure.java b/app/src/play/java/eu/faircode/email/ApplicationSecure.java index 76c6fa32ba..fb24f8707e 100644 --- a/app/src/play/java/eu/faircode/email/ApplicationSecure.java +++ b/app/src/play/java/eu/faircode/email/ApplicationSecure.java @@ -4,7 +4,12 @@ import android.content.Intent; import com.google.android.gms.security.ProviderInstaller; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + public class ApplicationSecure extends ApplicationEx implements ProviderInstaller.ProviderInstallListener { + private static final CountDownLatch lock = new CountDownLatch(1); + @Override public void onCreate() { super.onCreate(); @@ -15,6 +20,7 @@ public class ApplicationSecure extends ApplicationEx implements ProviderInstalle @Override public void onProviderInstalled() { Log.i("Security provider installed"); + lock.countDown(); } @Override @@ -22,5 +28,18 @@ public class ApplicationSecure extends ApplicationEx implements ProviderInstalle Log.i("Security provider install failed" + " errorCode=" + errorCode + " recoveryIntent=" + recoveryIntent); + lock.countDown(); + } + + public static boolean waitProviderInstalled() { + Log.i("Security provider wait"); + try { + boolean succeeded = lock.await(500L, TimeUnit.MILLISECONDS); + Log.i("Security provider wait succeeded=" + succeeded); + return succeeded; + } catch (InterruptedException ex) { + Log.e(ex); + return false; + } } }