summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2017-03-01 09:46:47 -0500
committerGitHub <noreply@github.com>2017-03-01 09:46:47 -0500
commitf44e4eb2de31192855bcd5c67c2f25d0860b5352 (patch)
tree49e4a726adac500229e8453617a3b0176a70627b
parenta46a57027ecef62c72d6c4763dba49a490e2b053 (diff)
downloadqtlocation-mapboxgl-f44e4eb2de31192855bcd5c67c2f25d0860b5352.tar.gz
Only listen to connectivity broadcast events when needed (#8222)
* [android] - only listen to connectivity change events when needed. * [android] - fix compile var args warning, remove redundant test
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java51
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java39
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java8
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java2
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/constants/StyleVersionTest.java21
5 files changed, 48 insertions, 73 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
index 1a50b96bd1..16b7bf1800 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
@@ -3,16 +3,12 @@ package com.mapbox.mapboxsdk.maps;
import android.app.Activity;
import android.app.Dialog;
import android.app.Fragment;
-import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
-import android.content.IntentFilter;
import android.graphics.Canvas;
import android.graphics.PointF;
import android.graphics.SurfaceTexture;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -45,6 +41,7 @@ import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.maps.widgets.CompassView;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationView;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationViewSettings;
+import com.mapbox.mapboxsdk.net.ConnectivityReceiver;
import com.mapbox.services.android.telemetry.MapboxEvent;
import com.mapbox.services.android.telemetry.MapboxTelemetry;
@@ -72,7 +69,7 @@ public class MapView extends FrameLayout {
private NativeMapView nativeMapView;
private boolean destroyed;
- private boolean hasSurface = false;
+ private boolean hasSurface;
private MapboxMap mapboxMap;
private MapCallback mapCallback;
@@ -83,8 +80,6 @@ public class MapView extends FrameLayout {
private MapKeyListener mapKeyListener;
private MapZoomButtonController mapZoomButtonController;
- private ConnectivityReceiver connectivityReceiver;
-
@UiThread
public MapView(@NonNull Context context) {
super(context);
@@ -167,7 +162,7 @@ public class MapView extends FrameLayout {
setWillNotDraw(false);
// notify Map object about current connectivity state
- nativeMapView.setReachability(isConnected());
+ nativeMapView.setReachability(ConnectivityReceiver.instance(context).isConnected(context));
// initialise MapboxMap
mapboxMap.initialise(context, options);
@@ -235,7 +230,7 @@ public class MapView extends FrameLayout {
public void onStart() {
onStartCalled = true;
mapboxMap.onStart();
- registerConnectivityReceiver();
+ ConnectivityReceiver.instance(getContext()).activate();
}
/**
@@ -265,7 +260,7 @@ public class MapView extends FrameLayout {
public void onStop() {
onStopCalled = true;
mapboxMap.onStop();
- unregisterConnectivityReceiver();
+ ConnectivityReceiver.instance(getContext()).deactivate();
}
/**
@@ -287,18 +282,6 @@ public class MapView extends FrameLayout {
nativeMapView = null;
}
- private void registerConnectivityReceiver() {
- getContext().registerReceiver(connectivityReceiver = new ConnectivityReceiver(),
- new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
- }
-
- private void unregisterConnectivityReceiver() {
- if (connectivityReceiver != null) {
- getContext().unregisterReceiver(connectivityReceiver);
- connectivityReceiver = null;
- }
- }
-
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
@@ -548,30 +531,6 @@ public class MapView extends FrameLayout {
}
//
- // Connectivity events
- //
-
- // This class handles connectivity changes
- private class ConnectivityReceiver extends BroadcastReceiver {
-
- // Called when an action we are listening to in the manifest has been sent
- @Override
- public void onReceive(Context context, Intent intent) {
- if (!destroyed && intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
- nativeMapView.setReachability(!intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false));
- }
- }
- }
-
- // Called when MapView is being created
- private boolean isConnected() {
- ConnectivityManager connectivityManager = (ConnectivityManager)
- getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
- return (activeNetwork != null) && activeNetwork.isConnectedOrConnecting();
- }
-
- //
// Map events
//
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 ed7370a910..7be56fa694 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
@@ -7,6 +7,7 @@ import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.annotation.NonNull;
+import android.support.annotation.UiThread;
import com.mapbox.mapboxsdk.Mapbox;
@@ -28,9 +29,7 @@ public class ConnectivityReceiver extends BroadcastReceiver {
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"));
-
+ INSTANCE = new ConnectivityReceiver(context.getApplicationContext());
// Add default listeners
INSTANCE.addListener(new NativeConnectivityListener());
}
@@ -39,8 +38,39 @@ public class ConnectivityReceiver extends BroadcastReceiver {
}
private List<ConnectivityListener> listeners = new CopyOnWriteArrayList<>();
+ private Context context;
+ private int activationCounter;
+
+ private ConnectivityReceiver(@NonNull Context context) {
+ this.context = context;
+ }
+
+ /**
+ * Activates the connectivity receiver.
+ * <p>
+ * if the underlying connectivity receiver isn't active, register the connectivity receiver.
+ * </p>
+ */
+ @UiThread
+ public void activate() {
+ if (activationCounter == 0) {
+ context.registerReceiver(INSTANCE, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
+ }
+ activationCounter++;
+ }
- private ConnectivityReceiver() {
+ /**
+ * Deactivates the connectivity receiver.
+ * <p>
+ * if no other components are listening, unregister the underlying connectivity receiver.
+ * </p>
+ */
+ @UiThread
+ public void deactivate() {
+ activationCounter--;
+ if (activationCounter == 0) {
+ context.unregisterReceiver(INSTANCE);
+ }
}
/**
@@ -92,5 +122,4 @@ public class ConnectivityReceiver extends BroadcastReceiver {
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return (activeNetwork != null && activeNetwork.isConnected());
}
-
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java
index cda79e30c6..8bf19c4065 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/offline/OfflineManager.java
@@ -5,6 +5,7 @@ import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
+import com.mapbox.mapboxsdk.net.ConnectivityReceiver;
import com.mapbox.mapboxsdk.storage.FileSource;
import java.io.File;
@@ -39,6 +40,9 @@ public class OfflineManager {
// This object is implemented as a singleton
private static OfflineManager instance;
+ // The application context
+ private Context context;
+
/**
* This callback receives an asynchronous response containing a list of all
* {@link OfflineRegion} in the database, or an error message otherwise.
@@ -83,6 +87,7 @@ public class OfflineManager {
* Constructor
*/
private OfflineManager(Context context) {
+ this.context = context.getApplicationContext();
this.fileSource = FileSource.getInstance(context);
initialize(fileSource);
@@ -180,6 +185,7 @@ public class OfflineManager {
@NonNull byte[] metadata,
@NonNull final CreateOfflineRegionCallback callback) {
+ ConnectivityReceiver.instance(context).activate();
createOfflineRegion(fileSource, definition, metadata, new CreateOfflineRegionCallback() {
@Override
@@ -187,6 +193,7 @@ public class OfflineManager {
getHandler().post(new Runnable() {
@Override
public void run() {
+ ConnectivityReceiver.instance(context).deactivate();
callback.onCreate(offlineRegion);
}
});
@@ -197,6 +204,7 @@ public class OfflineManager {
getHandler().post(new Runnable() {
@Override
public void run() {
+ ConnectivityReceiver.instance(context).deactivate();
callback.onError(error);
}
});
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java
index ebf1fc4fdf..7628d6391e 100644
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java
@@ -80,7 +80,7 @@ public class CircleLayerActivity extends AppCompatActivity {
public void onClick(View view) {
// filter out stops for our route
- layer.setFilter(in("number", STOPS_FOR_ROUTE));
+ layer.setFilter(in("number", (Object[]) STOPS_FOR_ROUTE));
// add route as a line
try {
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/constants/StyleVersionTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/constants/StyleVersionTest.java
deleted file mode 100644
index 5623afeb58..0000000000
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/constants/StyleVersionTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.mapbox.mapboxsdk.constants;
-
-
-import com.mapbox.mapboxsdk.testapp.model.constants.AppConstant;
-
-import org.junit.Test;
-
-import static junit.framework.Assert.assertEquals;
-
-public class StyleVersionTest {
-
- private static final double DELTA = 1e-15;
-
- @Test
- public void testSanity() {
- assertEquals("Style version should match, when upgrading, verify that integers.xml is updated",
- AppConstant.STYLE_VERSION,
- 9,
- DELTA);
- }
-}