diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2017-03-01 09:46:47 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-01 09:46:47 -0500 |
commit | f44e4eb2de31192855bcd5c67c2f25d0860b5352 (patch) | |
tree | 49e4a726adac500229e8453617a3b0176a70627b | |
parent | a46a57027ecef62c72d6c4763dba49a490e2b053 (diff) | |
download | qtlocation-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
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); - } -} |