diff --git a/app/src/main/java/eu/faircode/email/ApplicationEx.java b/app/src/main/java/eu/faircode/email/ApplicationEx.java index c2596b3f7a..e17ea62865 100644 --- a/app/src/main/java/eu/faircode/email/ApplicationEx.java +++ b/app/src/main/java/eu/faircode/email/ApplicationEx.java @@ -277,6 +277,7 @@ public class ApplicationEx extends Application ContactInfo.init(this); + DnsHelper.init(this); DisconnectBlacklist.init(this); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { diff --git a/app/src/main/java/eu/faircode/email/DnsHelper.java b/app/src/main/java/eu/faircode/email/DnsHelper.java index f710eb5392..0f4b177060 100644 --- a/app/src/main/java/eu/faircode/email/DnsHelper.java +++ b/app/src/main/java/eu/faircode/email/DnsHelper.java @@ -92,6 +92,23 @@ public class DnsHelper { private static final int CHECK_TIMEOUT = 5; // seconds private static final int LOOKUP_TIMEOUT = 15; // seconds + static void init(Context context) { + DnsClient.addDnsServerLookupMechanism( + new AbstractDnsServerLookupMechanism("FairEmail", 1) { + @Override + public boolean isAvailable() { + return true; + } + + @Override + public List getDnsServerAddresses() { + List servers = getDnsServers(context); + Log.i("DNS servers=" + TextUtils.join(",", servers)); + return servers; + } + }); + } + static void checkMx(Context context, Address[] addresses) throws UnknownHostException { if (addresses == null) return; @@ -176,22 +193,6 @@ public class DnsHelper { client.getDataSource().setTimeout(timeout * 1000); - List servers = getDnsServers(context); - Log.i("DNS servers=" + TextUtils.join(",", servers)); - - DnsClient.addDnsServerLookupMechanism( - new AbstractDnsServerLookupMechanism("FairEmail", 1) { - @Override - public boolean isAvailable() { - return (servers.size() > 0); - } - - @Override - public List getDnsServerAddresses() { - return servers; - } - }); - // https://github.com/MiniDNS/minidns/issues/102 if (client instanceof DnssecClient && dns_custom) ((DnssecClient) client).setUseHardcodedDnsServers(false); @@ -364,7 +365,7 @@ public class DnsHelper { } private static List getDnsServers(Context context) { - List result = new ArrayList<>(); + List result = new ArrayList<>(_getDnsServers(context)); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); String dns_extra = prefs.getString("dns_extra", null); @@ -377,30 +378,33 @@ public class DnsHelper { Log.w("DNS extra invalid=" + extra); } - result.addAll(_getDnsServers(context)); + result.add(DEFAULT_DNS); return result; } private static List _getDnsServers(Context context) { List result = new ArrayList<>(); - result.add(DEFAULT_DNS); - ConnectivityManager cm = Helper.getSystemService(context, ConnectivityManager.class); - if (cm == null) - return result; + try { + ConnectivityManager cm = Helper.getSystemService(context, ConnectivityManager.class); + if (cm == null) + return result; - Network active = ConnectionHelper.getActiveNetwork(context); - if (active == null) - return result; + Network active = ConnectionHelper.getActiveNetwork(context); + if (active == null) + return result; - LinkProperties props = cm.getLinkProperties(active); - if (props == null) - return result; + LinkProperties props = cm.getLinkProperties(active); + if (props == null) + return result; - List dns = props.getDnsServers(); - for (int i = 0; i < dns.size(); i++) - result.add(i, dns.get(i).getHostAddress()); + List dns = props.getDnsServers(); + for (int i = 0; i < dns.size(); i++) + result.add(dns.get(i).getHostAddress()); + } catch (Throwable ex) { + Log.e(ex); + } return result; }