Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ dependencies {
exclude group: 'com.google.android.gms'
})
implementation dependenciesList.mapboxGeocoding
implementation dependenciesList.mapboxTurf

// Architecture
implementation dependenciesList.lifecycleExtensions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,23 @@ package com.mapbox.mapboxsdk.plugins.testapp.activity.scalebar
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.turf.TurfMeasurement
import com.mapbox.mapboxsdk.maps.Style
import com.mapbox.mapboxsdk.plugins.testapp.R
import com.mapbox.pluginscalebar.ScaleBarOptions
import com.mapbox.pluginscalebar.ScaleBarPlugin
import kotlinx.android.synthetic.main.activity_scalebar.*

import com.mapbox.geojson.LineString
import com.mapbox.geojson.Point

import com.mapbox.mapboxsdk.style.layers.LineLayer

import com.mapbox.mapboxsdk.style.sources.GeoJsonSource
import com.mapbox.turf.TurfConstants

import java.util.*

/**
* Activity showing a scalebar used on a MapView.
*/
Expand All @@ -20,6 +31,7 @@ class ScalebarActivity : AppCompatActivity() {
mapView.getMapAsync { mapboxMap ->
mapboxMap.setStyle(Style.MAPBOX_STREETS) {
addScalebar(mapboxMap)
setupTestLine(it)
}
}
}
Expand All @@ -43,6 +55,17 @@ class ScalebarActivity : AppCompatActivity() {
}
}

private fun setupTestLine(style: Style) {
val source = GeoJsonSource("source-id")
val lineLayer = LineLayer("layer-id", source.id)
val startPoint: Point = Point.fromLngLat(-122.447244, 37.769145)
val endPoint: Point = TurfMeasurement.destination(startPoint, 200.0, 90.0, TurfConstants.UNIT_METERS)
val pointList: List<Point> = listOf(startPoint, endPoint)
source.setGeoJson(LineString.fromLngLats(pointList))
style.addSource(source)
style.addLayer(lineLayer)
}

override fun onStart() {
super.onStart()
mapView.onStart()
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_scalebar.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
android:layout_height="match_parent"
app:mapbox_cameraTargetLat="37.769145"
app:mapbox_cameraTargetLng="-122.447244"
app:mapbox_cameraZoom="9" />
app:mapbox_cameraZoom="15.5" />

<android.support.design.widget.FloatingActionButton
android:id="@+id/fabScaleWidget"
Expand Down
4 changes: 3 additions & 1 deletion gradle/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
version = [
mapboxMapSdk : '8.6.0',
mapboxJava : '4.9.0',
mapboxTurf : '4.9.0',
playLocation : '16.0.0',
autoValue : '1.5.4',
autoValueParcel : '0.2.6',
Expand All @@ -32,7 +33,7 @@
pluginVersion = [
checkstyle: '8.10.1',
gradle : '3.4.0',
kotlin : '1.3.20',
kotlin : '1.3.50',
dokka : '0.9.17',
kotlinLint: '8.1.0'
]
Expand All @@ -42,6 +43,7 @@
mapboxMapSdk : "com.mapbox.mapboxsdk:mapbox-android-sdk:${version.mapboxMapSdk}",
mapboxGeoJson : "com.mapbox.mapboxsdk:mapbox-sdk-geojson:${version.mapboxJava}",
mapboxGeocoding : "com.mapbox.mapboxsdk:mapbox-sdk-services:${version.mapboxJava}",
mapboxTurf : "com.mapbox.mapboxsdk:mapbox-sdk-turf:${version.mapboxTurf}",

// Google Play Location
playLocation : "com.google.android.gms:play-services-location:${version.playLocation}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ public void setEnabled(boolean enabled) {

private void invalidateScaleBar() {
CameraPosition cameraPosition = mapboxMap.getCameraPosition();
scaleBarWidget.setDistancePerPixel(projection.getMetersPerPixelAtLatitude(cameraPosition.target.getLatitude()));
scaleBarWidget.setDistancePerPixel((projection.getMetersPerPixelAtLatitude(cameraPosition.target.getLatitude()))
/ mapView.getContext().getResources().getDisplayMetrics().density);
}

private void addCameraListeners() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.mapbox.pluginscalebar

import android.content.Context
import android.content.res.Resources
import android.util.DisplayMetrics
import android.view.View
import com.mapbox.mapboxsdk.camera.CameraPosition
import com.mapbox.mapboxsdk.maps.MapView
Expand All @@ -8,6 +11,7 @@ import com.mapbox.mapboxsdk.maps.Projection
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.MockK
import io.mockk.spyk
import io.mockk.verify
import org.junit.Assert.*
import org.junit.Before
Expand All @@ -29,14 +33,25 @@ class ScaleBarPluginTest {
@MockK
lateinit var scaleBarWidget: ScaleBarWidget

@MockK
lateinit var context: Context

@MockK
lateinit var resources: Resources
@MockK
lateinit var displayMetrics: DisplayMetrics
@Before
fun setUp() {
MockKAnnotations.init(this, relaxUnitFun = true)
displayMetrics.density = 2f
every { mapView.width } returns 1000
every { projection.getMetersPerPixelAtLatitude(CameraPosition.DEFAULT.target.latitude) } returns 100_000.0
every { mapboxMap.projection } returns projection
every { mapboxMap.cameraPosition } returns CameraPosition.DEFAULT
every { scaleBarOptions.build() } returns scaleBarWidget
every { mapView.context} returns context
every { context.resources} returns resources
every { resources.displayMetrics} returns displayMetrics
}

@Test
Expand Down Expand Up @@ -113,11 +128,11 @@ class ScaleBarPluginTest {
val scaleBarPlugin = ScaleBarPlugin(mapView, mapboxMap)
scaleBarPlugin.create(scaleBarOptions)
verify(exactly = 1) { mapboxMap.cameraPosition }
verify(exactly = 1) { scaleBarWidget.setDistancePerPixel(100_000.0) }
verify(exactly = 1) { scaleBarWidget.setDistancePerPixel(50_000.0) }
scaleBarPlugin.isEnabled = false
scaleBarPlugin.isEnabled = true

verify(exactly = 2) { mapboxMap.cameraPosition }
verify(exactly = 2) { scaleBarWidget.setDistancePerPixel(100_000.0) }
verify(exactly = 2) { scaleBarWidget.setDistancePerPixel(50_000.0) }
}
}