summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net
diff options
context:
space:
mode:
authorIvo van Dongen <info@ivovandongen.nl>2016-09-08 17:53:00 +0200
committerIvo van Dongen <info@ivovandongen.nl>2016-09-23 10:47:54 +0200
commit742d6d827567608f94b0743b7bac5dbef94724e3 (patch)
treeb42d617cf2e8ac60f7a91b339ef3fccccca02043 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net
parent3ddb8dfc86753120d2ea2c3befdf2430c1c56562 (diff)
downloadqtlocation-mapboxgl-742d6d827567608f94b0743b7bac5dbef94724e3.tar.gz
[android] set connectivity state pro-actively
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityListener.java10
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java88
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java34
3 files changed, 132 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityListener.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityListener.java
new file mode 100644
index 0000000000..0528194528
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityListener.java
@@ -0,0 +1,10 @@
+package com.mapbox.mapboxsdk.net;
+
+/**
+ * Receives updates on connectivity state
+ */
+public interface ConnectivityListener {
+
+ void onNetworkStateChanged(boolean connected);
+
+}
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
new file mode 100644
index 0000000000..823f463030
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java
@@ -0,0 +1,88 @@
+package com.mapbox.mapboxsdk.net;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.support.annotation.NonNull;
+import android.util.Log;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+/**
+ * Interface definition for a callback to be invoked when connectivity changes.
+ * Not public api.
+ */
+public class ConnectivityReceiver extends BroadcastReceiver {
+ private static final String TAG = ConnectivityReceiver.class.getSimpleName();
+ private static ConnectivityReceiver INSTANCE;
+
+ /**
+ * Get or create the singleton instance
+ */
+ public static synchronized ConnectivityReceiver instance(Context context) {
+ if (INSTANCE == null) {
+ //Register new instance
+ INSTANCE = new ConnectivityReceiver();
+ context.registerReceiver(INSTANCE, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
+
+ //Add default listeners
+ INSTANCE.addListener(new NativeConnectivityListener());
+ }
+
+ return INSTANCE;
+ }
+
+ private List<ConnectivityListener> listeners = new CopyOnWriteArrayList<>();
+
+ private ConnectivityReceiver() {
+ }
+
+ /**
+ * @see BroadcastReceiver#onReceive(Context, Intent)
+ */
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ boolean connected = isConnected(context);
+ Log.v(TAG, "Connected: " + connected);
+
+ //Loop over listeners
+ for (ConnectivityListener listener : listeners) {
+ listener.onNetworkStateChanged(connected);
+ }
+ }
+
+ /**
+ * Add a listener to be notified
+ *
+ * @param listener the listener to add
+ */
+ public void addListener(@NonNull ConnectivityListener listener) {
+ listeners.add(listener);
+ }
+
+ /**
+ * Remove a listener
+ *
+ * @param listener the listener to remove
+ */
+ public void removeListener(@NonNull ConnectivityListener listener) {
+ listeners.remove(listener);
+ }
+
+ /**
+ * Get current connectivity state
+ *
+ * @param context current Context
+ * @return true if connected
+ */
+ public boolean isConnected(Context context) {
+ ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+ return (activeNetwork != null && activeNetwork.isConnected());
+ }
+
+}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java
new file mode 100644
index 0000000000..8b9307465c
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/NativeConnectivityListener.java
@@ -0,0 +1,34 @@
+package com.mapbox.mapboxsdk.net;
+
+/**
+ * Updates the native library's connectivity state
+ */
+class NativeConnectivityListener implements ConnectivityListener {
+
+ static {
+ System.loadLibrary("mapbox-gl");
+ }
+
+ private long nativePtr;
+ private boolean invalidated;
+
+ NativeConnectivityListener(long nativePtr) {
+ this.nativePtr = nativePtr;
+ }
+
+ NativeConnectivityListener() {
+ initialize();
+ }
+
+ @Override
+ public void onNetworkStateChanged(boolean connected) {
+ nativeOnConnectivityStateChanged(connected);
+ }
+
+ protected native void nativeOnConnectivityStateChanged(boolean connected);
+
+ protected native void initialize();
+
+ @Override
+ protected native void finalize() throws Throwable;
+}