Use only active network dns if there is any

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/utils/AndroidUsingLinkProperties.java | 16 
1 file changed, 7 insertions(+), 9 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/utils/AndroidUsingLinkProperties.java 🔗

@@ -41,8 +41,8 @@ public class AndroidUsingLinkProperties extends AbstractDnsServerLookupMechanism
             return new ArrayList<>();
         }
         final Network activeNetwork = getActiveNetwork(connectivityManager);
-        final List<String> servers = new ArrayList<>();
-        int offset = 0;
+        final List<String> networkServers = new ArrayList<>();
+        final List<String> otherServers = new ArrayList<>();
         for(Network network : networks) {
             LinkProperties linkProperties = connectivityManager.getLinkProperties(network);
             if (linkProperties == null) {
@@ -51,15 +51,13 @@ public class AndroidUsingLinkProperties extends AbstractDnsServerLookupMechanism
             final NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network);
             final boolean isActiveNetwork = network.equals(activeNetwork);
             final boolean isVpn = networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_VPN;
-            if (isActiveNetwork) {
-                final List<String> tmp = getIPv4First(linkProperties.getDnsServers());
-                servers.addAll(0, tmp);
-                offset += tmp.size();
-            } else if (hasDefaultRoute(linkProperties) || isActiveNetwork || activeNetwork == null || isVpn) {
-				servers.addAll(offset, getIPv4First(linkProperties.getDnsServers()));
+            final List<String> servers = getIPv4First(linkProperties.getDnsServers());
+            if (hasDefaultRoute(linkProperties) || isActiveNetwork || activeNetwork == null || isVpn) {
+                if (isActiveNetwork || isVpn) networkServers.addAll(servers);
+                otherServers.addAll(servers);
             }
         }
-        return servers.stream().distinct().collect(Collectors.toList());
+        return (networkServers.isEmpty() ? otherServers : networkServers).stream().distinct().collect(Collectors.toList());
     }
 
     @TargetApi(23)