From ccc3964270e32145b050d97bf4c678941a5c6092 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Mon, 31 Oct 2016 13:17:56 +0100 Subject: Android Nougat compatibility: onstart/onstop on MapView (#6830) * introduce onstart/onstop on MapView * update wear module * update fragments * update changeling --- .../mapboxsdk/location/LocationServices.java | 2 +- .../com/mapbox/mapboxsdk/maps/MapFragment.java | 2 + .../java/com/mapbox/mapboxsdk/maps/MapView.java | 77 +++++++++++++++------- .../mapbox/mapboxsdk/maps/SupportMapFragment.java | 2 + .../mapboxsdk/maps/widgets/MyLocationView.java | 4 +- 5 files changed, 62 insertions(+), 25 deletions(-) (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com') diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java index 4fade484b4..9991f1d51a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java @@ -23,7 +23,7 @@ import java.util.concurrent.CopyOnWriteArrayList; *
  • You can unregister a {@link LocationListener} with {@link #removeLocationListener(LocationListener)}.
  • * *

    - * Note: If registering a listener in your Activity.onResume() implementation, you should unregister it in Activity.onPause(). + * Note: If registering a listener in your Activity.onStart() implementation, you should unregister it in Activity.onStop(). * (You won't receive location updates when paused, and this will cut down on unnecessary system overhead). * Do not unregister in Activity.onSaveInstanceState(), because this won't be called if the user moves back in the history stack. *

    diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java index 22f42c1d51..ba92926d2f 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapFragment.java @@ -159,6 +159,7 @@ public final class MapFragment extends Fragment { @Override public void onStart() { super.onStart(); + map.onStart(); map.getMapAsync(onMapReadyCallback); } @@ -197,6 +198,7 @@ public final class MapFragment extends Fragment { @Override public void onStop() { super.onStop(); + map.onStop(); } /** 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 af0eacb378..ee2e32697e 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 @@ -160,6 +160,9 @@ public class MapView extends FrameLayout { private List onMapReadyCallbackList; private SnapshotRequest snapshotRequest; + private boolean onStartCalled; + private boolean onStopCalled; + @UiThread public MapView(@NonNull Context context) { super(context); @@ -573,16 +576,35 @@ public class MapView extends FrameLayout { } /** - * You must call this method from the parent's {@link Activity#onDestroy()} or {@link Fragment#onDestroy()}. + * You must call this method from the parent's {@link Activity#onStart()} or {@link Fragment#onStart()} */ @UiThread - public void onDestroy() { - destroyed = true; - nativeMapView.terminateContext(); - nativeMapView.terminateDisplay(); - nativeMapView.destroySurface(); - nativeMapView.destroy(); - nativeMapView = null; + public void onStart() { + onStartCalled = true; + + // Register for connectivity changes + connectivityReceiver = new ConnectivityReceiver(); + getContext().registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + + nativeMapView.update(); + myLocationView.onStart(); + + // In case that no style was set or was loaded through MapboxMapOptions + if (!styleWasSet) { + setStyleUrl(styleUrl); + } + } + + /** + * You must call this method from the parent's {@link Activity#onResume()} or {@link Fragment#onResume()}. + */ + @UiThread + public void onResume() { + if (!onStartCalled) { + // TODO: 26/10/16, can be removed after 5.0.0 release + throw new IllegalStateException("MapView#onStart() was not called. " + + "You must call this method from the parent's {@link Activity#onStart()} or {@link Fragment#onStart()}."); + } } /** @@ -590,33 +612,44 @@ public class MapView extends FrameLayout { */ @UiThread public void onPause() { + // replaced by onStop in v5.0.0, keep around for future development + } + + /** + * You must call this method from the parent's {@link Activity#onStop()} or {@link Fragment#onStop()}. + */ + @UiThread + public void onStop() { + onStopCalled = true; + // Unregister for connectivity changes if (connectivityReceiver != null) { getContext().unregisterReceiver(connectivityReceiver); connectivityReceiver = null; } - myLocationView.onPause(); + myLocationView.onStop(); } /** - * You must call this method from the parent's {@link Activity#onResume()} or {@link Fragment#onResume()}. + * You must call this method from the parent's {@link Activity#onDestroy()} or {@link Fragment#onDestroy()}. */ @UiThread - public void onResume() { - // Register for connectivity changes - connectivityReceiver = new ConnectivityReceiver(); - getContext().registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); - - nativeMapView.update(); - myLocationView.onResume(); - - // In case that no style was set or was loaded through MapboxMapOptions - if (!styleWasSet) { - setStyleUrl(styleUrl); + public void onDestroy() { + if (!onStopCalled) { + // TODO: 26/10/16, can be removed after 5.0.0 release + throw new IllegalStateException("MapView#onStop() was not called. " + + "You must call this method from the parent's {@link Activity#onStop()} or {@link Fragment#onStop()}."); } - } + destroyed = true; + nativeMapView.terminateContext(); + nativeMapView.terminateDisplay(); + nativeMapView.destroySurface(); + nativeMapView.destroy(); + nativeMapView = null; + } + void setFocalPoint(PointF focalPoint) { if (focalPoint == null) { // resetting focal point, diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java index 72674c3bc9..31c2ffff14 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/SupportMapFragment.java @@ -167,6 +167,7 @@ public class SupportMapFragment extends Fragment { @Override public void onStart() { super.onStart(); + map.onStart(); map.getMapAsync(onMapReadyCallback); } @@ -205,6 +206,7 @@ public class SupportMapFragment extends Fragment { @Override public void onStop() { super.onStop(); + map.onStop(); } /** diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index 45e0c4903e..36860b1cef 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -321,7 +321,7 @@ public class MyLocationView extends View { setBearing(position.bearing); } - public void onResume() { + public void onStart() { if (myBearingTrackingMode == MyBearingTracking.COMPASS) { compassListener.onResume(); } @@ -330,7 +330,7 @@ public class MyLocationView extends View { } } - public void onPause() { + public void onStop() { compassListener.onPause(); toggleGps(false); } -- cgit v1.2.1