Add timeout to prevent spending forever trying to determine an Internet connection

This commit is contained in:
drdev
2014-08-25 22:43:56 +00:00
parent acf3aa6693
commit cb7ff871dd
2 changed files with 34 additions and 4 deletions

View File

@@ -45,4 +45,21 @@ public class ThreadUtil {
public static boolean isGameThread() {
return Thread.currentThread().getName().startsWith("Game");
}
public static <T> T executeWithTimeout(Callable<T> task, int milliseconds) {
ExecutorService executor = Executors.newCachedThreadPool();
Future<T> future = executor.submit(task);
T result;
try {
result = future.get(milliseconds, TimeUnit.MILLISECONDS);
}
catch (Exception e) { //handle timeout and other exceptions
e.printStackTrace();
result = null;
}
finally {
future.cancel(true);
}
return result;
}
}

View File

@@ -1,6 +1,8 @@
package forge.app;
import java.io.File;
import java.util.concurrent.Callable;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
@@ -20,6 +22,7 @@ import com.badlogic.gdx.backends.android.AndroidApplication;
import forge.Forge;
import forge.interfaces.IDeviceAdapter;
import forge.util.FileUtil;
import forge.util.ThreadUtil;
public class Main extends AndroidApplication {
@Override
@@ -89,15 +92,25 @@ public class Main extends AndroidApplication {
@Override
public boolean isConnectedToInternet() {
return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
NetworkInfo activeNetworkInfo = connManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}, 2000)); //if can't determine Internet connection within two seconds, assume not connected
}
@Override
public boolean isConnectedToWifi() {
return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(new Callable<Boolean>() {
@Override
public Boolean call() throws Exception {
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return wifi.isConnected();
}
}, 2000)); //if can't determine Internet connection within two seconds, assume not connected
}
@Override
public String getDownloadsDir() {