summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java49
1 files changed, 37 insertions, 12 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java
index bf7341ac96..805246332f 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java
@@ -8,8 +8,9 @@ import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
-import com.mapbox.mapboxsdk.Mapbox;
+
import com.mapbox.mapboxsdk.log.Logger;
import java.util.List;
@@ -47,6 +48,8 @@ public class ConnectivityReceiver extends BroadcastReceiver {
private List<ConnectivityListener> listeners = new CopyOnWriteArrayList<>();
private Context context;
private int activationCounter;
+ @Nullable
+ private Boolean connected;
private ConnectivityReceiver(@NonNull Context context) {
this.context = context;
@@ -61,7 +64,7 @@ public class ConnectivityReceiver extends BroadcastReceiver {
@UiThread
public void activate() {
if (activationCounter == 0) {
- context.registerReceiver(INSTANCE, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
+ context.registerReceiver(this, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
}
activationCounter++;
}
@@ -85,12 +88,37 @@ public class ConnectivityReceiver extends BroadcastReceiver {
*/
@Override
public void onReceive(@NonNull Context context, Intent intent) {
- boolean connected = isConnected(context);
- Logger.v(TAG, String.format("Connected: %s", connected));
+ if (connected != null) {
+ // Connectivity state overridden by app
+ return;
+ }
+
+ notifyListeners(isNetworkActive());
+ }
+
+ /**
+ * Overwrites system connectivity state. To set, use {@link com.mapbox.mapboxsdk.Mapbox#setConnected(Boolean)}.
+ *
+ * @param connected flag to determine the connectivity state, true for connected, false for
+ * disconnected, and null for ConnectivityManager to determine.
+ */
+ public void setConnected(Boolean connected) {
+ this.connected = connected;
+
+ boolean state;
+ if (connected != null) {
+ state = connected;
+ } else {
+ state = isNetworkActive();
+ }
+ notifyListeners(state);
+ }
+ private void notifyListeners(boolean isConnected) {
+ Logger.v(TAG, String.format("Connected: %s", isConnected));
// Loop over listeners
for (ConnectivityListener listener : listeners) {
- listener.onNetworkStateChanged(connected);
+ listener.onNetworkStateChanged(isConnected);
}
}
@@ -115,16 +143,13 @@ public class ConnectivityReceiver extends BroadcastReceiver {
/**
* Get current connectivity state
*
- * @param context current Context
* @return true if connected
*/
- public boolean isConnected(@NonNull Context context) {
- Boolean connected = Mapbox.isConnected();
- if (connected != null) {
- // Connectivity state overridden by app
- return connected;
- }
+ public boolean isConnected() {
+ return connected != null ? connected : isNetworkActive();
+ }
+ private boolean isNetworkActive() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return (activeNetwork != null && activeNetwork.isConnected());