diff options
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.java | 49 |
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()); |