diff --git a/forge-core/src/main/java/forge/util/ThreadUtil.java b/forge-core/src/main/java/forge/util/ThreadUtil.java index 3ab0062e6e7..dac96c3920b 100644 --- a/forge-core/src/main/java/forge/util/ThreadUtil.java +++ b/forge-core/src/main/java/forge/util/ThreadUtil.java @@ -45,4 +45,21 @@ public class ThreadUtil { public static boolean isGameThread() { return Thread.currentThread().getName().startsWith("Game"); } + + public static T executeWithTimeout(Callable task, int milliseconds) { + ExecutorService executor = Executors.newCachedThreadPool(); + Future 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; + } } \ No newline at end of file diff --git a/forge-gui-android/src/forge/app/Main.java b/forge-gui-android/src/forge/app/Main.java index fb797ff3ca8..fc1d42681f8 100644 --- a/forge-gui-android/src/forge/app/Main.java +++ b/forge-gui-android/src/forge/app/Main.java @@ -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,14 +92,24 @@ public class Main extends AndroidApplication { @Override public boolean isConnectedToInternet() { - NetworkInfo activeNetworkInfo = connManager.getActiveNetworkInfo(); - return activeNetworkInfo != null && activeNetworkInfo.isConnected(); + return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(new Callable() { + @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() { - NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); - return wifi.isConnected(); + return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(new Callable() { + @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