From 5ea7aab3a7230a2ec627a7b620f44681124f0d05 Mon Sep 17 00:00:00 2001 From: paczos Date: Mon, 5 Jun 2017 11:55:35 +0200 Subject: [PATCH 1/3] [android] - keep location tracking mode after screen rotation (#9186) --- .../com/mapbox/mapboxsdk/maps/MapboxMap.java | 32 ++++++++++++++++--- .../com/mapbox/mapboxsdk/maps/Transform.java | 6 ++-- 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 7a62f06ad25..5a86fa374e9 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 @@ void onSaveInstanceState(Bundle outState) { */ 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 void moveCamera(final CameraUpdate update, final MapboxMap.Cancelab 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 7f44e0de070..472a58a890b 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 @@ public void onMapChanged(@MapView.MapChange int change) { } @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); From 796f4208e1384e73ff327824e201f0709abbc971 Mon Sep 17 00:00:00 2001 From: paczos Date: Tue, 6 Jun 2017 09:57:41 +0200 Subject: [PATCH 2/3] [android] - using easeCamera to keep location tracking instead of overloaded moveCamera (#9187) --- .../com/mapbox/mapboxsdk/maps/MapboxMap.java | 26 ++----------------- .../com/mapbox/mapboxsdk/maps/Transform.java | 6 ++--- 2 files changed, 5 insertions(+), 27 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 5a86fa374e9..e382cda50ee 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 @@ -146,7 +146,7 @@ void onRestoreInstanceState(Bundle savedInstanceState) { trackingSettings.onRestoreInstanceState(savedInstanceState); if (cameraPosition != null) { - moveCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder(cameraPosition).build()), null, trackingSettings.isLocationTrackingDisabled()); + easeCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder(cameraPosition).build()), 0, false, null, !trackingSettings.isLocationTrackingDisabled()); } nativeMapView.setDebug(savedInstanceState.getBoolean(MapboxConstants.STATE_DEBUG_ACTIVE)); @@ -645,29 +645,7 @@ public final void moveCamera(final CameraUpdate update, final MapboxMap.Cancelab new Handler().post(new Runnable() { @Override public void run() { - 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); + transform.moveCamera(MapboxMap.this, update, callback); // 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 472a58a890b..7f44e0de070 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, true); + moveCamera(mapboxMap, CameraUpdateFactory.newCameraPosition(position), null); } setMinZoom(options.getMinZoomPreference()); setMaxZoom(options.getMaxZoomPreference()); @@ -91,10 +91,10 @@ public void onMapChanged(@MapView.MapChange int change) { } @UiThread - final void moveCamera(MapboxMap mapboxMap, CameraUpdate update, MapboxMap.CancelableCallback callback, boolean canDismissTracking) { + final void moveCamera(MapboxMap mapboxMap, CameraUpdate update, MapboxMap.CancelableCallback callback) { CameraPosition cameraPosition = update.getCameraPosition(mapboxMap); if (!cameraPosition.equals(this.cameraPosition)) { - trackingSettings.resetTrackingModesIfRequired(this.cameraPosition, cameraPosition, !canDismissTracking); + trackingSettings.resetTrackingModesIfRequired(this.cameraPosition, cameraPosition, false); cancelTransitions(); cameraChangeDispatcher.onCameraMoveStarted(OnCameraMoveStartedListener.REASON_API_ANIMATION); mapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom); From 5b72b278fb669d669dd8ea01bd2d302b6e3a3b04 Mon Sep 17 00:00:00 2001 From: paczos Date: Tue, 6 Jun 2017 13:25:14 +0200 Subject: [PATCH 3/3] [android] - checkstyle fix up --- .../main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 e382cda50ee..8e50adb777c 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 @@ -146,7 +146,13 @@ void onRestoreInstanceState(Bundle savedInstanceState) { trackingSettings.onRestoreInstanceState(savedInstanceState); if (cameraPosition != null) { - easeCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder(cameraPosition).build()), 0, false, null, !trackingSettings.isLocationTrackingDisabled()); + easeCamera(CameraUpdateFactory.newCameraPosition( + new CameraPosition.Builder(cameraPosition).build()), + 0, + false, + null, + !trackingSettings.isLocationTrackingDisabled() + ); } nativeMapView.setDebug(savedInstanceState.getBoolean(MapboxConstants.STATE_DEBUG_ACTIVE));