From 45ec7709f36ab7ffed4260f9b3e2f0b8bab42c93 Mon Sep 17 00:00:00 2001 From: kevin Date: Fri, 21 Jun 2019 16:04:24 +0800 Subject: [PATCH 1/6] Add shift for location of camera. --- .../location/LocationAnimatorCoordinator.java | 6 +- .../location/LocationFragmentActivity.kt | 61 +++++++++++++++++-- .../activity_location_layer_fragment.xml | 12 ++++ 3 files changed, 74 insertions(+), 5 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java index 63372877707..c48dfc5e0a7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java @@ -9,6 +9,7 @@ import android.util.SparseArray; import android.view.animation.LinearInterpolator; +import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.log.Logger; @@ -90,7 +91,10 @@ void feedNewLocation(@NonNull Location newLocation, @NonNull CameraPosition curr targetCameraBearing = checkGpsNorth(isGpsNorth, targetCameraBearing); updateLayerAnimators(previousLayerLatLng, targetLatLng, previousLayerBearing, targetLayerBearing); - updateCameraAnimators(previousCameraLatLng, previousCameraBearing, targetLatLng, targetCameraBearing); + + Point p = Point.fromLngLat(targetLatLng.getLongitude(), targetLatLng.getLatitude()); + updateCameraAnimators(previousCameraLatLng, previousCameraBearing, new LatLng(p.latitude(),p.longitude()), + targetCameraBearing); boolean snap = immediateAnimation(projection, previousCameraLatLng, targetLatLng) || immediateAnimation(projection, previousLayerLatLng, targetLatLng); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt index 6a01d142497..6544a01a071 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt @@ -13,18 +13,21 @@ import com.mapbox.android.core.location.LocationEngineCallback import com.mapbox.android.core.location.LocationEngineResult import com.mapbox.android.core.permissions.PermissionsListener import com.mapbox.android.core.permissions.PermissionsManager -import com.mapbox.mapboxsdk.camera.CameraUpdateFactory -import com.mapbox.mapboxsdk.geometry.LatLng +import com.mapbox.geojson.Point +import com.mapbox.geojson.shifter.CoordinateShifter +import com.mapbox.geojson.shifter.CoordinateShifterManager import com.mapbox.mapboxsdk.location.LocationComponentActivationOptions +import com.mapbox.mapboxsdk.location.modes.CameraMode.TRACKING import com.mapbox.mapboxsdk.maps.MapView import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.maps.Style import com.mapbox.mapboxsdk.testapp.R import kotlinx.android.synthetic.main.activity_location_layer_fragment.* +import java.util.ArrayList class LocationFragmentActivity : AppCompatActivity() { private lateinit var permissionsManager: PermissionsManager - + private var shift = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_location_layer_fragment) @@ -41,6 +44,18 @@ class LocationFragmentActivity : AppCompatActivity() { this.onBackPressed() } } + + shifter.setOnClickListener{ + if(!shift) { + Toast.makeText(this, "Shifter is on.",Toast.LENGTH_LONG).show() + CoordinateShifterManager.setCoordinateShifter(coordinateShifter()) + }else{ + Toast.makeText(this, "Shifter is off.",Toast.LENGTH_LONG).show() + CoordinateShifterManager.setCoordinateShifter(null) + } + shift = !shift + } + supportActionBar?.setDisplayHomeAsUpEnabled(true) if (PermissionsManager.areLocationPermissionsGranted(this)) { @@ -74,6 +89,41 @@ class LocationFragmentActivity : AppCompatActivity() { } } + private fun coordinateShifter(): CoordinateShifter { + return object : CoordinateShifter { + override fun shiftLonLat(lon: Double, lat: Double): List { + return shift(lon, lat) + } + + override fun shiftLonLatAlt(lon: Double, lat: Double, altitude: Double): List { + val shiftedLongLat = shift(lon, lat) + shiftedLongLat.add(altitude) + return shiftedLongLat + } + + override fun unshiftPoint(shiftedPoint: Point): List { + val shiftedCoordinates = ArrayList(2) + shiftedCoordinates.add(shiftedPoint.longitude()) + shiftedCoordinates.add(shiftedPoint.latitude()) + return shiftedCoordinates + } + + override fun unshiftPoint(shiftedCoordinates: List): List { + // Left empty on purpose + return shiftedCoordinates + } + + private fun shift(lon: Double, lat: Double): MutableList { + val shiftedCoordinates = ArrayList(3) + val shiftedLon = lon + 0.5 + val shiftedLat = lat + 0.5 + shiftedCoordinates.add(shiftedLon) + shiftedCoordinates.add(shiftedLat) + return shiftedCoordinates + } + } + } + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults) @@ -100,6 +150,7 @@ class LocationFragmentActivity : AppCompatActivity() { mapView.onCreate(savedInstanceState) mapView.getMapAsync { mapboxMap = it + mapboxMap.setMinZoomPreference(12.0) it.setStyle(Style.MAPBOX_STREETS) { style -> val component = mapboxMap.locationComponent @@ -110,12 +161,13 @@ class LocationFragmentActivity : AppCompatActivity() { component.isLocationComponentEnabled = true component.locationEngine?.getLastLocation(this) + component.cameraMode = TRACKING } } } override fun onSuccess(result: LocationEngineResult?) { - mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0)) +// mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0)) } override fun onFailure(exception: Exception) { @@ -155,6 +207,7 @@ class LocationFragmentActivity : AppCompatActivity() { override fun onDestroyView() { super.onDestroyView() mapView.onDestroy() + CoordinateShifterManager.setCoordinateShifter(null) } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml index 3c1436a1a82..efd1e6ebe8b 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml @@ -9,6 +9,18 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> + + Date: Tue, 25 Jun 2019 17:20:04 +0800 Subject: [PATCH 2/6] Add shift in CameraPosition --- .../mapboxsdk/camera/CameraPosition.java | 12 +- .../location/LocationAnimatorCoordinator.java | 6 +- .../src/main/AndroidManifest.xml | 11 + .../location/LocationShiftActivity.kt | 217 ++++++++++++++++++ .../src/main/res/values/descriptions.xml | 1 + .../src/main/res/values/titles.xml | 1 + 6 files changed, 242 insertions(+), 6 deletions(-) create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationShiftActivity.kt diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java index f44c0f1904c..7c297bd0f4d 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java @@ -8,6 +8,8 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; + +import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.geometry.LatLng; @@ -168,7 +170,7 @@ public int hashCode() { * Builder for composing CameraPosition objects. */ public static final class Builder { - + private boolean needShift = true; private double bearing = -1; @Nullable private LatLng target = null; @@ -221,6 +223,8 @@ public Builder(@Nullable TypedArray typedArray) { */ public Builder(@Nullable CameraUpdateFactory.CameraPositionUpdate update) { super(); + // The location in update is shifted before, so no need to shift again. + needShift = false; if (update != null) { bearing = update.getBearing(); target = update.getTarget(); @@ -236,6 +240,8 @@ public Builder(@Nullable CameraUpdateFactory.CameraPositionUpdate update) { */ public Builder(@Nullable CameraUpdateFactory.ZoomUpdate update) { super(); + // The location in update is shifted before, so no need to shift again. + needShift = false; if (update != null) { this.zoom = update.getZoom(); } @@ -312,6 +318,10 @@ public Builder zoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, * @return CameraPosition */ public CameraPosition build() { + if (needShift && target != null) { + Point point = Point.fromLngLat(target.getLongitude(), target.getLatitude()); + this.target = new LatLng(point.latitude(), point.longitude()); + } return new CameraPosition(target, zoom, tilt, bearing); } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java index c48dfc5e0a7..63372877707 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationAnimatorCoordinator.java @@ -9,7 +9,6 @@ import android.util.SparseArray; import android.view.animation.LinearInterpolator; -import com.mapbox.geojson.Point; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.log.Logger; @@ -91,10 +90,7 @@ void feedNewLocation(@NonNull Location newLocation, @NonNull CameraPosition curr targetCameraBearing = checkGpsNorth(isGpsNorth, targetCameraBearing); updateLayerAnimators(previousLayerLatLng, targetLatLng, previousLayerBearing, targetLayerBearing); - - Point p = Point.fromLngLat(targetLatLng.getLongitude(), targetLatLng.getLatitude()); - updateCameraAnimators(previousCameraLatLng, previousCameraBearing, new LatLng(p.latitude(),p.longitude()), - targetCameraBearing); + updateCameraAnimators(previousCameraLatLng, previousCameraBearing, targetLatLng, targetCameraBearing); boolean snap = immediateAnimation(projection, previousCameraLatLng, targetLatLng) || immediateAnimation(projection, previousLayerLatLng, targetLatLng); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index bb2bef35fbc..206d036cf5d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -877,6 +877,17 @@ android:name="android.support.PARENT_ACTIVITY" android:value=".activity.FeatureOverviewActivity" /> + + + + ?) { + Toast.makeText(this@LocationShiftActivity, "You need to accept location permissions.", + Toast.LENGTH_SHORT).show() + } + + override fun onPermissionResult(granted: Boolean) { + if (granted) { + if (savedInstanceState == null) { + fragmentManager + .beginTransaction() + .replace(R.id.container, LocationFragment.newInstance(), LocationFragment.TAG) + .commit() + } + } else { + finish() + } + } + }) + permissionsManager.requestLocationPermissions(this) + } + } + + private fun coordinateShifter(): CoordinateShifter { + return object : CoordinateShifter { + override fun shiftLonLat(lon: Double, lat: Double): List { + return shift(lon, lat) + } + + override fun shiftLonLatAlt(lon: Double, lat: Double, altitude: Double): List { + val shiftedLongLat = shift(lon, lat) + shiftedLongLat.add(altitude) + return shiftedLongLat + } + + override fun unshiftPoint(shiftedPoint: Point): List { + val shiftedCoordinates = ArrayList(2) + shiftedCoordinates.add(shiftedPoint.longitude()) + shiftedCoordinates.add(shiftedPoint.latitude()) + return shiftedCoordinates + } + + override fun unshiftPoint(shiftedCoordinates: List): List { + // Left empty on purpose + return shiftedCoordinates + } + + private fun shift(lon: Double, lat: Double): MutableList { + val shiftedCoordinates = ArrayList(3) + val shiftedLon = lon + 0.5 + val shiftedLat = lat + 0.5 + shiftedCoordinates.add(shiftedLon) + shiftedCoordinates.add(shiftedLat) + return shiftedCoordinates + } + } + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults) + } + + class LocationFragment : Fragment(), LocationEngineCallback { + companion object { + const val TAG = "LFragment" + fun newInstance(): LocationFragment { + return LocationFragment() + } + } + + private lateinit var mapView: MapView + private lateinit var mapboxMap: MapboxMap + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + mapView = MapView(inflater.context) + return mapView + } + + @SuppressLint("MissingPermission") + override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { + mapView.onCreate(savedInstanceState) + mapView.getMapAsync { + mapboxMap = it + mapboxMap.setMinZoomPreference(10.0) + it.setStyle(Style.MAPBOX_STREETS) { style -> + val component = mapboxMap.locationComponent + + component.activateLocationComponent(LocationComponentActivationOptions + .builder(activity, style) + .useDefaultLocationEngine(true) + .build()) + + component.isLocationComponentEnabled = true + component.locationEngine?.getLastLocation(this) + component.cameraMode = TRACKING + } + } + } + + override fun onSuccess(result: LocationEngineResult?) { +// mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0)) + } + + override fun onFailure(exception: Exception) { + //noop + } + + override fun onStart() { + super.onStart() + mapView.onStart() + } + + override fun onResume() { + super.onResume() + mapView.onResume() + } + + override fun onPause() { + super.onPause() + mapView.onPause() + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + mapView.onSaveInstanceState(outState) + } + + override fun onStop() { + super.onStop() + mapView.onStop() + } + + override fun onLowMemory() { + super.onLowMemory() + mapView.onLowMemory() + } + + override fun onDestroyView() { + super.onDestroyView() + mapView.onDestroy() + CoordinateShifterManager.setCoordinateShifter(null) + } + } + + class EmptyFragment : Fragment() { + companion object { + const val TAG = "EmptyFragment" + fun newInstance(): EmptyFragment { + return EmptyFragment() + } + } + + override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View { + val textView = TextView(inflater?.context) + textView.text = "This is an empty Fragment" + return textView + } + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml index 684220f2c4f..24727fd74bc 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml @@ -77,6 +77,7 @@ Change map\'s style while location is displayed Showcases location render and tracking modes Uses LocationComponent in a Fragment + Uses LocationComponent with shift Force location updates and don\'t rely on the engine Use LocationComponentActivationOptions to set options Show multiple TextureView MapViews as recyclerView items diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml index 027198c71bc..c0efaeab4df 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml @@ -76,6 +76,7 @@ Simple Location Activity Location Modes Activity Location Fragment + Location Shift Manual Location updates Build Location Activation RecyclerView TextureView From 32de702795296dd7357e531dfa44079a1828cbe7 Mon Sep 17 00:00:00 2001 From: kevin Date: Tue, 25 Jun 2019 17:28:55 +0800 Subject: [PATCH 3/6] Revert: Add shift for location of camera. --- .../location/LocationFragmentActivity.kt | 61 ++----------------- .../activity_location_layer_fragment.xml | 12 ---- 2 files changed, 4 insertions(+), 69 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt index 6544a01a071..6a01d142497 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/location/LocationFragmentActivity.kt @@ -13,21 +13,18 @@ import com.mapbox.android.core.location.LocationEngineCallback import com.mapbox.android.core.location.LocationEngineResult import com.mapbox.android.core.permissions.PermissionsListener import com.mapbox.android.core.permissions.PermissionsManager -import com.mapbox.geojson.Point -import com.mapbox.geojson.shifter.CoordinateShifter -import com.mapbox.geojson.shifter.CoordinateShifterManager +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory +import com.mapbox.mapboxsdk.geometry.LatLng import com.mapbox.mapboxsdk.location.LocationComponentActivationOptions -import com.mapbox.mapboxsdk.location.modes.CameraMode.TRACKING import com.mapbox.mapboxsdk.maps.MapView import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.maps.Style import com.mapbox.mapboxsdk.testapp.R import kotlinx.android.synthetic.main.activity_location_layer_fragment.* -import java.util.ArrayList class LocationFragmentActivity : AppCompatActivity() { private lateinit var permissionsManager: PermissionsManager - private var shift = false + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_location_layer_fragment) @@ -44,18 +41,6 @@ class LocationFragmentActivity : AppCompatActivity() { this.onBackPressed() } } - - shifter.setOnClickListener{ - if(!shift) { - Toast.makeText(this, "Shifter is on.",Toast.LENGTH_LONG).show() - CoordinateShifterManager.setCoordinateShifter(coordinateShifter()) - }else{ - Toast.makeText(this, "Shifter is off.",Toast.LENGTH_LONG).show() - CoordinateShifterManager.setCoordinateShifter(null) - } - shift = !shift - } - supportActionBar?.setDisplayHomeAsUpEnabled(true) if (PermissionsManager.areLocationPermissionsGranted(this)) { @@ -89,41 +74,6 @@ class LocationFragmentActivity : AppCompatActivity() { } } - private fun coordinateShifter(): CoordinateShifter { - return object : CoordinateShifter { - override fun shiftLonLat(lon: Double, lat: Double): List { - return shift(lon, lat) - } - - override fun shiftLonLatAlt(lon: Double, lat: Double, altitude: Double): List { - val shiftedLongLat = shift(lon, lat) - shiftedLongLat.add(altitude) - return shiftedLongLat - } - - override fun unshiftPoint(shiftedPoint: Point): List { - val shiftedCoordinates = ArrayList(2) - shiftedCoordinates.add(shiftedPoint.longitude()) - shiftedCoordinates.add(shiftedPoint.latitude()) - return shiftedCoordinates - } - - override fun unshiftPoint(shiftedCoordinates: List): List { - // Left empty on purpose - return shiftedCoordinates - } - - private fun shift(lon: Double, lat: Double): MutableList { - val shiftedCoordinates = ArrayList(3) - val shiftedLon = lon + 0.5 - val shiftedLat = lat + 0.5 - shiftedCoordinates.add(shiftedLon) - shiftedCoordinates.add(shiftedLat) - return shiftedCoordinates - } - } - } - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) permissionsManager.onRequestPermissionsResult(requestCode, permissions, grantResults) @@ -150,7 +100,6 @@ class LocationFragmentActivity : AppCompatActivity() { mapView.onCreate(savedInstanceState) mapView.getMapAsync { mapboxMap = it - mapboxMap.setMinZoomPreference(12.0) it.setStyle(Style.MAPBOX_STREETS) { style -> val component = mapboxMap.locationComponent @@ -161,13 +110,12 @@ class LocationFragmentActivity : AppCompatActivity() { component.isLocationComponentEnabled = true component.locationEngine?.getLastLocation(this) - component.cameraMode = TRACKING } } } override fun onSuccess(result: LocationEngineResult?) { -// mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0)) + mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(result?.lastLocation), 12.0)) } override fun onFailure(exception: Exception) { @@ -207,7 +155,6 @@ class LocationFragmentActivity : AppCompatActivity() { override fun onDestroyView() { super.onDestroyView() mapView.onDestroy() - CoordinateShifterManager.setCoordinateShifter(null) } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml index efd1e6ebe8b..3c1436a1a82 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_location_layer_fragment.xml @@ -9,18 +9,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> - - Date: Wed, 26 Jun 2019 15:15:02 +0800 Subject: [PATCH 4/6] Fix review comments. --- .../mapboxsdk/camera/CameraPosition.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java index 7c297bd0f4d..ad6e2a06387 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java @@ -9,12 +9,14 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.mapbox.geojson.Point; +import com.mapbox.geojson.shifter.CoordinateShifterManager; import com.mapbox.mapboxsdk.R; import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.utils.MathUtils; +import java.util.List; + /** * Resembles the position, angle, zoom and tilt of the user's viewpoint. */ @@ -170,7 +172,7 @@ public int hashCode() { * Builder for composing CameraPosition objects. */ public static final class Builder { - private boolean needShift = true; + private boolean needShift = false; private double bearing = -1; @Nullable private LatLng target = null; @@ -223,8 +225,6 @@ public Builder(@Nullable TypedArray typedArray) { */ public Builder(@Nullable CameraUpdateFactory.CameraPositionUpdate update) { super(); - // The location in update is shifted before, so no need to shift again. - needShift = false; if (update != null) { bearing = update.getBearing(); target = update.getTarget(); @@ -240,8 +240,6 @@ public Builder(@Nullable CameraUpdateFactory.CameraPositionUpdate update) { */ public Builder(@Nullable CameraUpdateFactory.ZoomUpdate update) { super(); - // The location in update is shifted before, so no need to shift again. - needShift = false; if (update != null) { this.zoom = update.getZoom(); } @@ -276,6 +274,7 @@ public Builder bearing(double bearing) { */ @NonNull public Builder target(LatLng location) { + needShift = true; this.target = location; return this; } @@ -319,10 +318,15 @@ public Builder zoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, */ public CameraPosition build() { if (needShift && target != null) { - Point point = Point.fromLngLat(target.getLongitude(), target.getLatitude()); - this.target = new LatLng(point.latitude(), point.longitude()); + //todo: add check after https://github.com/mapbox/mapbox-java/issues/1057 is resolved. + List shifted = CoordinateShifterManager.getCoordinateShifter() + .shiftLonLat(target.getLongitude(), target.getLatitude()); + if (shifted != null && shifted.size() > 1) { + target.setLongitude(shifted.get(0)); + target.setLatitude(shifted.get(1)); + } } - return new CameraPosition(target, zoom, tilt, bearing); + return new CameraPosition(this.target, zoom, tilt, bearing); } } } From a19b2823835ebbd626c38b2e4283b80333e01bfa Mon Sep 17 00:00:00 2001 From: kevin Date: Wed, 26 Jun 2019 17:17:06 +0800 Subject: [PATCH 5/6] exclude LocationShiftActivity for sanity test --- platform/android/scripts/exclude-activity-gen.json | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/android/scripts/exclude-activity-gen.json b/platform/android/scripts/exclude-activity-gen.json index f6156eb0eae..fa22b4e5fb5 100644 --- a/platform/android/scripts/exclude-activity-gen.json +++ b/platform/android/scripts/exclude-activity-gen.json @@ -38,6 +38,7 @@ "RenderTestActivity", "SymbolLayerActivity", "LocationFragmentActivity", + "LocationShiftActivity", "MergeOfflineRegionsActivity", "NestedViewPagerActivity", "DebugModeActivity", From 73b7fc47e1b57c50ed65fa916823e04209d71fd3 Mon Sep 17 00:00:00 2001 From: kevin Date: Wed, 3 Jul 2019 17:57:04 +0800 Subject: [PATCH 6/6] Add getShiftedTarget method for CameraPosition --- .../mapboxsdk/camera/CameraPosition.java | 29 ++++++++++++------- .../com/mapbox/mapboxsdk/maps/Transform.java | 9 +++--- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java index ad6e2a06387..13269837535 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/camera/CameraPosition.java @@ -86,6 +86,24 @@ public CameraPosition[] newArray(int size) { this.zoom = zoom; } + /** + * Do shift for target location and get the shifted target. + * + * @return the shifted target. + */ + public LatLng getShiftedTarget() { + if (target != null) { + //todo: add check after https://github.com/mapbox/mapbox-java/issues/1057 is resolved. + List shifted = CoordinateShifterManager.getCoordinateShifter() + .shiftLonLat(target.getLongitude(), target.getLatitude()); + if (shifted != null && shifted.size() > 1) { + return new LatLng(shifted.get(1),shifted.get(0)); + } + } + return new LatLng(); + + } + /** * Describe the kinds of special objects contained in this Parcelable's * marshalled representation. @@ -172,7 +190,6 @@ public int hashCode() { * Builder for composing CameraPosition objects. */ public static final class Builder { - private boolean needShift = false; private double bearing = -1; @Nullable private LatLng target = null; @@ -274,7 +291,6 @@ public Builder bearing(double bearing) { */ @NonNull public Builder target(LatLng location) { - needShift = true; this.target = location; return this; } @@ -317,15 +333,6 @@ public Builder zoom(@FloatRange(from = MapboxConstants.MINIMUM_ZOOM, * @return CameraPosition */ public CameraPosition build() { - if (needShift && target != null) { - //todo: add check after https://github.com/mapbox/mapbox-java/issues/1057 is resolved. - List shifted = CoordinateShifterManager.getCoordinateShifter() - .shiftLonLat(target.getLongitude(), target.getLatitude()); - if (shifted != null && shifted.size() > 1) { - target.setLongitude(shifted.get(0)); - target.setLatitude(shifted.get(1)); - } - } return new CameraPosition(this.target, zoom, tilt, bearing); } } 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 1961cf0450b..d58a4a2f79e 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 @@ -108,7 +108,8 @@ public final void moveCamera(@NonNull MapboxMap mapboxMap, CameraUpdate update, if (isValidCameraPosition(cameraPosition)) { cancelTransitions(); cameraChangeDispatcher.onCameraMoveStarted(OnCameraMoveStartedListener.REASON_API_ANIMATION); - nativeMap.jumpTo(cameraPosition.target, cameraPosition.zoom, cameraPosition.tilt, cameraPosition.bearing); + nativeMap.jumpTo(cameraPosition.getShiftedTarget(), cameraPosition.zoom, cameraPosition.tilt, + cameraPosition.bearing); cameraChangeDispatcher.onCameraIdle(); invalidateCameraPosition(); handler.post(new Runnable() { @@ -134,8 +135,8 @@ final void easeCamera(@NonNull MapboxMap mapboxMap, CameraUpdate update, int dur cameraCancelableCallback = callback; } mapView.addOnCameraDidChangeListener(this); - nativeMap.easeTo(cameraPosition.target, cameraPosition.zoom, cameraPosition.bearing, cameraPosition.tilt, - durationMs, easingInterpolator); + nativeMap.easeTo(cameraPosition.getShiftedTarget(), cameraPosition.zoom, cameraPosition.bearing, + cameraPosition.tilt, durationMs, easingInterpolator); } } @@ -154,7 +155,7 @@ public final void animateCamera(@NonNull MapboxMap mapboxMap, CameraUpdate updat cameraCancelableCallback = callback; } mapView.addOnCameraDidChangeListener(this); - nativeMap.flyTo(cameraPosition.target, cameraPosition.zoom, cameraPosition.bearing, + nativeMap.flyTo(cameraPosition.getShiftedTarget(), cameraPosition.zoom, cameraPosition.bearing, cameraPosition.tilt, durationMs); } }