diff options
author | paczos <lukaszp@yanosik.pl> | 2017-06-05 11:55:35 +0200 |
---|---|---|
committer | paczos <lukaszp@yanosik.pl> | 2017-06-05 11:55:35 +0200 |
commit | 5ea7aab3a7230a2ec627a7b620f44681124f0d05 (patch) | |
tree | fc5be6f13bddfd8cad7b496b497b7e44f80be0a0 | |
parent | da532007043b1827e83686faca0de2a45c4ef730 (diff) | |
download | qtlocation-mapboxgl-5ea7aab3a7230a2ec627a7b620f44681124f0d05.tar.gz |
[android] - keep location tracking mode after screen rotation (#9186)
2 files changed, 31 insertions, 7 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index 7a62f06ad2..5a86fa374e 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -141,12 +141,14 @@ public final class MapboxMap { */ void onRestoreInstanceState(Bundle savedInstanceState) { final CameraPosition cameraPosition = savedInstanceState.getParcelable(MapboxConstants.STATE_CAMERA_POSITION); - if (cameraPosition != null) { - moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder(cameraPosition).build())); - } uiSettings.onRestoreInstanceState(savedInstanceState); trackingSettings.onRestoreInstanceState(savedInstanceState); + + if (cameraPosition != null) { + moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder(cameraPosition).build()), null, trackingSettings.isLocationTrackingDisabled()); + } + nativeMapView.setDebug(savedInstanceState.getBoolean(MapboxConstants.STATE_DEBUG_ACTIVE)); final String styleUrl = savedInstanceState.getString(MapboxConstants.STATE_STYLE_URL); @@ -643,7 +645,29 @@ public final class MapboxMap { new Handler().post(new Runnable() { @Override public void run() { - transform.moveCamera(MapboxMap.this, update, callback); + transform.moveCamera(MapboxMap.this, update, callback, true); + // MapChange.REGION_DID_CHANGE_ANIMATED is not called for `jumpTo` + // invalidate camera position to provide OnCameraChange event. + invalidateCameraPosition(); + } + }); + } + + /** + * Repositions the camera according to the instructions defined in the update. + * The move is instantaneous, and a subsequent getCameraPosition() will reflect the new position. + * See CameraUpdateFactory for a set of updates. + * + * @param update The change that should be applied to the camera + * @param callback the callback to be invoked when an animation finishes or is canceled + * @param canDismissTracking you can specify whether this move can reset location tracking or not + */ + @UiThread + public final void moveCamera(final CameraUpdate update, final MapboxMap.CancelableCallback callback, final boolean canDismissTracking) { + new Handler().post(new Runnable() { + @Override + public void run() { + transform.moveCamera(MapboxMap.this, update, callback, canDismissTracking); // MapChange.REGION_DID_CHANGE_ANIMATED is not called for `jumpTo` // invalidate camera position to provide OnCameraChange event. invalidateCameraPosition(); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java index 7f44e0de07..472a58a890 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java @@ -51,7 +51,7 @@ final class Transform implements MapView.OnMapChangedListener { void initialise(@NonNull MapboxMap mapboxMap, @NonNull MapboxMapOptions options) { CameraPosition position = options.getCamera(); if (position != null && !position.equals(CameraPosition.DEFAULT)) { - moveCamera(mapboxMap, CameraUpdateFactory.newCameraPosition(position), null); + moveCamera(mapboxMap, CameraUpdateFactory.newCameraPosition(position), null, true); } setMinZoom(options.getMinZoomPreference()); setMaxZoom(options.getMaxZoomPreference()); @@ -91,10 +91,10 @@ final class Transform implements MapView.OnMapChangedListener { } @UiThread - final void moveCamera(MapboxMap mapboxMap, CameraUpdate update, MapboxMap.CancelableCallback callback) { + final void moveCamera(MapboxMap mapboxMap, CameraUpdate update, MapboxMap.CancelableCallback callback, boolean canDismissTracking) { CameraPosition cameraPosition = update.getCameraPosition(mapboxMap); if (!cameraPosition.equals(this.cameraPosition)) { - trackingSettings.resetTrackingModesIfRequired(this.cameraPosition, cameraPosition, false); + trackingSettings.resetTrackingModesIfRequired(this.cameraPosition, cameraPosition, !canDismissTracking); cancelTransitions(); cameraChangeDispatcher.onCameraMoveStarted(OnCameraMoveStartedListener.REASON_API_ANIMATION); mapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom); |