summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcyBerta <cyberta@riseup.net>2021-11-10 02:25:47 +0100
committercyBerta <cyberta@riseup.net>2021-11-10 02:25:47 +0100
commit1657571812f6585bd2883c97d114f8d9861505c0 (patch)
tree16e6c5119d7bb99d41e7685085fce31b83f5e75a
parent599e93addd79f51959009df558accfa66b6bc15d (diff)
add a more specific error if provider api communication is attempted without any working internet connection
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderAPI.java32
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java10
-rw-r--r--app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java1
-rw-r--r--app/src/main/res/values/strings.xml1
4 files changed, 42 insertions, 2 deletions
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderAPI.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderAPI.java
index 94d3e0de..fb8d3e85 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderAPI.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderAPI.java
@@ -23,6 +23,9 @@ import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
+import android.net.ConnectivityManager;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;
@@ -37,7 +40,6 @@ import java.io.Closeable;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
-import de.blinkt.openvpn.core.NetworkUtils;
import se.leap.bitmaskclient.base.utils.PreferenceHelper;
import se.leap.bitmaskclient.providersetup.connectivity.OkHttpClientGenerator;
import se.leap.bitmaskclient.tor.ClientTransportPlugin;
@@ -102,7 +104,8 @@ public class ProviderAPI extends JobIntentService implements ProviderApiManagerB
INCORRECTLY_UPDATED_INVALID_VPN_CERTIFICATE = 16,
CORRECTLY_DOWNLOADED_GEOIP_JSON = 17,
INCORRECTLY_DOWNLOADED_GEOIP_JSON = 18,
- TOR_TIMEOUT = 19;
+ TOR_TIMEOUT = 19,
+ MISSING_NETWORK_CONNECTION = 20;
ProviderApiManager providerApiManager;
private volatile TorServiceConnection torServiceConnection;
@@ -198,6 +201,31 @@ public class ProviderAPI extends JobIntentService implements ProviderApiManagerB
return -1;
}
+ @Override
+ public boolean hasNetworkConnection() {
+ try {
+ ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
+
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+ return activeNetwork != null &&
+ activeNetwork.isConnectedOrConnecting();
+ } else {
+ NetworkCapabilities capabilities = cm.getNetworkCapabilities(cm.getActiveNetwork());
+ if (capabilities != null) {
+ return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
+ }
+ return false;
+ }
+ } catch (RuntimeException e) {
+ e.printStackTrace();
+ // we don't know, let's try to fetch data anyways then
+ return true;
+ }
+ }
+
+
+
private ProviderApiManager initApiManager() {
SharedPreferences preferences = getSharedPreferences(SHARED_PREFERENCES, MODE_PRIVATE);
OkHttpClientGenerator clientGenerator = new OkHttpClientGenerator(getResources());
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
index dc15e578..8d626245 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiManagerBase.java
@@ -73,6 +73,7 @@ import static se.leap.bitmaskclient.R.string.error_io_exception_user_message;
import static se.leap.bitmaskclient.R.string.error_json_exception_user_message;
import static se.leap.bitmaskclient.R.string.error_no_such_algorithm_exception_user_message;
import static se.leap.bitmaskclient.R.string.malformed_url;
+import static se.leap.bitmaskclient.R.string.new_provider_uri;
import static se.leap.bitmaskclient.R.string.server_unreachable_message;
import static se.leap.bitmaskclient.R.string.service_is_down_error;
import static se.leap.bitmaskclient.R.string.vpn_certificate_is_invalid;
@@ -118,6 +119,7 @@ import static se.leap.bitmaskclient.providersetup.ProviderAPI.INITIAL_ACTION;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.LOGOUT_FAILED;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.LOG_IN;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.LOG_OUT;
+import static se.leap.bitmaskclient.providersetup.ProviderAPI.MISSING_NETWORK_CONNECTION;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.PARAMETERS;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.PROVIDER_NOK;
import static se.leap.bitmaskclient.providersetup.ProviderAPI.PROVIDER_OK;
@@ -153,6 +155,7 @@ public abstract class ProviderApiManagerBase {
void startTorService() throws InterruptedException, IllegalStateException;
void stopTorService();
int getTorHttpTunnelPort();
+ boolean hasNetworkConnection();
}
private final ProviderApiServiceCallback serviceCallback;
@@ -190,6 +193,13 @@ public abstract class ProviderApiManagerBase {
return;
}
+ if (!serviceCallback.hasNetworkConnection()) {
+ Bundle result = new Bundle();
+ setErrorResult(result, R.string.error_network_connection, null);
+ sendToReceiverOrBroadcast(receiver, MISSING_NETWORK_CONNECTION, result, provider);
+ return;
+ }
+
try {
if (PreferenceHelper.getUseBridges(preferences)) {
startTorProxy();
diff --git a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java
index 712ee172..cc6ff149 100644
--- a/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java
+++ b/app/src/main/java/se/leap/bitmaskclient/providersetup/ProviderApiSetupBroadcastReceiver.java
@@ -67,6 +67,7 @@ public class ProviderApiSetupBroadcastReceiver extends BroadcastReceiver {
case ProviderAPI.PROVIDER_OK:
setupInterface.handleProviderSetUp(handledProvider);
break;
+ case ProviderAPI.MISSING_NETWORK_CONNECTION:
case ProviderAPI.TOR_TIMEOUT:
case ProviderAPI.PROVIDER_NOK:
setupInterface.handleError(resultData);
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c700231d..298f4038 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -179,6 +179,7 @@
<string name="error_tor_timeout">Starting bridges failed. Do you want to retry or continue with an unobfuscated secure connection to configure %s?</string>
<string name="retry_unobfuscated">Retry unobfuscated</string>
<string name="hide_connection_details">Hide connection details</string>
+ <string name="error_network_connection">It seems you have no working internet connection. You should check your WiFi or cellular data connection.</string>
</resources>