diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp')
155 files changed, 7046 insertions, 4158 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/.gitignore b/platform/android/MapboxGLAndroidSDKTestApp/.gitignore new file mode 100644 index 0000000000..cec211fe81 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/.gitignore @@ -0,0 +1,2 @@ +lint-baseline.xml +lint/lint-baseline-local.xml
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle index 56b537e2a2..67939b5144 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/build.gradle +++ b/platform/android/MapboxGLAndroidSDKTestApp/build.gradle @@ -25,15 +25,11 @@ android { } lintOptions { + baseline file("lint-baseline-local.xml") checkAllWarnings true warningsAsErrors true - disable 'MissingTranslation' - disable 'IconDensities' - disable 'InvalidPackage' - } - - testOptions { - unitTests.returnDefaultValues = true + disable 'MissingTranslation', 'GoogleAppIndexingWarning', 'UnpackedNativeCode', 'IconDipSize', 'TypographyQuotes' + abortOnError false } buildTypes { @@ -67,7 +63,6 @@ dependencies { // Leak Canary debugCompile rootProject.ext.dep.leakCanaryDebug releaseCompile rootProject.ext.dep.leakCanaryRelease - testCompile rootProject.ext.dep.leakCanaryTest // Mapbox Android Services (Java component) compile(rootProject.ext.dep.mapboxJavaServices) { @@ -75,8 +70,6 @@ dependencies { } // Testing dependencies - testCompile rootProject.ext.dep.junit - testCompile rootProject.ext.dep.mockito androidTestCompile rootProject.ext.dep.testSpoonRunner androidTestCompile rootProject.ext.dep.supportAnnotations androidTestCompile rootProject.ext.dep.testRunner @@ -90,5 +83,6 @@ apply from: 'gradle-config.gradle' apply from: 'gradle-device-farm.gradle' apply from: 'gradle-spoon.gradle' apply from: 'gradle-checkstyle.gradle' +apply from: '../gradle-lint.gradle' diff --git a/platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle b/platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle index 1068e5e69e..8346806633 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle +++ b/platform/android/MapboxGLAndroidSDKTestApp/gradle-config.gradle @@ -5,14 +5,15 @@ task accessToken { def tokenFile = new File("${projectDir}/src/main/res/values/developer-config.xml") if (!tokenFile.exists()) { + String mapboxAccessToken = "$System.env.MAPBOX_ACCESS_TOKEN" + if (mapboxAccessToken == "null") { + System.out.println("You should set the MAPBOX_ACCESS_TOKEN environment variable.") + mapboxAccessToken = "YOUR_MAPBOX_ACCESS_TOKEN_GOES_HERE" + } String tokenFileContents = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<resources>\n" + - " <string name=\"mapbox_access_token\">" + "$System.env.MAPBOX_ACCESS_TOKEN" + "</string>\n" + + " <string name=\"mapbox_access_token\">" + mapboxAccessToken + "</string>\n" + "</resources>" - - if (tokenFileContents == null) { - throw new InvalidUserDataException("You must set the MAPBOX_ACCESS_TOKEN environment variable.") - } tokenFile.write(tokenFileContents) } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/lint-baseline-local.xml b/platform/android/MapboxGLAndroidSDKTestApp/lint-baseline-local.xml new file mode 100644 index 0000000000..e3c5abce4f --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/lint-baseline-local.xml @@ -0,0 +1,166 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issues format="4" by="lint 2.3.1"> + + <issue + id="UnusedResources" + message="The resource `R.string.mapbox_access_token` appears to be unused" + errorLine1=" <string name="mapbox_access_token">YOUR_MAPBOX_ACCESS_TOKEN_GOES_HERE</string>" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/values/developer-config.xml" + line="3" + column="13"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `#cccc` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="#cccc"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/drawer_navigation_drawer.xml" + line="4" + column="5"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `?android:attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="?android:attr/selectableItemBackground"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/item_main_feature.xml" + line="6" + column="5"/> + </issue> + + <issue + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/mapboxGreen` with a theme that also paints a background (inferred theme is `@style/AppTheme`)" + errorLine1=" android:background="@color/mapboxGreen">" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + <location + file="src/main/res/layout/view_text_marker.xml" + line="5" + column="5"/> + </issue> + + <issue + id="TypographyQuotes" + message="Replace straight quotes ('') with directional quotes (‘’, &#8216; and &#8217;) ?" + errorLine1=" <string name="mapbox_attributionTelemetryMessage">Estàs ajudant a millorar els mapes d\'OpenStreetMap i de Mapbox aportant dades d\'ús anònimes.</string>" + errorLine2=" ^"> + <location + file="src/main/res/values-ca/strings.xml" + line="9" + column="55"/> + </issue> + + <issue + id="IconDuplicatesConfig" + message="The `icon_burned.png` icon has identical contents in the following configuration folders: drawable-hdpi, drawable-xhdpi"> + <location + file="src/main/res/drawable-xhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-hdpi/icon_burned.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-hdpi/ic_launcher_round.png`: expected 72x72, but was 216x216"> + <location + file="src/main/res/drawable-hdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-mdpi/ic_launcher_round.png`: expected 48x48, but was 144x144"> + <location + file="src/main/res/drawable-mdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xhdpi/ic_launcher_round.png`: expected 96x96, but was 288x288"> + <location + file="src/main/res/drawable-xhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxhdpi/ic_launcher_round.png`: expected 144x144, but was 432x432"> + <location + file="src/main/res/drawable-xxhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxxhdpi/ic_launcher_round.png`: expected 192x192, but was 576x576"> + <location + file="src/main/res/drawable-xxxhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-hdpi/icon.png`: expected 72x72, but was 215x212"> + <location + file="src/main/res/drawable-hdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-mdpi/icon.png`: expected 48x48, but was 143x141"> + <location + file="src/main/res/drawable-mdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xhdpi/icon.png`: expected 96x96, but was 286x282"> + <location + file="src/main/res/drawable-xhdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxhdpi/icon.png`: expected 144x144, but was 429x423"> + <location + file="src/main/res/drawable-xxhdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxxhdpi/icon.png`: expected 192x192, but was 572x564"> + <location + file="src/main/res/drawable-xxxhdpi/icon.png"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-hdpi`: ic_car_top.png, ic_taxi_top.png, ic_us.png, southeast_radar_0.png, southeast_radar_1.png... (2 more)"> + <location + file="src/main/res/drawable-hdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-mdpi`: ic_car_top.png, ic_taxi_top.png, ic_us.png"> + <location + file="src/main/res/drawable-mdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xhdpi`: ic_car_top.png, ic_taxi_top.png, ic_us.png, southeast_radar_0.png, southeast_radar_1.png... (2 more)"> + <location + file="src/main/res/drawable-xhdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xxhdpi`: ic_car_top.png, ic_taxi_top.png, southeast_radar_0.png, southeast_radar_1.png, southeast_radar_2.png... (1 more)"> + <location + file="src/main/res/drawable-xxhdpi"/> + </issue> + +</issues> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/lint/lint-baseline-ci.xml b/platform/android/MapboxGLAndroidSDKTestApp/lint/lint-baseline-ci.xml new file mode 100644 index 0000000000..64e3d41bcc --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/lint/lint-baseline-ci.xml @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- REMEMBER! First you run Lint locally you'll need to move lint-baseline-local.xml.xml file + generated into the lint folder and called it lint-baseline-local.xml + If you remove any error when running Lint locally, you'll get a warning from the command + line advising you to remove it from the baseline. If you remove it (remember to remove it + from lint-baseline-local.xml file) you should remove it too from + lint-baseline-ci.xml (THIS FILE) which is the only one included in the repo. + Eventually, it'll be removed (when we remove all current lint errors included). --> +<issues by="lint 2.3.1" format="4"> + + <issue + errorLine1=" android:background="#cccc"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~" + id="Overdraw" + message="Possible overdraw: Root element paints background `#cccc` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"> + <location + column="5" + file="src/main/res/layout/drawer_navigation_drawer.xml" + line="4"/> + </issue> + + <issue + errorLine1=" android:background="?android:attr/selectableItemBackground"" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + id="Overdraw" + message="Possible overdraw: Root element paints background `?android:attr/selectableItemBackground` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"> + <location + column="5" + file="src/main/res/layout/item_main_feature.xml" + line="6"/> + </issue> + + <issue + errorLine1=" android:background="@color/mapboxGreen">" + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + id="Overdraw" + message="Possible overdraw: Root element paints background `@color/mapboxGreen` with a theme that also paints a background (inferred theme is `@style/AppTheme`)"> + <location + column="5" + file="src/main/res/layout/view_text_marker.xml" + line="5"/> + </issue> + + <issue + errorLine1=" <string name="mapbox_attributionTelemetryMessage">Estàs ajudant a millorar els mapes d\'OpenStreetMap i de Mapbox aportant dades d\'ús anònimes.</string>" + errorLine2=" ^" + id="TypographyQuotes" + message="Replace straight quotes ('') with directional quotes (‘’, &#8216; and &#8217;) ?"> + <location + column="55" + file="src/main/res/values-ca/strings.xml" + line="9"/> + </issue> + + <issue + id="IconDipSize" + message="The image `icon_burned.png` varies significantly in its density-independent (dip) size across the various density versions: drawable-hdpi/icon_burned.png: 64x64 dp (96x96 px), drawable-xxxhdpi/icon_burned.png: 48x48 dp (192x192 px), drawable-xxhdpi/icon_burned.png: 48x48 dp (144x144 px), drawable-xhdpi/icon_burned.png: 48x48 dp (96x96 px), drawable-mdpi/icon_burned.png: 48x48 dp (48x48 px)"> + <location + file="src/main/res/drawable-mdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-xhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-xxhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-xxxhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-hdpi/icon_burned.png"/> + </issue> + + <issue + id="IconDuplicatesConfig" + message="The `icon_burned.png` icon has identical contents in the following configuration folders: drawable-hdpi, drawable-xhdpi"> + <location + file="src/main/res/drawable-xhdpi/icon_burned.png"/> + <location + file="src/main/res/drawable-hdpi/icon_burned.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-hdpi/ic_launcher_round.png`: expected 72x72, but was 216x216"> + <location + file="src/main/res/drawable-hdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-mdpi/ic_launcher_round.png`: expected 48x48, but was 144x144"> + <location + file="src/main/res/drawable-mdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xhdpi/ic_launcher_round.png`: expected 96x96, but was 288x288"> + <location + file="src/main/res/drawable-xhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxhdpi/ic_launcher_round.png`: expected 144x144, but was 432x432"> + <location + file="src/main/res/drawable-xxhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxxhdpi/ic_launcher_round.png`: expected 192x192, but was 576x576"> + <location + file="src/main/res/drawable-xxxhdpi/ic_launcher_round.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-hdpi/icon.png`: expected 72x72, but was 215x212"> + <location + file="src/main/res/drawable-hdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-mdpi/icon.png`: expected 48x48, but was 143x141"> + <location + file="src/main/res/drawable-mdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xhdpi/icon.png`: expected 96x96, but was 286x282"> + <location + file="src/main/res/drawable-xhdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxhdpi/icon.png`: expected 144x144, but was 429x423"> + <location + file="src/main/res/drawable-xxhdpi/icon.png"/> + </issue> + + <issue + id="IconExpectedSize" + message="Incorrect icon size for `drawable-xxxhdpi/icon.png`: expected 192x192, but was 572x564"> + <location + file="src/main/res/drawable-xxxhdpi/icon.png"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-hdpi`: ic_car_top.png, ic_taxi_top.png, ic_us.png, southeast_radar_0.png, southeast_radar_1.png... (2 more)"> + <location + file="src/main/res/drawable-hdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-mdpi`: ic_car_top.png, ic_taxi_top.png, ic_us.png"> + <location + file="src/main/res/drawable-mdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xhdpi`: ic_car_top.png, ic_taxi_top.png, ic_us.png, southeast_radar_0.png, southeast_radar_1.png... (2 more)"> + <location + file="src/main/res/drawable-xhdpi"/> + </issue> + + <issue + id="IconDensities" + message="Missing the following drawables in `drawable-xxhdpi`: ic_car_top.png, ic_taxi_top.png, southeast_radar_0.png, southeast_radar_1.png, southeast_radar_2.png... (1 more)"> + <location + file="src/main/res/drawable-xxhdpi"/> + </issue> + +</issues> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/IconManagerResolver.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/IconManagerResolver.java new file mode 100644 index 0000000000..3e226a7ec5 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/IconManagerResolver.java @@ -0,0 +1,42 @@ +package com.mapbox.mapboxsdk.maps; + +import com.mapbox.mapboxsdk.annotations.Icon; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +import timber.log.Timber; + +public class IconManagerResolver { + + private IconManager iconManager; + + public IconManagerResolver(MapboxMap mapboxMap) { + try { + Field annotationManagerField = MapboxMap.class.getDeclaredField("annotationManager"); + annotationManagerField.setAccessible(true); + AnnotationManager annotationManager = (AnnotationManager) annotationManagerField.get(mapboxMap); + + Field iconManagerField = AnnotationManager.class.getDeclaredField("iconManager"); + iconManagerField.setAccessible(true); + iconManager = (IconManager) iconManagerField.get(annotationManager); + } catch (Exception exception) { + Timber.e(exception, "Could not create IconManagerResolver, unable to reflect."); + } + } + + @SuppressWarnings("unchecked") + public Map<Icon, Integer> getIconMap() { + try { + Field field = IconManager.class.getDeclaredField("iconMap"); + field.setAccessible(true); + return (Map<Icon, Integer>) field.get(iconManager); + } catch (NoSuchFieldException exception) { + Timber.e(exception, "Could not getIconMap, unable to reflect."); + } catch (IllegalAccessException exception) { + Timber.e(exception, "Could not getIconMap, unable to reflect."); + } + return new HashMap<>(); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java index a813b7f368..294d57bce1 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/maps/MapboxMapTest.java @@ -779,6 +779,22 @@ public class MapboxMapTest extends BaseActivityTest { })); } + // Tile pre-fetching + + @Test + public void testTilePrefetch() { + validateTestSetup(); + onView(withId(R.id.mapView)).perform(new MapboxMapAction(new InvokeViewAction() { + @Override + public void onViewAction(UiController uiController, View view) { + mapboxMap.setPrefetchesTiles(true); + assertTrue(mapboxMap.getPrefetchesTiles()); + mapboxMap.setPrefetchesTiles(false); + assertFalse(mapboxMap.getPrefetchesTiles()); + } + })); + } + private class MapboxMapAction implements ViewAction { private InvokeViewAction invokeViewAction; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/annotations/IconTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/annotations/IconTest.java new file mode 100644 index 0000000000..33a946d0a1 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/annotations/IconTest.java @@ -0,0 +1,146 @@ +package com.mapbox.mapboxsdk.testapp.annotations; + +import android.app.Activity; +import android.support.v4.content.res.ResourcesCompat; + +import com.mapbox.mapboxsdk.annotations.Icon; +import com.mapbox.mapboxsdk.annotations.IconFactory; +import com.mapbox.mapboxsdk.annotations.Marker; +import com.mapbox.mapboxsdk.annotations.MarkerOptions; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.IconManagerResolver; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest; +import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity; +import com.mapbox.mapboxsdk.testapp.utils.IconUtils; + +import org.junit.Before; +import org.junit.Test; + +import java.util.Map; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertNull; +import static junit.framework.Assert.assertTrue; + +/** + * Tests integration between Icons and Markers + */ +public class IconTest extends BaseActivityTest { + + private Map<Icon, Integer> iconMap; + + @Before + public void beforeTest() { + super.beforeTest(); + iconMap = new IconManagerResolver(getMapboxMap()).getIconMap(); + } + + @Test + public void testEmpty() throws Exception { + assertTrue(iconMap.isEmpty()); + } + + @Test + public void testAddSameIconMarker() throws Exception { + Icon defaultMarker = IconFactory.getInstance(rule.getActivity()).defaultMarker(); + getMapboxMap().addMarker(new MarkerOptions().position(new LatLng())); + getMapboxMap().addMarker(new MarkerOptions().position(new LatLng(1, 1))); + assertEquals(1, iconMap.size()); + assertEquals(2, iconMap.get(defaultMarker), 0); + } + + @Test + public void testAddDifferentIconMarker() throws Exception { + Icon icon = IconFactory.getInstance(rule.getActivity()).fromResource(R.drawable.mapbox_logo_icon); + getMapboxMap().addMarker(new MarkerOptions().icon(icon).position(new LatLng())); + getMapboxMap().addMarker(new MarkerOptions().position(new LatLng(1, 1))); + assertEquals(iconMap.size(), 2); + assertTrue(iconMap.containsKey(icon)); + assertTrue(iconMap.get(icon) == 1); + } + + @Test + public void testAddRemoveIconMarker() throws Exception { + MapboxMap mapboxMap = getMapboxMap(); + + Icon icon = IconFactory.getInstance(rule.getActivity()).fromResource(R.drawable.mapbox_logo_icon); + Marker marker = mapboxMap.addMarker(new MarkerOptions().icon(icon).position(new LatLng())); + mapboxMap.addMarker(new MarkerOptions().position(new LatLng(1, 1))); + assertEquals(iconMap.size(), 2); + assertTrue(iconMap.containsKey(icon)); + assertTrue(iconMap.get(icon) == 1); + + mapboxMap.removeMarker(marker); + assertEquals(iconMap.size(), 1); + assertFalse(iconMap.containsKey(icon)); + } + + @Test + public void testAddRemoveDefaultMarker() throws Exception { + MapboxMap mapboxMap = getMapboxMap(); + + Marker marker = mapboxMap.addMarker(new MarkerOptions().position(new LatLng(1, 1))); + assertEquals(iconMap.size(), 1); + + mapboxMap.removeMarker(marker); + assertEquals(iconMap.size(), 0); + + mapboxMap.addMarker(new MarkerOptions().position(new LatLng())); + assertEquals(iconMap.size(), 1); + } + + @Test + public void testAddRemoveMany() throws Exception { + Activity activity = rule.getActivity(); + MapboxMap mapboxMap = getMapboxMap(); + IconFactory iconFactory = IconFactory.getInstance(activity); + + // add 2 default icon markers + Marker defaultMarkerOne = mapboxMap.addMarker(new MarkerOptions().position(new LatLng(1, 1))); + Marker defaultMarkerTwo = mapboxMap.addMarker(new MarkerOptions().position(new LatLng(2, 1))); + + // add 4 unique icon markers + mapboxMap.addMarker(new MarkerOptions() + .icon(iconFactory.fromResource(R.drawable.mapbox_logo_icon)) + .position(new LatLng(3, 1)) + ); + mapboxMap.addMarker(new MarkerOptions() + .icon(iconFactory.fromResource(R.drawable.mapbox_compass_icon)) + .position(new LatLng(4, 1)) + ); + mapboxMap.addMarker(new MarkerOptions() + .icon(IconUtils.drawableToIcon(activity, R.drawable.ic_stars, + ResourcesCompat.getColor(activity.getResources(), + R.color.blueAccent, activity.getTheme()))) + .position(new LatLng(5, 1)) + ); + mapboxMap.addMarker(new MarkerOptions() + .icon(iconFactory.fromResource(R.drawable.ic_android)) + .position(new LatLng(6, 1)) + ); + + assertEquals("Amount of icons should match 5", 5, iconMap.size()); + assertEquals("Refcounter of default marker should match 2", 2, iconMap.get(iconFactory.defaultMarker()), 0); + + mapboxMap.removeMarker(defaultMarkerOne); + + assertEquals("Amount of icons should match 5", 5, iconMap.size()); + assertEquals("Refcounter of default marker should match 1", 1, iconMap.get(iconFactory.defaultMarker()), 0); + + mapboxMap.removeMarker(defaultMarkerTwo); + + assertEquals("Amount of icons should match 4", 4, iconMap.size()); + assertNull("DefaultMarker shouldn't exist anymore", iconMap.get(iconFactory.defaultMarker())); + + mapboxMap.clear(); + assertEquals("Amount of icons should match 0", 0, iconMap.size()); + } + + @Override + protected Class getActivityClass() { + return EspressoTestActivity.class; + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/widgets/MyLocationViewTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/widgets/MyLocationViewTest.java index fa19235ad0..ec7105c321 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/widgets/MyLocationViewTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/maps/widgets/MyLocationViewTest.java @@ -1,5 +1,6 @@ package com.mapbox.mapboxsdk.testapp.maps.widgets; +import android.annotation.SuppressLint; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -97,6 +98,7 @@ public class MyLocationViewTest extends BaseActivityTest { return getClass().getSimpleName(); } + @SuppressLint("MissingPermission") @Override public void perform(UiController uiController, View view) { if (isEnabled) { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java index c8f9640433..559e446307 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java @@ -1048,6 +1048,54 @@ public class CircleLayerTest extends BaseActivityTest { } @Test + public void testCirclePitchAlignmentAsConstant() { + validateTestSetup(); + setupLayer(); + Timber.i("circle-pitch-alignment"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set and Get + layer.setProperties(circlePitchAlignment(CIRCLE_PITCH_ALIGNMENT_MAP)); + assertEquals((String) layer.getCirclePitchAlignment().getValue(), (String) CIRCLE_PITCH_ALIGNMENT_MAP); + } + }); + } + + @Test + public void testCirclePitchAlignmentAsCameraFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("circle-pitch-alignment"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + circlePitchAlignment( + zoom( + interval( + stop(2, circlePitchAlignment(CIRCLE_PITCH_ALIGNMENT_MAP)) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getCirclePitchAlignment()); + assertNotNull(layer.getCirclePitchAlignment().getFunction()); + assertEquals(CameraFunction.class, layer.getCirclePitchAlignment().getFunction().getClass()); + assertEquals(IntervalStops.class, layer.getCirclePitchAlignment().getFunction().getStops().getClass()); + assertEquals(1, ((IntervalStops) layer.getCirclePitchAlignment().getFunction().getStops()).size()); + } + }); + } + + @Test public void testCircleStrokeWidthTransition() { validateTestSetup(); setupLayer(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java index be2fc9ab9c..5d10cfa38a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java @@ -1,6 +1,5 @@ package com.mapbox.mapboxsdk.testapp.style; -import android.content.res.Resources; import android.support.annotation.RawRes; import android.support.test.espresso.UiController; import android.support.test.espresso.ViewAction; @@ -13,6 +12,7 @@ import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest; import com.mapbox.mapboxsdk.testapp.activity.style.RuntimeStyleTestActivity; +import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils; import com.mapbox.services.commons.geojson.Feature; import com.mapbox.services.commons.geojson.FeatureCollection; import com.mapbox.services.commons.geojson.Point; @@ -21,18 +21,13 @@ import org.hamcrest.Matcher; import org.junit.Test; import org.junit.runner.RunWith; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; + +import timber.log.Timber; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static org.junit.Assert.fail; /** * Tests for {@link GeoJsonSource} @@ -46,19 +41,22 @@ public class GeoJsonSourceTests extends BaseActivityTest { } @Test - public void testFeatureCollection() { + public void testFeatureCollection() throws Exception { validateTestSetup(); onView(withId(R.id.mapView)).perform(new BaseViewAction() { @Override public void perform(UiController uiController, View view) { - GeoJsonSource source = new GeoJsonSource("source", FeatureCollection - .fromJson(readRawResource(rule.getActivity().getResources(), R.raw.test_feature_collection))); + GeoJsonSource source = null; + try { + source = new GeoJsonSource("source", FeatureCollection + .fromJson(ResourceUtils.readRawResource(rule.getActivity(), R.raw.test_feature_collection))); + } catch (IOException exception) { + Timber.e(exception); + } mapboxMap.addSource(source); - mapboxMap.addLayer(new CircleLayer("layer", source.getId())); } - }); } @@ -79,14 +77,19 @@ public class GeoJsonSourceTests extends BaseActivityTest { } @Test - public void testFeatureProperties() { + public void testFeatureProperties() throws IOException { validateTestSetup(); onView(withId(R.id.mapView)).perform(new BaseViewAction() { @Override public void perform(UiController uiController, View view) { - GeoJsonSource source = new GeoJsonSource("source", - readRawResource(rule.getActivity().getResources(), R.raw.test_feature_properties)); + GeoJsonSource source = null; + try { + source = new GeoJsonSource("source", + ResourceUtils.readRawResource(rule.getActivity(), R.raw.test_feature_properties)); + } catch (IOException exception) { + Timber.e(exception); + } mapboxMap.addSource(source); mapboxMap.addLayer(new CircleLayer("layer", source.getId())); @@ -141,8 +144,11 @@ public class GeoJsonSourceTests extends BaseActivityTest { Layer layer = new CircleLayer("layer", source.getId()); mapboxMap.addLayer(layer); - source.setGeoJson(Feature.fromJson( - readRawResource(rule.getActivity().getResources(), resource))); + try { + source.setGeoJson(Feature.fromJson(ResourceUtils.readRawResource(rule.getActivity(), resource))); + } catch (IOException exception) { + Timber.e(exception); + } mapboxMap.removeLayer(layer); mapboxMap.removeSource(source); @@ -151,27 +157,6 @@ public class GeoJsonSourceTests extends BaseActivityTest { }); } - private String readRawResource(Resources resources, @RawRes int rawResource) { - InputStream is = resources.openRawResource(rawResource); - Writer writer = new StringWriter(); - char[] buffer = new char[1024]; - try { - try { - Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); - int numRead; - while ((numRead = reader.read(buffer)) != -1) { - writer.write(buffer, 0, numRead); - } - } finally { - is.close(); - } - } catch (IOException err) { - fail(err.getMessage()); - } - - return writer.toString(); - } - public abstract class BaseViewAction implements ViewAction { @Override diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/ImageTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/ImageTest.java new file mode 100644 index 0000000000..60cf4ced3d --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/ImageTest.java @@ -0,0 +1,54 @@ +package com.mapbox.mapboxsdk.testapp.style; + +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.support.test.espresso.UiController; +import android.support.test.runner.AndroidJUnit4; + +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.action.MapboxMapAction; +import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest; +import com.mapbox.mapboxsdk.testapp.activity.style.RuntimeStyleTestActivity; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +/** + * CRUD tests around Image + */ +@RunWith(AndroidJUnit4.class) +public class ImageTest extends BaseActivityTest { + + private static final String IMAGE_ID = "test.image"; + + @Override + protected Class getActivityClass() { + return RuntimeStyleTestActivity.class; + } + + @Test + public void testAddGetImage() { + validateTestSetup(); + MapboxMapAction.invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + Drawable drawable = rule.getActivity().getResources().getDrawable(R.drawable.ic_launcher_round); + assertTrue(drawable instanceof BitmapDrawable); + + Bitmap bitmapSet = ((BitmapDrawable) drawable).getBitmap(); + mapboxMap.addImage(IMAGE_ID, bitmapSet); + + Bitmap bitmapGet = mapboxMap.getImage(IMAGE_ID); + assertTrue(bitmapGet.sameAs(bitmapSet)); + + mapboxMap.removeImage(IMAGE_ID); + assertNull(mapboxMap.getImage(IMAGE_ID)); + } + }); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java index 595a2e43dc..8123d24be8 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java @@ -204,6 +204,63 @@ public class LineLayerTest extends BaseActivityTest { } @Test + public void testLineJoinAsIdentitySourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("line-join"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + lineJoin(property("FeaturePropertyA", Stops.<String>identity())) + ); + + // Verify + assertNotNull(layer.getLineJoin()); + assertNotNull(layer.getLineJoin().getFunction()); + assertEquals(SourceFunction.class, layer.getLineJoin().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getLineJoin().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getLineJoin().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testLineJoinAsIntervalSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("line-join"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + lineJoin( + property( + "FeaturePropertyA", + interval( + stop(1, lineJoin(LINE_JOIN_BEVEL)) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getLineJoin()); + assertNotNull(layer.getLineJoin().getFunction()); + assertEquals(SourceFunction.class, layer.getLineJoin().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getLineJoin().getFunction()).getProperty()); + assertEquals(IntervalStops.class, layer.getLineJoin().getFunction().getStops().getClass()); + } + }); + } + + @Test public void testLineMiterLimitAsConstant() { validateTestSetup(); setupLayer(); @@ -861,6 +918,139 @@ public class LineLayerTest extends BaseActivityTest { } @Test + public void testLineWidthAsIdentitySourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("line-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + lineWidth(property("FeaturePropertyA", Stops.<Float>identity())) + ); + + // Verify + assertNotNull(layer.getLineWidth()); + assertNotNull(layer.getLineWidth().getFunction()); + assertEquals(SourceFunction.class, layer.getLineWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getLineWidth().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getLineWidth().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testLineWidthAsExponentialSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("line-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + lineWidth( + property( + "FeaturePropertyA", + exponential( + stop(0.3f, lineWidth(0.3f)) + ).withBase(0.5f) + ) + ) + ); + + // Verify + assertNotNull(layer.getLineWidth()); + assertNotNull(layer.getLineWidth().getFunction()); + assertEquals(SourceFunction.class, layer.getLineWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getLineWidth().getFunction()).getProperty()); + assertEquals(ExponentialStops.class, layer.getLineWidth().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testLineWidthAsCategoricalSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("line-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + lineWidth( + property( + "FeaturePropertyA", + categorical( + stop(1.0f, lineWidth(0.3f)) + ) + ).withDefaultValue(lineWidth(0.3f)) + ) + ); + + // Verify + assertNotNull(layer.getLineWidth()); + assertNotNull(layer.getLineWidth().getFunction()); + assertEquals(SourceFunction.class, layer.getLineWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getLineWidth().getFunction()).getProperty()); + assertEquals(CategoricalStops.class, layer.getLineWidth().getFunction().getStops().getClass()); + assertNotNull(((SourceFunction) layer.getLineWidth().getFunction()).getDefaultValue()); + assertNotNull(((SourceFunction) layer.getLineWidth().getFunction()).getDefaultValue().getValue()); + assertEquals(0.3f, ((SourceFunction) layer.getLineWidth().getFunction()).getDefaultValue().getValue()); + } + }); + + } + + @Test + public void testLineWidthAsCompositeFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("line-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + lineWidth( + composite( + "FeaturePropertyA", + exponential( + stop(0, 0.3f, lineWidth(0.9f)) + ).withBase(0.5f) + ).withDefaultValue(lineWidth(0.3f)) + ) + ); + + // Verify + assertNotNull(layer.getLineWidth()); + assertNotNull(layer.getLineWidth().getFunction()); + assertEquals(CompositeFunction.class, layer.getLineWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((CompositeFunction) layer.getLineWidth().getFunction()).getProperty()); + assertEquals(ExponentialStops.class, layer.getLineWidth().getFunction().getStops().getClass()); + assertEquals(1, ((ExponentialStops) layer.getLineWidth().getFunction().getStops()).size()); + + ExponentialStops<Stop.CompositeValue<Float, Float>, Float> stops = + (ExponentialStops<Stop.CompositeValue<Float, Float>, Float>) layer.getLineWidth().getFunction().getStops(); + Stop<Stop.CompositeValue<Float, Float>, Float> stop = stops.iterator().next(); + assertEquals(0f, stop.in.zoom, 0.001); + assertEquals(0.3f, stop.in.value, 0.001f); + assertEquals(0.9f, stop.out, 0.001f); + } + }); + } + + @Test public void testLineGapWidthTransition() { validateTestSetup(); setupLayer(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java index b0854f4a47..f8248ae4a7 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java @@ -1214,6 +1214,159 @@ public class SymbolLayerTest extends BaseActivityTest { } @Test + public void testIconAnchorAsConstant() { + validateTestSetup(); + setupLayer(); + Timber.i("icon-anchor"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set and Get + layer.setProperties(iconAnchor(ICON_ANCHOR_CENTER)); + assertEquals((String) layer.getIconAnchor().getValue(), (String) ICON_ANCHOR_CENTER); + } + }); + } + + @Test + public void testIconAnchorAsCameraFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("icon-anchor"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + iconAnchor( + zoom( + interval( + stop(2, iconAnchor(ICON_ANCHOR_CENTER)) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getIconAnchor()); + assertNotNull(layer.getIconAnchor().getFunction()); + assertEquals(CameraFunction.class, layer.getIconAnchor().getFunction().getClass()); + assertEquals(IntervalStops.class, layer.getIconAnchor().getFunction().getStops().getClass()); + assertEquals(1, ((IntervalStops) layer.getIconAnchor().getFunction().getStops()).size()); + } + }); + } + + @Test + public void testIconAnchorAsIdentitySourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("icon-anchor"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + iconAnchor(property("FeaturePropertyA", Stops.<String>identity())) + ); + + // Verify + assertNotNull(layer.getIconAnchor()); + assertNotNull(layer.getIconAnchor().getFunction()); + assertEquals(SourceFunction.class, layer.getIconAnchor().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getIconAnchor().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getIconAnchor().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testIconAnchorAsIntervalSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("icon-anchor"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + iconAnchor( + property( + "FeaturePropertyA", + interval( + stop(1, iconAnchor(ICON_ANCHOR_CENTER)) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getIconAnchor()); + assertNotNull(layer.getIconAnchor().getFunction()); + assertEquals(SourceFunction.class, layer.getIconAnchor().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getIconAnchor().getFunction()).getProperty()); + assertEquals(IntervalStops.class, layer.getIconAnchor().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testIconPitchAlignmentAsConstant() { + validateTestSetup(); + setupLayer(); + Timber.i("icon-pitch-alignment"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set and Get + layer.setProperties(iconPitchAlignment(ICON_PITCH_ALIGNMENT_MAP)); + assertEquals((String) layer.getIconPitchAlignment().getValue(), (String) ICON_PITCH_ALIGNMENT_MAP); + } + }); + } + + @Test + public void testIconPitchAlignmentAsCameraFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("icon-pitch-alignment"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + iconPitchAlignment( + zoom( + interval( + stop(2, iconPitchAlignment(ICON_PITCH_ALIGNMENT_MAP)) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getIconPitchAlignment()); + assertNotNull(layer.getIconPitchAlignment().getFunction()); + assertEquals(CameraFunction.class, layer.getIconPitchAlignment().getFunction().getClass()); + assertEquals(IntervalStops.class, layer.getIconPitchAlignment().getFunction().getStops().getClass()); + assertEquals(1, ((IntervalStops) layer.getIconPitchAlignment().getFunction().getStops()).size()); + } + }); + } + + @Test public void testTextPitchAlignmentAsConstant() { validateTestSetup(); setupLayer(); @@ -1694,6 +1847,139 @@ public class SymbolLayerTest extends BaseActivityTest { } @Test + public void testTextMaxWidthAsIdentitySourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-max-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textMaxWidth(property("FeaturePropertyA", Stops.<Float>identity())) + ); + + // Verify + assertNotNull(layer.getTextMaxWidth()); + assertNotNull(layer.getTextMaxWidth().getFunction()); + assertEquals(SourceFunction.class, layer.getTextMaxWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextMaxWidth().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getTextMaxWidth().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testTextMaxWidthAsExponentialSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-max-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textMaxWidth( + property( + "FeaturePropertyA", + exponential( + stop(0.3f, textMaxWidth(0.3f)) + ).withBase(0.5f) + ) + ) + ); + + // Verify + assertNotNull(layer.getTextMaxWidth()); + assertNotNull(layer.getTextMaxWidth().getFunction()); + assertEquals(SourceFunction.class, layer.getTextMaxWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextMaxWidth().getFunction()).getProperty()); + assertEquals(ExponentialStops.class, layer.getTextMaxWidth().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testTextMaxWidthAsCategoricalSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-max-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textMaxWidth( + property( + "FeaturePropertyA", + categorical( + stop(1.0f, textMaxWidth(0.3f)) + ) + ).withDefaultValue(textMaxWidth(0.3f)) + ) + ); + + // Verify + assertNotNull(layer.getTextMaxWidth()); + assertNotNull(layer.getTextMaxWidth().getFunction()); + assertEquals(SourceFunction.class, layer.getTextMaxWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextMaxWidth().getFunction()).getProperty()); + assertEquals(CategoricalStops.class, layer.getTextMaxWidth().getFunction().getStops().getClass()); + assertNotNull(((SourceFunction) layer.getTextMaxWidth().getFunction()).getDefaultValue()); + assertNotNull(((SourceFunction) layer.getTextMaxWidth().getFunction()).getDefaultValue().getValue()); + assertEquals(0.3f, ((SourceFunction) layer.getTextMaxWidth().getFunction()).getDefaultValue().getValue()); + } + }); + + } + + @Test + public void testTextMaxWidthAsCompositeFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-max-width"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textMaxWidth( + composite( + "FeaturePropertyA", + exponential( + stop(0, 0.3f, textMaxWidth(0.9f)) + ).withBase(0.5f) + ).withDefaultValue(textMaxWidth(0.3f)) + ) + ); + + // Verify + assertNotNull(layer.getTextMaxWidth()); + assertNotNull(layer.getTextMaxWidth().getFunction()); + assertEquals(CompositeFunction.class, layer.getTextMaxWidth().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((CompositeFunction) layer.getTextMaxWidth().getFunction()).getProperty()); + assertEquals(ExponentialStops.class, layer.getTextMaxWidth().getFunction().getStops().getClass()); + assertEquals(1, ((ExponentialStops) layer.getTextMaxWidth().getFunction().getStops()).size()); + + ExponentialStops<Stop.CompositeValue<Float, Float>, Float> stops = + (ExponentialStops<Stop.CompositeValue<Float, Float>, Float>) layer.getTextMaxWidth().getFunction().getStops(); + Stop<Stop.CompositeValue<Float, Float>, Float> stop = stops.iterator().next(); + assertEquals(0f, stop.in.zoom, 0.001); + assertEquals(0.3f, stop.in.value, 0.001f); + assertEquals(0.9f, stop.out, 0.001f); + } + }); + } + + @Test public void testTextLineHeightAsConstant() { validateTestSetup(); setupLayer(); @@ -1792,6 +2078,139 @@ public class SymbolLayerTest extends BaseActivityTest { } @Test + public void testTextLetterSpacingAsIdentitySourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-letter-spacing"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textLetterSpacing(property("FeaturePropertyA", Stops.<Float>identity())) + ); + + // Verify + assertNotNull(layer.getTextLetterSpacing()); + assertNotNull(layer.getTextLetterSpacing().getFunction()); + assertEquals(SourceFunction.class, layer.getTextLetterSpacing().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextLetterSpacing().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getTextLetterSpacing().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testTextLetterSpacingAsExponentialSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-letter-spacing"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textLetterSpacing( + property( + "FeaturePropertyA", + exponential( + stop(0.3f, textLetterSpacing(0.3f)) + ).withBase(0.5f) + ) + ) + ); + + // Verify + assertNotNull(layer.getTextLetterSpacing()); + assertNotNull(layer.getTextLetterSpacing().getFunction()); + assertEquals(SourceFunction.class, layer.getTextLetterSpacing().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextLetterSpacing().getFunction()).getProperty()); + assertEquals(ExponentialStops.class, layer.getTextLetterSpacing().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testTextLetterSpacingAsCategoricalSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-letter-spacing"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textLetterSpacing( + property( + "FeaturePropertyA", + categorical( + stop(1.0f, textLetterSpacing(0.3f)) + ) + ).withDefaultValue(textLetterSpacing(0.3f)) + ) + ); + + // Verify + assertNotNull(layer.getTextLetterSpacing()); + assertNotNull(layer.getTextLetterSpacing().getFunction()); + assertEquals(SourceFunction.class, layer.getTextLetterSpacing().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextLetterSpacing().getFunction()).getProperty()); + assertEquals(CategoricalStops.class, layer.getTextLetterSpacing().getFunction().getStops().getClass()); + assertNotNull(((SourceFunction) layer.getTextLetterSpacing().getFunction()).getDefaultValue()); + assertNotNull(((SourceFunction) layer.getTextLetterSpacing().getFunction()).getDefaultValue().getValue()); + assertEquals(0.3f, ((SourceFunction) layer.getTextLetterSpacing().getFunction()).getDefaultValue().getValue()); + } + }); + + } + + @Test + public void testTextLetterSpacingAsCompositeFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-letter-spacing"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textLetterSpacing( + composite( + "FeaturePropertyA", + exponential( + stop(0, 0.3f, textLetterSpacing(0.9f)) + ).withBase(0.5f) + ).withDefaultValue(textLetterSpacing(0.3f)) + ) + ); + + // Verify + assertNotNull(layer.getTextLetterSpacing()); + assertNotNull(layer.getTextLetterSpacing().getFunction()); + assertEquals(CompositeFunction.class, layer.getTextLetterSpacing().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((CompositeFunction) layer.getTextLetterSpacing().getFunction()).getProperty()); + assertEquals(ExponentialStops.class, layer.getTextLetterSpacing().getFunction().getStops().getClass()); + assertEquals(1, ((ExponentialStops) layer.getTextLetterSpacing().getFunction().getStops()).size()); + + ExponentialStops<Stop.CompositeValue<Float, Float>, Float> stops = + (ExponentialStops<Stop.CompositeValue<Float, Float>, Float>) layer.getTextLetterSpacing().getFunction().getStops(); + Stop<Stop.CompositeValue<Float, Float>, Float> stop = stops.iterator().next(); + assertEquals(0f, stop.in.zoom, 0.001); + assertEquals(0.3f, stop.in.value, 0.001f); + assertEquals(0.9f, stop.out, 0.001f); + } + }); + } + + @Test public void testTextJustifyAsConstant() { validateTestSetup(); setupLayer(); @@ -1840,6 +2259,63 @@ public class SymbolLayerTest extends BaseActivityTest { } @Test + public void testTextJustifyAsIdentitySourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-justify"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textJustify(property("FeaturePropertyA", Stops.<String>identity())) + ); + + // Verify + assertNotNull(layer.getTextJustify()); + assertNotNull(layer.getTextJustify().getFunction()); + assertEquals(SourceFunction.class, layer.getTextJustify().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextJustify().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getTextJustify().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testTextJustifyAsIntervalSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-justify"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textJustify( + property( + "FeaturePropertyA", + interval( + stop(1, textJustify(TEXT_JUSTIFY_LEFT)) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getTextJustify()); + assertNotNull(layer.getTextJustify().getFunction()); + assertEquals(SourceFunction.class, layer.getTextJustify().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextJustify().getFunction()).getProperty()); + assertEquals(IntervalStops.class, layer.getTextJustify().getFunction().getStops().getClass()); + } + }); + } + + @Test public void testTextAnchorAsConstant() { validateTestSetup(); setupLayer(); @@ -1888,6 +2364,63 @@ public class SymbolLayerTest extends BaseActivityTest { } @Test + public void testTextAnchorAsIdentitySourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-anchor"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textAnchor(property("FeaturePropertyA", Stops.<String>identity())) + ); + + // Verify + assertNotNull(layer.getTextAnchor()); + assertNotNull(layer.getTextAnchor().getFunction()); + assertEquals(SourceFunction.class, layer.getTextAnchor().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextAnchor().getFunction()).getProperty()); + assertEquals(IdentityStops.class, layer.getTextAnchor().getFunction().getStops().getClass()); + } + }); + } + + @Test + public void testTextAnchorAsIntervalSourceFunction() { + validateTestSetup(); + setupLayer(); + Timber.i("text-anchor"); + invoke(mapboxMap, new MapboxMapAction.OnInvokeActionListener() { + @Override + public void onInvokeAction(UiController uiController, MapboxMap mapboxMap) { + assertNotNull(layer); + + // Set + layer.setProperties( + textAnchor( + property( + "FeaturePropertyA", + interval( + stop(1, textAnchor(TEXT_ANCHOR_CENTER)) + ) + ) + ) + ); + + // Verify + assertNotNull(layer.getTextAnchor()); + assertNotNull(layer.getTextAnchor().getFunction()); + assertEquals(SourceFunction.class, layer.getTextAnchor().getFunction().getClass()); + assertEquals("FeaturePropertyA", ((SourceFunction) layer.getTextAnchor().getFunction()).getProperty()); + assertEquals(IntervalStops.class, layer.getTextAnchor().getFunction().getStops().getClass()); + } + }); + } + + @Test public void testTextMaxAngleAsConstant() { validateTestSetup(); setupLayer(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java index 6e582c6a3a..1c4981ca5e 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/utils/OnMapReadyIdlingResource.java @@ -3,20 +3,28 @@ package com.mapbox.mapboxsdk.testapp.utils; import android.app.Activity; import android.support.test.espresso.IdlingResource; -import timber.log.Timber; - +import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import java.lang.reflect.Field; -public class OnMapReadyIdlingResource implements IdlingResource { +public class OnMapReadyIdlingResource implements IdlingResource, OnMapReadyCallback { - private final Activity activity; private MapboxMap mapboxMap; private IdlingResource.ResourceCallback resourceCallback; + private Activity activity; public OnMapReadyIdlingResource(Activity activity) { this.activity = activity; + try { + Field field = activity.getClass().getDeclaredField("mapView"); + field.setAccessible(true); + ((MapView) field.get(activity)).getMapAsync(this); + } catch (Exception err) { + throw new RuntimeException(err); + } + } @Override @@ -26,11 +34,7 @@ public class OnMapReadyIdlingResource implements IdlingResource { @Override public boolean isIdleNow() { - boolean idle = isMapboxMapReady(); - if (idle && resourceCallback != null) { - resourceCallback.onTransitionToIdle(); - } - return idle; + return mapboxMap != null; } @Override @@ -38,20 +42,15 @@ public class OnMapReadyIdlingResource implements IdlingResource { this.resourceCallback = resourceCallback; } - private boolean isMapboxMapReady() { - try { - Field field = activity.getClass().getDeclaredField("mapboxMap"); - field.setAccessible(true); - mapboxMap = (MapboxMap) field.get(activity); - Timber.e("isMapboxReady called with value " + (mapboxMap != null)); - return mapboxMap != null; - } catch (Exception exception) { - Timber.e("could not reflect", exception); - return false; - } - } - public MapboxMap getMapboxMap() { return mapboxMap; } + + @Override + public void onMapReady(MapboxMap mapboxMap) { + this.mapboxMap = mapboxMap; + if (resourceCallback != null) { + resourceCallback.onTransitionToIdle(); + } + } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index 1a70e4548a..bf97749b9e 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -113,6 +113,17 @@ android:value=".activity.FeatureOverviewActivity"/> </activity> <activity + android:name=".activity.camera.CameraAnimatorActivity" + android:description="@string/description_camera_animator" + android:label="@string/activity_camera_animator"> + <meta-data + android:name="@string/category" + android:value="@string/category_camera"/> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".activity.FeatureOverviewActivity"/> + </activity> + <activity android:name=".activity.camera.CameraPositionActivity" android:description="@string/description_cameraposition" android:label="@string/activity_camera_position"> @@ -305,14 +316,12 @@ </activity> <activity android:name=".activity.maplayout.DebugModeActivity" + android:configChanges="orientation|keyboardHidden|screenSize" android:description="@string/description_debug_mode" android:label="@string/activity_debug_mode"> <meta-data android:name="@string/category" - android:value="@string/category_maplayout"/> - <meta-data - android:name="android.support.PARENT_ACTIVITY" - android:value=".activity.FeatureOverviewActivity"/> + android:value="@string/category_basic"/> </activity> <activity android:name=".activity.offline.OfflineActivity" @@ -358,6 +367,16 @@ android:name="android.support.PARENT_ACTIVITY" android:value=".activity.FeatureOverviewActivity"/> </activity> + <activity android:name=".activity.snapshot.MapSnapshotterActivity" + android:description="@string/description_map_snapshotter" + android:label="@string/activity_map_snapshotter"> + <meta-data + android:name="@string/category" + android:value="@string/category_imagegenerator"/> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".activity.FeatureOverviewActivity"/> + </activity> <activity android:name=".activity.maplayout.DoubleMapActivity" android:description="@string/description_doublemap" @@ -392,10 +411,20 @@ android:value=".activity.FeatureOverviewActivity"/> </activity> <activity - android:name=".activity.maplayout.NavigationDrawerActivity" - android:description="@string/description_navigation_drawer" - android:label="@string/activity_navigation_drawer" - android:theme="@style/AppTheme.ActionBar.Transparent"> + android:name=".activity.maplayout.SimpleMapActivity" + android:description="@string/description_simple_map" + android:label="@string/activity_simple_map"> + <meta-data + android:name="@string/category" + android:value="@string/category_basic"/> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".activity.FeatureOverviewActivity"/> + </activity> + <activity + android:name=".activity.maplayout.MapChangeActivity" + android:description="@string/description_map_change" + android:label="@string/activity_map_change"> <meta-data android:name="@string/category" android:value="@string/category_maplayout"/> @@ -404,12 +433,12 @@ android:value=".activity.FeatureOverviewActivity"/> </activity> <activity - android:name=".activity.maplayout.SimpleMapActivity" - android:description="@string/description_simple_map" - android:label="@string/activity_simple_map"> + android:name=".activity.maplayout.VisibilityChangeActivity" + android:description="@string/description_visibility_map" + android:label="@string/activity_map_visibility"> <meta-data android:name="@string/category" - android:value="@string/category_basic"/> + android:value="@string/category_maplayout"/> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".activity.FeatureOverviewActivity"/> @@ -535,6 +564,17 @@ android:name="android.support.PARENT_ACTIVITY" android:value=".activity.FeatureOverviewActivity"/> </activity> + <activity + android:name=".activity.style.AnimatedImageSourceActivity" + android:label="@string/activity_animated_image_source" + android:description="@string/description_animated_image_source"> + <meta-data + android:name="@string/category" + android:value="@string/category_style"/> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".activity.FeatureOverviewActivity"/> + </activity> <!-- Features --> <activity @@ -593,12 +633,23 @@ android:value=".activity.FeatureOverviewActivity"/> </activity> <activity - android:name=".activity.annotation.AddRemoveMarkerActivity" + android:name=".activity.style.SymbolGeneratorActivity" + android:description="@string/description_symbol_generator" + android:label="@string/activity_symbol_generator"> + <meta-data + android:name="@string/category" + android:value="@string/category_style"/> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".activity.FeatureOverviewActivity"/> + </activity> + <activity + android:name=".activity.style.ZoomFunctionSymbolLayerActivity" android:description="@string/description_add_remove_markers" android:label="@string/activity_add_remove_markers"> <meta-data android:name="@string/category" - android:value="@string/category_annotation"/> + android:value="@string/category_style"/> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".activity.FeatureOverviewActivity"/> @@ -649,7 +700,13 @@ android:name="android.support.PARENT_ACTIVITY" android:value=".activity.FeatureOverviewActivity"/> </activity> - + <activity android:name=".activity.maplayout.BottomSheetActivity" + android:description="@string/description_bottom_sheet" + android:label="@string/activity_bottom_sheet"> + <meta-data + android:name="@string/category" + android:value="@string/category_maplayout"/> + </activity> <!-- For Instrumentation tests --> <activity @@ -678,4 +735,4 @@ <!-- android:value="true" /> --> </application> -</manifest> +</manifest>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java index e344343627..fba33bb380 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/MapboxApplication.java @@ -2,8 +2,10 @@ package com.mapbox.mapboxsdk.testapp; import android.app.Application; import android.os.StrictMode; +import android.text.TextUtils; import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.mapboxsdk.testapp.utils.TokenUtils; import com.squareup.leakcanary.LeakCanary; import timber.log.Timber; @@ -18,6 +20,12 @@ import static timber.log.Timber.DebugTree; */ public class MapboxApplication extends Application { + private static final String DEFAULT_MAPBOX_ACCESS_TOKEN = "YOUR_MAPBOX_ACCESS_TOKEN_GOES_HERE"; + private static final String ACCESS_TOKEN_NOT_SET_MESSAGE = "In order to run the Test App you need to set a valid " + + "access token. During development, you can set the MAPBOX_ACCESS_TOKEN environment variable for the SDK to " + + "automatically include it in the Test App. Otherwise, you can manually include it in the " + + "res/values/developer-config.xml file in the MapboxGLAndroidSDKTestApp folder."; + @Override public void onCreate() { super.onCreate(); @@ -43,7 +51,12 @@ public class MapboxApplication extends Application { .penaltyDeath() .build()); - Mapbox.getInstance(getApplicationContext(), getString(R.string.mapbox_access_token)); + String mapboxAccessToken = TokenUtils.getMapboxAccessToken(getApplicationContext()); + if (TextUtils.isEmpty(mapboxAccessToken) || mapboxAccessToken.equals(DEFAULT_MAPBOX_ACCESS_TOKEN)) { + Timber.e(ACCESS_TOKEN_NOT_SET_MESSAGE); + } + + Mapbox.getInstance(getApplicationContext(), mapboxAccessToken); } private void initializeLogger() { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java index f8617366a0..3f20f19f5d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/FeatureOverviewActivity.java @@ -92,7 +92,7 @@ public class FeatureOverviewActivity extends AppCompatActivity implements Permis getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA)); } catch (PackageManager.NameNotFoundException exception) { - Timber.e("Could not resolve package info", exception); + Timber.e(exception, "Could not resolve package info"); } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AddRemoveMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AddRemoveMarkerActivity.java deleted file mode 100644 index 27958c3d0c..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/AddRemoveMarkerActivity.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.mapbox.mapboxsdk.testapp.activity.annotation; - -import android.annotation.SuppressLint; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.os.Bundle; -import android.support.annotation.DrawableRes; -import android.support.v7.app.AppCompatActivity; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.mapbox.mapboxsdk.annotations.Icon; -import com.mapbox.mapboxsdk.annotations.IconFactory; -import com.mapbox.mapboxsdk.annotations.Marker; -import com.mapbox.mapboxsdk.annotations.MarkerOptions; -import com.mapbox.mapboxsdk.camera.CameraPosition; -import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.maps.MapView; -import com.mapbox.mapboxsdk.maps.MapboxMap; -import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; -import com.mapbox.mapboxsdk.testapp.R; -import com.mapbox.mapboxsdk.testapp.utils.ViewToBitmapUtil; - -import timber.log.Timber; - -/** - * Test activity showcasing updating a Marker image when changing zoom levels - */ -public class AddRemoveMarkerActivity extends AppCompatActivity { - - public static final double THRESHOLD = 5.0; - - private MapView mapView; - private MapboxMap mapboxMap; - private double lastZoom; - private boolean isShowingHighThresholdMarker; - private boolean isShowingLowThresholdMarker; - - private MarkerOptions lowThresholdMarker; - private MarkerOptions highThresholdMarker; - private Marker activeMarker; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_add_remove_marker); - - View lowThresholdView = generateView("Low", R.drawable.ic_circle); - Bitmap lowThresholdBitmap = ViewToBitmapUtil.convertToBitmap(lowThresholdView); - Icon lowThresholdIcon = IconFactory.getInstance(this).fromBitmap(lowThresholdBitmap); - - lowThresholdMarker = new MarkerOptions() - .icon(lowThresholdIcon) - .position(new LatLng(0.1, 0)); - - View highThesholdView = generateView("High", R.drawable.ic_circle); - Bitmap highThresholdBitmap = ViewToBitmapUtil.convertToBitmap(highThesholdView); - Icon highThresholdIcon = IconFactory.getInstance(this).fromBitmap(highThresholdBitmap); - - highThresholdMarker = new MarkerOptions() - .icon(highThresholdIcon) - .position(new LatLng(0.1, 0)); - - mapView = (MapView) findViewById(R.id.mapView); - mapView.onCreate(savedInstanceState); - mapView.getMapAsync(new OnMapReadyCallback() { - @Override - public void onMapReady(MapboxMap mapboxMap) { - AddRemoveMarkerActivity.this.mapboxMap = mapboxMap; - updateZoom(mapboxMap.getCameraPosition().zoom); - mapboxMap.moveCamera(CameraUpdateFactory.zoomTo(4.9f)); - mapboxMap.setOnCameraChangeListener(new MapboxMap.OnCameraChangeListener() { - @Override - public void onCameraChange(CameraPosition position) { - updateZoom(position.zoom); - } - }); - } - }); - } - - @SuppressLint("InflateParams") - private View generateView(String text, @DrawableRes int drawableRes) { - View view = LayoutInflater.from(this).inflate(R.layout.view_custom_marker, null); - TextView textView = (TextView) view.findViewById(R.id.textView); - textView.setText(text); - textView.setTextColor(Color.WHITE); - ImageView imageView = (ImageView) view.findViewById(R.id.imageView); - imageView.setImageResource(drawableRes); - return view; - } - - private void updateZoom(double zoom) { - if (lastZoom == zoom) { - return; - } - - lastZoom = zoom; - if (zoom > THRESHOLD) { - showHighThresholdMarker(); - } else { - showLowThresholdMarker(); - } - } - - private void showLowThresholdMarker() { - if (isShowingLowThresholdMarker) { - return; - } - - isShowingLowThresholdMarker = true; - isShowingHighThresholdMarker = false; - - if (activeMarker != null) { - Timber.d("Remove marker with " + activeMarker.getId()); - mapboxMap.removeMarker(activeMarker); - } else { - Timber.e("active marker is null"); - } - - activeMarker = mapboxMap.addMarker(lowThresholdMarker); - Timber.d("showLowThresholdMarker() " + activeMarker.getId()); - } - - private void showHighThresholdMarker() { - if (isShowingHighThresholdMarker) { - return; - } - - isShowingLowThresholdMarker = false; - isShowingHighThresholdMarker = true; - - if (activeMarker != null) { - Timber.d("Remove marker with " + activeMarker.getId()); - mapboxMap.removeMarker(activeMarker); - } else { - Timber.e("active marker is null"); - } - - activeMarker = mapboxMap.addMarker(highThresholdMarker); - Timber.d("showHighThresholdMarker() " + activeMarker.getId()); - } - - @Override - protected void onStart() { - super.onStart(); - mapView.onStart(); - } - - @Override - protected void onResume() { - super.onResume(); - mapView.onResume(); - } - - @Override - protected void onPause() { - super.onPause(); - mapView.onPause(); - } - - @Override - protected void onStop() { - super.onStop(); - mapView.onStop(); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - mapView.onSaveInstanceState(outState); - } - - @Override - public void onLowMemory() { - super.onLowMemory(); - mapView.onLowMemory(); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - mapView.onDestroy(); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java index 8b238e49a8..50adeb2d74 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/BulkMarkerActivity.java @@ -274,7 +274,7 @@ public class BulkMarkerActivity extends AppCompatActivity implements AdapterView String json = GeoParseUtil.loadStringFromAssets(activity.getApplicationContext(), "points.geojson"); return GeoParseUtil.parseGeoJsonCoordinates(json); } catch (IOException | JSONException exception) { - Timber.e("Could not add markers,", exception); + Timber.e(exception, "Could not add markers"); return null; } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewActivity.java index f2f82865d1..61ece0a94f 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewActivity.java @@ -36,6 +36,7 @@ import com.mapbox.mapboxsdk.testapp.model.annotations.CountryMarkerViewOptions; import com.mapbox.mapboxsdk.testapp.model.annotations.TextMarkerView; import com.mapbox.mapboxsdk.testapp.model.annotations.TextMarkerViewOptions; +import java.util.Locale; import java.util.Random; /** @@ -150,7 +151,11 @@ public class MarkerViewActivity extends AppCompatActivity { public void onMapChanged(@MapView.MapChange int change) { if (change == MapView.REGION_IS_CHANGING || change == MapView.REGION_DID_CHANGE) { if (!markerViewManager.getMarkerViewAdapters().isEmpty() && viewCountView != null) { - viewCountView.setText("ViewCache size " + markerViewContainer.getChildCount()); + viewCountView.setText(String.format( + Locale.getDefault(), + getString(R.string.viewcache_size), + markerViewContainer.getChildCount()) + ); } } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewsInRectangleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewsInRectangleActivity.java index 266db3fdd1..848eab9a3c 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewsInRectangleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/MarkerViewsInRectangleActivity.java @@ -19,6 +19,9 @@ import java.util.List; import timber.log.Timber; +/** + * Test activity showcasing counting MarkerViews in a rectangle. + */ public class MarkerViewsInRectangleActivity extends AppCompatActivity implements OnMapReadyCallback, View.OnClickListener { @@ -53,7 +56,7 @@ public class MarkerViewsInRectangleActivity extends AppCompatActivity implements int top = selectionBox.getTop() - mapView.getTop(); int left = selectionBox.getLeft() - mapView.getLeft(); RectF box = new RectF(left, top, left + selectionBox.getWidth(), top + selectionBox.getHeight()); - Timber.i(String.format("Querying box %s", box)); + Timber.i("Querying box %s", box); List<MarkerView> markers = mapboxMap.getMarkerViewsInRect(box); // Show count diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java index fecfe2a842..49c9663672 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/annotation/PolygonActivity.java @@ -57,8 +57,6 @@ public class PolygonActivity extends AppCompatActivity implements OnMapReadyCall // configure inital map state MapboxMapOptions options = new MapboxMapOptions() .attributionTintColor(RED_COLOR) - // deprecated feature! - .textureMode(true) .compassFadesWhenFacingNorth(false) .styleUrl(Style.MAPBOX_STREETS) .camera(new CameraPosition.Builder() diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraAnimatorActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraAnimatorActivity.java new file mode 100644 index 0000000000..cc44ac9715 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraAnimatorActivity.java @@ -0,0 +1,174 @@ +package com.mapbox.mapboxsdk.testapp.activity.camera; + +import android.animation.Animator; +import android.animation.AnimatorSet; +import android.animation.TypeEvaluator; +import android.animation.ValueAnimator; +import android.os.Bundle; +import android.support.v4.view.animation.FastOutLinearInInterpolator; +import android.support.v4.view.animation.FastOutSlowInInterpolator; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.view.animation.AnticipateOvershootInterpolator; + +import com.mapbox.mapboxsdk.camera.CameraPosition; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.testapp.R; + +/** + * Test activity showcasing using Android SDK animators to animate camera position changes. + */ +public class CameraAnimatorActivity extends AppCompatActivity implements OnMapReadyCallback { + + private static final double ANIMATION_DELAY_FACTOR = 1.5; + + private MapView mapView; + private MapboxMap mapboxMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_camera_animator); + + mapView = (MapView) findViewById(R.id.mapView); + if (mapView != null) { + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(this); + } + } + + @Override + public void onMapReady(final MapboxMap map) { + mapboxMap = map; + findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + view.setVisibility(View.GONE); + createAnimator(mapboxMap.getCameraPosition()).start(); + } + }); + } + + private Animator createAnimator(CameraPosition currentPosition) { + AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.play(createLatLngAnimator(currentPosition.target)); + animatorSet.play(createZoomAnimator(currentPosition.zoom)); + animatorSet.play(createBearingAnimator(currentPosition.bearing)); + animatorSet.play(createTiltAnimator(currentPosition.tilt)); + return animatorSet; + } + + private Animator createLatLngAnimator(LatLng currentPosition) { + LatLng target = new LatLng(37.789992, -122.402214); + ValueAnimator latLngAnimator = ValueAnimator.ofObject(new LatLngEvaluator(), currentPosition, target); + latLngAnimator.setDuration((long) (1000 * ANIMATION_DELAY_FACTOR)); + latLngAnimator.setInterpolator(new FastOutSlowInInterpolator()); + latLngAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + mapboxMap.setLatLng((LatLng) animation.getAnimatedValue()); + } + }); + return latLngAnimator; + } + + private Animator createZoomAnimator(double currentZoom) { + ValueAnimator zoomAnimator = ValueAnimator.ofFloat((float) currentZoom, 14.5f); + zoomAnimator.setDuration((long) (2200 * ANIMATION_DELAY_FACTOR)); + zoomAnimator.setStartDelay((long) (600 * ANIMATION_DELAY_FACTOR)); + zoomAnimator.setInterpolator(new AnticipateOvershootInterpolator()); + zoomAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + mapboxMap.setZoom((Float) animation.getAnimatedValue()); + } + }); + return zoomAnimator; + } + + private Animator createBearingAnimator(double currentBearing) { + ValueAnimator bearingAnimator = ValueAnimator.ofFloat((float) currentBearing, 135); + bearingAnimator.setDuration((long) (1000 * ANIMATION_DELAY_FACTOR)); + bearingAnimator.setStartDelay((long) (1000 * ANIMATION_DELAY_FACTOR)); + bearingAnimator.setInterpolator(new FastOutLinearInInterpolator()); + bearingAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + mapboxMap.setBearing((Float) animation.getAnimatedValue()); + } + }); + return bearingAnimator; + } + + private Animator createTiltAnimator(double currentTilt) { + ValueAnimator tiltAnimator = ValueAnimator.ofFloat((float) currentTilt, 60); + tiltAnimator.setDuration((long) (1000 * ANIMATION_DELAY_FACTOR)); + tiltAnimator.setStartDelay((long) (1500 * ANIMATION_DELAY_FACTOR)); + tiltAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + mapboxMap.setTilt((Float) animation.getAnimatedValue()); + } + }); + return tiltAnimator; + } + + private static class LatLngEvaluator implements TypeEvaluator<LatLng> { + + private final LatLng latLng = new LatLng(); + + @Override + public LatLng evaluate(float fraction, LatLng startValue, LatLng endValue) { + latLng.setLatitude(startValue.getLatitude() + + ((endValue.getLatitude() - startValue.getLatitude()) * fraction)); + latLng.setLongitude(startValue.getLongitude() + + ((endValue.getLongitude() - startValue.getLongitude()) * fraction)); + return latLng; + } + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java index 10464b087a..2820bdbd53 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/CameraPositionActivity.java @@ -1,5 +1,6 @@ package com.mapbox.mapboxsdk.testapp.activity.camera; +import android.annotation.SuppressLint; import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; @@ -24,6 +25,9 @@ import com.mapbox.mapboxsdk.testapp.R; import timber.log.Timber; +/** + * Test activity showcasing how to listen to camera change events. + */ public class CameraPositionActivity extends AppCompatActivity implements OnMapReadyCallback { private MapView mapView; @@ -83,6 +87,7 @@ public class CameraPositionActivity extends AppCompatActivity implements OnMapRe fab = (FloatingActionButton) findViewById(R.id.fab); fab.setColorFilter(ContextCompat.getColor(CameraPositionActivity.this, R.color.primary)); fab.setOnClickListener(new View.OnClickListener() { + @SuppressLint("InflateParams") @Override public void onClick(View view) { Context context = view.getContext(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java index d81538f323..e3a9551b8e 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/LatLngBoundsActivity.java @@ -1,75 +1,122 @@ package com.mapbox.mapboxsdk.testapp.activity.camera; import android.os.Bundle; -import android.os.Handler; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomSheetBehavior; import android.support.v7.app.AppCompatActivity; +import android.view.View; import com.mapbox.mapboxsdk.annotations.MarkerOptions; -import com.mapbox.mapboxsdk.camera.CameraUpdate; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; -import com.mapbox.mapboxsdk.constants.Style; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.geometry.LatLngBounds; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.view.LockableBottomSheetBehavior; + +import java.util.ArrayList; +import java.util.List; /** * Test activity showcasing using the LatLngBounds camera API. - * <p> - * This activity opens the map at zoom level 0 and animates into a bounds set by Los Angeles and New York - * with some additional padding and an animation duration of 1500 ms. - * </p> */ -public class LatLngBoundsActivity extends AppCompatActivity implements OnMapReadyCallback { - - private static final LatLng LOS_ANGELES = new LatLng(34.053940, -118.242622); - private static final LatLng NEW_YORK = new LatLng(40.712730, -74.005953); - - private final LatLng CHINA_BOTTOM_LEFT = new LatLng(15.68169, 73.499857); - private final LatLng CHINA_TOP_RIGHT = new LatLng(53.560711, 134.77281); +public class LatLngBoundsActivity extends AppCompatActivity implements View.OnClickListener { + + private static final List<LatLng> LOCATIONS = new ArrayList<LatLng>() { + { + add(new LatLng(37.806866, -122.422502)); + add(new LatLng(37.812905, -122.477605)); + add(new LatLng(37.826944, -122.423188)); + add(new LatLng(37.752676, -122.447736)); + add(new LatLng(37.769305, -122.479322)); + add(new LatLng(37.749834, -122.417867)); + add(new LatLng(37.756149, -122.405679)); + add(new LatLng(37.751403, -122.387397)); + add(new LatLng(37.793064, -122.391517)); + add(new LatLng(37.769122, -122.427394)); + } + }; + private static final LatLngBounds BOUNDS = new LatLngBounds.Builder().includes(LOCATIONS).build(); + private static final int ANIMATION_DURATION_LONG = 450; + private static final int ANIMATION_DURATION_SHORT = 250; + private static final int BOUNDS_PADDING_DIVIDER_SMALL = 3; + private static final int BOUNDS_PADDING_DIVIDER_LARGE = 9; private MapView mapView; private MapboxMap mapboxMap; + private View bottomSheet; + private LockableBottomSheetBehavior bottomSheetBehavior; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_visible_bounds); - + setContentView(R.layout.activity_latlngbounds); mapView = (MapView) findViewById(R.id.mapView); - mapView.setStyleUrl(Style.DARK); mapView.onCreate(savedInstanceState); - mapView.getMapAsync(this); + mapView.getMapAsync(new OnMapReadyCallback() { + @Override + public void onMapReady(final MapboxMap map) { + mapboxMap = map; + initMap(); + } + }); + } + + private void initMap() { + addMarkers(); + initFab(); + initBottomSheet(); + moveToBounds(bottomSheet.getMeasuredHeight(), BOUNDS_PADDING_DIVIDER_SMALL, 0); + } + + private void addMarkers() { + for (LatLng location : LOCATIONS) { + mapboxMap.addMarker(new MarkerOptions().position(location)); + } + } + + private void initFab() { + findViewById(R.id.fab).setOnClickListener(this); } @Override - public void onMapReady(final MapboxMap map) { - mapboxMap = map; - moveToBounds(new LatLngBounds.Builder().include(NEW_YORK).include(LOS_ANGELES).build(), new int[] {0, 0, 0, 0}); - new Handler().postDelayed(new Runnable() { + public void onClick(View v) { + bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); + v.animate().alpha(0.0f).setDuration(ANIMATION_DURATION_SHORT); + } + + private void initBottomSheet() { + bottomSheet = findViewById(R.id.bottom_sheet); + bottomSheetBehavior = (LockableBottomSheetBehavior) BottomSheetBehavior.from(bottomSheet); + bottomSheetBehavior.setLocked(true); + bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { + @Override + public void onStateChanged(@NonNull View bottomSheet, int newState) { + if (newState == BottomSheetBehavior.STATE_SETTLING) { + moveToBounds(0, BOUNDS_PADDING_DIVIDER_LARGE, ANIMATION_DURATION_LONG); + } + } + @Override - public void run() { - moveToBounds(new LatLngBounds.Builder().include(CHINA_BOTTOM_LEFT).include(CHINA_TOP_RIGHT).build(), - new int[] {100, 100, 100, 100 }); + public void onSlide(@NonNull View bottomSheet, float slideOffset) { + } - }, 5000); + }); } - private void moveToBounds(LatLngBounds latLngBounds, int[] padding) { - mapboxMap.clear(); - mapboxMap.addMarker(new MarkerOptions().position(latLngBounds.getNorthEast())); - mapboxMap.addMarker(new MarkerOptions().position(latLngBounds.getSouthEast())); - mapboxMap.addMarker(new MarkerOptions().position(latLngBounds.getSouthWest())); - mapboxMap.addMarker(new MarkerOptions().position(latLngBounds.getNorthWest())); - CameraUpdate update = - CameraUpdateFactory.newLatLngBounds(latLngBounds, - padding[0], - padding[1], - padding[2], - padding[3]); - mapboxMap.moveCamera(update); + private void moveToBounds(int verticalOffset, int boundsPaddingDivider, int duration) { + int paddingHorizontal = mapView.getMeasuredWidth() / boundsPaddingDivider; + int paddingVertical = (mapView.getMeasuredHeight() - verticalOffset) / boundsPaddingDivider; + mapboxMap.animateCamera(CameraUpdateFactory.newLatLngBounds( + BOUNDS, + paddingHorizontal, + paddingVertical, + paddingHorizontal, + paddingVertical + verticalOffset), + duration + ); } @Override @@ -97,9 +144,9 @@ public class LatLngBoundsActivity extends AppCompatActivity implements OnMapRead } @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - mapView.onSaveInstanceState(outState); + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); } @Override @@ -109,8 +156,8 @@ public class LatLngBoundsActivity extends AppCompatActivity implements OnMapRead } @Override - public void onLowMemory() { - super.onLowMemory(); - mapView.onLowMemory(); + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/MaxMinZoomActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/MaxMinZoomActivity.java index 014743df96..53a5800f26 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/MaxMinZoomActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/camera/MaxMinZoomActivity.java @@ -13,6 +13,9 @@ import com.mapbox.mapboxsdk.testapp.R; import timber.log.Timber; +/** + * Test activity showcasing using maximum and minimum zoom levels to restrict camera movement. + */ public class MaxMinZoomActivity extends AppCompatActivity implements OnMapReadyCallback { private MapView mapView; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/customlayer/CustomLayerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/customlayer/CustomLayerActivity.java index dde22db2db..1b49e9e3d6 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/customlayer/CustomLayerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/customlayer/CustomLayerActivity.java @@ -69,6 +69,7 @@ public class CustomLayerActivity extends AppCompatActivity { ExampleCustomLayer.createContext(), ExampleCustomLayer.InitializeFunction, ExampleCustomLayer.RenderFunction, + ExampleCustomLayer.ContextLostFunction, // Optional ExampleCustomLayer.DeinitializeFunction); mapboxMap.addLayerBelow(customLayer, "building"); fab.setImageResource(R.drawable.ic_layers_clear); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java index 9c031ad32a..20174daeaa 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxCountActivity.java @@ -48,7 +48,7 @@ public class QueryRenderedFeaturesBoxCountActivity extends AppCompatActivity { int top = selectionBox.getTop() - mapView.getTop(); int left = selectionBox.getLeft() - mapView.getLeft(); RectF box = new RectF(left, top, left + selectionBox.getWidth(), top + selectionBox.getHeight()); - Timber.i(String.format("Querying box %s", box)); + Timber.i("Querying box %s", box); List<Feature> features = mapboxMap.queryRenderedFeatures(box); // Show count @@ -66,22 +66,21 @@ public class QueryRenderedFeaturesBoxCountActivity extends AppCompatActivity { } private void debugOutput(List<Feature> features) { - Timber.i(String.format("Got %s features", features.size())); + Timber.i("Got %s features", features.size()); for (Feature feature : features) { if (feature != null) { - Timber.i(String.format("Got feature %s with %s properties and Geometry %s", + Timber.i("Got feature %s with %s properties and Geometry %s", feature.getId(), feature.getProperties() != null ? feature.getProperties().entrySet().size() : "<null>", - feature.getGeometry() != null ? feature.getGeometry().getClass().getSimpleName() : "<null>") + feature.getGeometry() != null ? feature.getGeometry().getClass().getSimpleName() : "<null>" ); if (feature.getProperties() != null) { for (Map.Entry<String, JsonElement> entry : feature.getProperties().entrySet()) { - Timber.i(String.format("Prop %s - %s", entry.getKey(), entry.getValue())); + Timber.i("Prop %s - %s", entry.getKey(), entry.getValue()); } } } else { - // TODO Question: Why not formatting here?? - Timber.i("Got NULL feature %s"); + Timber.i("Got 0 features"); } } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxHighlightActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxHighlightActivity.java index 1d15efef84..480e48437a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxHighlightActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxHighlightActivity.java @@ -46,6 +46,15 @@ public class QueryRenderedFeaturesBoxHighlightActivity extends AppCompatActivity @Override public void onMapReady(final MapboxMap mapboxMap) { QueryRenderedFeaturesBoxHighlightActivity.this.mapboxMap = mapboxMap; + + // Add layer / source + final GeoJsonSource source = new GeoJsonSource("highlighted-shapes-source"); + mapboxMap.addSource(source); + mapboxMap.addLayer( + new FillLayer("highlighted-shapes-layer", "highlighted-shapes-source") + .withProperties(fillColor(Color.RED)) + ); + selectionBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -53,7 +62,7 @@ public class QueryRenderedFeaturesBoxHighlightActivity extends AppCompatActivity int top = selectionBox.getTop() - mapView.getTop(); int left = selectionBox.getLeft() - mapView.getLeft(); RectF box = new RectF(left, top, left + selectionBox.getWidth(), top + selectionBox.getHeight()); - Timber.i(String.format("Querying box %s for buildings", box)); + Timber.i("Querying box %s for buildings", box); List<Feature> features = mapboxMap.queryRenderedFeatures(box, Filter.lt("height", 10), "building"); // Show count @@ -62,17 +71,8 @@ public class QueryRenderedFeaturesBoxHighlightActivity extends AppCompatActivity String.format("%s features in box", features.size()), Toast.LENGTH_SHORT).show(); - // remove layer / source if already added - mapboxMap.removeSource("highlighted-shapes-source"); - mapboxMap.removeLayer("highlighted-shapes-layer"); - - // Add layer / source - mapboxMap.addSource( - new GeoJsonSource("highlighted-shapes-source", - FeatureCollection.fromFeatures(features)) - ); - mapboxMap.addLayer(new FillLayer("highlighted-shapes-layer", "highlighted-shapes-source") - .withProperties(fillColor(Color.RED))); + // Update source data + source.setGeoJson(FeatureCollection.fromFeatures(features)); } }); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java index 8c2f3a8fb5..220137d07d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesBoxSymbolCountActivity.java @@ -3,7 +3,6 @@ package com.mapbox.mapboxsdk.testapp.activity.feature; import android.graphics.BitmapFactory; import android.graphics.RectF; import android.os.Bundle; -import android.support.annotation.RawRes; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast; @@ -14,15 +13,10 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.style.layers.SymbolLayer; import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils; import com.mapbox.services.commons.geojson.Feature; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; import java.util.List; import timber.log.Timber; @@ -57,9 +51,10 @@ public class QueryRenderedFeaturesBoxSymbolCountActivity extends AppCompatActivi // Add a symbol layer (also works with annotations) try { - mapboxMap.addSource(new GeoJsonSource("symbols-source", readRawResource(R.raw.test_points_utrecht))); + mapboxMap.addSource(new GeoJsonSource("symbols-source", ResourceUtils.readRawResource( + QueryRenderedFeaturesBoxSymbolCountActivity.this, R.raw.test_points_utrecht))); } catch (IOException ioException) { - Timber.e("Could not load geojson: " + ioException.getMessage()); + Timber.e(ioException, "Could not load geojson"); return; } mapboxMap.addImage( @@ -76,7 +71,7 @@ public class QueryRenderedFeaturesBoxSymbolCountActivity extends AppCompatActivi int top = selectionBox.getTop() - mapView.getTop(); int left = selectionBox.getLeft() - mapView.getLeft(); RectF box = new RectF(left, top, left + selectionBox.getWidth(), top + selectionBox.getHeight()); - Timber.i(String.format("Querying box %s", box)); + Timber.i("Querying box %s", box); List<Feature> features = mapboxMap.queryRenderedFeatures(box, "symbols-layer"); // Show count @@ -94,23 +89,6 @@ public class QueryRenderedFeaturesBoxSymbolCountActivity extends AppCompatActivi }); } - private String readRawResource(@RawRes int rawResource) throws IOException { - InputStream is = getResources().openRawResource(rawResource); - Writer writer = new StringWriter(); - char[] buffer = new char[1024]; - try { - Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); - int numRead; - while ((numRead = reader.read(buffer)) != -1) { - writer.write(buffer, 0, numRead); - } - } finally { - is.close(); - } - - return writer.toString(); - } - public MapboxMap getMapboxMap() { return mapboxMap; } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java index 8b83db3069..1bd6a34b7c 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/feature/QueryRenderedFeaturesPropertiesActivity.java @@ -59,9 +59,9 @@ public class QueryRenderedFeaturesPropertiesActivity extends AppCompatActivity { public void onMapClick(@NonNull LatLng point) { // Query final PointF pixel = mapboxMap.getProjection().toScreenLocation(point); - Timber.i(String.format( + Timber.i( "Requesting features for %sx%s (%sx%s adjusted for density)", - pixel.x, pixel.y, pixel.x / density, pixel.y / density) + pixel.x, pixel.y, pixel.x / density, pixel.y / density ); List<Feature> features = mapboxMap.queryRenderedFeatures(pixel); @@ -84,22 +84,21 @@ public class QueryRenderedFeaturesPropertiesActivity extends AppCompatActivity { } private void debugOutput(List<Feature> features) { - Timber.i(String.format("Got %s features", features.size())); + Timber.i("Got %s features", features.size()); for (Feature feature : features) { if (feature != null) { - Timber.i(String.format("Got feature %s with %s properties and Geometry %s", + Timber.i("Got feature %s with %s properties and Geometry %s", feature.getId(), feature.getProperties() != null ? feature.getProperties().entrySet().size() : "<null>", - feature.getGeometry() != null ? feature.getGeometry().getClass().getSimpleName() : "<null>") + feature.getGeometry() != null ? feature.getGeometry().getClass().getSimpleName() : "<null>" ); if (feature.getProperties() != null) { for (Map.Entry<String, JsonElement> entry : feature.getProperties().entrySet()) { - Timber.i(String.format("Prop %s - %s", entry.getKey(), entry.getValue())); + Timber.i("Prop %s - %s", entry.getKey(), entry.getValue()); } } } else { - // TODO Question: Why not formatting here?? - Timber.i("Got NULL feature %s"); + Timber.i("Got NULL feature"); } } } @@ -185,7 +184,7 @@ public class QueryRenderedFeaturesPropertiesActivity extends AppCompatActivity { private final List<Feature> features; - public CustomMarker(BaseMarkerOptions baseMarkerOptions, List<Feature> features) { + CustomMarker(BaseMarkerOptions baseMarkerOptions, List<Feature> features) { super(baseMarkerOptions); this.features = features; } @@ -201,7 +200,7 @@ public class QueryRenderedFeaturesPropertiesActivity extends AppCompatActivity { return this; } - public CustomMarkerOptions() { + CustomMarkerOptions() { } private CustomMarkerOptions(Parcel in) { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/SupportMapFragmentActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/SupportMapFragmentActivity.java index ee16b251c5..4f828060ee 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/SupportMapFragmentActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/SupportMapFragmentActivity.java @@ -50,7 +50,7 @@ public class SupportMapFragmentActivity extends AppCompatActivity implements OnM .zoom(11) .build()); - mapFragment = SupportMapFragment.newInstance(); + mapFragment = SupportMapFragment.newInstance(options); transaction.add(R.id.fragment_container, mapFragment, "com.mapbox.map"); transaction.commit(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/ViewPagerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/ViewPagerActivity.java index 8025832429..bbdf450505 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/ViewPagerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/fragment/ViewPagerActivity.java @@ -31,11 +31,11 @@ public class ViewPagerActivity extends AppCompatActivity { } } - public static class MapFragmentAdapter extends FragmentPagerAdapter { + static class MapFragmentAdapter extends FragmentPagerAdapter { private static int NUM_ITEMS = 3; - public MapFragmentAdapter(FragmentManager fragmentManager) { + MapFragmentAdapter(FragmentManager fragmentManager) { super(fragmentManager); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java index 2be47b4e25..655012f799 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java @@ -15,6 +15,8 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; +import java.util.Locale; + /** * Test activity showcasing the Snapshot API to create and display a bitmap of the current shown Map. */ @@ -56,7 +58,7 @@ public class SnapshotActivity extends AppCompatActivity implements OnMapReadyCal snapshotView.setImageBitmap(snapshot); Toast.makeText( SnapshotActivity.this, - String.format("Snapshot taken in %d ms", duration), + String.format(Locale.getDefault(), "Snapshot taken in %d ms", duration), Toast.LENGTH_LONG).show(); } }); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/DynamicInfoWindowAdapterActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/DynamicInfoWindowAdapterActivity.java index 18db2ba8a8..7fa4792a38 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/DynamicInfoWindowAdapterActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/DynamicInfoWindowAdapterActivity.java @@ -3,7 +3,6 @@ package com.mapbox.mapboxsdk.testapp.activity.infowindow; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.support.v4.content.res.ResourcesCompat; import android.support.v7.app.AppCompatActivity; import android.view.View; @@ -21,16 +20,18 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.mapboxsdk.testapp.utils.IconUtils; +import java.util.Locale; + /** * Test activity showcasing how to dynamically update InfoWindow when Using an MapboxMap.InfoWindowAdapter. */ public class DynamicInfoWindowAdapterActivity extends AppCompatActivity implements OnMapReadyCallback { + private static final LatLng PARIS = new LatLng(48.864716, 2.349014); + private MapboxMap mapboxMap; private MapView mapView; - private LatLng paris = new LatLng(48.864716, 2.349014); - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -43,7 +44,6 @@ public class DynamicInfoWindowAdapterActivity extends AppCompatActivity implemen @Override public void onMapReady(MapboxMap map) { - mapboxMap = map; // Add info window adapter @@ -64,27 +64,32 @@ public class DynamicInfoWindowAdapterActivity extends AppCompatActivity implemen double distanceKm = marker.getPosition().distanceTo(point) / 1000; // Get the info window - InfoWindow infoWindow = marker.getInfoWindow(); + final InfoWindow infoWindow = marker.getInfoWindow(); // Get the view from the info window if (infoWindow != null && infoWindow.getView() != null) { // Set the new text on the text view in the info window - ((TextView) infoWindow.getView()).setText(String.format("%.2fkm", distanceKm)); - - // Update the info window position (as the text length changes) - infoWindow.update(); + TextView textView = (TextView) infoWindow.getView(); + textView.setText(String.format(Locale.getDefault(), "%.2fkm", distanceKm)); + textView.post(new Runnable() { + @Override + public void run() { + // Update the info window position (as the text length changes) + infoWindow.update(); + } + }); } } }); // Focus on Paris - mapboxMap.animateCamera(CameraUpdateFactory.newLatLng(paris)); + mapboxMap.animateCamera(CameraUpdateFactory.newLatLng(PARIS)); } private MarkerView addMarker(MapboxMap mapboxMap) { return mapboxMap.addMarker( new MarkerViewOptions() - .position(paris) + .position(PARIS) .icon(IconUtils.drawableToIcon(this, R.drawable.ic_location_city, ResourcesCompat.getColor(getResources(), R.color.mapbox_blue, getTheme())) )); @@ -94,15 +99,13 @@ public class DynamicInfoWindowAdapterActivity extends AppCompatActivity implemen final int padding = (int) getResources().getDimension(R.dimen.attr_margin); mapboxMap.setInfoWindowAdapter(new MapboxMap.InfoWindowAdapter() { - @Nullable @Override public View getInfoWindow(@NonNull Marker marker) { TextView textView = new TextView(DynamicInfoWindowAdapterActivity.this); textView.setText(marker.getTitle()); textView.setBackgroundColor(Color.WHITE); - textView.setText("Click the map to calculate the distance"); + textView.setText(R.string.action_calculate_distance); textView.setPadding(padding, padding, padding, padding); - return textView; } }); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/InfoWindowAdapterActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/InfoWindowAdapterActivity.java index 7026a797d5..22347f8a92 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/InfoWindowAdapterActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/infowindow/InfoWindowAdapterActivity.java @@ -18,6 +18,9 @@ import com.mapbox.mapboxsdk.testapp.model.annotations.CityStateMarker; import com.mapbox.mapboxsdk.testapp.model.annotations.CityStateMarkerOptions; import com.mapbox.mapboxsdk.testapp.utils.IconUtils; +/** + * Test activity showcasing using an InfoWindowAdapter to provide a custom InfoWindow content. + */ public class InfoWindowAdapterActivity extends AppCompatActivity { private MapView mapView; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/BottomSheetActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/BottomSheetActivity.java new file mode 100644 index 0000000000..2c83f6d908 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/BottomSheetActivity.java @@ -0,0 +1,288 @@ +package com.mapbox.mapboxsdk.testapp.activity.maplayout; + +import android.content.Context; +import android.location.Location; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.design.widget.BottomSheetBehavior; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; +import com.mapbox.mapboxsdk.constants.Style; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.MapboxMapOptions; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.utils.MapFragmentUtils; + +/** + * Test activity showcasing using a bottomView with a MapView and stacking map fragments below. + */ +public class BottomSheetActivity extends AppCompatActivity { + + private static final String TAG_MAIN_FRAGMENT = "com.mapbox.mapboxsdk.fragment.tag.main"; + private static final String TAG_BOTTOM_FRAGMENT = "com.mapbox.mapboxsdk.fragment.tag.bottom"; + + private boolean bottomSheetFragmentAdded; + private int mapViewCounter; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_bottom_sheet); + + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + } + + findViewById(R.id.fabFragment).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + addMapFragment(); + } + }); + + findViewById(R.id.fabBottomSheet).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + toggleBottomSheetMapFragment(); + } + }); + + BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(findViewById(R.id.bottom_sheet)); + bottomSheetBehavior.setPeekHeight((int) (64 * getResources().getDisplayMetrics().density)); + bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + toggleBottomSheetMapFragment(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + onBackPressed(); + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + super.onBackPressed(); + if (mapViewCounter > 0) { + mapViewCounter--; + Toast.makeText(this, "Amount of main map fragments: " + mapViewCounter, Toast.LENGTH_SHORT).show(); + } + } + + private void addMapFragment() { + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + MainMapFragment mainMapFragment = MainMapFragment.newInstance(mapViewCounter); + if (mapViewCounter == 0) { + fragmentTransaction.add(R.id.fragment_container, mainMapFragment, TAG_MAIN_FRAGMENT); + } else { + fragmentTransaction.replace(R.id.fragment_container, mainMapFragment, TAG_MAIN_FRAGMENT); + } + fragmentTransaction.addToBackStack(null); + fragmentTransaction.commit(); + mapViewCounter++; + Toast.makeText(this, "Amount of main map fragments: " + mapViewCounter, Toast.LENGTH_SHORT).show(); + } + + private void toggleBottomSheetMapFragment() { + if (!bottomSheetFragmentAdded) { + addBottomSheetMapFragment(); + } else { + removeBottomSheetFragment(); + } + bottomSheetFragmentAdded = !bottomSheetFragmentAdded; + } + + private void addBottomSheetMapFragment() { + FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); + fragmentTransaction.add(R.id.fragment_container_bottom, BottomSheetFragment.newInstance(), TAG_BOTTOM_FRAGMENT); + fragmentTransaction.commit(); + } + + private void removeBottomSheetFragment() { + Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_BOTTOM_FRAGMENT); + if (fragment != null) { + getSupportFragmentManager().beginTransaction().remove(fragment).commit(); + } + } + + public static class MainMapFragment extends Fragment implements OnMapReadyCallback { + + private static final String[] STYLES = new String[] { + Style.MAPBOX_STREETS, + Style.SATELLITE_STREETS, + Style.LIGHT, + Style.DARK, + Style.SATELLITE, + Style.OUTDOORS + }; + + private MapView map; + + public static MainMapFragment newInstance(int mapCounter) { + MainMapFragment mapFragment = new MainMapFragment(); + MapboxMapOptions mapboxMapOptions = new MapboxMapOptions(); + mapboxMapOptions.styleUrl(STYLES[Math.min(Math.max(mapCounter, 0), STYLES.length - 1)]); + mapFragment.setArguments(MapFragmentUtils.createFragmentArgs(mapboxMapOptions)); + return mapFragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + Context context = inflater.getContext(); + return map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments())); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + map.onCreate(savedInstanceState); + map.getMapAsync(this); + } + + @Override + public void onMapReady(MapboxMap mapboxMap) { + Location location = mapboxMap.getMyLocation(); + if (location != null) { + mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 15)); + } + } + + @Override + public void onStart() { + super.onStart(); + map.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + map.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + map.onPause(); + } + + @Override + public void onStop() { + super.onStop(); + map.onStop(); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + map.onSaveInstanceState(outState); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + map.onLowMemory(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + map.onDestroy(); + } + } + + public static class BottomSheetFragment extends Fragment implements OnMapReadyCallback { + + private MapView map; + + public static BottomSheetFragment newInstance() { + BottomSheetFragment mapFragment = new BottomSheetFragment(); + MapboxMapOptions mapboxMapOptions = new MapboxMapOptions(); + mapboxMapOptions.locationEnabled(true); + mapboxMapOptions.renderSurfaceOnTop(true); + mapboxMapOptions.styleUrl(Style.LIGHT); + mapFragment.setArguments(MapFragmentUtils.createFragmentArgs(mapboxMapOptions)); + return mapFragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + Context context = inflater.getContext(); + return map = new MapView(context, MapFragmentUtils.resolveArgs(context, getArguments())); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + map.onCreate(savedInstanceState); + map.getMapAsync(this); + } + + @Override + public void onMapReady(MapboxMap mapboxMap) { + Location location = mapboxMap.getMyLocation(); + if (location != null) { + mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location), 15)); + } + } + + @Override + public void onStart() { + super.onStart(); + map.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + map.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + map.onPause(); + } + + @Override + public void onStop() { + super.onStop(); + map.onStop(); + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + super.onSaveInstanceState(outState); + map.onSaveInstanceState(outState); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + map.onLowMemory(); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + map.onDestroy(); + } + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java index 18d6fadcb8..6134b4cb7a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DebugModeActivity.java @@ -1,10 +1,19 @@ package com.mapbox.mapboxsdk.testapp.activity.maplayout; +import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.design.widget.FloatingActionButton; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBar; +import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ListView; import android.widget.TextView; import com.mapbox.mapboxsdk.camera.CameraPosition; @@ -12,18 +21,25 @@ import com.mapbox.mapboxsdk.constants.Style; import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.style.layers.Layer; +import com.mapbox.mapboxsdk.style.layers.Property; import com.mapbox.mapboxsdk.testapp.R; +import java.util.List; +import java.util.Locale; + import timber.log.Timber; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.visibility; + /** - * Test Activity showcasing the different debug modes and allows to cycle between the default map styles. + * Test activity showcasing the different debug modes and allows to cycle between the default map styles. */ -public class DebugModeActivity extends AppCompatActivity { +public class DebugModeActivity extends AppCompatActivity implements OnMapReadyCallback { private MapView mapView; private MapboxMap mapboxMap; - + private ActionBarDrawerToggle actionBarDrawerToggle; private int currentStyleIndex = 0; private static final String[] STYLES = new String[] { @@ -32,49 +48,128 @@ public class DebugModeActivity extends AppCompatActivity { Style.LIGHT, Style.DARK, Style.SATELLITE, - Style.SATELLITE_STREETS + Style.SATELLITE_STREETS, + Style.TRAFFIC_DAY, + Style.TRAFFIC_NIGHT }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_debug_mode); + setupToolbar(); + setupMapView(savedInstanceState); + setupDebugChangeView(); + setupStyleChangeView(); + } + + private void setupToolbar() { + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + actionBarDrawerToggle = new ActionBarDrawerToggle(this, + drawerLayout, + R.string.navigation_drawer_open, + R.string.navigation_drawer_close + ); + actionBarDrawerToggle.setDrawerIndicatorEnabled(true); + actionBarDrawerToggle.syncState(); + } + } + private void setupMapView(Bundle savedInstanceState) { mapView = (MapView) findViewById(R.id.mapView); + mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() { + @Override + public void onMapChanged(int change) { + if (change == MapView.DID_FINISH_LOADING_STYLE && mapboxMap != null) { + Timber.v("New style loaded with JSON: %s", mapboxMap.getStyleJson()); + setupNavigationView(mapboxMap.getLayers()); + } + } + }); + mapView.setTag(true); mapView.setStyleUrl(STYLES[currentStyleIndex]); mapView.onCreate(savedInstanceState); + mapView.getMapAsync(this); + } - mapView.getMapAsync(new OnMapReadyCallback() { - @Override - public void onMapReady(@NonNull MapboxMap map) { - mapboxMap = map; + @Override + public void onMapReady(MapboxMap map) { + mapboxMap = map; + mapboxMap.getUiSettings().setZoomControlsEnabled(true); - mapboxMap.getUiSettings().setZoomControlsEnabled(true); + setupNavigationView(mapboxMap.getLayers()); + setupZoomView(); + setFpsView(); + } - // show current zoom level on screen - final TextView textView = (TextView) findViewById(R.id.textZoom); - mapboxMap.setOnCameraChangeListener(new MapboxMap.OnCameraChangeListener() { - @Override - public void onCameraChange(CameraPosition position) { - textView.setText(String.format(getString(R.string.debug_zoom), position.zoom)); - } - }); + private void setFpsView() { + final TextView fpsView = (TextView) findViewById(R.id.fpsView); + mapboxMap.setOnFpsChangedListener(new MapboxMap.OnFpsChangedListener() { + @Override + public void onFpsChanged(double fps) { + fpsView.setText(String.format(Locale.US,"FPS: %4.2f", fps)); } }); + } + + private void setupNavigationView(List<Layer> layerList) { + final LayerListAdapter adapter = new LayerListAdapter(this, layerList); + ListView listView = (ListView) findViewById(R.id.listView); + listView.setAdapter(adapter); + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + Layer clickedLayer = adapter.getItem(position); + toggleLayerVisibility(clickedLayer); + closeNavigationView(); + } + }); + } + private void toggleLayerVisibility(Layer layer) { + boolean isVisible = layer.getVisibility().getValue().equals(Property.VISIBLE); + layer.setProperties( + visibility( + isVisible ? Property.NONE : Property.VISIBLE + ) + ); + } + + private void closeNavigationView() { + DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + drawerLayout.closeDrawers(); + } + + private void setupZoomView() { + final TextView textView = (TextView) findViewById(R.id.textZoom); + mapboxMap.setOnCameraChangeListener(new MapboxMap.OnCameraChangeListener() { + @Override + public void onCameraChange(CameraPosition position) { + textView.setText(String.format(getString(R.string.debug_zoom), position.zoom)); + } + }); + } + private void setupDebugChangeView() { FloatingActionButton fabDebug = (FloatingActionButton) findViewById(R.id.fabDebug); fabDebug.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mapboxMap != null) { - Timber.d("Debug FAB: isDebug Active? " + mapboxMap.isDebugActive()); + Timber.d("Debug FAB: isDebug Active? %s", mapboxMap.isDebugActive()); mapboxMap.cycleDebugOptions(); } } }); + } + private void setupStyleChangeView() { FloatingActionButton fabStyles = (FloatingActionButton) findViewById(R.id.fabStyles); fabStyles.setOnClickListener(new View.OnClickListener() { @Override @@ -96,6 +191,11 @@ public class DebugModeActivity extends AppCompatActivity { } @Override + public boolean onOptionsItemSelected(MenuItem item) { + return actionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item); + } + + @Override protected void onStart() { super.onStart(); mapView.onStart(); @@ -136,4 +236,58 @@ public class DebugModeActivity extends AppCompatActivity { super.onLowMemory(); mapView.onLowMemory(); } + + private static class LayerListAdapter extends BaseAdapter { + + private LayoutInflater layoutInflater; + private List<Layer> layers; + + LayerListAdapter(Context context, List<Layer> layers) { + this.layoutInflater = LayoutInflater.from(context); + this.layers = layers; + } + + @Override + public int getCount() { + return layers.size(); + } + + @Override + public Layer getItem(int position) { + return layers.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Layer layer = layers.get(position); + View view = convertView; + if (view == null) { + view = layoutInflater.inflate(android.R.layout.simple_list_item_2, parent, false); + ViewHolder holder = new ViewHolder( + (TextView) view.findViewById(android.R.id.text1), + (TextView) view.findViewById(android.R.id.text2) + ); + view.setTag(holder); + } + ViewHolder holder = (ViewHolder) view.getTag(); + holder.text.setText(layer.getClass().getSimpleName()); + holder.subText.setText(layer.getId()); + return view; + } + + private static class ViewHolder { + final TextView text; + final TextView subText; + + ViewHolder(TextView text, TextView subText) { + this.text = text; + this.subText = subText; + } + } + } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DoubleMapActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DoubleMapActivity.java index 7ec9cb9242..462c0c8025 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DoubleMapActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/DoubleMapActivity.java @@ -8,7 +8,6 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; -import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; @@ -23,6 +22,12 @@ import com.mapbox.mapboxsdk.maps.TrackingSettings; import com.mapbox.mapboxsdk.maps.UiSettings; import com.mapbox.mapboxsdk.testapp.R; +/** + * Test activity showcasing having 2 maps on top of each other. + * <p> + * The small map is using the `mapbox_enableZMediaOverlay="true"` configuration + * </p> + */ public class DoubleMapActivity extends AppCompatActivity { private static final String TAG_FRAGMENT = "map"; @@ -45,11 +50,11 @@ public class DoubleMapActivity extends AppCompatActivity { public void setMapboxMap(MapboxMap map) { // we need to set mapboxmap on the parent activity, // for auto-generated ui tests - mapboxMap = map; mapboxMap.setStyleUrl(Style.DARK); mapboxMap.moveCamera(CameraUpdateFactory.zoomTo(18)); try { + mapboxMap.setMyLocationEnabled(true); TrackingSettings settings = mapboxMap.getTrackingSettings(); settings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); } catch (SecurityException securityException) { @@ -58,6 +63,9 @@ public class DoubleMapActivity extends AppCompatActivity { } } + /** + * Custom fragment containing 2 MapViews. + */ public static class DoubleMapFragment extends Fragment { private DoubleMapActivity activity; @@ -107,6 +115,7 @@ public class DoubleMapActivity extends AppCompatActivity { uiSettings.setLogoEnabled(false); try { + mapboxMap.setMyLocationEnabled(true); TrackingSettings settings = mapboxMap.getTrackingSettings(); settings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); } catch (SecurityException securityException) { @@ -123,9 +132,6 @@ public class DoubleMapActivity extends AppCompatActivity { }); } }); - - SurfaceView surfaceViewMini = (SurfaceView) mapViewMini.findViewById(R.id.surfaceView); - surfaceViewMini.setZOrderMediaOverlay(true); } @Override @@ -157,8 +163,8 @@ public class DoubleMapActivity extends AppCompatActivity { } @Override - public void onDestroy() { - super.onDestroy(); + public void onDestroyView() { + super.onDestroyView(); mapView.onDestroy(); mapViewMini.onDestroy(); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/LatLngBoundsForCameraActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/LatLngBoundsForCameraActivity.java index 9ac87deb0d..24a167e260 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/LatLngBoundsForCameraActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/LatLngBoundsForCameraActivity.java @@ -16,7 +16,7 @@ import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; /** - * Test Activity showcasing restricting user gestures to a bounds around Iceland. + * Test activity showcasing restricting user gestures to a bounds around Iceland. */ public class LatLngBoundsForCameraActivity extends AppCompatActivity implements OnMapReadyCallback { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/MapChangeActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/MapChangeActivity.java new file mode 100644 index 0000000000..32344248bc --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/MapChangeActivity.java @@ -0,0 +1,111 @@ +package com.mapbox.mapboxsdk.testapp.activity.maplayout; + +import android.os.Bundle; +import android.support.v4.util.LongSparseArray; +import android.support.v7.app.AppCompatActivity; + +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.testapp.R; + +import timber.log.Timber; + +/** + * Test activity showcasing how to listen to map change events. + */ +public class MapChangeActivity extends AppCompatActivity { + + private MapView mapView; + private MapboxMap mapboxMap; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_simple); + + final LongSparseArray<String> mapChangeMap = buildMapChangeStringValueSparseArray(); + mapView = (MapView) findViewById(R.id.mapView); + mapView.addOnMapChangedListener(new MapView.OnMapChangedListener() { + @Override + public void onMapChanged(int change) { + Timber.e("OnMapChange: %s, %s", change, mapChangeMap.get(change)); + } + }); + + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(new OnMapReadyCallback() { + @Override + public void onMapReady(MapboxMap map) { + mapboxMap = map; + mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom( + new LatLng(55.754020, 37.620948), 12), 9000); + } + }); + } + + private LongSparseArray<String> buildMapChangeStringValueSparseArray() { + LongSparseArray<String> mapChangeArray = new LongSparseArray<>(); + mapChangeArray.put(MapView.REGION_WILL_CHANGE, "Region will change"); + mapChangeArray.put(MapView.REGION_WILL_CHANGE_ANIMATED, "Region will change animated"); + mapChangeArray.put(MapView.REGION_IS_CHANGING, "Region is changing"); + mapChangeArray.put(MapView.REGION_DID_CHANGE, "Region did change"); + mapChangeArray.put(MapView.REGION_DID_CHANGE_ANIMATED, "Region did change animated"); + mapChangeArray.put(MapView.WILL_START_LOADING_MAP, "Will start loading map"); + mapChangeArray.put(MapView.DID_FINISH_LOADING_MAP, "Did finish loading map"); + mapChangeArray.put(MapView.DID_FAIL_LOADING_MAP, "Did fail loading map"); + mapChangeArray.put(MapView.WILL_START_RENDERING_FRAME, "Will start rendering frame"); + mapChangeArray.put(MapView.DID_FINISH_RENDERING_FRAME, "Did finish rendering frame"); + mapChangeArray.put(MapView.DID_FINISH_RENDERING_FRAME_FULLY_RENDERED, "Did finish rendering frame fully rendered"); + mapChangeArray.put(MapView.WILL_START_RENDERING_MAP, "Will start rendering map"); + mapChangeArray.put(MapView.DID_FINISH_RENDERING_MAP, "Did finish rendering map"); + mapChangeArray.put(MapView.DID_FINISH_RENDERING_MAP_FULLY_RENDERED, "Did finish rendering map fully rendered"); + mapChangeArray.put(MapView.DID_FINISH_LOADING_STYLE, "Did finish loading style"); + mapChangeArray.put(MapView.SOURCE_DID_CHANGE, "Source did change"); + return mapChangeArray; + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/MapInDialogActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/MapInDialogActivity.java index 495360a168..f0827c65cc 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/MapInDialogActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/MapInDialogActivity.java @@ -1,6 +1,8 @@ package com.mapbox.mapboxsdk.testapp.activity.maplayout; +import android.app.Dialog; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; @@ -65,6 +67,22 @@ public class MapInDialogActivity extends AppCompatActivity { mapView.onCreate(savedInstanceState); } + @NonNull + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + return new Dialog(getActivity(), getTheme()) { + boolean destroyed = false; + @Override + public void dismiss() { + if (mapView != null && !destroyed) { + mapView.onDestroy(); + destroyed = true; + } + super.dismiss(); + } + }; + } + @Override public void onStart() { super.onStart(); @@ -90,12 +108,6 @@ public class MapInDialogActivity extends AppCompatActivity { } @Override - public void onDestroy() { - super.onDestroy(); - mapView.onDestroy(); - } - - @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/NavigationDrawerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/NavigationDrawerActivity.java deleted file mode 100644 index 888482b219..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/NavigationDrawerActivity.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.mapbox.mapboxsdk.testapp.activity.maplayout; - -import android.app.Activity; -import android.app.Fragment; -import android.app.FragmentManager; -import android.content.SharedPreferences; -import android.content.res.Configuration; -import android.os.Bundle; -import android.preference.PreferenceManager; -import android.support.design.widget.Snackbar; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBar; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.ListView; - -import com.mapbox.mapboxsdk.camera.CameraPosition; -import com.mapbox.mapboxsdk.constants.Style; -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.maps.MapFragment; -import com.mapbox.mapboxsdk.maps.MapboxMap; -import com.mapbox.mapboxsdk.maps.MapboxMapOptions; -import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; -import com.mapbox.mapboxsdk.testapp.R; - -public class NavigationDrawerActivity extends AppCompatActivity { - - private boolean firstStyle = true; - private MapboxMap mapboxMap; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_navigation_drawer); - - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - NavigationDrawerFragment navigationDrawerFragment; - - getFragmentManager() - .beginTransaction() - .add(R.id.navigation_drawer, navigationDrawerFragment = new NavigationDrawerFragment()) - .commit(); - - navigationDrawerFragment.setUp(this, - R.id.navigation_drawer, - (DrawerLayout) findViewById(R.id.drawer_layout), - getSupportActionBar()); - } - - public void onNavigationDrawerItemSelected(int position) { - // update the main content by replacing fragments - switch (position) { - case 0: - // options - MapboxMapOptions options = new MapboxMapOptions(); - options.styleUrl(firstStyle ? Style.LIGHT : Style.SATELLITE); - options.camera(new CameraPosition.Builder() - .target(new LatLng(39.913271, 116.413891)) - .zoom(12) - .build()); - - // fragment - MapFragment mapFragment = MapFragment.newInstance(options); - FragmentManager fragmentManager = getFragmentManager(); - fragmentManager.beginTransaction() - .replace(R.id.container, mapFragment) - .commit(); - - // get callback when map is ready - mapFragment.getMapAsync(new OnMapReadyCallback() { - @Override - public void onMapReady(MapboxMap map) { - mapboxMap = map; - } - }); - - firstStyle = !firstStyle; - break; - case 1: - Snackbar.make( - findViewById(android.R.id.content), - "Hello from snackbar", - Snackbar.LENGTH_LONG) - .show(); - break; - } - } - - public static class NavigationDrawerFragment extends Fragment { - - private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position"; - private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned"; - - private ActionBarDrawerToggle drawerToggle; - - private DrawerLayout drawerLayout; - private ListView drawerListView; - private View fragmentContainerView; - - private int currentSelectedPosition = 0; - private boolean fromSavedInstanceState; - private boolean userLearnedDrawer; - - public NavigationDrawerFragment() { - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); - userLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false); - - if (savedInstanceState != null) { - currentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION); - fromSavedInstanceState = true; - } - selectItem(currentSelectedPosition); - } - - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - setHasOptionsMenu(true); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - drawerListView = (ListView) inflater.inflate( - R.layout.drawer_navigation_drawer, container, false); - drawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView<?> parent, View view, int position, long id) { - selectItem(position); - } - }); - drawerListView.setAdapter(new ArrayAdapter<>( - inflater.getContext(), - android.R.layout.simple_list_item_activated_1, - android.R.id.text1, - new String[] { - "Different style", - "Show snackbar" - })); - drawerListView.setItemChecked(currentSelectedPosition, true); - return drawerListView; - } - - /** - * Users of this fragment must call this method to set up the navigation drawer interactions. - * - * @param fragmentId The android:id of this fragment in its activity's layout. - * @param drawerLayout The DrawerLayout containing this fragment's UI. - */ - public void setUp(Activity activity, int fragmentId, DrawerLayout drawerLayout, ActionBar actionBar) { - fragmentContainerView = activity.findViewById(fragmentId); - this.drawerLayout = drawerLayout; - // drawerLayout.setScrimColor(Color.TRANSPARENT); - - actionBar.setDisplayHomeAsUpEnabled(true); - actionBar.setHomeButtonEnabled(true); - - drawerToggle = new ActionBarDrawerToggle( - activity, - NavigationDrawerFragment.this.drawerLayout, - R.string.navigation_drawer_open, - R.string.navigation_drawer_close - ) { - @Override - public void onDrawerClosed(View drawerView) { - super.onDrawerClosed(drawerView); - if (!isAdded()) { - return; - } - getActivity().invalidateOptionsMenu(); - } - - @Override - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - if (!isAdded()) { - return; - } - - if (!userLearnedDrawer) { - userLearnedDrawer = true; - SharedPreferences sp = PreferenceManager - .getDefaultSharedPreferences(getActivity()); - sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); - } - getActivity().invalidateOptionsMenu(); - } - }; - - if (!userLearnedDrawer && !fromSavedInstanceState) { - this.drawerLayout.openDrawer(fragmentContainerView); - } - this.drawerLayout.post(new Runnable() { - @Override - public void run() { - drawerToggle.syncState(); - } - }); - this.drawerLayout.setDrawerListener(drawerToggle); - } - - private void selectItem(int position) { - currentSelectedPosition = position; - if (drawerListView != null) { - drawerListView.setItemChecked(position, true); - } - if (drawerLayout != null) { - drawerLayout.closeDrawer(fragmentContainerView); - } - - Activity activity = getActivity(); - if (activity != null && activity instanceof NavigationDrawerActivity) { - NavigationDrawerActivity navActivity = (NavigationDrawerActivity) activity; - navActivity.onNavigationDrawerItemSelected(position); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(STATE_SELECTED_POSITION, currentSelectedPosition); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - drawerToggle.onConfigurationChanged(newConfig); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (drawerToggle.onOptionsItemSelected(item)) { - return true; - } - return super.onOptionsItemSelected(item); - } - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java index badb6718cf..8f8a5af3cc 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/SimpleMapActivity.java @@ -1,18 +1,11 @@ package com.mapbox.mapboxsdk.testapp.activity.maplayout; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; -import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.maps.MapView; -import com.mapbox.mapboxsdk.maps.MapboxMap; -import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; -import com.mapbox.mapboxsdk.maps.Projection; import com.mapbox.mapboxsdk.testapp.R; -import timber.log.Timber; - /** * Test activity showcasing a simple MapView without any MapboxMap interaction. */ @@ -27,19 +20,6 @@ public class SimpleMapActivity extends AppCompatActivity { mapView = (MapView) findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); - mapView.getMapAsync(new OnMapReadyCallback() { - @Override - public void onMapReady(MapboxMap mapboxMap) { - final Projection projection = mapboxMap.getProjection(); - - mapboxMap.setOnMapClickListener(new MapboxMap.OnMapClickListener() { - @Override - public void onMapClick(@NonNull LatLng point) { - Timber.e(projection.getVisibleRegion().toString()); - } - }); - } - }); } @Override diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/VisibilityChangeActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/VisibilityChangeActivity.java new file mode 100644 index 0000000000..393abb7cd4 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/maplayout/VisibilityChangeActivity.java @@ -0,0 +1,146 @@ +package com.mapbox.mapboxsdk.testapp.activity.maplayout; + +import android.os.Bundle; +import android.os.Handler; +import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.testapp.R; + +/** + * Test activity showcasing visibility changes to the mapview. + */ +public class VisibilityChangeActivity extends AppCompatActivity { + + private MapView mapView; + private MapboxMap mapboxMap; + private Handler handler = new Handler(); + private Runnable runnable; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_visibility); + + mapView = (MapView) findViewById(R.id.mapView); + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(new OnMapReadyCallback() { + @Override + public void onMapReady(MapboxMap map) { + mapboxMap = map; + mapboxMap.animateCamera(CameraUpdateFactory.newLatLngZoom( + new LatLng(55.754020, 37.620948), 12), 9000); + } + }); + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + handler.post(runnable = new VisibilityRunner(mapView, findViewById(R.id.viewParent), handler)); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + private static class VisibilityRunner implements Runnable { + + private MapView mapView; + private View viewParent; + private Handler handler; + private int currentStep; + + VisibilityRunner(MapView mapView, View viewParent, Handler handler) { + this.mapView = mapView; + this.viewParent = viewParent; + this.handler = handler; + } + + @Override + public void run() { + if (isViewHiearchyReady()) { + if (isEvenStep()) { + viewParent.setVisibility(View.VISIBLE); + mapView.setVisibility(View.VISIBLE); + } else if (isFirstOrThirdStep()) { + mapView.setVisibility(getVisibilityForStep()); + } else if (isFifthOrSeventhStep()) { + viewParent.setVisibility(getVisibilityForStep()); + } + updateStep(); + } + handler.postDelayed(this, 1500); + } + + private void updateStep() { + if (currentStep == 7) { + currentStep = 0; + } else { + currentStep++; + } + } + + private int getVisibilityForStep() { + return (currentStep == 1 || currentStep == 5) ? View.GONE : View.INVISIBLE; + } + + private boolean isFifthOrSeventhStep() { + return currentStep == 5 || currentStep == 7; + } + + private boolean isFirstOrThirdStep() { + return currentStep == 1 || currentStep == 3; + } + + private boolean isEvenStep() { + return currentStep == 0 || currentStep % 2 == 0; + } + + private boolean isViewHiearchyReady() { + return mapView != null && viewParent != null; + } + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + if (runnable != null) { + handler.removeCallbacks(runnable); + runnable = null; + } + mapView.onStop(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java index 344e9e140a..5bffd4d930 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/offline/OfflineActivity.java @@ -12,7 +12,6 @@ import android.widget.Toast; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; -import com.mapbox.mapboxsdk.constants.MapboxConstants; import com.mapbox.mapboxsdk.constants.Style; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.geometry.LatLngBounds; @@ -75,8 +74,7 @@ public class OfflineActivity extends AppCompatActivity // state of your app. This will override any checks performed via the ConnectivityManager. // Mapbox.getInstance().setConnected(false); Boolean connected = Mapbox.isConnected(); - Timber.d(String.format(MapboxConstants.MAPBOX_LOCALE, - "Mapbox is connected: %b", connected)); + Timber.d("Mapbox is connected: %s", connected); // Set up map mapView = (MapView) findViewById(R.id.mapView); @@ -207,7 +205,7 @@ public class OfflineActivity extends AppCompatActivity @Override public void onError(String error) { - Timber.e("Error: " + error); + Timber.e("Error: %s" , error); } }); } @@ -223,7 +221,7 @@ public class OfflineActivity extends AppCompatActivity } // Start progress bar - Timber.d("Download started: " + regionName); + Timber.d("Download started: %s", regionName); startProgress(); // Definition @@ -241,14 +239,14 @@ public class OfflineActivity extends AppCompatActivity offlineManager.createOfflineRegion(definition, metadata, new OfflineManager.CreateOfflineRegionCallback() { @Override public void onCreate(OfflineRegion offlineRegion) { - Timber.d("Offline region created: " + regionName); + Timber.d("Offline region created: %s" , regionName); OfflineActivity.this.offlineRegion = offlineRegion; launchDownload(); } @Override public void onError(String error) { - Timber.e("Error: " + error); + Timber.e("Error: %s", error); } }); } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/snapshot/MapSnapshotterActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/snapshot/MapSnapshotterActivity.java new file mode 100644 index 0000000000..6b1cb920fc --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/snapshot/MapSnapshotterActivity.java @@ -0,0 +1,131 @@ +package com.mapbox.mapboxsdk.testapp.activity.snapshot; + +import android.graphics.Bitmap; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.ViewTreeObserver; +import android.widget.GridLayout; +import android.widget.ImageView; + +import com.mapbox.mapboxsdk.camera.CameraPosition; +import com.mapbox.mapboxsdk.constants.Style; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.geometry.LatLngBounds; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.snapshotter.MapSnapshotter; +import com.mapbox.mapboxsdk.testapp.R; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import timber.log.Timber; + +/** + * Test activity showing how to use a the {@link com.mapbox.mapboxsdk.snapshotter.MapSnapshotter} + */ +public class MapSnapshotterActivity extends AppCompatActivity { + + private GridLayout grid; + private List<MapSnapshotter> snapshotters = new ArrayList<>(); + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_map_snapshotter); + + // Find the grid view and start snapshotting as soon + // as the view is measured + grid = (GridLayout) findViewById(R.id.snapshot_grid); + grid.getViewTreeObserver() + .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + //noinspection deprecation + grid.getViewTreeObserver().removeGlobalOnLayoutListener(this); + addSnapshots(); + } + }); + } + + private void addSnapshots() { + Timber.i("Creating snapshotters"); + + for (int row = 0; row < grid.getRowCount(); row++) { + for (int column = 0; column < grid.getColumnCount(); column++) { + startSnapShot(row, column); + } + } + } + + private void startSnapShot(final int row, final int column) { + + // Define the dimensions + MapSnapshotter.Options options = new MapSnapshotter.Options( + grid.getMeasuredWidth() / grid.getColumnCount(), + grid.getMeasuredHeight() / grid.getRowCount() + ) + // Optionally the pixel ratio + .withPixelRatio(1) + + // Optionally the style + .withStyle((column + row) % 2 == 0 ? Style.TRAFFIC_DAY : Style.DARK); + + // Optionally the visible region + if (row % 2 == 0) { + options.withRegion(new LatLngBounds.Builder() + .include(new LatLng(randomInRange(-80, 80), randomInRange(-160, 160))) + .include(new LatLng(randomInRange(-80, 80), randomInRange(-160, 160))) + .build() + ); + } + + // Optionally the camera options + if (column % 2 == 0) { + options.withCameraPosition(new CameraPosition.Builder() + .target(options.getRegion() != null + ? options.getRegion().getCenter() + : new LatLng(randomInRange(-80, 80), randomInRange(-160, 160))) + .bearing(randomInRange(0, 360)) + .tilt(randomInRange(0, 60)) + .zoom(randomInRange(0, 20)) + .build() + ); + } + + MapSnapshotter snapshotter = new MapSnapshotter(MapSnapshotterActivity.this, options); + + snapshotter.start(new MapboxMap.SnapshotReadyCallback() { + @Override + public void onSnapshotReady(Bitmap snapshot) { + Timber.i("Got the snapshot"); + ImageView imageView = new ImageView(MapSnapshotterActivity.this); + imageView.setImageBitmap(snapshot); + grid.addView( + imageView, + new GridLayout.LayoutParams(GridLayout.spec(row), GridLayout.spec(column)) + ); + } + }); + snapshotters.add(snapshotter); + } + + @Override + public void onPause() { + super.onPause(); + + // Make sure to stop the snapshotters on pause + for (MapSnapshotter snapshotter : snapshotters) { + snapshotter.cancel(); + } + snapshotters.clear(); + } + + private static Random random = new Random(); + + public static float randomInRange(float min, float max) { + return (random.nextFloat() * (max - min)) + min; + } + +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/AnimatedImageSourceActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/AnimatedImageSourceActivity.java new file mode 100644 index 0000000000..1beba632b0 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/AnimatedImageSourceActivity.java @@ -0,0 +1,148 @@ +package com.mapbox.mapboxsdk.testapp.activity.style; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Handler; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; + +import com.mapbox.mapboxsdk.Mapbox; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.geometry.LatLngQuad; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.style.layers.RasterLayer; +import com.mapbox.mapboxsdk.style.sources.ImageSource; + +import com.mapbox.mapboxsdk.testapp.R; + +/** + * Test activity showing how to use a series of images to create an animation + * with an ImageSource + * <p> + * GL-native equivalent of https://www.mapbox.com/mapbox-gl-js/example/animate-images/ + * </p> + */ +public class AnimatedImageSourceActivity extends AppCompatActivity implements OnMapReadyCallback { + + private static final String ID_IMAGE_SOURCE = "animated_image_source"; + private static final String ID_IMAGE_LAYER = "animated_image_layer"; + + private MapView mapView; + private MapboxMap mapboxMap; + + private Handler handler; + private Runnable runnable; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_animated_image_source); + + mapView = (MapView) findViewById(R.id.mapView); + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(this); + } + + @Override + public void onMapReady(@NonNull final MapboxMap map) { + mapboxMap = map; + + // add source + LatLngQuad quad = new LatLngQuad( + new LatLng(46.437, -80.425), + new LatLng(46.437, -71.516), + new LatLng(37.936, -71.516), + new LatLng(37.936, -80.425)); + mapboxMap.addSource(new ImageSource(ID_IMAGE_SOURCE, quad, R.drawable.southeast_radar_0)); + + // add layer + RasterLayer layer = new RasterLayer(ID_IMAGE_LAYER, ID_IMAGE_SOURCE); + mapboxMap.addLayer(layer); + + // loop refresh geojson + handler = new Handler(); + runnable = new RefreshImageRunnable(mapboxMap, handler); + handler.postDelayed(runnable, 100); + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + public void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + handler.removeCallbacks(runnable); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } + + private static class RefreshImageRunnable implements Runnable { + + private MapboxMap mapboxMap; + private Handler handler; + private Bitmap[] drawables; + private int drawableIndex; + + Bitmap getBitmap(int resourceId) { + Context context = Mapbox.getApplicationContext(); + Drawable drawable = ContextCompat.getDrawable(context, resourceId); + if (drawable instanceof BitmapDrawable) { + BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; + return bitmapDrawable.getBitmap(); + } + return null; + } + + RefreshImageRunnable(MapboxMap mapboxMap, Handler handler) { + this.mapboxMap = mapboxMap; + this.handler = handler; + drawables = new Bitmap[4]; + drawables[0] = getBitmap(R.drawable.southeast_radar_0); + drawables[1] = getBitmap(R.drawable.southeast_radar_1); + drawables[2] = getBitmap(R.drawable.southeast_radar_2); + drawables[3] = getBitmap(R.drawable.southeast_radar_3); + drawableIndex = 1; + } + + @Override + public void run() { + ((ImageSource) mapboxMap.getSource(ID_IMAGE_SOURCE)).setImage(drawables[drawableIndex++]); + if (drawableIndex > 3) { + drawableIndex = 0; + } + handler.postDelayed(this, 1000); + } + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java index 2238d1d5fe..f99a1fdb96 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/CircleLayerActivity.java @@ -74,7 +74,7 @@ public class CircleLayerActivity extends AppCompatActivity implements View.OnCli source = new GeoJsonSource("bus_stop", new URL("https://raw.githubusercontent.com/cheeaun/busrouter-sg/master/data/2/bus-stops.geojson")); } catch (MalformedURLException exception) { - Timber.e("That's not an url... ", exception); + Timber.e(exception, "That's not an url... "); } mapboxMap.addSource(source); } @@ -132,7 +132,7 @@ public class CircleLayerActivity extends AppCompatActivity implements View.OnCli new URL("https://gist.githubusercontent.com/tobrun/7fbc0fe7e9ffea509f7608cda2601d5d/raw/" + "a4b8cc289020f91fa2e1553524820054395e36f5/line.geojson"))); } catch (MalformedURLException malformedUrlException) { - Timber.e("That's not an url... ", malformedUrlException); + Timber.e(malformedUrlException, "That's not an url... "); } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java index 3a5b30f71f..571b48daa6 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/DataDrivenStyleActivity.java @@ -2,7 +2,6 @@ package com.mapbox.mapboxsdk.testapp.activity.style; import android.graphics.Color; import android.os.Bundle; -import android.support.annotation.RawRes; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; @@ -18,14 +17,9 @@ import com.mapbox.mapboxsdk.style.layers.FillLayer; import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; import com.mapbox.mapboxsdk.style.sources.Source; import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; import timber.log.Timber; @@ -355,7 +349,7 @@ public class DataDrivenStyleActivity extends AppCompatActivity { // Add a source Source source; try { - source = new GeoJsonSource("amsterdam-parks-source", readRawResource(R.raw.amsterdam)); + source = new GeoJsonSource("amsterdam-parks-source", ResourceUtils.readRawResource(this, R.raw.amsterdam)); mapboxMap.addSource(source); } catch (IOException ioException) { Toast.makeText( @@ -375,21 +369,4 @@ public class DataDrivenStyleActivity extends AppCompatActivity { ) ); } - - private String readRawResource(@RawRes int rawResource) throws IOException { - InputStream is = getResources().openRawResource(rawResource); - Writer writer = new StringWriter(); - char[] buffer = new char[1024]; - try { - Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); - int numRead; - while ((numRead = reader.read(buffer)) != -1) { - writer.write(buffer, 0, numRead); - } - } finally { - is.close(); - } - - return writer.toString(); - } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/FillExtrusionStyleTestActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/FillExtrusionStyleTestActivity.java index 1ff0b0e8e1..24914fcbb2 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/FillExtrusionStyleTestActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/FillExtrusionStyleTestActivity.java @@ -1,6 +1,5 @@ package com.mapbox.mapboxsdk.testapp.activity.style; - import android.os.Bundle; import android.support.v7.app.AppCompatActivity; @@ -9,6 +8,9 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; +/** + * Test activity used for instrumentation tests of fill extrusion. + */ public class FillExtrusionStyleTestActivity extends AppCompatActivity { public MapView mapView; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GeoJsonClusteringActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GeoJsonClusteringActivity.java index 80dfe777cb..a2111bc304 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GeoJsonClusteringActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GeoJsonClusteringActivity.java @@ -128,7 +128,7 @@ public class GeoJsonClusteringActivity extends AppCompatActivity { ) ); } catch (MalformedURLException malformedUrlException) { - Timber.e("That's not an url... " + malformedUrlException.getMessage()); + Timber.e(malformedUrlException,"That's not an url... "); } // Add unclustered layer diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RealTimeGeoJsonActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RealTimeGeoJsonActivity.java index b9f7ebce35..b9f1dfe810 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RealTimeGeoJsonActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RealTimeGeoJsonActivity.java @@ -55,7 +55,7 @@ public class RealTimeGeoJsonActivity extends AppCompatActivity implements OnMapR try { mapboxMap.addSource(new GeoJsonSource(ID_GEOJSON_SOURCE, new URL(URL_GEOJSON_SOURCE))); } catch (MalformedURLException malformedUrlException) { - Timber.e("Invalid URL", malformedUrlException); + Timber.e(malformedUrlException, "Invalid URL"); } // add layer diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java index f6754af0f9..adce889007 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/RuntimeStyleActivity.java @@ -3,7 +3,6 @@ package com.mapbox.mapboxsdk.testapp.activity.style; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; -import android.support.annotation.RawRes; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; @@ -32,16 +31,11 @@ import com.mapbox.mapboxsdk.style.sources.Source; import com.mapbox.mapboxsdk.style.sources.TileSet; import com.mapbox.mapboxsdk.style.sources.VectorSource; import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils; import com.mapbox.services.commons.geojson.Feature; import com.mapbox.services.commons.geojson.FeatureCollection; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -285,7 +279,7 @@ public class RuntimeStyleActivity extends AppCompatActivity { // Add a source Source source; try { - source = new GeoJsonSource("amsterdam-spots", readRawResource(R.raw.amsterdam)); + source = new GeoJsonSource("amsterdam-spots", ResourceUtils.readRawResource(this, R.raw.amsterdam)); } catch (IOException ioException) { Toast.makeText( RuntimeStyleActivity.this, @@ -317,12 +311,12 @@ public class RuntimeStyleActivity extends AppCompatActivity { layer = mapboxMap.getLayerAs("parksLayer"); // And get some properties PropertyValue<Boolean> fillAntialias = layer.getFillAntialias(); - Timber.d("Fill anti alias: " + fillAntialias.getValue()); + Timber.d("Fill anti alias: %s", fillAntialias.getValue()); layer.setProperties(fillTranslateAnchor(FILL_TRANSLATE_ANCHOR_MAP)); PropertyValue<String> fillTranslateAnchor = layer.getFillTranslateAnchor(); - Timber.d("Fill translate anchor: " + fillTranslateAnchor.getValue()); + Timber.d("Fill translate anchor: %s", fillTranslateAnchor.getValue()); PropertyValue<String> visibility = layer.getVisibility(); - Timber.d("Visibility: " + visibility.getValue()); + Timber.d("Visibility: %s", visibility.getValue()); // Get a good look at it all mapboxMap.animateCamera(CameraUpdateFactory.zoomTo(12)); @@ -332,7 +326,7 @@ public class RuntimeStyleActivity extends AppCompatActivity { // Load some data FeatureCollection parks; try { - String json = readRawResource(R.raw.amsterdam); + String json = ResourceUtils.readRawResource(this, R.raw.amsterdam); parks = FeatureCollection.fromJson(json); } catch (IOException ioException) { Toast.makeText( @@ -477,33 +471,16 @@ public class RuntimeStyleActivity extends AppCompatActivity { Function<Float, String> function = (Function<Float, String>) fillColor.getFunction(); if (function != null) { ExponentialStops<Float, String> stops = (ExponentialStops) function.getStops(); - Timber.d("Fill color base: " + stops.getBase()); - Timber.d("Fill color #stops: " + stops.size()); + Timber.d("Fill color base: %s", stops.getBase()); + Timber.d("Fill color #stops: %s", stops.size()); if (function.getStops() != null) { for (Stop<Float, String> stop : stops) { - Timber.d("Fill color #stops: " + stop); + Timber.d("Fill color #stops: %s", stop); } } } } - private String readRawResource(@RawRes int rawResource) throws IOException { - InputStream is = getResources().openRawResource(rawResource); - Writer writer = new StringWriter(); - char[] buffer = new char[1024]; - try { - Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); - int numRead; - while ((numRead = reader.read(buffer)) != -1) { - writer.write(buffer, 0, numRead); - } - } finally { - is.close(); - } - - return writer.toString(); - } - private void addCustomTileSource() { // Add a source Source source = new VectorSource("custom-tile-source", new TileSet("2.1.0", "https://vector.mapzen.com/osm/all/{z}/{x}/{y}.mvt?api_key=vector-tiles-LM25tq4")); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/StyleFileActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/StyleFileActivity.java index 6906e90f6e..49015ec1e9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/StyleFileActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/StyleFileActivity.java @@ -1,9 +1,9 @@ package com.mapbox.mapboxsdk.testapp.activity.style; +import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.annotation.RawRes; import android.support.design.widget.FloatingActionButton; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; @@ -14,22 +14,18 @@ import com.mapbox.mapboxsdk.maps.MapView; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils; -import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringWriter; -import java.io.Writer; +import java.lang.ref.WeakReference; import timber.log.Timber; /** - * Test activity showcasing how to use a file:// resource for the style.json + * Test activity showcasing how to use a file:// resource for the style.json and how to use MapboxMap#setStyleJson. */ public class StyleFileActivity extends AppCompatActivity { @@ -48,13 +44,21 @@ public class StyleFileActivity extends AppCompatActivity { public void onMapReady(@NonNull final MapboxMap map) { mapboxMap = map; - FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab_file); fab.setColorFilter(ContextCompat.getColor(StyleFileActivity.this, R.color.primary)); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Timber.i("Loading style file"); - new CreateStyleFileTask().execute(); + new CreateStyleFileTask(view.getContext(), mapboxMap).execute(); + } + }); + + FloatingActionButton fabStyleJson = (FloatingActionButton) findViewById(R.id.fab_style_json); + fabStyleJson.setColorFilter(ContextCompat.getColor(StyleFileActivity.this, R.color.primary)); + fabStyleJson.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new LoadStyleFileTask(view.getContext(), mapboxMap).execute(); } }); } @@ -62,44 +66,74 @@ public class StyleFileActivity extends AppCompatActivity { } /** + * Task to read a style file from the raw folder + */ + private static class LoadStyleFileTask extends AsyncTask<Void, Void, String> { + private WeakReference<Context> context; + private WeakReference<MapboxMap> mapboxMap; + + LoadStyleFileTask(Context context, MapboxMap mapboxMap) { + this.context = new WeakReference<>(context); + this.mapboxMap = new WeakReference<>(mapboxMap); + } + + @Override + protected String doInBackground(Void... voids) { + String styleJson = ""; + try { + styleJson = ResourceUtils.readRawResource(context.get(), R.raw.sat_style); + } catch (Exception exception) { + Timber.e(exception, "Can't load local file style"); + } + return styleJson; + } + + @Override + protected void onPostExecute(String json) { + super.onPostExecute(json); + Timber.d("Read json, %s", json); + MapboxMap mapboxMap = this.mapboxMap.get(); + if (mapboxMap != null) { + mapboxMap.setStyleJson(json); + } + } + } + + /** * Task to write a style file to local disk and load it in the map view */ - private class CreateStyleFileTask extends AsyncTask<Void, Integer, Long> { + private static class CreateStyleFileTask extends AsyncTask<Void, Integer, Long> { private File cacheStyleFile; + private WeakReference<Context> context; + private WeakReference<MapboxMap> mapboxMap; + + CreateStyleFileTask(Context context, MapboxMap mapboxMap) { + this.context = new WeakReference<>(context); + this.mapboxMap = new WeakReference<>(mapboxMap); + } @Override protected Long doInBackground(Void... params) { try { cacheStyleFile = File.createTempFile("my-", ".style.json"); cacheStyleFile.createNewFile(); - Timber.i("Writing style file to: " + cacheStyleFile.getAbsolutePath()); - writeToFile(cacheStyleFile, readRawResource(R.raw.local_style)); + Timber.i("Writing style file to: %s", cacheStyleFile.getAbsolutePath()); + Context context = this.context.get(); + if (context != null) { + writeToFile(cacheStyleFile, ResourceUtils.readRawResource(context, R.raw.local_style)); + } } catch (Exception exception) { - Toast.makeText(StyleFileActivity.this, "Could not create style file in cache dir", Toast.LENGTH_SHORT).show(); + Toast.makeText(context.get(), "Could not create style file in cache dir", Toast.LENGTH_SHORT).show(); } return 1L; } protected void onPostExecute(Long result) { // Actual file:// usage - mapboxMap.setStyleUrl("file://" + cacheStyleFile.getAbsolutePath()); - } - - private String readRawResource(@RawRes int rawResource) throws IOException { - InputStream is = getResources().openRawResource(rawResource); - Writer writer = new StringWriter(); - char[] buffer = new char[1024]; - try { - Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); - int numRead; - while ((numRead = reader.read(buffer)) != -1) { - writer.write(buffer, 0, numRead); - } - } finally { - is.close(); + MapboxMap mapboxMap = this.mapboxMap.get(); + if (mapboxMap != null) { + mapboxMap.setStyleUrl("file://" + cacheStyleFile.getAbsolutePath()); } - - return writer.toString(); } private void writeToFile(File file, String contents) throws IOException { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java new file mode 100644 index 0000000000..0eaccfef0c --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java @@ -0,0 +1,216 @@ +package com.mapbox.mapboxsdk.testapp.activity.style; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.support.v7.app.AppCompatActivity; +import android.graphics.Color; +import android.graphics.PointF; +import android.os.Bundle; +import android.support.annotation.NonNull; + +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.gson.GsonBuilder; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.style.layers.SymbolLayer; +import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; +import com.mapbox.mapboxsdk.style.sources.Source; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils; +import com.mapbox.services.commons.geojson.Feature; +import com.mapbox.services.commons.geojson.FeatureCollection; +import com.mapbox.services.commons.geojson.Geometry; +import com.mapbox.services.commons.geojson.custom.GeometryDeserializer; +import com.mapbox.services.commons.geojson.custom.PositionDeserializer; +import com.mapbox.services.commons.models.Position; + +import java.io.IOException; + +import java.util.List; + +import timber.log.Timber; + +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAllowOverlap; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconImage; + +/** + * Test activity showcasing using a symbol generator that generates Bitmaps from Android SDK Views. + */ +public class SymbolGeneratorActivity extends AppCompatActivity implements OnMapReadyCallback { + + private static final String SOURCE_ID = "com.mapbox.mapboxsdk.style.layers.symbol.source.id"; + private static final String LAYER_ID = "com.mapbox.mapboxsdk.style.layers.symbol.layer.id"; + private static final String FEATURE_ID = "brk_name"; + private static final String FEATURE_VALUE = "name_sort"; + + private MapView mapView; + private MapboxMap mapboxMap; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_symbol_generator); + + mapView = (MapView) findViewById(R.id.mapView); + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(this); + } + + @Override + public void onMapReady(MapboxMap map) { + mapboxMap = map; + try { + // read local geojson from raw folder + String tinyCountriesJson = ResourceUtils.readRawResource(this, R.raw.tiny_countries); + + // convert geojson to a model + FeatureCollection featureCollection = new GsonBuilder() + .registerTypeAdapter(Geometry.class, new GeometryDeserializer()) + .registerTypeAdapter(Position.class, new PositionDeserializer()) + .create().fromJson(tinyCountriesJson, FeatureCollection.class); + + // add a geojson to the map + Source source = new GeoJsonSource(SOURCE_ID, featureCollection); + mapboxMap.addSource(source); + + // for each feature add a symbolLayer + for (Feature feature : featureCollection.getFeatures()) { + String countryName = feature.getStringProperty(FEATURE_ID); + + // create View + TextView textView = new TextView(this); + textView.setBackgroundColor(getResources().getColor(R.color.blueAccent)); + textView.setPadding(10, 5, 10, 5); + textView.setTextColor(Color.WHITE); + textView.setText(countryName); + + // create bitmap from view + mapboxMap.addImage(countryName, SymbolGenerator.generate(textView)); + } + + // create layer use + mapboxMap.addLayer(new SymbolLayer(LAYER_ID, SOURCE_ID) + .withProperties( + iconImage("{" + FEATURE_ID + "}"), // { } is a token notation + iconAllowOverlap(false) + ) + ); + + addSymbolClickListener(); + } catch (IOException exception) { + Timber.e(exception); + } + } + + private void addSymbolClickListener() { + mapboxMap.setOnMapClickListener(new MapboxMap.OnMapClickListener() { + @Override + public void onMapClick(@NonNull LatLng point) { + PointF screenPoint = mapboxMap.getProjection().toScreenLocation(point); + List<Feature> features = mapboxMap.queryRenderedFeatures(screenPoint, LAYER_ID); + if (!features.isEmpty()) { + Feature feature = features.get(0); + Timber.v("Feature was clicked with data: %s", feature.toJson()); + Toast.makeText( + SymbolGeneratorActivity.this, + "hello from: " + feature.getStringProperty(FEATURE_VALUE), + Toast.LENGTH_LONG).show(); + } + } + }); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_generator_symbol, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.menu_action_icon_overlap) { + SymbolLayer layer = mapboxMap.getLayerAs(LAYER_ID); + layer.setProperties(iconAllowOverlap(!layer.getIconAllowOverlap().getValue())); + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } + + /** + * Utility class to generate Bitmaps for Symbol. + * <p> + * Bitmaps can be added to the map with {@link com.mapbox.mapboxsdk.maps.MapboxMap#addImage(String, Bitmap)} + * </p> + */ + private static class SymbolGenerator { + + /** + * Generate a Bitmap from an Android SDK View. + * + * @param view the View to be drawn to a Bitmap + * @return the generated bitmap + */ + public static Bitmap generate(@NonNull View view) { + int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + view.measure(measureSpec, measureSpec); + + int measuredWidth = view.getMeasuredWidth(); + int measuredHeight = view.getMeasuredHeight(); + + view.layout(0, 0, measuredWidth, measuredHeight); + Bitmap bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888); + bitmap.eraseColor(Color.TRANSPARENT); + Canvas canvas = new Canvas(bitmap); + view.draw(canvas); + return bitmap; + } + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/ZoomFunctionSymbolLayerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/ZoomFunctionSymbolLayerActivity.java new file mode 100644 index 0000000000..cd741a85b6 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/ZoomFunctionSymbolLayerActivity.java @@ -0,0 +1,171 @@ +package com.mapbox.mapboxsdk.testapp.activity.style; + +import android.graphics.PointF; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v7.app.AppCompatActivity; + +import com.google.gson.JsonObject; +import com.mapbox.mapboxsdk.geometry.LatLng; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.style.layers.SymbolLayer; +import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.services.commons.geojson.Feature; +import com.mapbox.services.commons.geojson.FeatureCollection; +import com.mapbox.services.commons.geojson.Point; +import com.mapbox.services.commons.models.Position; + +import java.util.List; + +import timber.log.Timber; + +import static com.mapbox.mapboxsdk.style.functions.Function.property; +import static com.mapbox.mapboxsdk.style.functions.Function.zoom; +import static com.mapbox.mapboxsdk.style.functions.stops.Stop.stop; +import static com.mapbox.mapboxsdk.style.functions.stops.Stops.categorical; +import static com.mapbox.mapboxsdk.style.functions.stops.Stops.interval; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAllowOverlap; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconImage; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconSize; + +/** + * Test activity showcasing changing the icon with a zoom function and adding selection state to a SymbolLayer. + */ +public class ZoomFunctionSymbolLayerActivity extends AppCompatActivity { + + private static final String LAYER_ID = "symbolLayer"; + private static final String SOURCE_ID = "poiSource"; + private static final String BUS_MAKI_ICON_ID = "bus-11"; + private static final String CAFE_MAKI_ICON_ID = "cafe-11"; + private static final String KEY_PROPERTY_SELECTED = "selected"; + private static final float ZOOM_STOP_MIN_VALUE = 7.0f; + private static final float ZOOM_STOP_MAX_VALUE = 12.0f; + + private MapView mapView; + private MapboxMap mapboxMap; + private GeoJsonSource source; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_zoom_symbol_layer); + + mapView = (MapView) findViewById(R.id.mapView); + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(new OnMapReadyCallback() { + @Override + public void onMapReady(@NonNull final MapboxMap map) { + mapboxMap = map; + updateSource(false); + addLayer(); + addMapClickListener(); + } + }); + } + + private void updateSource(boolean selected) { + FeatureCollection featureCollection = createFeatureCollection(selected); + if (source != null) { + source.setGeoJson(featureCollection); + } else { + source = new GeoJsonSource(SOURCE_ID, featureCollection); + mapboxMap.addSource(source); + } + } + + private FeatureCollection createFeatureCollection(boolean selected) { + Point point = Point.fromCoordinates(Position.fromCoordinates(-74.016181, 40.701745)); + Feature feature = Feature.fromGeometry(point); + JsonObject properties = new JsonObject(); + properties.addProperty(KEY_PROPERTY_SELECTED, selected); + feature.setProperties(properties); + return FeatureCollection.fromFeatures(new Feature[] {feature}); + } + + private void addLayer() { + SymbolLayer layer = new SymbolLayer(LAYER_ID, SOURCE_ID); + layer.setProperties( + iconImage( + zoom( + interval( + stop(ZOOM_STOP_MIN_VALUE, iconImage(BUS_MAKI_ICON_ID)), + stop(ZOOM_STOP_MAX_VALUE, iconImage(CAFE_MAKI_ICON_ID)) + ) + ) + ), + iconSize( + property( + KEY_PROPERTY_SELECTED, + categorical( + stop(true, iconSize(3.0f)), + stop(false, iconSize(1.0f)) + ) + ) + ), + iconAllowOverlap(true) + ); + mapboxMap.addLayer(layer); + } + + private void addMapClickListener() { + mapboxMap.setOnMapClickListener(new MapboxMap.OnMapClickListener() { + @Override + public void onMapClick(@NonNull LatLng point) { + PointF screenPoint = mapboxMap.getProjection().toScreenLocation(point); + List<Feature> featureList = mapboxMap.queryRenderedFeatures(screenPoint, LAYER_ID); + if (!featureList.isEmpty()) { + Feature feature = featureList.get(0); + boolean isSelected = feature.getBooleanProperty(KEY_PROPERTY_SELECTED); + updateSource(!isSelected); + } else { + Timber.e("No features found"); + } + } + }); + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } +}
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java index f41e5e38f0..71b8115d2e 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/BaseLocationActivity.java @@ -14,6 +14,9 @@ import com.mapbox.services.android.telemetry.permissions.PermissionsManager; import java.util.List; +/** + * Base class for location aware activities. + */ public abstract class BaseLocationActivity extends AppCompatActivity implements PermissionsListener { private PermissionsManager permissionsManager; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java index b0ea9c608b..e954b73f8d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/CustomLocationEngineActivity.java @@ -12,6 +12,9 @@ import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; import com.mapbox.mapboxsdk.testapp.R; +/** + * Test activity showcasing using a custom location engine. + */ public class CustomLocationEngineActivity extends BaseLocationActivity { private MapView mapView; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java index 69e6d64325..9f6f2b2fcd 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationDrawableActivity.java @@ -50,7 +50,7 @@ public class MyLocationDrawableActivity extends BaseLocationActivity implements mapView = new MapView(this, mapboxMapOptions); mapView.setId(R.id.mapView); - ViewGroup parent = (ViewGroup) findViewById(R.id.container); + ViewGroup parent = (ViewGroup) findViewById(android.R.id.content); parent.addView(mapView); mapView.onCreate(savedInstanceState); diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java index d465d676f7..718c10c7cb 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/userlocation/MyLocationToggleActivity.java @@ -11,6 +11,9 @@ import com.mapbox.mapboxsdk.testapp.R; import timber.log.Timber; +/** + * Test activity showcasing toggling the user location on the map. + */ public class MyLocationToggleActivity extends BaseLocationActivity { private MapView mapView; diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/constants/AppConstant.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/constants/AppConstant.java deleted file mode 100644 index aaef7f8a51..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/constants/AppConstant.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.mapbox.mapboxsdk.testapp.model.constants; - -public class AppConstant { - - public static final int STYLE_VERSION = 9; -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/customlayer/ExampleCustomLayer.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/customlayer/ExampleCustomLayer.java index 8c049d7730..aaad2f04ab 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/customlayer/ExampleCustomLayer.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/customlayer/ExampleCustomLayer.java @@ -11,5 +11,6 @@ public class ExampleCustomLayer { public static long InitializeFunction; public static long RenderFunction; + public static long ContextLostFunction; public static long DeinitializeFunction; } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/other/OfflineListRegionsDialog.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/other/OfflineListRegionsDialog.java index f717daeada..76f07ba526 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/other/OfflineListRegionsDialog.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/model/other/OfflineListRegionsDialog.java @@ -32,7 +32,7 @@ public class OfflineListRegionsDialog extends DialogFragment { .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Timber.d("Selected item: " + which); + Timber.d("Selected item: %s", which); } }) .setPositiveButton("Accept", new DialogInterface.OnClickListener() { diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/OfflineUtils.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/OfflineUtils.java index 8c6ab3e211..6220dc7e69 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/OfflineUtils.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/OfflineUtils.java @@ -29,7 +29,7 @@ public class OfflineUtils { String json = jsonObject.toString(); metadata = json.getBytes(JSON_CHARSET); } catch (Exception exception) { - Timber.e("Failed to encode metadata: " + exception.getMessage()); + Timber.e(exception, "Failed to encode metadata: "); } return metadata; } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/ResourceUtils.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/ResourceUtils.java new file mode 100644 index 0000000000..f0cca57e10 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/ResourceUtils.java @@ -0,0 +1,36 @@ +package com.mapbox.mapboxsdk.testapp.utils; + +import android.content.Context; +import android.support.annotation.RawRes; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; + +public class ResourceUtils { + + public static String readRawResource(Context context, @RawRes int rawResource) throws IOException { + String json = ""; + if (context != null) { + InputStream is = context.getResources().openRawResource(rawResource); + Writer writer = new StringWriter(); + char[] buffer = new char[1024]; + try { + Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); + int numRead; + while ((numRead = reader.read(buffer)) != -1) { + writer.write(buffer, 0, numRead); + } + } finally { + is.close(); + } + json = writer.toString(); + } + return json; + } +} + diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/TimingLogger.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/TimingLogger.java index 6f20d6fb0f..235fd8233b 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/TimingLogger.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/TimingLogger.java @@ -146,15 +146,15 @@ public class TimingLogger { if (disabled) { return; } - Timber.d(label + ": begin"); + Timber.d("%s: begin", label); final long first = splits.get(0); long now = first; for (int i = 1; i < splits.size(); i++) { now = splits.get(i); final String splitLabel = splitLabels.get(i); final long prev = splits.get(i - 1); - Timber.d(label + ": " + (now - prev) + " ms, " + splitLabel); + Timber.d("%s: %s ms, %s", label, (now - prev), splitLabel); } - Timber.d(label + ": end, " + (now - first) + " ms"); + Timber.d("%s: end, %s ms", label, (now - first)); } } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/TokenUtils.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/TokenUtils.java new file mode 100644 index 0000000000..e08fdb9154 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/utils/TokenUtils.java @@ -0,0 +1,37 @@ +package com.mapbox.mapboxsdk.testapp.utils; + + +import android.content.Context; +import android.support.annotation.NonNull; + +import com.mapbox.mapboxsdk.Mapbox; + +public class TokenUtils { + + /** + * <p> + * Returns the Mapbox access token set in the app resources. + * </p> + * It will first search for a token in the Mapbox object. If not found it + * will then attempt to load the access token from the + * {@code res/values/dev.xml} development file. + * + * @param context The {@link Context} of the {@link android.app.Activity} or {@link android.app.Fragment}. + * @return The Mapbox access token or null if not found. + */ + public static String getMapboxAccessToken(@NonNull Context context) { + try { + // Read out AndroidManifest + String token = Mapbox.getAccessToken(); + if (token == null || token.isEmpty()) { + throw new IllegalArgumentException(); + } + return token; + } catch (Exception exception) { + // Use fallback on string resource, used for development + int tokenResId = context.getResources() + .getIdentifier("mapbox_access_token", "string", context.getPackageName()); + return tokenResId != 0 ? context.getString(tokenResId) : null; + } + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/LockableBottomSheetBehavior.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/LockableBottomSheetBehavior.java new file mode 100644 index 0000000000..a69fb48ab4 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/LockableBottomSheetBehavior.java @@ -0,0 +1,74 @@ +package com.mapbox.mapboxsdk.testapp.view; + +import android.content.Context; +import android.support.design.widget.BottomSheetBehavior; +import android.support.design.widget.CoordinatorLayout; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +public class LockableBottomSheetBehavior<V extends View> extends BottomSheetBehavior<V> { + + private boolean locked = false; + + public LockableBottomSheetBehavior(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setLocked(boolean locked) { + this.locked = locked; + } + + @Override + public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { + boolean handled = false; + if (!locked) { + handled = super.onInterceptTouchEvent(parent, child, event); + } + return handled; + } + + @Override + public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) { + boolean handled = false; + if (!locked) { + handled = super.onTouchEvent(parent, child, event); + } + return handled; + } + + @Override + public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, V child, View directTargetChild, View target, + int nestedScrollAxes) { + boolean handled = false; + if (!locked) { + handled = super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); + } + return handled; + } + + @Override + public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target, int dx, int dy, + int[] consumed) { + if (!locked) { + super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed); + } + } + + @Override + public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target) { + if (!locked) { + super.onStopNestedScroll(coordinatorLayout, child, target); + } + } + + @Override + public boolean onNestedPreFling(CoordinatorLayout coordinatorLayout, V child, View target, float velocityX, + float velocityY) { + boolean handled = false; + if (!locked) { + handled = super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY); + } + return handled; + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/MapViewPager.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/MapViewPager.java new file mode 100644 index 0000000000..92c28d7ed4 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/view/MapViewPager.java @@ -0,0 +1,20 @@ +package com.mapbox.mapboxsdk.testapp.view; + +import android.content.Context; +import android.support.v4.view.PagerTabStrip; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.SurfaceView; +import android.view.View; + +public class MapViewPager extends ViewPager { + + public MapViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { + return v instanceof SurfaceView || v instanceof PagerTabStrip || (super.canScroll(v, checkV, dx, x, y)); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_0.png b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_0.png Binary files differnew file mode 100644 index 0000000000..c304b619c4 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_0.png diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_1.png b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_1.png Binary files differnew file mode 100644 index 0000000000..ed09fffbe1 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_1.png diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_2.png b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_2.png Binary files differnew file mode 100644 index 0000000000..fee630f863 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_2.png diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_3.png b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_3.png Binary files differnew file mode 100644 index 0000000000..c4c7146afa --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/southeast_radar_3.png diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_add_white.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_add_white.xml new file mode 100644 index 0000000000..cd5c045783 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_add_white.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportHeight="24.0" + android:viewportWidth="24.0"> + <path + android:fillColor="#FFFFFF" + android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z" /> +</vector> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_arrow_downward.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_arrow_downward.xml new file mode 100644 index 0000000000..ded53fc4f2 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_arrow_downward.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M20,12l-1.41,-1.41L13,16.17V4h-2v12.17l-5.58,-5.59L4,12l8,8 8,-8z" + android:fillColor="#F1F1F1"/> +</vector> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_circle.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_circle.xml deleted file mode 100644 index 3217661b64..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_circle.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<shape - xmlns:android="http://schemas.android.com/apk/res/android" - android:shape="oval"> - - <solid - android:color="@color/mapbox_blue"/> - - <size - android:width="@dimen/circle_size" - android:height="@dimen/circle_size"/> -</shape> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_play_arrow_black_24dp.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_play_arrow_black_24dp.xml new file mode 100644 index 0000000000..bf9b895aca --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/ic_play_arrow_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FF000000" + android:pathData="M8,5v14l11,-7z"/> +</vector> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/marker.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/marker.xml deleted file mode 100644 index 71992ebd7f..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/drawable/marker.xml +++ /dev/null @@ -1,4 +0,0 @@ -<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> - <size android:width="10px" android:height="10px"/> - <solid android:color="@color/redAccent"/> -</shape>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_animated_image_source.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_animated_image_source.xml new file mode 100644 index 0000000000..26b40b9ab6 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_animated_image_source.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <com.mapbox.mapboxsdk.maps.MapView + android:id="@id/mapView" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:mapbox_cameraTargetLat="41.9567" + app:mapbox_cameraTargetLng="-78.6430" + app:mapbox_cameraZoom="5" + app:mapbox_styleUrl="@string/mapbox_style_mapbox_streets"/> + +</RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_bottom_sheet.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_bottom_sheet.xml new file mode 100644 index 0000000000..cbb440d926 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_bottom_sheet.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.design.widget.CoordinatorLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/coordinator_layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true" + android:orientation="vertical"> + + <FrameLayout + android:id="@+id/fragment_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"/> + + <android.support.v4.widget.NestedScrollView + android:id="@+id/bottom_sheet" + android:layout_width="match_parent" + android:layout_height="250dp" + android:background="@color/primaryDark" + app:behavior_hideable="true" + app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <TextView + android:layout_width="match_parent" + android:layout_height="64dp" + android:layout_gravity="center" + android:gravity="center" + android:textColor="@color/white" + android:text="^" + android:textSize="22sp" + tools:ignore="HardcodedText"/> + + <FrameLayout + android:id="@+id/fragment_container_bottom" + android:layout_width="match_parent" + android:layout_height="186dp"/> + + </LinearLayout> + + </android.support.v4.widget.NestedScrollView> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/fabBottomSheet" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="@dimen/fab_margin" + app:backgroundTint="@color/primary" + android:src="@drawable/ic_refresh" + app:layout_anchor="@id/bottom_sheet" + app:layout_anchorGravity="top|end"/> + + <FrameLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|end" + android:clipToPadding="false" + android:paddingBottom="8dp" + app:layout_anchor="@id/fabBottomSheet" + app:layout_anchorGravity="top"> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/fabFragment" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_add_white" + app:backgroundTint="@color/accent"/> + </FrameLayout> +</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_building_layer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_building_layer.xml index fa37c485d7..c8752df1bf 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_building_layer.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_building_layer.xml @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" - android:layout_height="match_parent"> +<merge xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> <com.mapbox.mapboxsdk.maps.MapView android:id="@id/mapView" @@ -20,8 +18,8 @@ android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_marginBottom="82dp" - android:layout_marginRight="@dimen/fab_margin" android:layout_marginEnd="@dimen/fab_margin" + android:layout_marginRight="@dimen/fab_margin" android:src="@drawable/ic_my_location" app:backgroundTint="@color/accent" app:layout_anchorGravity="top"/> @@ -35,4 +33,4 @@ android:src="@drawable/ic_paint" app:backgroundTint="@color/primary"/> -</FrameLayout> +</merge> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_camera_animation_types.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_camera_animation_types.xml index b70bb6d7b2..0cb065a676 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_camera_animation_types.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_camera_animation_types.xml @@ -15,7 +15,9 @@ app:mapbox_cameraZoom="15"/> <LinearLayout + style="?android:attr/buttonBarStyle" android:layout_width="match_parent" + android:background="@color/primary" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal" @@ -23,6 +25,7 @@ <Button android:id="@+id/cameraMoveButton" + style="?android:attr/buttonBarButtonStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" @@ -30,6 +33,7 @@ <Button android:id="@+id/cameraEaseButton" + style="?android:attr/buttonBarButtonStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" @@ -37,6 +41,7 @@ <Button android:id="@+id/cameraAnimateButton" + style="?android:attr/buttonBarButtonStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_camera_animator.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_camera_animator.xml new file mode 100644 index 0000000000..d4933bfb9a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_camera_animator.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.design.widget.CoordinatorLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/coordinator_layout" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <com.mapbox.mapboxsdk.maps.MapView + android:id="@id/mapView" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:mapbox_cameraTargetLat="37.774913" + app:mapbox_cameraTargetLng="-122.419368" + app:mapbox_cameraZoom="11" + app:mapbox_styleUrl="@string/mapbox_style_mapbox_streets"/> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|bottom" + android:layout_margin="@dimen/fab_margin" + android:src="@drawable/ic_play_arrow_black_24dp" + app:backgroundTint="@android:color/white"/> + +</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_circle_layer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_circle_layer.xml index 6e8a4e5eb2..5ac55e75e2 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_circle_layer.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_circle_layer.xml @@ -23,6 +23,7 @@ android:layout_alignParentRight="true" android:layout_marginBottom="@dimen/fab_margin" android:layout_marginRight="@dimen/fab_margin" + android:layout_marginEnd="@dimen/fab_margin" android:src="@drawable/ic_directions_bus_black" app:backgroundTint="@android:color/white"/> @@ -36,6 +37,7 @@ android:layout_marginBottom="@dimen/fab_margin" android:layout_marginRight="@dimen/fab_margin" android:src="@drawable/ic_layers" + android:layout_marginEnd="@dimen/fab_margin" app:backgroundTint="@color/primary"/> </RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_debug_mode.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_debug_mode.xml index 6db8b073d9..c6f3c0e3f2 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_debug_mode.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_debug_mode.xml @@ -1,46 +1,97 @@ <?xml version="1.0" encoding="utf-8"?> -<android.support.design.widget.CoordinatorLayout +<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - android:id="@+id/coordinator_layout" + android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:clickable="true" + android:focusable="true" + android:focusableInTouchMode="true"> - <com.mapbox.mapboxsdk.maps.MapView - android:id="@+id/mapView" + <android.support.design.widget.CoordinatorLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/coordinator_layout" android:layout_width="match_parent" android:layout_height="match_parent" - app:mapbox_uiAttribution="false" - app:mapbox_uiCompass="false" - app:mapbox_uiLogo="false"/> + android:orientation="vertical"> - <TextView - android:id="@+id/textZoom" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="bottom|start" - android:layout_margin="8dp" - android:textSize="14sp"/> + <com.mapbox.mapboxsdk.maps.MapView + android:id="@+id/mapView" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:mapbox_uiAttribution="false" + app:mapbox_uiCompass="false" + app:mapbox_uiLogo="false"/> - <android.support.design.widget.FloatingActionButton - android:id="@+id/fabDebug" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end|bottom" - android:layout_marginBottom="82dp" - android:layout_marginRight="@dimen/fab_margin" - android:src="@drawable/ic_refresh" - app:backgroundTint="@color/accent" - app:layout_anchorGravity="top"/> - - <android.support.design.widget.FloatingActionButton - android:id="@+id/fabStyles" + <TextView + android:id="@+id/textZoom" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom|start" + android:layout_margin="8dp" + android:textIsSelectable="true" + android:textSize="14sp" + app:layout_anchor="@id/bottom_sheet" + app:layout_anchorGravity="bottom|start"/> + + <TextView + android:id="@+id/fpsView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|end" + android:layout_margin="8dp" + android:textIsSelectable="true" + android:textSize="14sp" + app:layout_anchor="@id/textZoom" + app:layout_anchorGravity="top"/> + + <android.support.v4.widget.NestedScrollView + android:id="@+id/bottom_sheet" + android:layout_width="match_parent" + android:layout_height="250dp" + android:background="@color/white" + android:visibility="invisible" + app:behavior_hideable="true" + app:layout_behavior="android.support.design.widget.BottomSheetBehavior"/> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/fabDebug" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="top|end" + android:layout_marginBottom="82dp" + android:layout_marginEnd="@dimen/fab_margin" + android:layout_marginRight="@dimen/fab_margin" + android:src="@drawable/ic_refresh" + app:backgroundTint="@color/accent" + app:layout_anchor="@+id/fabStyles" + app:layout_anchorGravity="top"/> + + <android.support.design.widget.FloatingActionButton + android:id="@id/fabStyles" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|bottom" + android:layout_margin="@dimen/fab_margin" + android:src="@drawable/ic_layers" + app:backgroundTint="@color/primary" + app:layout_anchor="@id/bottom_sheet" + app:layout_anchorGravity="bottom|end"/> + + </android.support.design.widget.CoordinatorLayout> + + <android.support.design.widget.NavigationView android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end|bottom" - android:layout_margin="@dimen/fab_margin" - android:src="@drawable/ic_layers" - app:backgroundTint="@color/primary"/> + android:layout_height="match_parent" + android:layout_gravity="start" + android:background="@android:color/white"> + + <ListView + android:id="@+id/listView" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + + </android.support.design.widget.NavigationView> -</android.support.design.widget.CoordinatorLayout> +</android.support.v4.widget.DrawerLayout>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_latlngbounds.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_latlngbounds.xml new file mode 100644 index 0000000000..e565c3c9d1 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_latlngbounds.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.design.widget.CoordinatorLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/coordinator_layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true" + android:orientation="vertical"> + + <com.mapbox.mapboxsdk.maps.MapView + android:id="@id/mapView" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"/> + + <android.support.v4.widget.NestedScrollView + android:id="@+id/bottom_sheet" + android:layout_width="match_parent" + android:layout_height="375dp" + android:background="@color/primaryDark" + app:behavior_hideable="true" + app:behavior_skipCollapsed="false" + app:layout_behavior="com.mapbox.mapboxsdk.testapp.view.LockableBottomSheetBehavior"/> + + <android.support.design.widget.FloatingActionButton + android:id="@+id/fab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="@dimen/fab_margin" + android:src="@drawable/ic_arrow_downward" + app:backgroundTint="@color/primary" + app:layout_anchor="@id/bottom_sheet" + app:layout_anchorGravity="top|end"/> + +</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_fragment.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_fragment.xml index 43fa8fb995..419660b36a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_fragment.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_fragment.xml @@ -1,17 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/fragment_container" android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical" - tools:context=".activity.fragment.MapFragmentActivity"> - - <FrameLayout - android:id="@+id/fragment_container" - android:layout_width="match_parent" - android:layout_height="match_parent"/> - -</LinearLayout> + android:layout_height="match_parent"/> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_in_dialog.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_in_dialog.xml index 3fd66977e2..0a12fd9e50 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_in_dialog.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_in_dialog.xml @@ -1,8 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<FrameLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent"> +<merge xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:id="@+id/button_open_dialog" @@ -11,4 +8,4 @@ android:layout_gravity="center" android:text="@string/button_open_dialog"/> -</FrameLayout> +</merge> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_padding.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_padding.xml index a0de31ee48..cd4aa4bdef 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_padding.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_padding.xml @@ -1,19 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> +<merge xmlns:android="http://schemas.android.com/apk/res/android"> <com.mapbox.mapboxsdk.maps.MapView android:id="@id/mapView" android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent"/> <View android:layout_width="@dimen/map_padding_left" android:layout_height="match_parent" android:alpha="0.5" - android:background="@color/mapbox_blue" /> + android:background="@color/mapbox_blue"/> <View android:layout_width="match_parent" @@ -24,13 +21,13 @@ android:layout_marginRight="@dimen/map_padding_right" android:layout_marginStart="@dimen/map_padding_left" android:alpha="0.5" - android:background="@color/mapbox_blue" /> + android:background="@color/mapbox_blue"/> <View android:layout_width="@dimen/map_padding_right" android:layout_height="match_parent" android:layout_gravity="end" android:alpha="0.5" - android:background="@color/mapbox_blue" /> + android:background="@color/mapbox_blue"/> -</FrameLayout> +</merge> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_snapshotter.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_snapshotter.xml new file mode 100644 index 0000000000..30ad494dca --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_snapshotter.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <GridLayout + android:id="@+id/snapshot_grid" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:columnCount="3" + android:orientation="horizontal" + android:rowCount="3"/> + +</RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_add_remove_marker.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_visibility.xml index 6da5a61ecb..c33034181c 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_add_remove_marker.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_map_visibility.xml @@ -1,13 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/viewParent" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + tools:context=".activity.maplayout.SimpleMapActivity"> <com.mapbox.mapboxsdk.maps.MapView - android:id="@+id/mapView" + android:id="@id/mapView" android:layout_width="match_parent" - android:layout_height="match_parent"/> + android:layout_height="match_parent" + android:visibility="invisible"/> </LinearLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_bulk.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_bulk.xml index ff28d2edf0..52691a26fe 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_bulk.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_bulk.xml @@ -17,6 +17,7 @@ <TextView android:id="@+id/countView" + android:textIsSelectable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/toolbar" diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view.xml index cf4b51bbe0..dae3a1d9b7 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_marker_view.xml @@ -10,16 +10,18 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/toolbar" + android:textIsSelectable="false" app:mapbox_cameraTargetLat="38.907192" app:mapbox_cameraTargetLng="-77.036871" - app:mapbox_styleUrl="@string/mapbox_style_mapbox_streets" - app:mapbox_cameraZoom="12" /> + app:mapbox_cameraZoom="12" + app:mapbox_styleUrl="@string/mapbox_style_mapbox_streets"/> <TextView android:id="@+id/countView" + android:textIsSelectable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="16dp" - android:textSize="20sp" /> + android:textSize="20sp"/> </RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_metadata_update.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_metadata_update.xml index 084675fb2c..1eb999caf5 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_metadata_update.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_metadata_update.xml @@ -15,7 +15,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - android:text="No Results" + android:text="@string/no_results" android:textSize="24sp"/> </LinearLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_multi_map.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_multi_map.xml index 599ae3fa1c..193ae55e59 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_multi_map.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_multi_map.xml @@ -2,13 +2,13 @@ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:mapbox="http://schemas.android.com/tools" - android:id="@+id/map_container" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + mapbox:ignore="NestedWeights"> <LinearLayout - android:id="@+id/map_container1" + android:baselineAligned="false" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="0.5" @@ -40,7 +40,7 @@ </LinearLayout> <LinearLayout - android:id="@+id/map_container2" + android:baselineAligned="false" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="0.5" diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_my_location_customization.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_my_location_customization.xml index d65d5796f1..addfe8427b 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_my_location_customization.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_my_location_customization.xml @@ -1,22 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout - xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@id/container" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:orientation="vertical"> +<merge xmlns:android="http://schemas.android.com/apk/res/android"> - <FrameLayout + <android.support.v4.widget.ContentLoadingProgressBar android:id="@id/progress" - android:layout_width="match_parent" - android:layout_height="match_parent"> + style="?android:attr/progressBarStyleLarge" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center"/> - <android.support.v4.widget.ContentLoadingProgressBar - style="?android:attr/progressBarStyleLarge" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center"/> - - </FrameLayout> - -</LinearLayout> +</merge> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_navigation_drawer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_navigation_drawer.xml deleted file mode 100644 index 26a71bc568..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_navigation_drawer.xml +++ /dev/null @@ -1,33 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/drawer_layout" - android:layout_width="match_parent" - android:layout_height="match_parent" - tools:context="com.mapbox.mapboxsdk.testapp.activity.maplayout.NavigationDrawerActivity"> - - <FrameLayout - android:id="@+id/container" - android:layout_width="match_parent" - android:layout_height="match_parent" /> - - <FrameLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:fitsSystemWindows="true"> - - <android.support.v7.widget.Toolbar - android:id="@+id/toolbar" - android:layout_width="match_parent" - android:layout_height="56dp" /> - - </FrameLayout> - - <FrameLayout - android:id="@+id/navigation_drawer" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_gravity="start" - android:fitsSystemWindows="true" /> - -</android.support.v4.widget.DrawerLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline.xml index d4b64b1ea2..3e21015e96 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline.xml @@ -18,27 +18,30 @@ android:layout_height="match_parent" android:layout_below="@+id/progress_bar"/> - <Button - android:id="@+id/button_download_region" - android:layout_width="wrap_content" + <LinearLayout + style="?android:attr/buttonBarStyle" + android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" - android:layout_alignParentLeft="true" - android:layout_alignParentStart="true" - android:layout_margin="@dimen/fab_margin" - android:background="@color/white" - android:padding="10dp" - android:text="@string/button_download_region"/> + android:background="@color/primary" + android:orientation="horizontal" + android:weightSum="2"> - <Button - android:id="@+id/button_list_regions" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_alignBottom="@+id/button_download_region" - android:layout_alignParentRight="true" - android:layout_marginRight="@dimen/fab_margin" - android:background="@color/white" - android:padding="10dp" - android:text="@string/button_list_regions"/> + <Button + android:id="@+id/button_download_region" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/button_download_region"/> + + <Button + android:id="@+id/button_list_regions" + style="?android:attr/buttonBarButtonStyle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:text="@string/button_list_regions"/> + </LinearLayout> </RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline_region_delete.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline_region_delete.xml index 084675fb2c..1eb999caf5 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline_region_delete.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_offline_region_delete.xml @@ -15,7 +15,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - android:text="No Results" + android:text="@string/no_results" android:textSize="24sp"/> </LinearLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_scroll_by.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_scroll_by.xml index bc24533960..cfbd07ce39 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_scroll_by.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_scroll_by.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" - android:layout_width="match_parent" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar @@ -22,7 +23,7 @@ android:layout_height="wrap_content" android:layout_marginTop="12dp" android:paddingBottom="8dp" - android:text="Move the map by x/y pixels" + android:text="@string/action_scroll_by" android:textColor="#FFFFFF" android:textSize="20sp" /> @@ -32,7 +33,8 @@ android:layout_height="wrap_content" android:layout_alignBottom="@+id/seekbar_move_x" android:layout_below="@id/title" - android:text="X: 0000" /> + android:text="X: 0000" + tools:ignore="HardcodedText"/> <SeekBar android:id="@id/seekbar_move_x" @@ -40,6 +42,7 @@ android:layout_height="wrap_content" android:layout_below="@id/title" android:layout_marginLeft="56dp" + android:layout_marginStart="56dp" android:max="50" android:progress="0" /> @@ -48,7 +51,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/seekbar_move_y" - android:text="Y: 0000" /> + android:text="Y: 0000" + tools:ignore="HardcodedText"/> <SeekBar android:id="@id/seekbar_move_y" @@ -58,6 +62,7 @@ android:layout_marginBottom="8dp" android:layout_marginLeft="56dp" android:layout_marginTop="16dp" + android:layout_marginStart="56dp" android:max="50" android:progress="0" /> @@ -66,7 +71,6 @@ </android.support.v7.widget.Toolbar> <FrameLayout - android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbar"> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml index 6b99711e84..53345571b4 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml @@ -16,6 +16,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" + android:contentDescription="@null" android:background="@color/primary"/> <com.mapbox.mapboxsdk.maps.MapView diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_style_file.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_style_file.xml index b133f3d9a5..83150be4bf 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_style_file.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_style_file.xml @@ -15,7 +15,18 @@ app:mapbox_styleUrl="@string/mapbox_style_mapbox_streets"/> <android.support.design.widget.FloatingActionButton - android:id="@id/fab" + android:id="@+id/fab_style_json" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:layout_above="@+id/fab_file" + android:layout_margin="@dimen/fab_margin" + android:src="@drawable/ic_add" + app:backgroundTint="@android:color/white"/> + + <android.support.design.widget.FloatingActionButton + android:id="@id/fab_file" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_visible_bounds.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_symbol_generator.xml index 89a28a7799..ffcdddce57 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_visible_bounds.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_symbol_generator.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> @@ -8,6 +9,7 @@ <com.mapbox.mapboxsdk.maps.MapView android:id="@id/mapView" android:layout_width="match_parent" - android:layout_height="match_parent"/> + android:layout_height="match_parent" + app:mapbox_styleUrl="@string/mapbox_style_outdoors"/> -</LinearLayout> +</RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_viewpager.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_viewpager.xml index d931cb3643..3edaff6985 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_viewpager.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_viewpager.xml @@ -4,19 +4,18 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <android.support.v4.view.ViewPager + <com.mapbox.mapboxsdk.testapp.view.MapViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.PagerTabStrip - android:id="@+id/viewpager_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" android:paddingBottom="4dp" android:paddingTop="4dp"/> - </android.support.v4.view.ViewPager> + </com.mapbox.mapboxsdk.testapp.view.MapViewPager> </RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_zoom_symbol_layer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_zoom_symbol_layer.xml new file mode 100644 index 0000000000..0bb59451ab --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_zoom_symbol_layer.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <com.mapbox.mapboxsdk.maps.MapView + android:id="@id/mapView" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:mapbox_cameraTargetLat="40.730648" + app:mapbox_cameraTargetLng="-73.993619" + app:mapbox_cameraZoom="11" + app:mapbox_styleUrl="@string/mapbox_style_light"/> + +</RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/dialog_camera_position.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/dialog_camera_position.xml index 1c9fbbd482..a7f422f9ce 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/dialog_camera_position.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/dialog_camera_position.xml @@ -16,7 +16,7 @@ android:layout_marginEnd="4dp" android:layout_marginRight="4dp" android:gravity="center" - android:text="Latitude" + android:text="@string/latitude" android:textColor="@android:color/white" /> <SeekBar @@ -25,7 +25,9 @@ android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" + android:layout_toStartOf="@+id/value_lat" android:layout_toLeftOf="@+id/value_lat" + android:layout_toEndOf="@+id/text_lat" android:layout_toRightOf="@id/text_lat" android:max="360" /> @@ -38,7 +40,7 @@ android:layout_marginLeft="4dp" android:layout_marginStart="4dp" android:gravity="center" - android:text="-180" + android:text="@string/min_value" android:textColor="@android:color/white" /> </RelativeLayout> @@ -56,7 +58,7 @@ android:textColor="@android:color/white" android:layout_marginRight="4dp" android:gravity="center" - android:text="Longitude" /> + android:text="@string/longitude" /> <SeekBar android:id="@+id/seekbar_lon" @@ -64,8 +66,10 @@ android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" + android:layout_toStartOf="@+id/value_lon" android:layout_toLeftOf="@+id/value_lon" android:layout_toRightOf="@id/text_lon" + android:layout_toEndOf="@id/text_lon" android:max="360" /> <TextView @@ -78,7 +82,7 @@ android:layout_marginLeft="4dp" android:layout_marginStart="4dp" android:gravity="center" - android:text="-180" /> + android:text="@string/min_value" /> </RelativeLayout> @@ -95,7 +99,7 @@ android:textColor="@android:color/white" android:layout_marginRight="4dp" android:gravity="center" - android:text="Zoom" /> + android:text="@string/zoom" /> <SeekBar android:id="@+id/seekbar_zoom" @@ -103,8 +107,10 @@ android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" + android:layout_toStartOf="@+id/value_zoom" android:layout_toLeftOf="@+id/value_zoom" android:layout_toRightOf="@id/text_zoom" + android:layout_toEndOf="@+id/text_zoom" android:max="18" /> <TextView @@ -117,7 +123,7 @@ android:textColor="@android:color/white" android:layout_marginStart="4dp" android:gravity="center" - android:text="18" /> + android:text="@string/default_zoom_value" /> </RelativeLayout> @@ -134,7 +140,7 @@ android:layout_marginEnd="4dp" android:layout_marginRight="4dp" android:gravity="center" - android:text="Bearing" /> + android:text="@string/bearing" /> <SeekBar android:id="@+id/seekbar_bearing" @@ -142,8 +148,10 @@ android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" + android:layout_toStartOf="@+id/value_bearing" android:layout_toLeftOf="@+id/value_bearing" android:layout_toRightOf="@id/text_bearing" + android:layout_toEndOf="@id/text_bearing" android:max="360" /> <TextView @@ -156,7 +164,7 @@ android:layout_marginLeft="4dp" android:layout_marginStart="4dp" android:gravity="center" - android:text="0" /> + android:text="@string/default_tilt_value" /> </RelativeLayout> @@ -173,7 +181,7 @@ android:textColor="@android:color/white" android:layout_marginRight="4dp" android:gravity="center" - android:text="Tilt" /> + android:text="@string/tilt" /> <SeekBar android:id="@+id/seekbar_tilt" @@ -181,8 +189,10 @@ android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" + android:layout_toStartOf="@+id/value_tilt" android:layout_toLeftOf="@+id/value_tilt" android:layout_toRightOf="@id/text_tilt" + android:layout_toEndOf="@id/text_tilt" android:max="60" /> <TextView @@ -195,7 +205,7 @@ android:layout_marginLeft="4dp" android:layout_marginStart="4dp" android:gravity="center" - android:text="0" /> + android:text="@string/default_tilt_value" /> </RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_dialog_map.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_dialog_map.xml index afebfa1c47..b8ea3d847e 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_dialog_map.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_dialog_map.xml @@ -12,7 +12,6 @@ mapbox:mapbox_cameraTargetLat="47.6077" mapbox:mapbox_cameraTargetLng="-122.3421" mapbox:mapbox_cameraZoom="11" - mapbox:mapbox_renderTextureMode="true" mapbox:mapbox_styleUrl="mapbox://styles/mapbox/streets-v10" /> </LinearLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_double_map.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_double_map.xml index b976013ead..3cf2fbea55 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_double_map.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/fragment_double_map.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="fill_parent" - android:layout_height="fill_parent"> + android:layout_width="fill_parent" + android:layout_height="fill_parent" + xmlns:maps="http://schemas.android.com/apk/res-auto"> <com.mapbox.mapboxsdk.maps.MapView android:id="@id/mapView" @@ -9,7 +10,6 @@ android:layout_height="match_parent" /> <FrameLayout - android:id="@+id/map_card" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginLeft="5dp" @@ -19,6 +19,7 @@ <com.mapbox.mapboxsdk.maps.MapView android:id="@+id/mini_map" android:layout_width="100dp" + maps:mapbox_enableZMediaOverlay="true" android:layout_height="100dp" /> </FrameLayout> </RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/item_main_feature.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/item_main_feature.xml index b290d013f0..49b38f081a 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/item_main_feature.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/item_main_feature.xml @@ -20,6 +20,7 @@ android:gravity="center_vertical" android:maxLines="1" android:textColor="@android:color/black" + android:textIsSelectable="false" android:textSize="16sp"/> <TextView @@ -31,6 +32,7 @@ android:alpha="0.56" android:maxLines="1" android:textColor="@android:color/black" + android:textIsSelectable="false" android:textSize="14sp"/> </LinearLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/section_main_layout.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/section_main_layout.xml index 75f6ac9588..afec1f3bea 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/section_main_layout.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/section_main_layout.xml @@ -18,6 +18,7 @@ android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_marginStart="16dp" + android:textIsSelectable="false" android:layout_marginTop="16dp" android:alpha="0.54" android:background="@android:color/transparent" diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_custom_marker.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_custom_marker.xml index 324a4861c3..cafa7d9746 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_custom_marker.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_custom_marker.xml @@ -6,6 +6,7 @@ <ImageView android:id="@id/imageView" android:layout_width="64dp" + android:contentDescription="@null" android:layout_height="64dp"/> <TextView @@ -14,6 +15,7 @@ android:layout_height="wrap_content" android:layout_centerInParent="true" android:padding="2dp" + android:textIsSelectable="false" android:textColor="@android:color/white" android:textStyle="bold"/> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_text_marker.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_text_marker.xml index 299865be9e..1ef2c69012 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_text_marker.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/view_text_marker.xml @@ -11,6 +11,7 @@ android:layout_height="wrap_content" android:textStyle="bold" android:padding="4dp" + android:textIsSelectable="false" android:layout_centerInParent="true" /> </RelativeLayout> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_building.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_building.xml index 92d1dd5380..ff65f319f9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_building.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_building.xml @@ -3,10 +3,10 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_action_intensity" - android:title="Change intensity" + android:title="@string/change_intensity" app:showAsAction="never"/> <item android:id="@+id/menu_action_anchor" - android:title="Change Anchor" + android:title="@string/change_anchor" app:showAsAction="never"/> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_bulk_marker.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_bulk_marker.xml index 8b7245c5ca..43a191f7b1 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_bulk_marker.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_bulk_marker.xml @@ -3,7 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/spinner" - android:title="Amount of markers" + android:title="@string/amount_of_markers" app:actionViewClass="android.widget.Spinner" app:showAsAction="always"/> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_custom_layer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_custom_layer.xml index 4639dd65ba..915afd77fa 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_custom_layer.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_custom_layer.xml @@ -1,17 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> -<menu xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:mapbox="http://schemas.android.com/apk/res-auto"> - +<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_update_layer" - android:title="Update layer (invalidate)" /> + android:title="@string/update_layer_invalidate"/> <item android:id="@+id/action_set_color_red" - android:title="Red" /> + android:title="@string/red"/> <item android:id="@+id/action_set_color_green" - android:title="Green" /> + android:title="@string/green"/> <item android:id="@+id/action_set_color_blue" - android:title="Blue" /> + android:title="@string/blue"/> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_data_driven_style.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_data_driven_style.xml index 3eae56a273..a596ff5708 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_data_driven_style.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_data_driven_style.xml @@ -4,47 +4,47 @@ <item android:id="@+id/action_add_exponential_zoom_function" - android:title="Add an exponential zoom function" + android:title="@string/add_an_exponential_zoom_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_interval_zoom_function" - android:title="Add an interval zoom function" + android:title="@string/add_an_interval_zoom_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_categorical_source_function" - android:title="Add a categorical source function" + android:title="@string/add_a_categorical_source_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_exponential_source_function" - android:title="Add an exponential source function" + android:title="@string/add_an_exponential_source_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_identity_source_function" - android:title="Add an identity source function" + android:title="@string/add_an_identity_source_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_interval_source_function" - android:title="Add an interval source function" + android:title="@string/add_an_interval_source_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_composite_exponential_function" - android:title="Add a composite, exponential function" + android:title="@string/add_a_composite_exponential_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_composite_categorical_function" - android:title="Add a composite, categorical function" + android:title="@string/add_a_composite_categorical_function" mapbox:showAsAction="never"/> <item android:id="@+id/action_add_composite_interval_function" - android:title="Add a composite, interval function" + android:title="@string/add_a_composite_interval_function" mapbox:showAsAction="never"/> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_generator_symbol.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_generator_symbol.xml new file mode 100644 index 0000000000..168361a263 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_generator_symbol.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <item + android:id="@+id/menu_action_icon_overlap" + android:title="@string/menuitem_change_icon_overlap" + app:showAsAction="never"/> +</menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_padding.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_padding.xml index e0052d4a8c..7132c0c2a9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_padding.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_padding.xml @@ -3,10 +3,10 @@ xmlns:mapbox="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_user_tracking" - android:title="My Location Tracking" + android:title="@string/my_location_tracking" mapbox:showAsAction="never" /> <item android:id="@+id/action_bangalore" - android:title="Bangalore" + android:title="@string/bangalore" mapbox:showAsAction="never" /> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_press_for_marker.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_press_for_marker.xml index 0b3a8e797e..7d20442c8c 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_press_for_marker.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_press_for_marker.xml @@ -4,6 +4,5 @@ <item android:id="@+id/menuItemReset" android:title="@string/menuitem_title_reset" - app:showAsAction="always" - /> + app:showAsAction="always"/> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml index 86f0b4faee..5c77179272 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_runtime_style.xml @@ -4,66 +4,66 @@ <item android:id="@+id/action_list_layers" - android:title="List all layers in the style" + android:title="@string/list_all_layers_in_the_style" mapbox:showAsAction="never" /> <item android:id="@+id/action_list_sources" - android:title="List all sources in the style" + android:title="@string/list_all_sources_in_the_style" mapbox:showAsAction="never" /> <item android:id="@+id/action_water_color" - android:title="Color the water" + android:title="@string/color_the_water" mapbox:showAsAction="never" /> <item android:id="@+id/action_background_opacity" - android:title="Set background opacity" + android:title="@string/set_background_opacity" mapbox:showAsAction="never" /> <item android:id="@+id/action_road_avoid_edges" - android:title="Set road symbol placement to Point" + android:title="@string/set_road_symbol_placement_to_point" mapbox:showAsAction="never" /> <item android:id="@+id/action_layer_visibility" - android:title="Set layer visibility to false" + android:title="@string/set_layer_visibility_to_false" mapbox:showAsAction="never" /> <item android:id="@+id/action_add_parks_layer" - android:title="Add a parks layer" + android:title="@string/add_a_parks_layer" mapbox:showAsAction="never" /> <item android:id="@+id/action_add_dynamic_parks_layer" - android:title="Add a dynamic GeoJSON source" + android:title="@string/add_a_dynamic_geojson_source" mapbox:showAsAction="never" /> <item android:id="@+id/action_remove_layer" - android:title="Remove buildings layer" + android:title="@string/remove_buildings_layer" mapbox:showAsAction="never" /> <item android:id="@+id/action_add_terrain_layer" - android:title="Add a terrain layer" + android:title="@string/add_a_terrain_layer" mapbox:showAsAction="never" /> <item android:id="@+id/action_add_satellite_layer" - android:title="Add a satellite layer" + android:title="@string/add_a_satellite_layer" mapbox:showAsAction="never" /> <item android:id="@+id/action_update_water_color_on_zoom" - android:title="Change the water color on zoom" + android:title="@string/change_the_water_color_on_zoom" mapbox:showAsAction="never" /> <item android:id="@+id/action_add_custom_tiles" - android:title="Custom tiles" + android:title="@string/custom_tiles" mapbox:showAsAction="never" /> <item android:id="@+id/action_fill_filter" - android:title="Apply filtered fill" + android:title="@string/apply_filtered_fill" mapbox:showAsAction="never" /> <item android:id="@+id/action_line_filter" - android:title="Apply filtered line" + android:title="@string/apply_filtered_line" mapbox:showAsAction="never" /> <item android:id="@+id/action_numeric_filter" - android:title="Apply numeric fill filter" + android:title="@string/apply_numeric_fill_filter" mapbox:showAsAction="never" /> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_symbol_layer.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_symbol_layer.xml index 77468b4861..8f396b07b0 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_symbol_layer.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_symbol_layer.xml @@ -3,14 +3,14 @@ <item android:id="@+id/action_toggle_text_size" - android:title="Toggle text size"/> + android:title="@string/toggle_text_size"/> <item android:id="@+id/action_toggle_text_field" - android:title="Toggle text field contents"/> + android:title="@string/toggle_text_field_contents"/> <item android:id="@+id/action_toggle_text_font" - android:title="Toggle text font"/> + android:title="@string/toggle_text_font"/> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_zoom.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_zoom.xml index 0cea519a24..67c0b2df55 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_zoom.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/menu/menu_zoom.xml @@ -3,23 +3,23 @@ xmlns:mapbox="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_zoom_in" - android:title="Zoom in" + android:title="@string/zoom_in" mapbox:showAsAction="never" /> <item android:id="@+id/action_zoom_out" - android:title="Zoom out" + android:title="@string/zoom_out" mapbox:showAsAction="never" /> <item android:id="@+id/action_zoom_by" - android:title="Zoom by 2" + android:title="@string/zoom_by_2" mapbox:showAsAction="never" /> <item android:id="@+id/action_zoom_to_point" - android:title="Zoom to point" + android:title="@string/zoom_to_point" mapbox:showAsAction="never" /> <item android:id="@+id/action_zoom_to" - android:title="Zoom to 4" + android:title="@string/zoom_to_4" mapbox:showAsAction="never" /> </menu> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/sat_style.json b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/sat_style.json new file mode 100644 index 0000000000..f2cd969be4 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/sat_style.json @@ -0,0 +1,31 @@ +{ + "version": 8, + "name": "Satellite", + "metadata": { + "mapbox:autocomposite": true + }, + "sources": { + "mapbox": { + "type": "raster", + "url": "mapbox://mapbox.satellite", + "tileSize": 256 + } + }, + "sprite": "mapbox://sprites/mapbox/satellite-v8", + "glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "rgb(4,7,14)" + } + }, + { + "id": "satellite", + "type": "raster", + "source": "mapbox", + "source-layer": "mapbox_satellite_full" + } + ] +}
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/tiny_countries.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/tiny_countries.geojson new file mode 100644 index 0000000000..caff2ac81c --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/tiny_countries.geojson @@ -0,0 +1,2741 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "scalerank": 1, + "sr_label_i": 2, + "sr_label_o": 4, + "sovereignt": "Vanuatu", + "sov_a3": "VUT", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Vanuatu", + "adm0_a3": "VUT", + "geou_dif": 0, + "geounit": "Vanuatu", + "gu_a3": "VUT", + "su_dif": 0, + "subunit": "Vanuatu", + "su_a3": "VUT", + "brk_diff": 0, + "name": "Vanuatu", + "name_long": "Vanuatu", + "brk_a3": "VUT", + "brk_name": "Vanuatu", + "brk_group": null, + "abbrev": "Van.", + "postal": "VU", + "formal_en": "Republic of Vanuatu", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Vanuatu", + "name_alt": null, + "mapcolor7": 6, + "mapcolor8": 3, + "mapcolor9": 7, + "mapcolor13": 3, + "pop_est": 218519, + "gdp_md_est": 988.5, + "pop_year": -99, + "lastcensus": 2009, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "VU", + "iso_a3": "VUT", + "iso_n3": "548", + "un_a3": "548", + "wb_a2": "VU", + "wb_a3": "VUT", + "woe_id": -99, + "adm0_a3_is": "VUT", + "adm0_a3_us": "VUT", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Melanesia", + "region_wb": "East Asia & Pacific", + "name_len": 7, + "long_len": 7, + "abbrev_len": 4, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 166.9270664395989, + -15.367957152169708 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 1, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "France", + "sov_a3": "FR1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "French Southern and Antarctic Lands", + "adm0_a3": "ATF", + "geou_dif": 0, + "geounit": "French Southern and Antarctic Lands", + "gu_a3": "ATF", + "su_dif": 0, + "subunit": "French Southern and Antarctic Lands", + "su_a3": "ATF", + "brk_diff": 0, + "name": "Fr. S. Antarctic Lands", + "name_long": "French Southern and Antarctic Lands", + "brk_a3": "ATF", + "brk_name": "Fr. S. and Antarctic Lands", + "brk_group": null, + "abbrev": "Fr. S.A.L.", + "postal": "TF", + "formal_en": "Territory of the French Southern and Antarctic Lands", + "formal_fr": null, + "note_adm0": "Fr.", + "note_brk": null, + "name_sort": "French Southern and Antarctic Lands", + "name_alt": null, + "mapcolor7": 7, + "mapcolor8": 5, + "mapcolor9": 9, + "mapcolor13": 11, + "pop_est": 140, + "gdp_md_est": 16, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "TF", + "iso_a3": "ATF", + "iso_n3": "260", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "ATF", + "adm0_a3_us": "ATF", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Seven seas (open ocean)", + "subregion": "Seven seas (open ocean)", + "region_wb": "Sub-Saharan Africa", + "name_len": 22, + "long_len": 35, + "abbrev_len": 10, + "tiny": 2, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 69.22513999086925, + -49.33878196163545 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "New Zealand", + "sov_a3": "NZ1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Cook Islands", + "adm0_a3": "COK", + "geou_dif": 0, + "geounit": "Cook Islands", + "gu_a3": "COK", + "su_dif": 0, + "subunit": "Cook Islands", + "su_a3": "COK", + "brk_diff": 0, + "name": "Cook Is.", + "name_long": "Cook Islands", + "brk_a3": "COK", + "brk_name": "Cook Is.", + "brk_group": null, + "abbrev": "Cook Is.", + "postal": "CK", + "formal_en": null, + "formal_fr": null, + "note_adm0": "Assoc. with N.Z.", + "note_brk": null, + "name_sort": "Cook Islands", + "name_alt": null, + "mapcolor7": 3, + "mapcolor8": 3, + "mapcolor9": 4, + "mapcolor13": 4, + "pop_est": 11870, + "gdp_md_est": 183.2, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "3. Upper middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "CK", + "iso_a3": "COK", + "iso_n3": "184", + "un_a3": "184", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "COK", + "adm0_a3_us": "COK", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Polynesia", + "region_wb": "East Asia & Pacific", + "name_len": 8, + "long_len": 12, + "abbrev_len": 8, + "tiny": 3, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -159.78922694470387, + -21.220086945691605 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 4, + "sovereignt": "Samoa", + "sov_a3": "WSM", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Samoa", + "adm0_a3": "WSM", + "geou_dif": 0, + "geounit": "Samoa", + "gu_a3": "WSM", + "su_dif": 0, + "subunit": "Samoa", + "su_a3": "WSM", + "brk_diff": 0, + "name": "Samoa", + "name_long": "Samoa", + "brk_a3": "WSM", + "brk_name": "Samoa", + "brk_group": null, + "abbrev": "Samoa", + "postal": "WS", + "formal_en": "Independent State of Samoa", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Samoa", + "name_alt": null, + "mapcolor7": 3, + "mapcolor8": 3, + "mapcolor9": 4, + "mapcolor13": 6, + "pop_est": 219998, + "gdp_md_est": 1049, + "pop_year": -99, + "lastcensus": 2006, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "WS", + "iso_a3": "WSM", + "iso_n3": "882", + "un_a3": "882", + "wb_a2": "WS", + "wb_a3": "WSM", + "woe_id": -99, + "adm0_a3_is": "WSM", + "adm0_a3_us": "WSM", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Polynesia", + "region_wb": "East Asia & Pacific", + "name_len": 5, + "long_len": 5, + "abbrev_len": 5, + "tiny": -99, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -172.41373026688336, + -13.637369985140253 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 4, + "sovereignt": "Tonga", + "sov_a3": "TON", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Tonga", + "adm0_a3": "TON", + "geou_dif": 0, + "geounit": "Tonga", + "gu_a3": "TON", + "su_dif": 0, + "subunit": "Tonga", + "su_a3": "TON", + "brk_diff": 0, + "name": "Tonga", + "name_long": "Tonga", + "brk_a3": "TON", + "brk_name": "Tonga", + "brk_group": null, + "abbrev": "Tongo", + "postal": "TO", + "formal_en": "Kingdom of Tonga", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Tonga", + "name_alt": null, + "mapcolor7": 2, + "mapcolor8": 1, + "mapcolor9": 1, + "mapcolor13": 8, + "pop_est": 120898, + "gdp_md_est": 549, + "pop_year": -99, + "lastcensus": 2006, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "TO", + "iso_a3": "TON", + "iso_n3": "776", + "un_a3": "776", + "wb_a2": "TO", + "wb_a3": "TON", + "woe_id": -99, + "adm0_a3_is": "TON", + "adm0_a3_us": "TON", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Polynesia", + "region_wb": "East Asia & Pacific", + "name_len": 5, + "long_len": 5, + "abbrev_len": 5, + "tiny": 3, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -175.23533295466754, + -21.158187998515473 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 5, + "sovereignt": "France", + "sov_a3": "FR1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "French Polynesia", + "adm0_a3": "PYF", + "geou_dif": 0, + "geounit": "French Polynesia", + "gu_a3": "PYF", + "su_dif": 0, + "subunit": "French Polynesia", + "su_a3": "PYF", + "brk_diff": 0, + "name": "Fr. Polynesia", + "name_long": "French Polynesia", + "brk_a3": "PYF", + "brk_name": "Fr. Polynesia", + "brk_group": null, + "abbrev": "Fr. Poly.", + "postal": "PF", + "formal_en": "French Polynesia", + "formal_fr": null, + "note_adm0": "Fr.", + "note_brk": null, + "name_sort": "French Polynesia", + "name_alt": null, + "mapcolor7": 7, + "mapcolor8": 5, + "mapcolor9": 9, + "mapcolor13": 11, + "pop_est": 287032, + "gdp_md_est": 4718, + "pop_year": -99, + "lastcensus": 2007, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "PF", + "iso_a3": "PYF", + "iso_n3": "258", + "un_a3": "258", + "wb_a2": "PF", + "wb_a3": "PYF", + "woe_id": -99, + "adm0_a3_is": "PYF", + "adm0_a3_us": "PYF", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Polynesia", + "region_wb": "East Asia & Pacific", + "name_len": 13, + "long_len": 16, + "abbrev_len": 9, + "tiny": 2, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -149.47549597877855, + -17.6250049835121 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "United Kingdom", + "sov_a3": "GB1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Pitcairn Islands", + "adm0_a3": "PCN", + "geou_dif": 0, + "geounit": "Pitcairn Islands", + "gu_a3": "PCN", + "su_dif": 0, + "subunit": "Pitcairn Islands", + "su_a3": "PCN", + "brk_diff": 0, + "name": "Pitcairn Is.", + "name_long": "Pitcairn Islands", + "brk_a3": "PCN", + "brk_name": "Pitcairn Is.", + "brk_group": null, + "abbrev": "Pit. Is.", + "postal": "PN", + "formal_en": "Pitcairn, Henderson, Ducie and Oeno Islands", + "formal_fr": null, + "note_adm0": "U.K.", + "note_brk": null, + "name_sort": "Pitcairn Islands", + "name_alt": null, + "mapcolor7": 6, + "mapcolor8": 6, + "mapcolor9": 6, + "mapcolor13": 3, + "pop_est": 48, + "gdp_md_est": 0.72, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "5. Low income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "PN", + "iso_a3": "PCN", + "iso_n3": "612", + "un_a3": "612", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "PCN", + "adm0_a3_us": "PCN", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Polynesia", + "region_wb": "East Asia & Pacific", + "name_len": 12, + "long_len": 16, + "abbrev_len": 8, + "tiny": -99, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -128.31780012096033, + -24.364139777771015 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 5, + "sovereignt": "Barbados", + "sov_a3": "BRB", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Barbados", + "adm0_a3": "BRB", + "geou_dif": 0, + "geounit": "Barbados", + "gu_a3": "BRB", + "su_dif": 0, + "subunit": "Barbados", + "su_a3": "BRB", + "brk_diff": 0, + "name": "Barbados", + "name_long": "Barbados", + "brk_a3": "BRB", + "brk_name": "Barbados", + "brk_group": null, + "abbrev": "Barb.", + "postal": "BB", + "formal_en": "Barbados", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Barbados", + "name_alt": null, + "mapcolor7": 4, + "mapcolor8": 1, + "mapcolor9": 5, + "mapcolor13": 3, + "pop_est": 284589, + "gdp_md_est": 5425, + "pop_year": -99, + "lastcensus": 2010, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "BB", + "iso_a3": "BRB", + "iso_n3": "052", + "un_a3": "052", + "wb_a2": "BB", + "wb_a3": "BRB", + "woe_id": -99, + "adm0_a3_is": "BRB", + "adm0_a3_us": "BRB", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "North America", + "region_un": "Americas", + "subregion": "Caribbean", + "region_wb": "Latin America & Caribbean", + "name_len": 8, + "long_len": 8, + "abbrev_len": 5, + "tiny": 3, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -59.554305983838844, + 13.174672374462602 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 5, + "sovereignt": "Trinidad and Tobago", + "sov_a3": "TTO", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Trinidad and Tobago", + "adm0_a3": "TTO", + "geou_dif": 0, + "geounit": "Trinidad and Tobago", + "gu_a3": "TTO", + "su_dif": 0, + "subunit": "Trinidad and Tobago", + "su_a3": "TTO", + "brk_diff": 0, + "name": "Trinidad and Tobago", + "name_long": "Trinidad and Tobago", + "brk_a3": "TTO", + "brk_name": "Trinidad and Tobago", + "brk_group": null, + "abbrev": "Tr.T.", + "postal": "TT", + "formal_en": "Republic of Trinidad and Tobago", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Trinidad and Tobago", + "name_alt": null, + "mapcolor7": 5, + "mapcolor8": 6, + "mapcolor9": 2, + "mapcolor13": 5, + "pop_est": 1310000, + "gdp_md_est": 29010, + "pop_year": -99, + "lastcensus": 2011, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "TT", + "iso_a3": "TTO", + "iso_n3": "780", + "un_a3": "780", + "wb_a2": "TT", + "wb_a3": "TTO", + "woe_id": -99, + "adm0_a3_is": "TTO", + "adm0_a3_us": "TTO", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "North America", + "region_un": "Americas", + "subregion": "Caribbean", + "region_wb": "Latin America & Caribbean", + "name_len": 19, + "long_len": 19, + "abbrev_len": 5, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -61.255188941565905, + 10.43680324164859 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 4, + "sovereignt": "Sao Tome and Principe", + "sov_a3": "STP", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Sao Tome and Principe", + "adm0_a3": "STP", + "geou_dif": 0, + "geounit": "Sao Tome and Principe", + "gu_a3": "STP", + "su_dif": 0, + "subunit": "Sao Tome and Principe", + "su_a3": "STP", + "brk_diff": 0, + "name": "São Tomé and Principe", + "name_long": "São Tomé and Principe", + "brk_a3": "STP", + "brk_name": "Sao Tome and Principe", + "brk_group": null, + "abbrev": "S.T.P.", + "postal": "ST", + "formal_en": "Democratic Republic of São Tomé and Principe", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "São Tomé and Principe", + "name_alt": null, + "mapcolor7": 1, + "mapcolor8": 6, + "mapcolor9": 1, + "mapcolor13": 7, + "pop_est": 212679, + "gdp_md_est": 276.5, + "pop_year": -99, + "lastcensus": 2001, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "ST", + "iso_a3": "STP", + "iso_n3": "678", + "un_a3": "678", + "wb_a2": "ST", + "wb_a3": "STP", + "woe_id": -99, + "adm0_a3_is": "STP", + "adm0_a3_us": "STP", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Africa", + "region_un": "Africa", + "subregion": "Middle Africa", + "region_wb": "Sub-Saharan Africa", + "name_len": 21, + "long_len": 21, + "abbrev_len": 6, + "tiny": 3, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 6.617198520543866, + 0.246806952308191 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "United Kingdom", + "sov_a3": "GB1", + "adm0_dif": 1, + "level": 4, + "type": "Geo subunit", + "admin": "Saint Helena", + "adm0_a3": "SHN", + "geou_dif": 0, + "geounit": "Saint Helena", + "gu_a3": "SHN", + "su_dif": 1, + "subunit": "Ascension", + "su_a3": "BAC", + "brk_diff": 0, + "name": "Ascension", + "name_long": "Ascension", + "brk_a3": "BAC", + "brk_name": "Ascension", + "brk_group": null, + "abbrev": "Asc.", + "postal": "AS", + "formal_en": null, + "formal_fr": null, + "note_adm0": "U.K.", + "note_brk": null, + "name_sort": "Ascension", + "name_alt": null, + "mapcolor7": 6, + "mapcolor8": 6, + "mapcolor9": 6, + "mapcolor13": 3, + "pop_est": 940, + "gdp_md_est": 2.21553, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "-99", + "income_grp": "-99", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "-99", + "iso_a3": "-99", + "iso_n3": "-99", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "SHN", + "adm0_a3_us": "SHN", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Seven seas (open ocean)", + "subregion": "Seven seas (open ocean)", + "region_wb": "Antarctica", + "name_len": 9, + "long_len": 9, + "abbrev_len": 4, + "tiny": 3, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -14.362068334482444, + -7.939246540570252 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "United Kingdom", + "sov_a3": "GB1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Saint Helena", + "adm0_a3": "SHN", + "geou_dif": 0, + "geounit": "Saint Helena", + "gu_a3": "SHN", + "su_dif": 0, + "subunit": "Saint Helena", + "su_a3": "SHN", + "brk_diff": 0, + "name": "Saint Helena", + "name_long": "Saint Helena", + "brk_a3": "SHN", + "brk_name": "Saint Helena", + "brk_group": null, + "abbrev": "St.H.", + "postal": "SH", + "formal_en": null, + "formal_fr": null, + "note_adm0": "U.K.", + "note_brk": null, + "name_sort": "St. Helena", + "name_alt": null, + "mapcolor7": 6, + "mapcolor8": 6, + "mapcolor9": 6, + "mapcolor13": 3, + "pop_est": 7637, + "gdp_md_est": 18, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "SH", + "iso_a3": "SHN", + "iso_n3": "654", + "un_a3": "654", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "SHN", + "adm0_a3_us": "SHN", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Africa", + "subregion": "Western Africa", + "region_wb": "Sub-Saharan Africa", + "name_len": 12, + "long_len": 12, + "abbrev_len": 5, + "tiny": -99, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -5.716296101395358, + -15.963221612123107 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 5, + "sovereignt": "Malta", + "sov_a3": "MLT", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Malta", + "adm0_a3": "MLT", + "geou_dif": 0, + "geounit": "Malta", + "gu_a3": "MLT", + "su_dif": 0, + "subunit": "Malta", + "su_a3": "MLT", + "brk_diff": 0, + "name": "Malta", + "name_long": "Malta", + "brk_a3": "MLT", + "brk_name": "Malta", + "brk_group": null, + "abbrev": "Malta", + "postal": "M", + "formal_en": "Republic of Malta", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Malta", + "name_alt": null, + "mapcolor7": 1, + "mapcolor8": 4, + "mapcolor9": 1, + "mapcolor13": 8, + "pop_est": 405165, + "gdp_md_est": 9962, + "pop_year": -99, + "lastcensus": 2005, + "gdp_year": -99, + "economy": "2. Developed region: nonG7", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "MT", + "iso_a3": "MLT", + "iso_n3": "470", + "un_a3": "470", + "wb_a2": "MT", + "wb_a3": "MLT", + "woe_id": -99, + "adm0_a3_is": "MLT", + "adm0_a3_us": "MLT", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Europe", + "region_un": "Europe", + "subregion": "Southern Europe", + "region_wb": "Middle East & North Africa", + "name_len": 5, + "long_len": 5, + "abbrev_len": 5, + "tiny": 3, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 14.438179478988388, + 35.882081031796645 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 2, + "sovereignt": "Bahrain", + "sov_a3": "BHR", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Bahrain", + "adm0_a3": "BHR", + "geou_dif": 0, + "geounit": "Bahrain", + "gu_a3": "BHR", + "su_dif": 0, + "subunit": "Bahrain", + "su_a3": "BHR", + "brk_diff": 0, + "name": "Bahrain", + "name_long": "Bahrain", + "brk_a3": "BHR", + "brk_name": "Bahrain", + "brk_group": null, + "abbrev": "Bahr.", + "postal": "BH", + "formal_en": "Kingdom of Bahrain", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Bahrain", + "name_alt": null, + "mapcolor7": 1, + "mapcolor8": 1, + "mapcolor9": 1, + "mapcolor13": 9, + "pop_est": 727785, + "gdp_md_est": 26820, + "pop_year": -99, + "lastcensus": 2010, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "BH", + "iso_a3": "BHR", + "iso_n3": "048", + "un_a3": "048", + "wb_a2": "BH", + "wb_a3": "BHR", + "woe_id": -99, + "adm0_a3_is": "BHR", + "adm0_a3_us": "BHR", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Asia", + "region_un": "Asia", + "subregion": "Western Asia", + "region_wb": "Middle East & North Africa", + "name_len": 7, + "long_len": 7, + "abbrev_len": 5, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 50.553638136605, + 26.06944265390905 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 4, + "sovereignt": "Maldives", + "sov_a3": "MDV", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Maldives", + "adm0_a3": "MDV", + "geou_dif": 0, + "geounit": "Maldives", + "gu_a3": "MDV", + "su_dif": 0, + "subunit": "Maldives", + "su_a3": "MDV", + "brk_diff": 0, + "name": "Maldives", + "name_long": "Maldives", + "brk_a3": "MDV", + "brk_name": "Maldives", + "brk_group": null, + "abbrev": "Mald.", + "postal": "MV", + "formal_en": "Republic of Maldives", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Maldives", + "name_alt": null, + "mapcolor7": 2, + "mapcolor8": 3, + "mapcolor9": 1, + "mapcolor13": 7, + "pop_est": 396334, + "gdp_md_est": 1716, + "pop_year": -99, + "lastcensus": 2011, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "3. Upper middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "MV", + "iso_a3": "MDV", + "iso_n3": "462", + "un_a3": "462", + "wb_a2": "MV", + "wb_a3": "MDV", + "woe_id": -99, + "adm0_a3_is": "MDV", + "adm0_a3_us": "B13", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Asia", + "subregion": "Southern Asia", + "region_wb": "South Asia", + "name_len": 8, + "long_len": 8, + "abbrev_len": 5, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 73.50223056083513, + 4.186658727806048 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "United Kingdom", + "sov_a3": "GB1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "British Indian Ocean Territory", + "adm0_a3": "IOT", + "geou_dif": 0, + "geounit": "British Indian Ocean Territory", + "gu_a3": "IOT", + "su_dif": 0, + "subunit": "British Indian Ocean Territory", + "su_a3": "IOT", + "brk_diff": 1, + "name": "Br. Indian Ocean Ter.", + "name_long": "British Indian Ocean Territory", + "brk_a3": "B69", + "brk_name": "Br. Indian Ocean Ter.", + "brk_group": null, + "abbrev": "I.O.T.", + "postal": "IO", + "formal_en": null, + "formal_fr": null, + "note_adm0": "U.K.", + "note_brk": "Admin. by U.K.; Claimed by Mauritius and Seychelles", + "name_sort": "British Indian Ocean Territory", + "name_alt": null, + "mapcolor7": 6, + "mapcolor8": 6, + "mapcolor9": 6, + "mapcolor13": 3, + "pop_est": 4000, + "gdp_md_est": 160, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "2. Developed region: nonG7", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "IO", + "iso_a3": "IOT", + "iso_n3": "086", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "IOT", + "adm0_a3_us": "IOT", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Seven seas (open ocean)", + "subregion": "Seven seas (open ocean)", + "region_wb": "Sub-Saharan Africa", + "name_len": 21, + "long_len": 30, + "abbrev_len": 6, + "tiny": 5, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 72.47872949418257, + -7.340705873210993 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 3, + "sovereignt": "Singapore", + "sov_a3": "SGP", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Singapore", + "adm0_a3": "SGP", + "geou_dif": 0, + "geounit": "Singapore", + "gu_a3": "SGP", + "su_dif": 0, + "subunit": "Singapore", + "su_a3": "SGP", + "brk_diff": 0, + "name": "Singapore", + "name_long": "Singapore", + "brk_a3": "SGP", + "brk_name": "Singapore", + "brk_group": null, + "abbrev": "Sing.", + "postal": "SG", + "formal_en": "Republic of Singapore", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Singapore", + "name_alt": null, + "mapcolor7": 5, + "mapcolor8": 3, + "mapcolor9": 7, + "mapcolor13": 3, + "pop_est": 4657542, + "gdp_md_est": 237300, + "pop_year": -99, + "lastcensus": 2010, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "SG", + "iso_a3": "SGP", + "iso_n3": "702", + "un_a3": "702", + "wb_a2": "SG", + "wb_a3": "SGP", + "woe_id": -99, + "adm0_a3_is": "SGP", + "adm0_a3_us": "SGP", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Asia", + "region_un": "Asia", + "subregion": "South-Eastern Asia", + "region_wb": "East Asia & Pacific", + "name_len": 9, + "long_len": 9, + "abbrev_len": 5, + "tiny": 3, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 103.81481982900323, + 1.359363931813562 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 2, + "sovereignt": "Brunei", + "sov_a3": "BRN", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Brunei", + "adm0_a3": "BRN", + "geou_dif": 0, + "geounit": "Brunei", + "gu_a3": "BRN", + "su_dif": 0, + "subunit": "Brunei", + "su_a3": "BRN", + "brk_diff": 0, + "name": "Brunei", + "name_long": "Brunei Darussalam", + "brk_a3": "BRN", + "brk_name": "Brunei", + "brk_group": null, + "abbrev": "Brunei", + "postal": "BN", + "formal_en": "Negara Brunei Darussalam", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Brunei", + "name_alt": null, + "mapcolor7": 4, + "mapcolor8": 6, + "mapcolor9": 6, + "mapcolor13": 12, + "pop_est": 388190, + "gdp_md_est": 20250, + "pop_year": -99, + "lastcensus": 2001, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "BN", + "iso_a3": "BRN", + "iso_n3": "096", + "un_a3": "096", + "wb_a2": "BN", + "wb_a3": "BRN", + "woe_id": -99, + "adm0_a3_is": "BRN", + "adm0_a3_us": "BRN", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Asia", + "region_un": "Asia", + "subregion": "South-Eastern Asia", + "region_wb": "East Asia & Pacific", + "name_len": 6, + "long_len": 17, + "abbrev_len": 6, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 114.56745460338925, + 4.434669496170784 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "Palau", + "sov_a3": "PLW", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Palau", + "adm0_a3": "PLW", + "geou_dif": 0, + "geounit": "Palau", + "gu_a3": "PLW", + "su_dif": 0, + "subunit": "Palau", + "su_a3": "PLW", + "brk_diff": 0, + "name": "Palau", + "name_long": "Palau", + "brk_a3": "PLW", + "brk_name": "Palau", + "brk_group": null, + "abbrev": "Palau", + "postal": "PW", + "formal_en": "Republic of Palau", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Palau", + "name_alt": null, + "mapcolor7": 2, + "mapcolor8": 5, + "mapcolor9": 1, + "mapcolor13": 12, + "pop_est": 20796, + "gdp_md_est": 164, + "pop_year": -99, + "lastcensus": 2010, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "3. Upper middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "PW", + "iso_a3": "PLW", + "iso_n3": "585", + "un_a3": "585", + "wb_a2": "PW", + "wb_a3": "PLW", + "woe_id": -99, + "adm0_a3_is": "PLW", + "adm0_a3_us": "PLW", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Micronesia", + "region_wb": "East Asia & Pacific", + "name_len": 5, + "long_len": 5, + "abbrev_len": 5, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 134.57924133620793, + 7.507494163314107 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "United States of America", + "sov_a3": "US1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Northern Mariana Islands", + "adm0_a3": "MNP", + "geou_dif": 0, + "geounit": "Northern Mariana Islands", + "gu_a3": "MNP", + "su_dif": 0, + "subunit": "Northern Mariana Islands", + "su_a3": "MNP", + "brk_diff": 0, + "name": "N. Mariana Is.", + "name_long": "Northern Mariana Islands", + "brk_a3": "MNP", + "brk_name": "N. Mariana Is.", + "brk_group": null, + "abbrev": "N.M.I.", + "postal": "MP", + "formal_en": "Commonwealth of the Northern Mariana Islands", + "formal_fr": null, + "note_adm0": "Commonwealth of U.S.A.", + "note_brk": null, + "name_sort": "Northern Mariana Islands", + "name_alt": null, + "mapcolor7": 4, + "mapcolor8": 5, + "mapcolor9": 1, + "mapcolor13": 1, + "pop_est": 88662, + "gdp_md_est": 900, + "pop_year": -99, + "lastcensus": 2010, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "MP", + "iso_a3": "MNP", + "iso_n3": "580", + "un_a3": "580", + "wb_a2": "MP", + "wb_a3": "MNP", + "woe_id": -99, + "adm0_a3_is": "MNP", + "adm0_a3_us": "MNP", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Micronesia", + "region_wb": "East Asia & Pacific", + "name_len": 14, + "long_len": 24, + "abbrev_len": 6, + "tiny": 3, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 145.73926332724704, + 15.17463695328189 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "United States of America", + "sov_a3": "US1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Guam", + "adm0_a3": "GUM", + "geou_dif": 0, + "geounit": "Guam", + "gu_a3": "GUM", + "su_dif": 0, + "subunit": "Guam", + "su_a3": "GUM", + "brk_diff": 0, + "name": "Guam", + "name_long": "Guam", + "brk_a3": "GUM", + "brk_name": "Guam", + "brk_group": null, + "abbrev": "Guam", + "postal": "GU", + "formal_en": "Territory of Guam", + "formal_fr": null, + "note_adm0": "U.S.A.", + "note_brk": null, + "name_sort": "Guam", + "name_alt": null, + "mapcolor7": 4, + "mapcolor8": 5, + "mapcolor9": 1, + "mapcolor13": 1, + "pop_est": 178430, + "gdp_md_est": 2500, + "pop_year": -99, + "lastcensus": 2010, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "GU", + "iso_a3": "GUM", + "iso_n3": "316", + "un_a3": "316", + "wb_a2": "GU", + "wb_a3": "GUM", + "woe_id": -99, + "adm0_a3_is": "GUM", + "adm0_a3_us": "GUM", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Micronesia", + "region_wb": "East Asia & Pacific", + "name_len": 4, + "long_len": 4, + "abbrev_len": 4, + "tiny": 2, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 144.77003842181864, + 13.459684857600507 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "Federated States of Micronesia", + "sov_a3": "FSM", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Federated States of Micronesia", + "adm0_a3": "FSM", + "geou_dif": 0, + "geounit": "Federated States of Micronesia", + "gu_a3": "FSM", + "su_dif": 0, + "subunit": "Federated States of Micronesia", + "su_a3": "FSM", + "brk_diff": 0, + "name": "Micronesia", + "name_long": "Federated States of Micronesia", + "brk_a3": "FSM", + "brk_name": "Micronesia", + "brk_group": null, + "abbrev": "F.S.M.", + "postal": "FSM", + "formal_en": "Federated States of Micronesia", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Micronesia, Federated States of", + "name_alt": null, + "mapcolor7": 5, + "mapcolor8": 2, + "mapcolor9": 4, + "mapcolor13": 13, + "pop_est": 107434, + "gdp_md_est": 238.1, + "pop_year": -99, + "lastcensus": 2000, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "FM", + "iso_a3": "FSM", + "iso_n3": "583", + "un_a3": "583", + "wb_a2": "FM", + "wb_a3": "FSM", + "woe_id": -99, + "adm0_a3_is": "FSM", + "adm0_a3_us": "FSM", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Micronesia", + "region_wb": "East Asia & Pacific", + "name_len": 10, + "long_len": 30, + "abbrev_len": 6, + "tiny": -99, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 158.2420151934607, + 6.885941535379288 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "Marshall Islands", + "sov_a3": "MHL", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Marshall Islands", + "adm0_a3": "MHL", + "geou_dif": 0, + "geounit": "Marshall Islands", + "gu_a3": "MHL", + "su_dif": 0, + "subunit": "Marshall Islands", + "su_a3": "MHL", + "brk_diff": 0, + "name": "Marshall Is.", + "name_long": "Marshall Islands", + "brk_a3": "MHL", + "brk_name": "Marshall Is.", + "brk_group": null, + "abbrev": "M. Is.", + "postal": "MH", + "formal_en": "Republic of the Marshall Islands", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Marshall Islands", + "name_alt": null, + "mapcolor7": 2, + "mapcolor8": 5, + "mapcolor9": 5, + "mapcolor13": 3, + "pop_est": 64522, + "gdp_md_est": 133.5, + "pop_year": -99, + "lastcensus": 2011, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "MH", + "iso_a3": "MHL", + "iso_n3": "584", + "un_a3": "584", + "wb_a2": "MH", + "wb_a3": "MHL", + "woe_id": -99, + "adm0_a3_is": "MHL", + "adm0_a3_us": "MHL", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Micronesia", + "region_wb": "East Asia & Pacific", + "name_len": 12, + "long_len": 16, + "abbrev_len": 6, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 168.72896600641184, + 7.313460144816133 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "Kiribati", + "sov_a3": "KIR", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Kiribati", + "adm0_a3": "KIR", + "geou_dif": 0, + "geounit": "Kiribati", + "gu_a3": "KIR", + "su_dif": 0, + "subunit": "Kiribati", + "su_a3": "KIR", + "brk_diff": 0, + "name": "Kiribati", + "name_long": "Kiribati", + "brk_a3": "KIR", + "brk_name": "Kiribati", + "brk_group": null, + "abbrev": "Kir.", + "postal": "KI", + "formal_en": "Republic of Kiribati", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Kiribati", + "name_alt": null, + "mapcolor7": 5, + "mapcolor8": 7, + "mapcolor9": 6, + "mapcolor13": 12, + "pop_est": 112850, + "gdp_md_est": 579.5, + "pop_year": -99, + "lastcensus": 2005, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "KI", + "iso_a3": "KIR", + "iso_n3": "296", + "un_a3": "296", + "wb_a2": "KI", + "wb_a3": "KIR", + "woe_id": -99, + "adm0_a3_is": "KIR", + "adm0_a3_us": "KIR", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Micronesia", + "region_wb": "East Asia & Pacific", + "name_len": 8, + "long_len": 8, + "abbrev_len": 4, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 173.13515838316619, + 1.364258124187756 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "Nauru", + "sov_a3": "NRU", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Nauru", + "adm0_a3": "NRU", + "geou_dif": 0, + "geounit": "Nauru", + "gu_a3": "NRU", + "su_dif": 0, + "subunit": "Nauru", + "su_a3": "NRU", + "brk_diff": 0, + "name": "Nauru", + "name_long": "Nauru", + "brk_a3": "NRU", + "brk_name": "Nauru", + "brk_group": null, + "abbrev": "Nauru", + "postal": "NR", + "formal_en": "Republic of Nauru", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Nauru", + "name_alt": null, + "mapcolor7": 3, + "mapcolor8": 7, + "mapcolor9": 6, + "mapcolor13": 9, + "pop_est": 14019, + "gdp_md_est": 60, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "4. Lower middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "NR", + "iso_a3": "NRU", + "iso_n3": "520", + "un_a3": "520", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "NRU", + "adm0_a3_us": "NRU", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Micronesia", + "region_wb": "East Asia & Pacific", + "name_len": 5, + "long_len": 5, + "abbrev_len": 5, + "tiny": 3, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 166.93748256244703, + -0.523068535976108 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 5, + "sr_label_o": 6, + "sovereignt": "Tuvalu", + "sov_a3": "TUV", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Tuvalu", + "adm0_a3": "TUV", + "geou_dif": 0, + "geounit": "Tuvalu", + "gu_a3": "TUV", + "su_dif": 0, + "subunit": "Tuvalu", + "su_a3": "TUV", + "brk_diff": 0, + "name": "Tuvalu", + "name_long": "Tuvalu", + "brk_a3": "TUV", + "brk_name": "Tuvalu", + "brk_group": null, + "abbrev": "Tuv.", + "postal": "TV", + "formal_en": "Tuvalu", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Tuvalu", + "name_alt": null, + "mapcolor7": 1, + "mapcolor8": 3, + "mapcolor9": 8, + "mapcolor13": 5, + "pop_est": 12373, + "gdp_md_est": 14.94, + "pop_year": -99, + "lastcensus": 2002, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "3. Upper middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "TV", + "iso_a3": "TUV", + "iso_n3": "798", + "un_a3": "798", + "wb_a2": "TV", + "wb_a3": "TUV", + "woe_id": -99, + "adm0_a3_is": "TUV", + "adm0_a3_us": "TUV", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Oceania", + "region_un": "Oceania", + "subregion": "Polynesia", + "region_wb": "East Asia & Pacific", + "name_len": 6, + "long_len": 6, + "abbrev_len": 4, + "tiny": 5, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries Pacific" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 179.20397422623353, + -8.49972371316585 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 4, + "sovereignt": "Mauritius", + "sov_a3": "MUS", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Mauritius", + "adm0_a3": "MUS", + "geou_dif": 0, + "geounit": "Mauritius", + "gu_a3": "MUS", + "su_dif": 0, + "subunit": "Mauritius", + "su_a3": "MUS", + "brk_diff": 0, + "name": "Mauritius", + "name_long": "Mauritius", + "brk_a3": "MUS", + "brk_name": "Mauritius", + "brk_group": null, + "abbrev": "Mus.", + "postal": "MU", + "formal_en": "Republic of Mauritius", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Mauritius", + "name_alt": null, + "mapcolor7": 1, + "mapcolor8": 3, + "mapcolor9": 5, + "mapcolor13": 7, + "pop_est": 1284264, + "gdp_md_est": 15270, + "pop_year": -99, + "lastcensus": 2011, + "gdp_year": -99, + "economy": "6. Developing region", + "income_grp": "3. Upper middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "MU", + "iso_a3": "MUS", + "iso_n3": "480", + "un_a3": "480", + "wb_a2": "MU", + "wb_a3": "MUS", + "woe_id": -99, + "adm0_a3_is": "MUS", + "adm0_a3_us": "MUS", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Africa", + "subregion": "Eastern Africa", + "region_wb": "Sub-Saharan Africa", + "name_len": 9, + "long_len": 9, + "abbrev_len": 4, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 57.58565995816849, + -20.302274672122962 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "Comoros", + "sov_a3": "COM", + "adm0_dif": 0, + "level": 2, + "type": "Sovereign country", + "admin": "Comoros", + "adm0_a3": "COM", + "geou_dif": 0, + "geounit": "Comoros", + "gu_a3": "COM", + "su_dif": 0, + "subunit": "Comoros", + "su_a3": "COM", + "brk_diff": 0, + "name": "Comoros", + "name_long": "Comoros", + "brk_a3": "COM", + "brk_name": "Comoros", + "brk_group": null, + "abbrev": "Com.", + "postal": "KM", + "formal_en": "Union of the Comoros", + "formal_fr": null, + "note_adm0": null, + "note_brk": null, + "name_sort": "Comoros", + "name_alt": null, + "mapcolor7": 2, + "mapcolor8": 1, + "mapcolor9": 4, + "mapcolor13": 10, + "pop_est": 752438, + "gdp_md_est": 751.2, + "pop_year": -99, + "lastcensus": 2003, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "5. Low income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "KM", + "iso_a3": "COM", + "iso_n3": "174", + "un_a3": "174", + "wb_a2": "KM", + "wb_a3": "COM", + "woe_id": -99, + "adm0_a3_is": "COM", + "adm0_a3_us": "COM", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Africa", + "region_un": "Africa", + "subregion": "Eastern Africa", + "region_wb": "Sub-Saharan Africa", + "name_len": 7, + "long_len": 7, + "abbrev_len": 4, + "tiny": 2, + "homepart": 1, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + 43.337943198143535, + -11.715555516231973 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "Denmark", + "sov_a3": "DN1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Faroe Islands", + "adm0_a3": "FRO", + "geou_dif": 0, + "geounit": "Faroe Islands", + "gu_a3": "FRO", + "su_dif": 0, + "subunit": "Faroe Islands", + "su_a3": "FRO", + "brk_diff": 0, + "name": "Faeroe Is.", + "name_long": "Faeroe Islands", + "brk_a3": "FRO", + "brk_name": "Faeroe Islands", + "brk_group": null, + "abbrev": "Faeroe Is.", + "postal": "FO", + "formal_en": "Føroyar Is. (Faeroe Is.)", + "formal_fr": null, + "note_adm0": "Den.", + "note_brk": null, + "name_sort": "Faeroe Islands", + "name_alt": null, + "mapcolor7": 4, + "mapcolor8": 1, + "mapcolor9": 3, + "mapcolor13": 12, + "pop_est": 48856, + "gdp_md_est": 1000, + "pop_year": -99, + "lastcensus": 2011, + "gdp_year": -99, + "economy": "2. Developed region: nonG7", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "FO", + "iso_a3": "FRO", + "iso_n3": "234", + "un_a3": "234", + "wb_a2": "FO", + "wb_a3": "FRO", + "woe_id": -99, + "adm0_a3_is": "FRO", + "adm0_a3_us": "FRO", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Europe", + "region_un": "Europe", + "subregion": "Northern Europe", + "region_wb": "Europe & Central Asia", + "name_len": 10, + "long_len": 14, + "abbrev_len": 10, + "tiny": 3, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -6.942567803221323, + 62.19161776035833 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "Norway", + "sov_a3": "NOR", + "adm0_dif": 0, + "level": 3, + "type": "Geo unit", + "admin": "Norway", + "adm0_a3": "NOR", + "geou_dif": 1, + "geounit": "Jan Mayen", + "gu_a3": "NJM", + "su_dif": 0, + "subunit": "Jan Mayen", + "su_a3": "NJM", + "brk_diff": 0, + "name": "Jan Mayen I.", + "name_long": "Jan Mayen Island", + "brk_a3": "NJM", + "brk_name": "Jan Mayen", + "brk_group": null, + "abbrev": "J.M.", + "postal": "JM", + "formal_en": null, + "formal_fr": null, + "note_adm0": "Nor.", + "note_brk": null, + "name_sort": "Jan Mayen I.", + "name_alt": null, + "mapcolor7": 5, + "mapcolor8": 3, + "mapcolor9": 8, + "mapcolor13": 12, + "pop_est": 20, + "gdp_md_est": -99, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "5. Low income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "-99", + "iso_a3": "-99", + "iso_n3": "-99", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "SJM", + "adm0_a3_us": "NOR", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Europe", + "region_un": "Europe", + "subregion": "Northern Europe", + "region_wb": "Europe & Central Asia", + "name_len": 12, + "long_len": 16, + "abbrev_len": 4, + "tiny": -99, + "homepart": -99, + "featureclass": "Admin-0 Tiny GeoUnit" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -8.420617438175157, + 71.02824880643254 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "France", + "sov_a3": "FR1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Saint Pierre and Miquelon", + "adm0_a3": "SPM", + "geou_dif": 0, + "geounit": "Saint Pierre and Miquelon", + "gu_a3": "SPM", + "su_dif": 0, + "subunit": "Saint Pierre and Miquelon", + "su_a3": "SPM", + "brk_diff": 0, + "name": "St. Pierre and Miquelon", + "name_long": "Saint Pierre and Miquelon", + "brk_a3": "SPM", + "brk_name": "St. Pierre and Miquelon", + "brk_group": null, + "abbrev": "St. P.M.", + "postal": "PM", + "formal_en": "Saint Pierre and Miquelon", + "formal_fr": null, + "note_adm0": "Fr.", + "note_brk": null, + "name_sort": "St. Pierre and Miquelon", + "name_alt": null, + "mapcolor7": 7, + "mapcolor8": 5, + "mapcolor9": 9, + "mapcolor13": 11, + "pop_est": 7051, + "gdp_md_est": 48.3, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "2. Developed region: nonG7", + "income_grp": "3. Upper middle income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "PM", + "iso_a3": "SPM", + "iso_n3": "666", + "un_a3": "666", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "SPM", + "adm0_a3_us": "SPM", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "North America", + "region_un": "Americas", + "subregion": "Northern America", + "region_wb": "North America", + "name_len": 23, + "long_len": 25, + "abbrev_len": 8, + "tiny": 3, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -56.31570304234327, + 46.85746558614022 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 4, + "sovereignt": "United Kingdom", + "sov_a3": "GB1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "Bermuda", + "adm0_a3": "BMU", + "geou_dif": 0, + "geounit": "Bermuda", + "gu_a3": "BMU", + "su_dif": 0, + "subunit": "Bermuda", + "su_a3": "BMU", + "brk_diff": 0, + "name": "Bermuda", + "name_long": "Bermuda", + "brk_a3": "BMU", + "brk_name": "Bermuda", + "brk_group": null, + "abbrev": "Berm.", + "postal": "BM", + "formal_en": "The Bermudas or Somers Isles", + "formal_fr": null, + "note_adm0": "U.K.", + "note_brk": null, + "name_sort": "Bermuda", + "name_alt": null, + "mapcolor7": 6, + "mapcolor8": 6, + "mapcolor9": 6, + "mapcolor13": 3, + "pop_est": 67837, + "gdp_md_est": 4500, + "pop_year": -99, + "lastcensus": 2010, + "gdp_year": -99, + "economy": "2. Developed region: nonG7", + "income_grp": "2. High income: nonOECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "BM", + "iso_a3": "BMU", + "iso_n3": "060", + "un_a3": "060", + "wb_a2": "BM", + "wb_a3": "BMU", + "woe_id": -99, + "adm0_a3_is": "BMU", + "adm0_a3_us": "BMU", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "North America", + "region_un": "Americas", + "subregion": "Northern America", + "region_wb": "North America", + "name_len": 7, + "long_len": 7, + "abbrev_len": 5, + "tiny": 4, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -64.74797798630703, + 32.307221641280876 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "Portugal", + "sov_a3": "PRT", + "adm0_dif": 0, + "level": 3, + "type": "Geo unit", + "admin": "Portugal", + "adm0_a3": "PRT", + "geou_dif": 1, + "geounit": "Azores", + "gu_a3": "PAZ", + "su_dif": 0, + "subunit": "Azores", + "su_a3": "PAZ", + "brk_diff": 0, + "name": "Azores", + "name_long": "Azores", + "brk_a3": "PAZ", + "brk_name": "Azores", + "brk_group": null, + "abbrev": "Az.", + "postal": "AZ", + "formal_en": null, + "formal_fr": null, + "note_adm0": "Port.", + "note_brk": null, + "name_sort": "Azores", + "name_alt": null, + "mapcolor7": 1, + "mapcolor8": 7, + "mapcolor9": 1, + "mapcolor13": 4, + "pop_est": 235374, + "gdp_md_est": 4492, + "pop_year": 0, + "lastcensus": -99, + "gdp_year": 0, + "economy": "2. Developed region: nonG7", + "income_grp": "1. High income: OECD", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "-99", + "iso_a3": "-99", + "iso_n3": "-99", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "-99", + "adm0_a3_us": "PRT", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Europe", + "subregion": "Southern Europe", + "region_wb": "Europe & Central Asia", + "name_len": 6, + "long_len": 6, + "abbrev_len": 3, + "tiny": -99, + "homepart": -99, + "featureclass": "Admin-0 Tiny GeoUnit" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -28.423474244011175, + 38.48233011770992 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 2, + "sr_label_o": 6, + "sovereignt": "Spain", + "sov_a3": "ESP", + "adm0_dif": 0, + "level": 4, + "type": "Geo subunit", + "admin": "Spain", + "adm0_a3": "ESP", + "geou_dif": 0, + "geounit": "Spain", + "gu_a3": "ESP", + "su_dif": 1, + "subunit": "Canary Islands", + "su_a3": "ESC", + "brk_diff": 0, + "name": "Canary Is.", + "name_long": "Canary Islands", + "brk_a3": "ESC", + "brk_name": "Canary Is.", + "brk_group": null, + "abbrev": "Can. Is.", + "postal": "CI", + "formal_en": null, + "formal_fr": null, + "note_adm0": "Sp.", + "note_brk": null, + "name_sort": "Canary Islands", + "name_alt": null, + "mapcolor7": 4, + "mapcolor8": 5, + "mapcolor9": 5, + "mapcolor13": 5, + "pop_est": 2098593, + "gdp_md_est": 72654.55481, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "-99", + "income_grp": "-99", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "-99", + "iso_a3": "-99", + "iso_n3": "-99", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "ESP", + "adm0_a3_us": "ESP", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Africa", + "region_un": "Europe", + "subregion": "Southern Europe", + "region_wb": "Europe & Central Asia", + "name_len": 10, + "long_len": 14, + "abbrev_len": 8, + "tiny": -99, + "homepart": -99, + "featureclass": "Admin-0 Tiny GeoSubunit" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -16.592772263568634, + 28.228989968662177 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "Portugal", + "sov_a3": "PRT", + "adm0_dif": 0, + "level": 3, + "type": "Geo unit", + "admin": "Portugal", + "adm0_a3": "PRT", + "geou_dif": 1, + "geounit": "Madeira", + "gu_a3": "PMD", + "su_dif": 0, + "subunit": "Madeira", + "su_a3": "PMD", + "brk_diff": 0, + "name": "Madeira", + "name_long": "Madeira", + "brk_a3": "PMD", + "brk_name": "Madeira", + "brk_group": null, + "abbrev": "Mad.", + "postal": "MD", + "formal_en": null, + "formal_fr": null, + "note_adm0": "Port.", + "note_brk": null, + "name_sort": "Madeira", + "name_alt": null, + "mapcolor7": 1, + "mapcolor8": 7, + "mapcolor9": 1, + "mapcolor13": 4, + "pop_est": 267785, + "gdp_md_est": 6414, + "pop_year": 0, + "lastcensus": -99, + "gdp_year": 0, + "economy": "2. Developed region: nonG7", + "income_grp": "1. High income: OECD", + "wikipedia": 0, + "fips_10": null, + "iso_a2": "-99", + "iso_a3": "-99", + "iso_n3": "-99", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "-99", + "adm0_a3_us": "PRT", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Africa", + "region_un": "Europe", + "subregion": "Southern Europe", + "region_wb": "Europe & Central Asia", + "name_len": 7, + "long_len": 7, + "abbrev_len": 4, + "tiny": -99, + "homepart": -99, + "featureclass": "Admin-0 Tiny GeoUnit" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -16.959751345358598, + 32.74536514049669 + ] + } + }, + { + "type": "Feature", + "properties": { + "scalerank": 2, + "sr_label_i": 3, + "sr_label_o": 6, + "sovereignt": "United Kingdom", + "sov_a3": "GB1", + "adm0_dif": 1, + "level": 2, + "type": "Dependency", + "admin": "South Georgia and South Sandwich Islands", + "adm0_a3": "SGS", + "geou_dif": 0, + "geounit": "South Georgia and South Sandwich Islands", + "gu_a3": "SGS", + "su_dif": 0, + "subunit": "South Georgia and South Sandwich Islands", + "su_a3": "SGS", + "brk_diff": 0, + "name": "S. Geo. and S. Sandw. Is.", + "name_long": "South Georgia and South Sandwich Islands", + "brk_a3": "SGS", + "brk_name": "S. Geo. and S. Sandw. Is.", + "brk_group": null, + "abbrev": "S.G. S.S. Is.", + "postal": "GS", + "formal_en": "South Georgia and South Sandwich Islands", + "formal_fr": null, + "note_adm0": "U.K.", + "note_brk": null, + "name_sort": "South Georgia and the Islands", + "name_alt": null, + "mapcolor7": 6, + "mapcolor8": 6, + "mapcolor9": 6, + "mapcolor13": 3, + "pop_est": 30, + "gdp_md_est": 0.3, + "pop_year": -99, + "lastcensus": -99, + "gdp_year": -99, + "economy": "7. Least developed region", + "income_grp": "5. Low income", + "wikipedia": -99, + "fips_10": null, + "iso_a2": "GS", + "iso_a3": "SGS", + "iso_n3": "239", + "un_a3": "-099", + "wb_a2": "-99", + "wb_a3": "-99", + "woe_id": -99, + "adm0_a3_is": "SGS", + "adm0_a3_us": "SGS", + "adm0_a3_un": -99, + "adm0_a3_wb": -99, + "continent": "Seven seas (open ocean)", + "region_un": "Seven seas (open ocean)", + "subregion": "Seven seas (open ocean)", + "region_wb": "Antarctica", + "name_len": 25, + "long_len": 40, + "abbrev_len": 13, + "tiny": 3, + "homepart": -99, + "featureclass": "Admin-0 Tiny Countries" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -36.792143407672654, + -54.274478863695265 + ] + } + } + ] +}
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml new file mode 100644 index 0000000000..865baede0e --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/actions.xml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="menuitem_title_concurrent_infowindow">Concurrent Open InfoWindows</string> + <string name="menuitem_title_deselect_markers_on_tap">Deselect Markers On Tap</string> + <string name="menuitem_title_tracking_mode_dismiss_on_gesture">Dismiss location tracking on gesture</string> + <string name="menuitem_title_bearing_mode_dismiss_on_gesture">Dismiss bearing tracking on gesture</string> + <string name="menuitem_title_reset">Reset</string> + <string name="menuitem_title_rotate_gesture_enabled">Enable rotate gestures</string> + <string name="menuitem_title_scroll_gesture_enabled">Enable scroll gestures</string> + <string name="menuitem_title_change_location_source_lost">Change to LOST location source</string> + <string name="menuitem_title_change_location_source_mock">Change to mock location source</string> + <string name="menuitem_title_change_location_source_null">Reset location source to null</string> + <string name="menuitem_change_icon_overlap">Toggle icon overlap</string> + <string name="button_camera_move">Move</string> + <string name="button_camera_ease">Ease</string> + <string name="button_camera_animate">Animate</string> + <string name="button_user_dot_default">Default</string> + <string name="button_user_dot_tint">Tint dot</string> + <string name="button_user_accuracy_ring_tint">Tint ring</string> + <string name="button_user_transparent_tint">tran</string> + <string name="button_open_dialog">Open dialog</string> + <string name="button_download_region">Download region</string> + <string name="button_list_regions">List regions</string> + <string name="action_remove_polylines">Remove polylines</string> + <string name="action_visibility_polygon">Change visibility</string> + <string name="action_alpha_polygon">Change alpha</string> + <string name="action_points_polygon">Change points</string> + <string name="action_color_polygon">Change color</string> + <string name="action_holes_polygon">Change holes</string> + <string name="action_width_polyline">Change width</string> + <string name="action_calculate_distance">"Click the map to calculate the distance"</string> + <string name="action_scroll_by">Move the map by x/y pixels</string> + <string name="navigation_drawer_open">Open navigation drawer</string> + <string name="navigation_drawer_close">Close navigation drawer</string> + <string name="scrollby_x_value">X: %1$d</string> + <string name="scrollby_y_value">Y: %1$d</string> + <string name="dialog_camera_position">Animate to new position</string> + <string name="dynamic_marker_chelsea_title">Chelsea</string> + <string name="dynamic_marker_chelsea_snippet">Stamford Bridge</string> + <string name="dynamic_marker_arsenal_title">Arsenal</string> + <string name="dynamic_marker_arsenal_snippet">Emirates Stadium</string> + <string name="debug_zoom">Zoom: %.2f</string> + <string name="viewcache_size">ViewCache size %.2f</string> + <string name="latitude">Latitude</string> + <string name="min_value">-180</string> + <string name="longitude">Longitude</string> + <string name="zoom">Zoom</string> + <string name="default_zoom_value">18</string> + <string name="bearing">Bearing</string> + <string name="default_tilt_value">0</string> + <string name="tilt">Tilt</string> + <string name="no_results">No Results</string> + <string name="change_intensity">Change intensity</string> + <string name="change_anchor">Change Anchor</string> + <string name="amount_of_markers">Amount of markers</string> + <string name="update_layer_invalidate">Update layer (invalidate)</string> + <string name="red">Red</string> + <string name="green">Green</string> + <string name="blue">Blue</string> + <string name="add_an_exponential_zoom_function">Add an exponential zoom function</string> + <string name="add_an_interval_zoom_function">Add an interval zoom function</string> + <string name="add_a_categorical_source_function">Add a categorical source function</string> + <string name="add_an_exponential_source_function">Add an exponential source function</string> + <string name="add_an_identity_source_function">Add an identity source function</string> + <string name="add_an_interval_source_function">Add an interval source function</string> + <string name="add_a_composite_categorical_function">Add a composite, categorical function</string> + <string name="add_a_composite_exponential_function">Add a composite, exponential function</string> + <string name="add_a_composite_interval_function">Add a composite, interval function</string> + <string name="my_location_tracking">My Location Tracking</string> + <string name="bangalore">Bangalore</string> + <string name="list_all_layers_in_the_style">List all layers in the style</string> + <string name="list_all_sources_in_the_style">List all sources in the style</string> + <string name="color_the_water">Color the water</string> + <string name="set_background_opacity">Set background opacity</string> + <string name="set_road_symbol_placement_to_point">Set road symbol placement to Point</string> + <string name="set_layer_visibility_to_false">Set layer visibility to false</string> + <string name="add_a_parks_layer">Add a parks layer</string> + <string name="add_a_dynamic_geojson_source">Add a dynamic GeoJSON source</string> + <string name="remove_buildings_layer">Remove buildings layer</string> + <string name="add_a_terrain_layer">Add a terrain layer</string> + <string name="add_a_satellite_layer">Add a satellite layer</string> + <string name="change_the_water_color_on_zoom">Change the water color on zoom</string> + <string name="custom_tiles">Custom tiles</string> + <string name="apply_filtered_fill">Apply filtered fill</string> + <string name="apply_filtered_line">Apply filtered line</string> + <string name="apply_numeric_fill_filter">Apply numeric fill filter</string> + <string name="toggle_text_size">Toggle text size</string> + <string name="toggle_text_field_contents">Toggle text field contents</string> + <string name="toggle_text_font">Toggle text font</string> + <string name="zoom_in">Zoom in</string> + <string name="zoom_out">Zoom out</string> + <string name="zoom_by_2">Zoom by 2</string> + <string name="zoom_to_point">Zoom to point</string> + <string name="zoom_to_4">Zoom to 4</string> +</resources>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/categories.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/categories.xml new file mode 100644 index 0000000000..9ade28ae8d --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/categories.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="category">category</string> + <string name="category_basic">_Basic</string> + <string name="category_annotation">Annotation</string> + <string name="category_camera">Camera</string> + <string name="category_custom_layer">Custom Layer</string> + <string name="category_fragment">Fragment</string> + <string name="category_imagegenerator">Image Generator</string> + <string name="category_infowindow">Info Window</string> + <string name="category_maplayout">Map Layout</string> + <string name="category_offline">Offline</string> + <string name="category_userlocation">User Location</string> + <string name="category_style">Styling</string> + <string name="category_features">Features</string> + <string name="category_storage">Storage</string> +</resources>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml new file mode 100644 index 0000000000..4d1f7eac38 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="description_user_location_tracking">Tracks the location of the user</string> + <string name="description_user_location_customization">Customize the location of the user</string> + <string name="description_user_location_dot_color">Customize the user location color</string> + <string name="description_user_location_toggle">Toggle location of the user on and off</string> + <string name="description_custom_location_engine">Customize location engine</string> + <string name="description_custom_layer">Overlay a custom native layer on the map</string> + <string name="description_info_window_adapter">Learn how to create a custom InfoWindow</string> + <string name="description_cameraposition">CameraPosition capabilities</string> + <string name="description_map_fragment">Showcase MapFragment</string> + <string name="description_map_fragment_support">Showcase SupportMapFragment</string> + <string name="description_multimap">Activity with multiple maps on screen</string> + <string name="description_press_for_marker">Add marker to map on long press</string> + <string name="description_camera_zoom">Different types of zoom methods</string> + <string name="description_minmax_zoom">Configure a max and min zoomlevel</string> + <string name="description_info_window">Learn how to handle the InfoWindow</string> + <string name="description_add_bulk_markers">Add Markers In Bulk to a Map</string> + <string name="description_camera_animation_types">Showcase the different animation types</string> + <string name="description_visible_bounds">Center the camera around a bounds</string> + <string name="description_dynamic_marker">Update position and icon</string> + <string name="description_map_padding">Map Padding example</string> + <string name="description_debug_mode">Debug Mode</string> + <string name="description_offline">Offline Map example</string> + <string name="description_update_metadata">Update metadata example</string> + <string name="description_offline_region_delete">Delete region example</string> + <string name="description_animated_marker">Animate the position change of a marker</string> + <string name="description_polyline">Add a polyline to a map</string> + <string name="description_polygon">Add a polygon to a map</string> + <string name="description_scroll_by">Scroll with pixels in x,y direction</string> + <string name="description_snapshot">Example to make a snapshot of the map</string> + <string name="description_doublemap">2 maps in a view hierarchy</string> + <string name="description_view_marker">Use an Android SDK View as marker</string> + <string name="description_dynamic_info_window_adapter">Learn how to create a dynamic custom InfoWindow</string> + <string name="description_viewpager">Use SupportMapFragments in a ViewPager</string> + <string name="description_runtime_style">Adopt the map style on the fly</string> + <string name="description_data_driven_style">Use functions to change the map appearance</string> + <string name="description_symbol_layer">Manipulate symbols at runtime</string> + <string name="description_custom_sprite">Use a custom sprite in a Symbol Layer</string> + <string name="description_geojson_clustering">Use GeoJson sources and dynamic layers to cluster information</string> + <string name="description_geojson_realtime">Use realtime GeoJSON data streams to move a symbol on your map</string> + <string name="description_print">Shows how to print a map</string> + <string name="description_query_rendered_feature_properties_point">Query rendered feature properties on click</string> + <string name="description_query_rendered_features_box_count">Count all rendered features in box</string> + <string name="description_query_rendered_features_box_symbol_count">Count all rendered symbols in box</string> + <string name="description_query_rendered_features_box_highlight">Hightligh buildings in box</string> + <string name="description_query_source_features">Query source for features</string> + <string name="description_simple_map">Shows a simple map</string> + <string name="description_map_change">Logs map change events to Logcat</string> + <string name="description_visibility_map">Changes visibility of map and view parent</string> + <string name="description_add_remove_markers">Change Symbol icon when zoom levels changes</string> + <string name="description_style_file">Use a local file as the style</string> + <string name="description_map_in_dialog">Display a map inside a dialog fragment</string> + <string name="description_marker_view_rectangle">Marker Views within a rectangle</string> + <string name="description_circle_layer">Show bus stops and route in Singapore</string> + <string name="description_url_transform">Transform urls on the fly</string> + <string name="description_restricted_bounds">Limit viewport to Iceland</string> + <string name="description_fill_extrusion_layer">Shows how to add 3D extruded shapes</string> + <string name="description_building_fill_extrusion_layer">Shows how to show 3D extruded buildings</string> + <string name="description_animated_image_source">Shows how to animate georeferenced images</string> + <string name="description_bottom_sheet">Show 2 MapView on screen with a bottom sheet</string> + <string name="description_map_snapshotter">Show a static bitmap taken with the MapSnapshotter</string> + <string name="description_camera_animator">Use Android SDK Animators to animate camera position changes</string> + <string name="description_symbol_generator">Use Android SDK Views as symbols</string> +</resources>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/dimens.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/dimens.xml index 402d42d485..0a43af09de 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/dimens.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/dimens.xml @@ -1,9 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <dimen name="circle_size">24dp</dimen> <dimen name="fab_margin">16dp</dimen> <dimen name="attr_margin">10dp</dimen> - <dimen name="coordinatebounds_margin">32dp</dimen> <dimen name="map_padding_left">96dp</dimen> <dimen name="map_padding_bottom">256dp</dimen> <dimen name="map_padding_right">32dp</dimen> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml index 74833105a4..15a916fac9 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/strings.xml @@ -1,181 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Mapbox Android SDK TestApp</string> - - <!--Activity--> - <string name="activity_map_fragment_suport">Support Map Fragment</string> - <string name="activity_map_fragment">Map Fragment</string> - <string name="activity_multimap">Multiple Maps on Screen</string> - <string name="activity_add_bulk_markers">Add Markers In Bulk</string> - <string name="activity_animated_marker">Animated Markers</string> - <string name="activity_dynamic_marker">Dynamic Marker</string> - <string name="activity_polyline">Polyline</string> - <string name="activity_polygon">Polygon</string> - <string name="activity_press_for_marker">Press Map For Marker</string> - <string name="activity_view_marker">View Marker API</string> - <string name="activity_add_remove_markers">Add/Remove marker</string> - <string name="activity_info_window">Standard InfoWindow</string> - <string name="activity_infowindow_adapter">Custom InfoWindow</string> - <string name="activity_dynamic_infowindow_adapter">Custom Dynamic InfoWindow</string> - <string name="activity_camera_animation_types">Animation Types</string> - <string name="activity_camera_zoom">Zoom Methods</string> - <string name="activity_visible_coordinate_bounds">LatLngBounds Method</string> - <string name="activity_camera_position">CameraPosition Method</string> - <string name="activity_scroll_by">Scroll By Method</string> - <string name="activity_double_map">Double Map Activity</string> - <string name="activity_snapshot">Snapshot Activity</string> - <string name="activity_user_tracking_mode">User tracking mode</string> - <string name="activity_user_tracking_customization">User location drawable</string> - <string name="activity_user_dot_color">User location tint color</string> - <string name="activity_user_location_toggle">User location toggle</string> - <string name="activity_custom_location_engine">Custom location engine</string> - <string name="activity_custom_layer">Custom Layer</string> - <string name="activity_map_padding">Map Padding</string> - <string name="activity_debug_mode">Debug Mode</string> - <string name="activity_offline">Offline Map</string> - <string name="activity_update_metadata">Update metadata Map</string> - <string name="activity_offline_region_delete">Delete region</string> - <string name="activity_minmax_zoom">Min/Max Zoom</string> - <string name="activity_viewpager">ViewPager</string> - <string name="activity_runtime_style">Runtime Style</string> - <string name="activity_data_driven_style">Data Driven Style</string> - <string name="activity_circle_layer">Circle layer</string> - <string name="activity_style_file">Local Style file</string> - <string name="activity_geojson_clustering">GeoJson Clustering</string> - <string name="activity_geojson_realtime">Add live realtime data</string> - <string name="activity_print">Print a map</string> - <string name="activity_query_rendered_feature_properties">Query feature properties</string> - <string name="activity_query_rendered_features_box_count">Count features in box</string> - <string name="activity_query_rendered_features_box_symbol_count">Count symbols in box</string> - <string name="activity_query_rendered_features_box_highlight">Highlight features in box</string> - <string name="activity_query_source_features">Query source features</string> - <string name="activity_symbol_layer">Symbols</string> - <string name="activity_add_sprite">Add Custom Sprite</string> - <string name="activity_navigation_drawer">Android SDK View integration</string> - <string name="activity_simple_map">Simple Map</string> - <string name="activity_map_in_dialog">Dialog with map</string> - <string name="activity_marker_view_rectangle">Marker views in rectangle</string> - <string name="activity_url_transform">Url transform</string> - <string name="activity_restricted_bounds">Restrict camera to a bounds</string> - <string name="activity_fill_extrusion_layer">Fill extrusions</string> - <string name="activity_building_fill_extrusion_layer">Building layer</string> - - <!--Description--> - <string name="description_user_location_tracking">Tracks the location of the user</string> - <string name="description_user_location_customization">Customize the location of the user</string> - <string name="description_user_location_dot_color">Customize the user location color</string> - <string name="description_user_location_toggle">Toggle location of the user on and off</string> - <string name="description_custom_location_engine">Customize location engine</string> - <string name="description_custom_layer">Overlay a custom native layer on the map</string> - <string name="description_info_window_adapter">Learn how to create a custom InfoWindow</string> - <string name="description_cameraposition">CameraPosition capabilities</string> - <string name="description_map_fragment">Showcase MapFragment</string> - <string name="description_map_fragment_support">Showcase SupportMapFragment</string> - <string name="description_multimap">Activity with multiple maps on screen</string> - <string name="description_press_for_marker">Add marker to map on long press</string> - <string name="description_camera_zoom">Different types of zoom methods</string> - <string name="description_minmax_zoom">Configure a max and min zoomlevel</string> - <string name="description_info_window">Learn how to handle the InfoWindow</string> - <string name="description_add_bulk_markers">Add Markers In Bulk to a Map</string> - <string name="description_camera_animation_types">Showcase the different animation types</string> - <string name="description_visible_bounds">Center the camera around a bounds</string> - <string name="description_dynamic_marker">Update position and icon</string> - <string name="description_map_padding">Map Padding example</string> - <string name="description_debug_mode">Debug Mode</string> - <string name="description_offline">Offline Map example</string> - <string name="description_update_metadata">Update metadata example</string> - <string name="description_offline_region_delete">Delete region example</string> - <string name="description_animated_marker">Animate the position change of a marker</string> - <string name="description_polyline">Add a polyline to a map</string> - <string name="description_polygon">Add a polygon to a map</string> - <string name="description_scroll_by">Scroll with pixels in x,y direction</string> - <string name="description_snapshot">Example to make a snapshot of the map</string> - <string name="description_doublemap">2 maps in a view hierarchy</string> - <string name="description_view_marker">Use an Android SDK View as marker</string> - <string name="description_dynamic_info_window_adapter">Learn how to create a dynamic custom InfoWindow</string> - <string name="description_viewpager">Use SupportMapFragments in a ViewPager</string> - <string name="description_runtime_style">Adopt the map style on the fly</string> - <string name="description_data_driven_style">Use functions to change the map appearance</string> - <string name="description_symbol_layer">Manipulate symbols at runtime</string> - <string name="description_custom_sprite">Use a custom sprite in a Symbol Layer</string> - <string name="description_geojson_clustering">Use GeoJson sources and dynamic layers to cluster information</string> - <string name="description_geojson_realtime">Use realtime GeoJSON data streams to move a symbol on your map</string> - <string name="description_print">Shows how to print a map</string> - <string name="description_navigation_drawer">Test animation of Android SDK View components</string> - <string name="description_query_rendered_feature_properties_point">Query rendered feature properties on click</string> - <string name="description_query_rendered_features_box_count">Count all rendered features in box</string> - <string name="description_query_rendered_features_box_symbol_count">Count all rendered symbols in box</string> - <string name="description_query_rendered_features_box_highlight">Hightligh buildings in box</string> - <string name="description_query_source_features">Query source for features</string> - <string name="description_simple_map">Shows a simple map</string> - <string name="description_add_remove_markers">Based on zoom level</string> - <string name="description_style_file">Use a local file as the style</string> - <string name="description_map_in_dialog">Display a map inside a dialog fragment</string> - <string name="description_marker_view_rectangle">Marker Views within a rectangle</string> - <string name="description_circle_layer">Show bus stops and route in Singapore</string> - <string name="description_url_transform">Transform urls on the fly</string> - <string name="description_restricted_bounds">Limit viewport to Iceland</string> - <string name="description_fill_extrusion_layer">Shows how to add 3D extruded shapes</string> - <string name="description_building_fill_extrusion_layer">Shows how to show 3D extruded buildings</string> - - <!--Categories--> - <string name="category">category</string> - <string name="category_basic">_Basic</string> - <string name="category_annotation">Annotation</string> - <string name="category_camera">Camera</string> - <string name="category_custom_layer">Custom Layer</string> - <string name="category_fragment">Fragment</string> - <string name="category_imagegenerator">Image Generator</string> - <string name="category_infowindow">Info Window</string> - <string name="category_maplayout">Map Layout</string> - <string name="category_offline">Offline</string> - <string name="category_userlocation">User Location</string> - <string name="category_style">Styling</string> - <string name="category_features">Features</string> - <string name="category_storage">Storage</string> - - <!--Actions--> - <string name="action_remove_polylines">Remove polylines</string> - <string name="action_visibility_polygon">Change visibility</string> - <string name="action_alpha_polygon">Change alpha</string> - <string name="action_points_polygon">Change points</string> - <string name="action_color_polygon">Change color</string> - <string name="action_holes_polygon">Change holes</string> - <string name="action_width_polyline">Change width</string> - - <!--Menu--> - <string name="menuitem_title_concurrent_infowindow">Concurrent Open InfoWindows</string> - <string name="menuitem_title_deselect_markers_on_tap">Deselect Markers On Tap</string> - <string name="menuitem_title_tracking_mode_dismiss_on_gesture">Dismiss location tracking on gesture</string> - <string name="menuitem_title_bearing_mode_dismiss_on_gesture">Dismiss bearing tracking on gesture</string> - <string name="menuitem_title_reset">Reset</string> - <string name="menuitem_title_rotate_gesture_enabled">Enable rotate gestures</string> - <string name="menuitem_title_scroll_gesture_enabled">Enable scroll gestures</string> - <string name="menuitem_title_change_location_source_lost">Change to LOST location source</string> - <string name="menuitem_title_change_location_source_mock">Change to mock location source</string> - <string name="menuitem_title_change_location_source_null">Reset location source to null</string> - - <!--Button--> - <string name="button_camera_move">Move</string> - <string name="button_camera_ease">Ease</string> - <string name="button_camera_animate">Animate</string> - <string name="button_user_dot_default">Default</string> - <string name="button_user_dot_tint">Tint dot</string> - <string name="button_user_accuracy_ring_tint">Tint ring</string> - <string name="button_user_transparent_tint">tran</string> - <string name="button_open_dialog">Open dialog</string> - <string name="button_download_region">Download region</string> - <string name="button_list_regions">List regions</string> - - <!--Other--> - <string name="navigation_drawer_open">Open navigation drawer</string> - <string name="navigation_drawer_close">Close navigation drawer</string> - <string name="scrollby_x_value">X: %1$d</string> - <string name="scrollby_y_value">Y: %1$d</string> - <string name="dialog_camera_position">Animate to new position</string> - <string name="dynamic_marker_chelsea_title">Chelsea</string> - <string name="dynamic_marker_chelsea_snippet">Stamford Bridge</string> - <string name="dynamic_marker_arsenal_title">Arsenal</string> - <string name="dynamic_marker_arsenal_snippet">Emirates Stadium</string> - <string name="debug_zoom">Zoom: %s</string> </resources> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml new file mode 100644 index 0000000000..8f394d0eb4 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="activity_map_fragment_suport">Support Map Fragment</string> + <string name="activity_map_fragment">Map Fragment</string> + <string name="activity_multimap">Multiple Maps on Screen</string> + <string name="activity_add_bulk_markers">Add Markers In Bulk</string> + <string name="activity_animated_marker">Animated Markers</string> + <string name="activity_dynamic_marker">Dynamic Marker</string> + <string name="activity_polyline">Polyline</string> + <string name="activity_polygon">Polygon</string> + <string name="activity_press_for_marker">Press Map For Marker</string> + <string name="activity_view_marker">View Marker API</string> + <string name="activity_add_remove_markers">Zoom function with SymbolLayer</string> + <string name="activity_info_window">Standard InfoWindow</string> + <string name="activity_infowindow_adapter">Custom InfoWindow</string> + <string name="activity_dynamic_infowindow_adapter">Custom Dynamic InfoWindow</string> + <string name="activity_camera_animation_types">Animation Types</string> + <string name="activity_camera_zoom">Zoom Methods</string> + <string name="activity_visible_coordinate_bounds">LatLngBounds Method</string> + <string name="activity_camera_position">CameraPosition Method</string> + <string name="activity_scroll_by">Scroll By Method</string> + <string name="activity_double_map">Double Map Activity</string> + <string name="activity_snapshot">Snapshot Activity</string> + <string name="activity_user_tracking_mode">User tracking mode</string> + <string name="activity_user_tracking_customization">User location drawable</string> + <string name="activity_user_dot_color">User location tint color</string> + <string name="activity_user_location_toggle">User location toggle</string> + <string name="activity_custom_location_engine">Custom location engine</string> + <string name="activity_custom_layer">Custom Layer</string> + <string name="activity_map_padding">Map Padding</string> + <string name="activity_debug_mode">Debug Mode</string> + <string name="activity_offline">Offline Map</string> + <string name="activity_update_metadata">Update metadata Map</string> + <string name="activity_offline_region_delete">Delete region</string> + <string name="activity_minmax_zoom">Min/Max Zoom</string> + <string name="activity_viewpager">ViewPager</string> + <string name="activity_runtime_style">Runtime Style</string> + <string name="activity_data_driven_style">Data Driven Style</string> + <string name="activity_circle_layer">Circle layer</string> + <string name="activity_style_file">Local Style file</string> + <string name="activity_geojson_clustering">GeoJson Clustering</string> + <string name="activity_geojson_realtime">Add live realtime data</string> + <string name="activity_print">Print a map</string> + <string name="activity_query_rendered_feature_properties">Query feature properties</string> + <string name="activity_query_rendered_features_box_count">Count features in box</string> + <string name="activity_query_rendered_features_box_symbol_count">Count symbols in box</string> + <string name="activity_query_rendered_features_box_highlight">Highlight features in box</string> + <string name="activity_query_source_features">Query source features</string> + <string name="activity_symbol_layer">Symbols</string> + <string name="activity_add_sprite">Add Custom Sprite</string> + <string name="activity_simple_map">Simple Map</string> + <string name="activity_map_change">Map Change Events</string> + <string name="activity_map_visibility">Visibility Map</string> + <string name="activity_map_in_dialog">Dialog with map</string> + <string name="activity_marker_view_rectangle">Marker views in rectangle</string> + <string name="activity_url_transform">Url transform</string> + <string name="activity_restricted_bounds">Restrict camera to a bounds</string> + <string name="activity_fill_extrusion_layer">Fill extrusions</string> + <string name="activity_building_fill_extrusion_layer">Building layer</string> + <string name="activity_animated_image_source">Animated Image Source</string> + <string name="activity_bottom_sheet">Bottom sheet</string> + <string name="activity_map_snapshotter">Map Snapshotter</string> + <string name="activity_camera_animator">Animator animation</string> + <string name="activity_symbol_generator">SymbolGenerator</string> +</resources>
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java deleted file mode 100644 index e05190cd57..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/MapboxTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.mapbox.mapboxsdk; - -import android.content.Context; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; - -import com.mapbox.mapboxsdk.exceptions.MapboxConfigurationException; -import com.mapbox.mapboxsdk.location.LocationSource; - -import org.junit.Before; -import org.junit.Test; - -import java.lang.reflect.Field; - -import static junit.framework.TestCase.assertNotNull; -import static junit.framework.TestCase.assertSame; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class MapboxTest { - - private Context context; - private Context appContext; - private LocationSource locationSource; - - @Before - public void before() { - context = mock(Context.class); - appContext = mock(Context.class); - locationSource = mock(LocationSource.class); - when(context.getApplicationContext()).thenReturn(appContext); - } - - @Test - public void testGetAccessToken() { - final String accessToken = "pk.0000000001"; - injectMapboxSingleton(accessToken); - assertSame(accessToken, Mapbox.getAccessToken()); - } - - @Test(expected = MapboxConfigurationException.class) - public void testGetInvalidAccessToken() { - final String accessToken = "dummy"; - injectMapboxSingleton(accessToken); - assertSame(accessToken, Mapbox.getAccessToken()); - } - - @Test - public void testApplicationContext() { - injectMapboxSingleton("dummy"); - assertNotNull(Mapbox.getApplicationContext()); - assertNotEquals(context, appContext); - assertEquals(appContext, appContext); - } - - @Test - public void testConnected() { - injectMapboxSingleton("dummy"); - - // test Android connectivity - ConnectivityManager connectivityManager = mock(ConnectivityManager.class); - NetworkInfo networkInfo = mock(NetworkInfo.class); - when(appContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(connectivityManager); - when(connectivityManager.getActiveNetworkInfo()).thenReturn(networkInfo); - when(networkInfo.isConnected()).thenReturn(false); - assertFalse(Mapbox.isConnected()); - when(networkInfo.isConnected()).thenReturn(true); - assertTrue(Mapbox.isConnected()); - - // test manual connectivity - Mapbox.setConnected(true); - assertTrue(Mapbox.isConnected()); - Mapbox.setConnected(false); - assertFalse(Mapbox.isConnected()); - - // reset to Android connectivity - Mapbox.setConnected(null); - assertTrue(Mapbox.isConnected()); - } - - private void injectMapboxSingleton(String accessToken) { - Mapbox mapbox = new Mapbox(appContext, accessToken, locationSource); - try { - Field field = Mapbox.class.getDeclaredField("INSTANCE"); - field.setAccessible(true); - field.set(mapbox, mapbox); - } catch (Exception exception) { - throw new AssertionError(); - } - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/AnnotationTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/AnnotationTest.java deleted file mode 100644 index 605e159b84..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/AnnotationTest.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import com.mapbox.mapboxsdk.maps.MapboxMap; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -public class AnnotationTest { - - @InjectMocks - private MapboxMap mapboxMap = mock(MapboxMap.class); - private Annotation annotation; - private Annotation compare = new Annotation() { - @Override - public long getId() { - return 1; - } - }; - - @Before - public void beforeTest() { - annotation = new Annotation() { - // empty child - }; - } - - @Test - public void testSanity() { - assertNotNull("markerOptions should not be null", annotation); - } - - @Test - public void testRemove() { - annotation.setId(1); - annotation.setMapboxMap(mapboxMap); - annotation.remove(); - verify(mapboxMap, times(1)).removeAnnotation(annotation); - } - - @Test - public void testRemoveUnboundMapboxMap() { - annotation.setId(1); - annotation.remove(); - verify(mapboxMap, times(0)).removeAnnotation(annotation); - } - - @Test - public void testCompareToEqual() { - annotation.setId(1); - assertEquals("conparable equal", 0, annotation.compareTo(compare)); - } - - @Test - public void testCompareToHigher() { - annotation.setId(3); - assertEquals("conparable higher", -1, annotation.compareTo(compare)); - } - - @Test - public void testCompareTolower() { - annotation.setId(0); - assertEquals("conparable lower", 1, annotation.compareTo(compare)); - } - - @Test - public void testEquals() { - Annotation holder = null; - assertFalse(annotation.equals(holder)); - holder = annotation; - assertTrue(annotation.equals(holder)); - assertFalse(annotation.equals(new Object())); - } - - @Test - public void testHashcode() { - int id = 1; - annotation.setId(id); - assertSame("hashcode should match", annotation.hashCode(), id); - } - -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/IconTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/IconTest.java deleted file mode 100644 index 1c259af2d0..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/IconTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import android.graphics.Bitmap; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotSame; -import static org.mockito.Mockito.when; - -public class IconTest { - - @Mock - Bitmap bitmap; - - @Before - public void beforeTest() { - MockitoAnnotations.initMocks(this); - when(bitmap.getConfig()).thenReturn(Bitmap.Config.ARGB_8888); - } - - @Test - public void testId() { - String id = "test"; - Icon icon = IconFactory.recreate(id, Bitmap.createBitmap(0, 0, Bitmap.Config.ALPHA_8)); - assertEquals("id should match", id, icon.getId()); - } - - @Test - public void testBitmap() { - Icon icon = IconFactory.recreate("test", bitmap); - assertEquals("bitmap should match", bitmap, icon.getBitmap()); - } - - @Test - public void testEquals() { - Icon icon1 = IconFactory.recreate("test", bitmap); - Icon icon2 = IconFactory.recreate("test", bitmap); - assertEquals("icons should not match", icon1, icon2); - } - - @Test - public void testEqualsObject() { - Icon icon = IconFactory.recreate("test", Bitmap.createBitmap(0, 0, Bitmap.Config.ALPHA_8)); - assertNotSame("icon should not match", new Object(), icon); - } - - @Test - public void testHashcode() { - Icon icon = IconFactory.recreate("test", bitmap); - long expectedHashcode = 31 * bitmap.hashCode() + "test".hashCode(); - assertEquals("hashcode should match", expectedHashcode, icon.hashCode()); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/InfoWindowTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/InfoWindowTest.java deleted file mode 100644 index 94b629860e..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/InfoWindowTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import android.graphics.PointF; - -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.maps.MapView; -import com.mapbox.mapboxsdk.maps.MapboxMap; -import com.mapbox.mapboxsdk.maps.Projection; - -import org.junit.Test; -import org.mockito.InjectMocks; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class InfoWindowTest { - - @InjectMocks - MapView mMapView = mock(MapView.class); - - @InjectMocks - MapboxMap mMapboxMap = mock(MapboxMap.class); - - @Test - public void testSanity() { - InfoWindow infoWindow = new InfoWindow(mMapView, mMapboxMap); - assertNotNull("infoWindow should exist", infoWindow); - } - - @Test - public void testBoundMarker() { - MarkerOptions markerOptions = new MarkerOptions(); - Marker marker = markerOptions.position(new LatLng()).getMarker(); - InfoWindow infoWindow = new InfoWindow(mMapView, mMapboxMap).setBoundMarker(marker); - assertEquals("marker should match", marker, infoWindow.getBoundMarker()); - } - - @Test - public void testClose() { - InfoWindow infoWindow = new InfoWindow(mMapView, mMapboxMap); - infoWindow.close(); - assertEquals("infowindow should not be visible", false, infoWindow.isVisible()); - } - - - @Test - public void testOpen() { - LatLng latLng = new LatLng(0, 0); - Projection projection = mock(Projection.class); - when(mMapboxMap.getProjection()).thenReturn(projection); - when(projection.toScreenLocation(latLng)).thenReturn(new PointF(0, 0)); - - InfoWindow infoWindow = new InfoWindow(mMapView, mMapboxMap); - infoWindow.open(mMapView, new MarkerOptions().position(new LatLng()).getMarker(), latLng, 0, 0); - assertEquals("infowindow should not be visible", true, infoWindow.isVisible()); - } - - @Test - public void testOpenClose() { - LatLng latLng = new LatLng(0, 0); - Projection projection = mock(Projection.class); - when(mMapboxMap.getProjection()).thenReturn(projection); - when(projection.toScreenLocation(latLng)).thenReturn(new PointF(0, 0)); - - InfoWindow infoWindow = new InfoWindow(mMapView, mMapboxMap); - infoWindow.open(mMapView, new MarkerOptions().position(new LatLng()).getMarker(), latLng, 0, 0); - infoWindow.close(); - assertEquals("infowindow should not be visible", false, infoWindow.isVisible()); - } - - - @Test - public void testUpdate() { - LatLng latLng = new LatLng(0, 0); - Projection projection = mock(Projection.class); - when(mMapboxMap.getProjection()).thenReturn(projection); - when(projection.toScreenLocation(latLng)).thenReturn(new PointF(0, 0)); - - InfoWindow infoWindow = new InfoWindow(mMapView, mMapboxMap); - infoWindow.open(mMapView, new MarkerOptions().position(latLng).getMarker(), latLng, 0, 0); - infoWindow.update(); - } - -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/MarkerTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/MarkerTest.java deleted file mode 100644 index fa571e06b1..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/MarkerTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import android.graphics.Bitmap; -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.exceptions.InvalidMarkerPositionException; -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.mock; - -public class MarkerTest { - - @Test - public void testSanity() { - MarkerOptions markerOptions = new MarkerOptions(); - assertNotNull("markerOptions should not be null", markerOptions); - } - - @Test - public void testMarker() { - MarkerOptions markerOptions = new MarkerOptions().position(new LatLng()); - assertNotNull("marker should not be null", markerOptions.getMarker()); - } - - @Test(expected = InvalidMarkerPositionException.class) - public void testInvalidMarker() { - new MarkerOptions().getMarker(); - } - - @Test - public void testPosition() { - MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(10, 12)); - Marker marker = markerOptions.getMarker(); - assertEquals(marker.getPosition(), new LatLng(10, 12)); - assertEquals(markerOptions.getPosition(), new LatLng(10, 12)); - } - - @Test - public void testTitle() { - MarkerOptions markerOptions = new MarkerOptions().title("Mapbox").position(new LatLng()); - Marker marker = markerOptions.getMarker(); - assertEquals(marker.getTitle(), "Mapbox"); - assertEquals(markerOptions.getTitle(), "Mapbox"); - } - - @Test - public void testSnippet() { - MarkerOptions markerOptions = new MarkerOptions().snippet("Mapbox").position(new LatLng()); - Marker marker = markerOptions.getMarker(); - assertEquals(marker.getSnippet(), "Mapbox"); - } - - @Test - public void testBuilder() { - Marker marker = new MarkerOptions().title("title").snippet("snippet").position(new LatLng(10, 12)).getMarker(); - assertEquals(marker.getSnippet(), "snippet"); - - assertEquals(marker.getPosition(), new LatLng(10, 12)); - } - - @Test - public void testIcon() { - Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_4444); - Icon icon = IconFactory.recreate("test", bitmap); - MarkerOptions markerOptions = new MarkerOptions().position(new LatLng()).icon(icon); - Marker marker = markerOptions.getMarker(); - assertEquals("Icon should match", icon, marker.getIcon()); - assertEquals("Icon should match", icon, markerOptions.getIcon()); - } - - @Test - public void testHashCode() { - Marker marker = new MarkerOptions().position(new LatLng()).getMarker(); - assertEquals("hash code should match", marker.hashCode(), 0); - } - - @Test - public void testHashCodeBuilder() { - MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(10, 12)); - assertEquals("hash code should match", markerOptions.hashCode(), 579999617); - } - - @Test - public void testEquals() { - Marker markerOne = new MarkerOptions().position(new LatLng(0, 0)).getMarker(); - Marker markerTwo = new MarkerOptions().position(new LatLng(0, 0)).getMarker(); - assertEquals(markerOne, markerTwo); - } - - @Test - public void testEqualityDifferentLocation() { - MarkerOptions marker = new MarkerOptions().position(new LatLng(0, 0)); - MarkerOptions other = new MarkerOptions().position(new LatLng(1, 0)); - assertNotEquals("Should not match", other, marker); - } - - - @Test - public void testEqualityDifferentSnippet() { - MarkerOptions marker = new MarkerOptions().snippet("s"); - MarkerOptions other = new MarkerOptions(); - assertNotEquals("Should not match", other, marker); - } - - @Test - public void testEqualityDifferentIcon() { - MarkerOptions marker = new MarkerOptions().icon(mock(Icon.class)); - MarkerOptions other = new MarkerOptions(); - assertNotEquals("Should not match", other, marker); - } - - @Test - public void testEqualityDifferentTitle() { - MarkerOptions marker = new MarkerOptions().title("t"); - MarkerOptions other = new MarkerOptions(); - assertNotEquals("Should not match", other, marker); - } - - @Test - public void testEqualsItself() { - MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(0, 0)); - Marker marker = markerOptions.getMarker(); - assertEquals("Marker should match", marker, marker); - assertEquals("MarkerOptions should match", markerOptions, markerOptions); - } - - @Test - public void testNotEquals() { - MarkerOptions markerOptions = new MarkerOptions().position(new LatLng(0, 0)); - Marker marker = markerOptions.getMarker(); - assertNotEquals("MarkerOptions should match", markerOptions, new Object()); - assertNotEquals("Marker should match", marker, new Object()); - } - - @Test - public void testEqualityBuilder() { - MarkerOptions markerOne = new MarkerOptions().position(new LatLng(0, 0)); - MarkerOptions markerTwo = new MarkerOptions().position(new LatLng(0, 0)); - assertEquals(markerOne, markerTwo); - } - - @Test - public void testToString() { - Marker marker = new MarkerOptions().position(new LatLng(0, 0)).getMarker(); - assertEquals(marker.toString(), "Marker [position[" + "LatLng [latitude=0.0, longitude=0.0, altitude=0.0]" + "]]"); - } - - @Test - public void testParcelable() { - MarkerOptions markerOptions = new MarkerOptions().position(new LatLng()).title("t").snippet("s"); - Parcelable parcelable = MockParcel.obtain(markerOptions); - assertEquals("Parcel should match original object", parcelable, markerOptions); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/MarkerViewTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/MarkerViewTest.java deleted file mode 100644 index ebd30f5422..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/MarkerViewTest.java +++ /dev/null @@ -1,219 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.exceptions.InvalidMarkerPositionException; -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.maps.MapboxMap; -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -public class MarkerViewTest { - - @Mock - MapboxMap mapboxMap; - - @Mock - MarkerViewManager markerViewManager; - - @Before - public void beforeTest() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void testSanity() { - MarkerViewOptions markerOptions = new MarkerViewOptions(); - assertNotNull("markerOptions should not be null", markerOptions); - } - - @Test - public void testMarker() { - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng()); - assertNotNull("marker should not be null", markerOptions.getMarker()); - } - - @Test(expected = InvalidMarkerPositionException.class) - public void testInvalidMarker() { - new MarkerViewOptions().getMarker(); - } - - @Test - public void testPosition() { - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng(10, 12)); - MarkerView marker = markerOptions.getMarker(); - assertEquals(marker.getPosition(), new LatLng(10, 12)); - assertEquals(markerOptions.getPosition(), new LatLng(10, 12)); - } - - @Test - public void testSnippet() { - MarkerViewOptions markerOptions = new MarkerViewOptions().snippet("Mapbox").position(new LatLng()); - MarkerView marker = markerOptions.getMarker(); - assertEquals(marker.getSnippet(), "Mapbox"); - } - - @Test - public void testTitle() { - MarkerViewOptions markerOptions = new MarkerViewOptions().title("Mapbox").position(new LatLng()); - MarkerView marker = markerOptions.getMarker(); - assertEquals(marker.getTitle(), "Mapbox"); - assertEquals(markerOptions.getTitle(), "Mapbox"); - } - - @Test - public void testFlat() { - MarkerViewOptions markerOptions = new MarkerViewOptions().flat(true).position(new LatLng()); - MarkerView marker = markerOptions.getMarker(); - assertTrue("flat should be true", marker.isFlat()); - } - - @Test - public void testFlatDefault() { - assertFalse("default value of flat should be false", new MarkerViewOptions().position( - new LatLng()).getMarker().isFlat()); - } - - @Test - public void testAnchor() { - float anchorU = 1; - float anchorV = 1; - MarkerViewOptions markerOptions = new MarkerViewOptions().anchor(anchorU, anchorV).position(new LatLng()); - MarkerView marker = markerOptions.getMarker(); - assertEquals("anchorU should match ", anchorU, marker.getAnchorU(), 0); - assertEquals("anchorU should match ", anchorV, marker.getAnchorV(), 0); - } - - @Test - public void testAnchorDefault() { - MarkerView marker = new MarkerViewOptions().position(new LatLng()).getMarker(); - assertEquals("anchorU should match ", 0.5, marker.getAnchorU(), 0); - assertEquals("anchorU should match ", 1, marker.getAnchorV(), 0); - } - - @Test - public void testInfoWindowAnchor() { - float anchorU = 1; - float anchorV = 1; - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng()).infoWindowAnchor(anchorU, anchorV); - MarkerView marker = markerOptions.getMarker(); - assertEquals("anchorU should match ", 1, marker.getInfoWindowAnchorU(), 0); - assertEquals("anchorU should match ", 1, marker.getInfoWindowAnchorV(), 0); - } - - @Test - public void testInfoWindowAnchorDefault() { - MarkerView marker = new MarkerViewOptions().position(new LatLng()).getMarker(); - assertEquals("anchorU should match ", 0.5, marker.getInfoWindowAnchorU(), 0); - assertEquals("anchorU should match ", 0, marker.getInfoWindowAnchorV(), 0); - } - - @Test - public void testRotation() { - int rotation = 90; - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng()).rotation(rotation); - MarkerView marker = markerOptions.getMarker(); - assertEquals("rotation should match ", rotation, marker.getRotation(), 0); - } - - @Test - public void testRotationAboveMax() { - MarkerViewOptions markerOptions = new MarkerViewOptions().rotation(390).position(new LatLng()); - MarkerView marker = markerOptions.getMarker(); - assertEquals(marker.getRotation(), 30, 0); - } - - @Test - public void testRotationBelowMin() { - MarkerViewOptions markerOptions = new MarkerViewOptions().rotation(-10).position(new LatLng()); - MarkerView marker = markerOptions.getMarker(); - assertEquals(marker.getRotation(), 350, 0); - } - - @Test - public void testVisible() { - boolean visible = false; - MarkerViewOptions markerOptions = new MarkerViewOptions().visible(visible).position(new LatLng()); - MarkerView marker = markerOptions.getMarker(); - assertEquals("visible should match ", visible, marker.isVisible()); - } - - @Test - public void testVisibleDefault() { - assertTrue(new MarkerViewOptions().position(new LatLng()).getMarker().isVisible()); - } - - @Test - public void testBuilder() { - MarkerView marker = new MarkerViewOptions().title("title").snippet("snippet").position( - new LatLng(10, 12)).getMarker(); - assertEquals(marker.getSnippet(), "snippet"); - assertEquals(marker.getPosition(), new LatLng(10, 12)); - } - - @Test - public void testHashCode() { - MarkerView marker = new MarkerViewOptions().position(new LatLng()).getMarker(); - assertEquals("hash code should match", marker.hashCode(), 0); - } - - @Test - public void testHashCodeBuilder() { - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng(10, 12)); - assertEquals("hash code should match", markerOptions.hashCode(), 0); - } - - @Test - public void testEquals() { - MarkerView markerOne = new MarkerViewOptions().position(new LatLng(0, 0)).getMarker(); - MarkerView markerTwo = new MarkerViewOptions().position(new LatLng(0, 0)).getMarker(); - assertEquals(markerOne, markerTwo); - } - - @Test - public void testEqualsItself() { - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng(0, 0)); - MarkerView marker = markerOptions.getMarker(); - assertEquals("MarkerView should match", marker, marker); - assertEquals("MarkerViewOptions should match", markerOptions, markerOptions); - } - - @Test - public void testNotEquals() { - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng(0, 0)); - MarkerView marker = markerOptions.getMarker(); - assertNotEquals("MarkerViewOptions should match", markerOptions, new Object()); - assertNotEquals("MarkerView should match", marker, new Object()); - } - - @Test - public void testEqualityBuilder() { - MarkerViewOptions markerOne = new MarkerViewOptions().position(new LatLng(0, 0)); - MarkerViewOptions markerTwo = new MarkerViewOptions().position(new LatLng(0, 0)); - assertEquals(markerOne, markerTwo); - } - - @Test - public void testToString() { - MarkerView marker = new MarkerViewOptions().position(new LatLng(0, 0)).getMarker(); - assertEquals(marker.toString(), "MarkerView [position[" - + "LatLng [latitude=0.0, longitude=0.0, altitude=0.0]" + "]]"); - } - - @Test - public void testParcelable() { - MarkerViewOptions markerOptions = new MarkerViewOptions().position(new LatLng()).title("t").snippet("s"); - Parcelable parcelable = MockParcel.obtain(markerOptions); - assertEquals("Parcel should match original object", parcelable, markerOptions); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/PolygonTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/PolygonTest.java deleted file mode 100644 index 3933c68887..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/PolygonTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import com.mapbox.mapboxsdk.geometry.LatLng; - -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class PolygonTest { - - @Test - public void testSanity() { - PolygonOptions polygonOptions = new PolygonOptions(); - assertNotNull("polygonOptions should not be null", polygonOptions); - } - - @Test - public void testPolygon() { - Polygon polygon = new PolygonOptions().getPolygon(); - assertNotNull("polyline should not be null", polygon); - } - - @Test - public void testAlpha() { - Polygon polygon = new PolygonOptions().alpha(0.5f).getPolygon(); - assertEquals(0.5f, polygon.getAlpha(), 0.0f); - } - - @Test - public void testStrokeColor() { - Polygon polygon = new PolygonOptions().strokeColor(1).getPolygon(); - assertEquals(1, polygon.getStrokeColor()); - } - - @Test - public void testFillColor() { - Polygon polygon = new PolygonOptions().fillColor(1).getPolygon(); - assertEquals(1, polygon.getFillColor()); - } - - @Test - public void testLatLng() { - Polygon polygon = new PolygonOptions().add(new LatLng(0, 0)).getPolygon(); - assertNotNull("points should not be null", polygon.getPoints()); - assertEquals(new LatLng(0, 0), polygon.getPoints().get(0)); - } - - @Test - public void testAddAllLatLng() { - List<LatLng> coordinates = new ArrayList<>(); - coordinates.add(new LatLng(0, 0)); - Polygon polygon = new PolygonOptions().addAll(coordinates).getPolygon(); - assertNotNull(polygon.getPoints()); - assertEquals(new LatLng(0, 0), polygon.getPoints().get(0)); - } - - @Test - public void testBuilder() { - PolylineOptions polylineOptions = new PolylineOptions(); - polylineOptions.width(1.0f); - polylineOptions.color(2); - polylineOptions.add(new LatLng(0, 0)); - - Polyline polyline = polylineOptions.getPolyline(); - assertEquals(1.0f, polyline.getWidth(), 0); - assertEquals(2, polyline.getColor()); - assertNotNull("Points should not be null", polyline.getPoints()); - assertEquals(new LatLng(0, 0), polyline.getPoints().get(0)); - } - -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/PolylineTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/PolylineTest.java deleted file mode 100644 index 54bb0e8cf4..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/annotations/PolylineTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.mapbox.mapboxsdk.annotations; - -import com.mapbox.mapboxsdk.geometry.LatLng; - -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class PolylineTest { - - @Test - public void testSanity() { - PolylineOptions polylineOptions = new PolylineOptions(); - assertNotNull("polylineOptions should not be null", polylineOptions); - } - - @Test - public void testPolyline() { - Polyline polyline = new PolylineOptions().getPolyline(); - assertNotNull("polyline should not be null", polyline); - } - - @Test - public void testAlpha() { - Polyline polyline = new PolylineOptions().alpha(0.2f).getPolyline(); - assertEquals(0.2f, polyline.getAlpha(), 0.0f); - } - - @Test - public void testWidth() { - Polyline polyline = new PolylineOptions().width(1).getPolyline(); - assertEquals(1.0f, polyline.getWidth(), 0); - } - - @Test - public void testColor() { - Polyline polyline = new PolylineOptions().color(1).getPolyline(); - assertEquals(1, polyline.getColor()); - } - - @Test - public void testAddLatLng() { - Polyline polyline = new PolylineOptions().add(new LatLng(0, 0)).getPolyline(); - assertNotNull("Points should not be null", polyline.getPoints()); - assertEquals(new LatLng(0, 0), polyline.getPoints().get(0)); - } - - @Test - public void testAddAllLatLng() { - List<LatLng> coordinates = new ArrayList<>(); - coordinates.add(new LatLng(0, 0)); - Polyline polyline = new PolylineOptions().addAll(coordinates).getPolyline(); - assertNotNull(polyline.getPoints()); - assertEquals(new LatLng(0, 0), polyline.getPoints().get(0)); - } - - @Test - public void testBuilder() { - PolylineOptions polylineOptions = new PolylineOptions(); - polylineOptions.width(1.0f); - polylineOptions.color(2); - polylineOptions.add(new LatLng(0, 0)); - - Polyline polyline = polylineOptions.getPolyline(); - assertEquals(1.0f, polyline.getWidth(), 0); - assertEquals(2, polyline.getColor()); - assertNotNull("Points should not be null", polyline.getPoints()); - assertEquals(new LatLng(0, 0), polyline.getPoints().get(0)); - } - -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java deleted file mode 100644 index 0c5f3a4be2..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/camera/CameraPositionTest.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.mapbox.mapboxsdk.camera; - -import android.content.res.TypedArray; -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.R; -import com.mapbox.mapboxsdk.geometry.LatLng; -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class CameraPositionTest { - - private static final double DELTA = 1e-15; - - @Test - public void testSanity() { - LatLng latLng = new LatLng(1, 2); - CameraPosition cameraPosition = new CameraPosition(latLng, 3, 4, 5); - assertNotNull("cameraPosition should not be null", cameraPosition); - } - - @Test - public void testDefaultTypedArrayBuilder() { - TypedArray typedArray = null; - CameraPosition cameraPosition = new CameraPosition.Builder(typedArray).build(); - assertEquals("bearing should match", -1, cameraPosition.bearing, DELTA); - assertEquals("latlng should match", null, cameraPosition.target); - assertEquals("tilt should match", -1, cameraPosition.tilt, DELTA); - assertEquals("zoom should match", -1, cameraPosition.zoom, DELTA); - } - - @Test - public void testTypedArrayBuilder() { - float bearing = 180; - float zoom = 12; - float latitude = 10; - float longitude = 11; - float tilt = 44; - - TypedArray typedArray = mock(TypedArray.class); - when(typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraBearing, 0.0f)).thenReturn(bearing); - when(typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTargetLat, 0.0f)).thenReturn(latitude); - when(typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTargetLng, 0.0f)).thenReturn(longitude); - when(typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraZoom, 0.0f)).thenReturn(zoom); - when(typedArray.getFloat(R.styleable.mapbox_MapView_mapbox_cameraTilt, 0.0f)).thenReturn(tilt); - doNothing().when(typedArray).recycle(); - - CameraPosition cameraPosition = new CameraPosition.Builder(typedArray).build(); - assertEquals("bearing should match", bearing, cameraPosition.bearing, DELTA); - assertEquals("latlng should match", new LatLng(latitude, longitude), cameraPosition.target); - assertEquals("tilt should match", tilt, cameraPosition.tilt, DELTA); - assertEquals("zoom should match", zoom, cameraPosition.zoom, DELTA); - } - - @Test - public void testToString() { - LatLng latLng = new LatLng(1, 2); - CameraPosition cameraPosition = new CameraPosition(latLng, 3, 4, 5); - assertEquals("toString should match", "Target: LatLng [latitude=1.0, longitude=2.0, altitude=0.0], Zoom:3.0, " - + "Bearing:5.0, Tilt:4.0", cameraPosition.toString()); - } - - @Test - public void testHashcode() { - LatLng latLng = new LatLng(1, 2); - CameraPosition cameraPosition = new CameraPosition(latLng, 3, 4, 5); - assertEquals("hashCode should match", -1007681505, cameraPosition.hashCode()); - } - - @Test - public void testZoomUpdateBuilder() { - float zoomLevel = 5; - CameraPosition.Builder builder = new CameraPosition.Builder( - (CameraUpdateFactory.ZoomUpdate) CameraUpdateFactory.zoomTo(zoomLevel)); - assertEquals("zoom should match", zoomLevel, builder.build().zoom, 0); - } - - @Test - public void testEquals() { - LatLng latLng = new LatLng(1, 2); - CameraPosition cameraPosition = new CameraPosition(latLng, 3, 4, 5); - CameraPosition cameraPositionBearing = new CameraPosition(latLng, 3, 4, 9); - CameraPosition cameraPositionTilt = new CameraPosition(latLng, 3, 9, 5); - CameraPosition cameraPositionZoom = new CameraPosition(latLng, 9, 4, 5); - CameraPosition cameraPositionTarget = new CameraPosition(new LatLng(), 3, 4, 5); - - assertEquals("cameraPosition should match itself", cameraPosition, cameraPosition); - assertNotEquals("cameraPosition should not match null", null, cameraPosition); - assertNotEquals("cameraPosition should not match object", new Object(), cameraPosition); - assertNotEquals("cameraPosition should not match for bearing", cameraPositionBearing, cameraPosition); - assertNotEquals("cameraPosition should not match for tilt", cameraPositionTilt, cameraPosition); - assertNotEquals("cameraPosition should not match for zoom", cameraPositionZoom, cameraPosition); - assertNotEquals("cameraPosition should not match for target", cameraPositionTarget, cameraPosition); - } - - @Test - public void testParcelable() { - CameraPosition object = new CameraPosition(new LatLng(1, 2), 3, 4, 5); - Parcelable parcelable = MockParcel.obtain(object); - assertEquals("Parcel should match original object", parcelable, object); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngBoundsTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngBoundsTest.java deleted file mode 100644 index bb96c9939d..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngBoundsTest.java +++ /dev/null @@ -1,275 +0,0 @@ -package com.mapbox.mapboxsdk.geometry; - -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.exceptions.InvalidLatLngBoundsException; -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Before; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -import static junit.framework.Assert.assertNotNull; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -public class LatLngBoundsTest { - - private static final double DELTA = 1e-15; - - private LatLngBounds latLngBounds; - private static final LatLng LAT_LNG_NULL_ISLAND = new LatLng(0, 0); - private static final LatLng LAT_LNG_NOT_NULL_ISLAND = new LatLng(2, 2); - - @Before - public void beforeTest() { - latLngBounds = new LatLngBounds.Builder() - .include(LAT_LNG_NULL_ISLAND) - .include(LAT_LNG_NOT_NULL_ISLAND) - .build(); - } - - @Test - public void testSanity() { - LatLngBounds.Builder latLngBoundsBuilder = new LatLngBounds.Builder(); - latLngBoundsBuilder.include(LAT_LNG_NULL_ISLAND).include(LAT_LNG_NOT_NULL_ISLAND); - assertNotNull("latLng should not be null", latLngBoundsBuilder.build()); - } - - @Test(expected = InvalidLatLngBoundsException.class) - public void noLatLngs() { - new LatLngBounds.Builder().build(); - } - - @Test(expected = InvalidLatLngBoundsException.class) - public void oneLatLngs() { - new LatLngBounds.Builder().include(LAT_LNG_NULL_ISLAND).build(); - } - - @Test - public void latitiudeSpan() { - assertEquals("Span should be the same", 2, latLngBounds.getLatitudeSpan(), DELTA); - } - - @Test - public void longitudeSpan() { - assertEquals("Span should be the same", 2, latLngBounds.getLongitudeSpan(), DELTA); - } - - @Test - public void coordinateSpan() { - LatLngSpan latLngSpan = latLngBounds.getSpan(); - assertEquals("LatLngSpan should be the same", new LatLngSpan(2, 2), latLngSpan); - } - - @Test - public void center() { - LatLng center = latLngBounds.getCenter(); - assertEquals("Center should match", new LatLng(1, 1), center); - } - - @Test - public void notEmptySpan() { - latLngBounds = new LatLngBounds.Builder() - .include(LAT_LNG_NOT_NULL_ISLAND) - .include(LAT_LNG_NULL_ISLAND) - .build(); - assertFalse("Should not be empty", latLngBounds.isEmptySpan()); - } - - @Test - public void toLatLngs() { - latLngBounds = new LatLngBounds.Builder() - .include(LAT_LNG_NOT_NULL_ISLAND) - .include(LAT_LNG_NULL_ISLAND) - .build(); - - assertArrayEquals("LatLngs should match", - new LatLng[] {LAT_LNG_NOT_NULL_ISLAND, LAT_LNG_NULL_ISLAND}, - latLngBounds.toLatLngs()); - } - - @Test - public void include() { - assertTrue("LatLng should be included", latLngBounds.contains(new LatLng(1, 1))); - } - - @Test - public void includes() { - List<LatLng> points = new ArrayList<>(); - points.add(LAT_LNG_NULL_ISLAND); - points.add(LAT_LNG_NOT_NULL_ISLAND); - - LatLngBounds latLngBounds1 = new LatLngBounds.Builder() - .includes(points) - .build(); - - LatLngBounds latLngBounds2 = new LatLngBounds.Builder() - .include(LAT_LNG_NULL_ISLAND) - .include(LAT_LNG_NOT_NULL_ISLAND) - .build(); - - assertEquals("LatLngBounds should match", latLngBounds1, latLngBounds2); - } - - @Test - public void containsNot() { - assertFalse("LatLng should not be included", latLngBounds.contains(new LatLng(3, 1))); - } - - @Test - public void containsBoundsInWorld() { - assertTrue("LatLngBounds should be contained in the world", LatLngBounds.world().contains(latLngBounds)); - } - - @Test - public void containsBounds() { - LatLngBounds inner = new LatLngBounds.Builder() - .include(new LatLng(-5, -5)) - .include(new LatLng(5, 5)) - .build(); - LatLngBounds outer = new LatLngBounds.Builder() - .include(new LatLng(-10, -10)) - .include(new LatLng(10, 10)) - .build(); - assertTrue(outer.contains(inner)); - assertFalse(inner.contains(outer)); - } - - @Test - public void testHashCode() { - assertEquals(2147483647, latLngBounds.hashCode(), -1946419200); - } - - @Test - public void equality() { - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(LAT_LNG_NULL_ISLAND) - .include(LAT_LNG_NOT_NULL_ISLAND) - .build(); - assertEquals("equality should match", this.latLngBounds, latLngBounds); - assertEquals("not equal to a different object type", this.latLngBounds.equals(LAT_LNG_NOT_NULL_ISLAND), false); - } - - @Test - public void testToString() { - assertEquals(latLngBounds.toString(), "N:2.0; E:2.0; S:0.0; W:0.0"); - } - - @Test - public void intersect() { - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(1, 1)) - .include(LAT_LNG_NULL_ISLAND) - .build(); - assertEquals("intersect should match", latLngBounds, latLngBounds.intersect(this.latLngBounds.getLatNorth(), - this.latLngBounds.getLonEast(), this.latLngBounds.getLatSouth(), this.latLngBounds.getLonWest())); - } - - @Test - public void intersectNot() { - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(10, 10)) - .include(new LatLng(9, 8)) - .build(); - assertNull(latLngBounds.intersect(this.latLngBounds)); - } - - @Test - public void innerUnion() { - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(1, 1)) - .include(LAT_LNG_NULL_ISLAND) - .build(); - assertEquals("union should match", latLngBounds, latLngBounds.intersect(this.latLngBounds)); - } - - @Test - public void outerUnion() { - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(10, 10)) - .include(new LatLng(9, 8)) - .build(); - assertEquals("outer union should match", - latLngBounds.union(this.latLngBounds), - new LatLngBounds.Builder() - .include(new LatLng(10, 10)) - .include(LAT_LNG_NULL_ISLAND) - .build()); - } - - @Test - public void northWest() { - double minLat = 5; - double minLon = 6; - double maxLat = 20; - double maxLon = 21; - - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(minLat, minLon)) - .include(new LatLng(maxLat, maxLon)) - .build(); - - assertEquals("NorthWest should match", latLngBounds.getNorthWest(), new LatLng(maxLat, minLon)); - } - - @Test - public void southWest() { - double minLat = 5; - double minLon = 6; - double maxLat = 20; - double maxLon = 21; - - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(minLat, minLon)) - .include(new LatLng(maxLat, maxLon)) - .build(); - - assertEquals("SouthWest should match", latLngBounds.getSouthWest(), new LatLng(minLat, minLon)); - } - - @Test - public void northEast() { - double minLat = 5; - double minLon = 6; - double maxLat = 20; - double maxLon = 21; - - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(minLat, minLon)) - .include(new LatLng(maxLat, maxLon)) - .build(); - - assertEquals("NorthEast should match", latLngBounds.getNorthEast(), new LatLng(maxLat, maxLon)); - } - - @Test - public void southEast() { - double minLat = 5; - double minLon = 6; - double maxLat = 20; - double maxLon = 21; - - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(minLat, minLon)) - .include(new LatLng(maxLat, maxLon)) - .build(); - - assertEquals("SouthEast should match", latLngBounds.getSouthEast(), new LatLng(minLat, maxLon)); - } - - @Test - public void testParcelable() { - LatLngBounds latLngBounds = new LatLngBounds.Builder() - .include(new LatLng(10, 10)) - .include(new LatLng(9, 8)) - .build(); - Parcelable parcel = MockParcel.obtain(latLngBounds); - assertEquals("Parcel should match original object", parcel, latLngBounds); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngSpanTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngSpanTest.java deleted file mode 100644 index 12297247cf..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngSpanTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.mapbox.mapboxsdk.geometry; - -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class LatLngSpanTest { - - private static final double DELTA = 1e-15; - private static final LatLng LAT_LNG_NULL_ISLAND = new LatLng(0, 0); - - @Test - public void testSanity() { - LatLngSpan latLngSpan = new LatLngSpan(0.0, 0.0); - assertNotNull("latLngSpan should not be null", latLngSpan); - } - - @Test - public void testEquality() { - LatLngSpan latLngSpan = new LatLngSpan(0.0, 0.0); - assertEquals("latLngSpan is not equal to a LatLng", latLngSpan.equals(LAT_LNG_NULL_ISLAND), false); - } - - @Test - public void testLatitudeConstructor() { - double latitude = 1.23; - LatLngSpan latLngSpan = new LatLngSpan(latitude, 0.0); - assertEquals("latitude in constructor", latLngSpan.getLatitudeSpan(), latitude, DELTA); - } - - @Test - public void testLongitudeConstructor() { - double longitude = 1.23; - LatLngSpan latLngSpan = new LatLngSpan(0.0, longitude); - assertEquals("latitude in constructor", latLngSpan.getLongitudeSpan(), longitude, DELTA); - } - - @Test - public void testLatitudeMethod() { - double latitude = 1.23; - LatLngSpan latLngSpan = new LatLngSpan(0.0, 0.0); - latLngSpan.setLatitudeSpan(latitude); - assertEquals("latitude in constructor", latLngSpan.getLatitudeSpan(), latitude, DELTA); - } - - @Test - public void testLongitudeMethod() { - double longitude = 1.23; - LatLngSpan latLngSpan = new LatLngSpan(0.0, 0.0); - latLngSpan.setLongitudeSpan(longitude); - assertEquals("latitude in constructor", latLngSpan.getLongitudeSpan(), longitude, DELTA); - } - - @Test - public void testParcelable() { - LatLngSpan object = new LatLngSpan(1, 2); - Parcelable parcel = MockParcel.obtain(object); - assertEquals("parcel should match initial object", object, parcel); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngTest.java deleted file mode 100644 index 06e93b9d2f..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngTest.java +++ /dev/null @@ -1,267 +0,0 @@ -package com.mapbox.mapboxsdk.geometry; - -import android.location.Location; -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Test; -import org.junit.Rule; -import org.junit.rules.ExpectedException; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class LatLngTest { - - private static final double DELTA = 1e-15; - - @Test - public void testSanity() { - LatLng latLng = new LatLng(0.0, 0.0); - assertNotNull("latLng should not be null", latLng); - } - - @Test - public void testLatitudeEmptyConstructor() { - LatLng latLng = new LatLng(); - assertEquals("latitude default value", latLng.getLatitude(), 0, DELTA); - } - - @Test - public void testLongitudeEmptyConstructor() { - LatLng latLng = new LatLng(); - assertEquals("longitude default value", latLng.getLongitude(), 0, DELTA); - } - - @Test - public void testAltitudeEmptyConstructor() { - LatLng latLng1 = new LatLng(); - assertEquals("altitude default value", latLng1.getAltitude(), 0.0, DELTA); - } - - @Test - public void testLatitudeConstructor() { - double latitude = 1.2; - LatLng latLng = new LatLng(latitude, 3.4); - assertEquals("latitude should match", latLng.getLatitude(), latitude, DELTA); - } - - @Test - public void testLongitudeConstructor() { - double longitude = 3.4; - LatLng latLng = new LatLng(1.2, longitude); - assertEquals("longitude should match", latLng.getLongitude(), longitude, DELTA); - } - - @Test - public void testAltitudeConstructor() { - LatLng latLng1 = new LatLng(1.2, 3.4); - assertEquals("altitude default value", latLng1.getAltitude(), 0.0, DELTA); - - double altitude = 5.6; - LatLng latLng2 = new LatLng(1.2, 3.4, altitude); - assertEquals("altitude default value", latLng2.getAltitude(), altitude, DELTA); - } - - @Test - public void testLatitudeSetter() { - LatLng latLng = new LatLng(1.2, 3.4); - latLng.setLatitude(3); - assertEquals("latitude should match", 3, latLng.getLatitude(), DELTA); - } - - @Test - public void testLongitudeSetter() { - LatLng latLng = new LatLng(1.2, 3.4); - latLng.setLongitude(3); - assertEquals("longitude should match", 3, latLng.getLongitude(), DELTA); - } - - @Rule - public final ExpectedException exception = ExpectedException.none(); - - @Test - public void testConstructorChecksLatitudeNaN() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("latitude must not be NaN"); - new LatLng(Double.NaN, 0); - } - - @Test - public void testConstructorChecksLongitudeNaN() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("longitude must not be NaN"); - new LatLng(0, Double.NaN); - } - - @Test - public void testConstructorChecksLatitudeGreaterThan90() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("latitude must be between -90 and 90"); - new LatLng(95, 0); - } - - @Test - public void testConstructorChecksLatitudeLessThanThanNegative90() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("latitude must be between -90 and 90"); - new LatLng(-95, 0); - } - - @Test - public void testConstructorChecksLongitudeInfinity() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("longitude must not be infinite"); - new LatLng(0, Double.POSITIVE_INFINITY); - } - - @Test - public void testLatitudeSetterChecksNaN() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("latitude must not be NaN"); - new LatLng().setLatitude(Double.NaN); - } - - @Test - public void testLongitudeSetterChecksNaN() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("longitude must not be NaN"); - new LatLng().setLongitude(Double.NaN); - } - - @Test - public void testLatitudeSetterChecksGreaterThan90() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("latitude must be between -90 and 90"); - new LatLng().setLatitude(95); - } - - @Test - public void testLatitudeSetterChecksLessThanThanNegative90() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("latitude must be between -90 and 90"); - new LatLng().setLatitude(-95); - } - - @Test - public void testLongitudeSetterChecksInfinity() { - exception.expect(IllegalArgumentException.class); - exception.expectMessage("longitude must not be infinite"); - new LatLng().setLongitude(Double.NEGATIVE_INFINITY); - } - - @Test - public void testAltitudeSetter() { - LatLng latLng = new LatLng(1.2, 3.4); - latLng.setAltitude(3); - assertEquals("altitude should match", 3, latLng.getAltitude(), DELTA); - } - - @Test - public void testLatLngConstructor() { - LatLng latLng1 = new LatLng(1.2, 3.4); - LatLng latLng2 = new LatLng(latLng1); - assertEquals("latLng should match", latLng1, latLng2); - } - - @Test - public void testDistanceTo() { - LatLng latLng1 = new LatLng(0.0, 0.0); - LatLng latLng2 = new LatLng(1.0, 1.0); - assertEquals("distances should match", - latLng1.distanceTo(latLng2), - 157425.53710839353, DELTA); - } - - @Test - public void testDistanceToSamePoint() { - LatLng latLng1 = new LatLng(40.71199035644531, -74.0081); - LatLng latLng2 = new LatLng(40.71199035644531, -74.0081); - double distance = latLng1.distanceTo(latLng2); - assertEquals("distance should match", 0.0, distance, DELTA); - } - - @Test - public void testLocationProvider() { - double latitude = 1.2; - double longitude = 3.4; - double altitude = 5.6; - - // Mock the location class - Location locationMocked = mock(Location.class); - when(locationMocked.getLatitude()).thenReturn(latitude); - when(locationMocked.getLongitude()).thenReturn(longitude); - when(locationMocked.getAltitude()).thenReturn(altitude); - - // Test the constructor - LatLng latLng = new LatLng(locationMocked); - assertEquals("latitude should match", latLng.getLatitude(), latitude, DELTA); - assertEquals("longitude should match", latLng.getLongitude(), longitude, DELTA); - assertEquals("altitude should match", latLng.getAltitude(), altitude, DELTA); - } - - @Test - public void testHashCode() { - double latitude = 1.2; - double longitude = 3.4; - double altitude = 5.6; - LatLng latLng = new LatLng(latitude, longitude, altitude); - assertEquals("hash code should match", latLng.hashCode(), -151519232); - } - - @Test - public void testToString() { - double latitude = 1.2; - double longitude = 3.4; - double altitude = 5.6; - LatLng latLng = new LatLng(latitude, longitude, altitude); - assertEquals("string should match", - latLng.toString(), - "LatLng [latitude=1.2, longitude=3.4, altitude=5.6]"); - } - - @Test - public void testEqualsOther() { - double latitude = 1.2; - double longitude = 3.4; - double altitude = 5.6; - LatLng latLng1 = new LatLng(latitude, longitude, altitude); - LatLng latLng2 = new LatLng(latitude, longitude, altitude); - assertEquals("LatLng should match", latLng1, latLng2); - } - - @Test - public void testEqualsItself() { - LatLng latLng = new LatLng(1, 2, 3); - assertEquals("LatLng should match", latLng, latLng); - } - - @Test - public void testNotEquals() { - LatLng latLng = new LatLng(1, 2); - assertNotEquals("LatLng should match", latLng, new Object()); - } - - @Test - public void testParcelable() { - LatLng latLng = new LatLng(45.0, -185.0); - Parcelable parcel = MockParcel.obtain(latLng); - assertEquals("parcel should match initial object", latLng, parcel); - } - - @Test - public void testWrapped() { - LatLng latLng = new LatLng(45.0, -185.0).wrap(); - assertEquals("longitude wrapped value", latLng.getLongitude(), 175.0, DELTA); - } - - @Test - public void testUnnecessaryWrapped() { - LatLng latLng = new LatLng(45.0, 50.0).wrap(); - assertEquals("longitude wrapped value", latLng.getLongitude(), 50.0, DELTA); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/ProjectedMetersTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/ProjectedMetersTest.java deleted file mode 100644 index 00fd125a1a..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/ProjectedMetersTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.mapbox.mapboxsdk.geometry; - -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class ProjectedMetersTest { - - private static final LatLng LAT_LNG_NULL_ISLAND = new LatLng(0, 0); - - @Test - public void testSanity() { - ProjectedMeters projectedMeters = new ProjectedMeters(0.0, 0.0); - assertNotNull("projectedMeters should not be null", projectedMeters); - } - - @Test - public void testEquality() { - ProjectedMeters projectedMeters = new ProjectedMeters(0.0, 0.0); - assertEquals("projectedMeters is not equal to a LatLng", projectedMeters.equals(LAT_LNG_NULL_ISLAND), false); - assertEquals("projectedMeters is equal to itself", projectedMeters.equals(projectedMeters), true); - } - - @Test - public void testNorthing() { - ProjectedMeters projectedMeters = new ProjectedMeters(1.0, 0.0); - assertEquals("northing should be 1", 1, projectedMeters.getNorthing(), 0); - } - - @Test - public void testEasting() { - ProjectedMeters projectedMeters = new ProjectedMeters(0.0, 1.0); - assertEquals("easting should be 1", 1, projectedMeters.getEasting(), 0); - } - - @Test - public void testConstructor() { - ProjectedMeters projectedMeters1 = new ProjectedMeters(1, 2); - ProjectedMeters projectedMeters2 = new ProjectedMeters(projectedMeters1); - assertEquals("projectedmeters should match", projectedMeters1, projectedMeters2); - } - - @Test - public void testHashcode() { - ProjectedMeters meters = new ProjectedMeters(1, 2); - assertEquals("hashcode should match", -1048576, meters.hashCode()); - } - - @Test - public void testToString() { - ProjectedMeters meters = new ProjectedMeters(1, 1); - assertEquals("toString should match", "ProjectedMeters [northing=1.0, easting=1.0]", meters.toString()); - } - - @Test - public void testParcelable() { - ProjectedMeters meters = new ProjectedMeters(1, 1); - Parcelable parcel = MockParcel.obtain(meters); - assertEquals("parcel should match initial object", meters, parcel); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/VisibleRegionTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/VisibleRegionTest.java deleted file mode 100644 index 12b779de5d..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/geometry/VisibleRegionTest.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.mapbox.mapboxsdk.geometry; - -import android.os.Parcelable; - -import com.mapbox.mapboxsdk.utils.MockParcel; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class VisibleRegionTest { - - private static final LatLng FAR_LEFT = new LatLng(52, -12); - private static final LatLng NEAR_LEFT = new LatLng(34, -12); - private static final LatLng FAR_RIGHT = new LatLng(52, 26); - private static final LatLng NEAR_RIGHT = new LatLng(34, 26); - private static final LatLngBounds BOUNDS = - new LatLngBounds.Builder().include(FAR_LEFT).include(FAR_RIGHT).include(NEAR_LEFT).include(NEAR_RIGHT).build(); - - @Test - public void testSanity() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertNotNull("region should not be null", region); - } - - @Test - public void testEquality() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("visibleRegion is not equal to a LatLng", region.equals(FAR_LEFT), false); - assertEquals("visibleRegion is equal to itself", region.equals(region), true); - } - - @Test - public void testFarLeftConstructor() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("LatLng should match", region.farLeft, FAR_LEFT); - } - - @Test - public void testNearLeftConstructor() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("LatLng should match", region.nearLeft, NEAR_LEFT); - } - - @Test - public void testFarRightConstructor() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("LatLng should match", region.farRight, FAR_RIGHT); - } - - @Test - public void testNearRightConstructor() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("LatLng should match", region.nearRight, NEAR_RIGHT); - } - - @Test - public void testLatLngBoundsConstructor() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("LatLngBounds should match", region.latLngBounds, BOUNDS); - } - - @Test - public void testEquals() { - VisibleRegion regionLeft = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - VisibleRegion regionRight = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("VisibleRegions should match", regionLeft, regionRight); - } - - @Test - public void testHashcode() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("hashcode should match", -923534102, region.hashCode()); - } - - @Test - public void testToString() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - assertEquals("string should match", - "[farLeft [LatLng [latitude=52.0, longitude=-12.0, altitude=0.0]], " - + "farRight [LatLng [latitude=52.0, longitude=26.0, altitude=0.0]], " - + "nearLeft [LatLng [latitude=34.0, longitude=-12.0, altitude=0.0]], " - + "nearRight [LatLng [latitude=34.0, longitude=26.0, altitude=0.0]], " - + "latLngBounds [N:52.0; E:26.0; S:34.0; W:-12.0]]", - region.toString()); - } - - @Test - public void testParcelable() { - VisibleRegion region = new VisibleRegion(FAR_LEFT, FAR_RIGHT, NEAR_LEFT, NEAR_RIGHT, BOUNDS); - Parcelable parcel = MockParcel.obtain(region); - assertEquals("parcel should match initial object", region, parcel); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapOptionsTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapOptionsTest.java deleted file mode 100644 index ce0cb00b0b..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/MapboxMapOptionsTest.java +++ /dev/null @@ -1,190 +0,0 @@ -package com.mapbox.mapboxsdk.maps; - -import android.graphics.Color; -import android.view.Gravity; - -import com.mapbox.mapboxsdk.camera.CameraPosition; -import com.mapbox.mapboxsdk.constants.MapboxConstants; -import com.mapbox.mapboxsdk.constants.Style; -import com.mapbox.mapboxsdk.geometry.LatLng; - -import org.junit.Test; - -import java.util.Arrays; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertNull; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -public class MapboxMapOptionsTest { - - private static final double DELTA = 1e-15; - - @Test - public void testSanity() { - assertNotNull("should not be null", new MapboxMapOptions()); - } - - @Test - public void testDebugEnabled() { - assertFalse(new MapboxMapOptions().getDebugActive()); - assertTrue(new MapboxMapOptions().debugActive(true).getDebugActive()); - assertFalse(new MapboxMapOptions().debugActive(false).getDebugActive()); - } - - @Test - public void testCompassEnabled() { - assertTrue(new MapboxMapOptions().compassEnabled(true).getCompassEnabled()); - assertFalse(new MapboxMapOptions().compassEnabled(false).getCompassEnabled()); - } - - @Test - public void testCompassGravity() { - assertEquals(Gravity.TOP | Gravity.END, new MapboxMapOptions().getCompassGravity()); - assertEquals(Gravity.BOTTOM, new MapboxMapOptions().compassGravity(Gravity.BOTTOM).getCompassGravity()); - assertNotEquals(Gravity.START, new MapboxMapOptions().compassGravity(Gravity.BOTTOM).getCompassGravity()); - } - - @Test - public void testCompassMargins() { - assertTrue(Arrays.equals(new int[] {0, 1, 2, 3}, new MapboxMapOptions().compassMargins( - new int[] {0, 1, 2, 3}).getCompassMargins())); - assertFalse(Arrays.equals(new int[] {0, 1, 2, 3}, new MapboxMapOptions().compassMargins( - new int[] {0, 0, 0, 0}).getCompassMargins())); - } - - @Test - public void testLogoEnabled() { - assertTrue(new MapboxMapOptions().logoEnabled(true).getLogoEnabled()); - assertFalse(new MapboxMapOptions().logoEnabled(false).getLogoEnabled()); - } - - @Test - public void testLogoGravity() { - assertEquals(Gravity.BOTTOM | Gravity.START, new MapboxMapOptions().getLogoGravity()); - assertEquals(Gravity.BOTTOM, new MapboxMapOptions().logoGravity(Gravity.BOTTOM).getLogoGravity()); - assertNotEquals(Gravity.START, new MapboxMapOptions().logoGravity(Gravity.BOTTOM).getLogoGravity()); - } - - @Test - public void testLogoMargins() { - assertTrue(Arrays.equals(new int[] {0, 1, 2, 3}, new MapboxMapOptions().logoMargins( - new int[] {0, 1, 2, 3}).getLogoMargins())); - assertFalse(Arrays.equals(new int[] {0, 1, 2, 3}, new MapboxMapOptions().logoMargins( - new int[] {0, 0, 0, 0}).getLogoMargins())); - } - - @Test - public void testAttributionTintColor() { - assertEquals(-1, new MapboxMapOptions().getAttributionTintColor()); - assertEquals(Color.RED, new MapboxMapOptions().attributionTintColor(Color.RED).getAttributionTintColor()); - } - - @Test - public void testAttributionEnabled() { - assertTrue(new MapboxMapOptions().attributionEnabled(true).getAttributionEnabled()); - assertFalse(new MapboxMapOptions().attributionEnabled(false).getAttributionEnabled()); - } - - @Test - public void testAttributionGravity() { - assertEquals(Gravity.BOTTOM, new MapboxMapOptions().getAttributionGravity()); - assertEquals(Gravity.BOTTOM, new MapboxMapOptions().attributionGravity(Gravity.BOTTOM).getAttributionGravity()); - assertNotEquals(Gravity.START, new MapboxMapOptions().attributionGravity(Gravity.BOTTOM).getAttributionGravity()); - } - - @Test - public void testAttributionMargins() { - assertTrue(Arrays.equals(new int[] {0, 1, 2, 3}, new MapboxMapOptions().attributionMargins( - new int[] {0, 1, 2, 3}).getAttributionMargins())); - assertFalse(Arrays.equals(new int[] {0, 1, 2, 3}, new MapboxMapOptions().attributionMargins( - new int[] {0, 0, 0, 0}).getAttributionMargins())); - } - - @Test - public void testMinZoom() { - assertEquals(MapboxConstants.MINIMUM_ZOOM, new MapboxMapOptions().getMinZoomPreference(), DELTA); - assertEquals(5.0f, new MapboxMapOptions().minZoomPreference(5.0f).getMinZoomPreference(), DELTA); - assertNotEquals(2.0f, new MapboxMapOptions().minZoomPreference(5.0f).getMinZoomPreference(), DELTA); - } - - @Test - public void testMaxZoom() { - assertEquals(MapboxConstants.MAXIMUM_ZOOM, new MapboxMapOptions().getMaxZoomPreference(), DELTA); - assertEquals(5.0f, new MapboxMapOptions().maxZoomPreference(5.0f).getMaxZoomPreference(), DELTA); - assertNotEquals(2.0f, new MapboxMapOptions().maxZoomPreference(5.0f).getMaxZoomPreference(), DELTA); - } - - @Test - public void testLocationEnabled() { - assertFalse(new MapboxMapOptions().getLocationEnabled()); - assertTrue(new MapboxMapOptions().locationEnabled(true).getLocationEnabled()); - assertFalse(new MapboxMapOptions().locationEnabled(false).getLocationEnabled()); - } - - @Test - public void testTiltGesturesEnabled() { - assertTrue(new MapboxMapOptions().getTiltGesturesEnabled()); - assertTrue(new MapboxMapOptions().tiltGesturesEnabled(true).getTiltGesturesEnabled()); - assertFalse(new MapboxMapOptions().tiltGesturesEnabled(false).getTiltGesturesEnabled()); - } - - @Test - public void testScrollGesturesEnabled() { - assertTrue(new MapboxMapOptions().getScrollGesturesEnabled()); - assertTrue(new MapboxMapOptions().scrollGesturesEnabled(true).getScrollGesturesEnabled()); - assertFalse(new MapboxMapOptions().scrollGesturesEnabled(false).getScrollGesturesEnabled()); - } - - @Test - public void testZoomGesturesEnabled() { - assertTrue(new MapboxMapOptions().getZoomGesturesEnabled()); - assertTrue(new MapboxMapOptions().zoomGesturesEnabled(true).getZoomGesturesEnabled()); - assertFalse(new MapboxMapOptions().zoomGesturesEnabled(false).getZoomGesturesEnabled()); - } - - @Test - public void testRotateGesturesEnabled() { - assertTrue(new MapboxMapOptions().getRotateGesturesEnabled()); - assertTrue(new MapboxMapOptions().rotateGesturesEnabled(true).getRotateGesturesEnabled()); - assertFalse(new MapboxMapOptions().rotateGesturesEnabled(false).getRotateGesturesEnabled()); - } - - @Test - public void testZoomControlsEnabled() { - assertFalse(new MapboxMapOptions().getZoomControlsEnabled()); - assertTrue(new MapboxMapOptions().zoomControlsEnabled(true).getZoomControlsEnabled()); - assertFalse(new MapboxMapOptions().zoomControlsEnabled(false).getZoomControlsEnabled()); - } - - @Test - public void testStyleUrl() { - assertEquals(Style.DARK, new MapboxMapOptions().styleUrl(Style.DARK).getStyle()); - assertNotEquals(Style.LIGHT, new MapboxMapOptions().styleUrl(Style.DARK).getStyle()); - assertNull(new MapboxMapOptions().getStyle()); - } - - @Test - public void testCamera() { - CameraPosition position = new CameraPosition.Builder().build(); - assertEquals(new CameraPosition.Builder(position).build(), new MapboxMapOptions().camera(position).getCamera()); - assertNotEquals(new CameraPosition.Builder().target(new LatLng(1, 1)), new MapboxMapOptions().camera(position)); - assertNull(new MapboxMapOptions().getCamera()); - } - - @Test - public void testMyLocationForegroundTint() { - assertEquals(Color.BLUE, new MapboxMapOptions() - .myLocationForegroundTintColor(Color.BLUE).getMyLocationForegroundTintColor()); - } - - @Test - public void testMyLocationBackgroundTint() { - assertEquals(Color.BLUE, new MapboxMapOptions() - .myLocationBackgroundTintColor(Color.BLUE).getMyLocationBackgroundTintColor()); - } -} - diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java deleted file mode 100644 index de5f364a5b..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/TrackingSettingsTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.mapbox.mapboxsdk.maps; - -import android.Manifest; -import android.content.Context; -import android.content.pm.PackageManager; -import android.graphics.PointF; - -import com.mapbox.mapboxsdk.constants.MyLocationTracking; -import com.mapbox.mapboxsdk.maps.widgets.MyLocationView; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.atLeast; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -public class TrackingSettingsTest { - - @InjectMocks - MyLocationView myLocationView = mock(MyLocationView.class); - - @InjectMocks - UiSettings uiSettings = mock(UiSettings.class); - - @InjectMocks - FocalPointChangeListener focalPointChangeListener = mock(FocalPointChangeListener.class); - - @InjectMocks - TrackingSettings.CameraZoomInvalidator zoomInvalidator = mock(TrackingSettings.CameraZoomInvalidator.class); - - private TrackingSettings trackingSettings; - - @Before - public void beforeTest() { - trackingSettings = new TrackingSettings(myLocationView, uiSettings, focalPointChangeListener, zoomInvalidator); - } - - @Test - public void testSanity() { - assertNotNull("trackingsettings should not be null", trackingSettings); - } - - @Test - public void testDismissTrackingModesOnGesture() { - trackingSettings.setDismissAllTrackingOnGesture(false); - assertFalse("DismissTrackingOnGesture should be false", trackingSettings.isAllDismissTrackingOnGesture()); - } - - @Test - public void testValidateGesturesForTrackingModes() { - trackingSettings.setDismissAllTrackingOnGesture(false); - trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); - assertFalse("DismissTrackingOnGesture should be false", trackingSettings.isAllDismissTrackingOnGesture()); - } - - @Test - public void testMyLocationEnabled() { - // setup mock context to provide accepted location permission - Context context = mock(Context.class); - when(myLocationView.getContext()).thenReturn(context); - when(context.checkPermission(eq(Manifest.permission.ACCESS_COARSE_LOCATION), anyInt(), - anyInt())).thenReturn(PackageManager.PERMISSION_GRANTED); - - assertFalse("Location should be disabled by default.", trackingSettings.isMyLocationEnabled()); - trackingSettings.setMyLocationEnabled(true); - assertTrue("Location should be enabled", trackingSettings.isMyLocationEnabled()); - } - - @Test - public void testCameraZoomTo2forTracking() { - trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); - verify(zoomInvalidator, atLeast(1)).zoomTo(2.0); - } - - @Test - public void testFocalPointChangeForTracking() { - final float centerX = 32.3f; - final float centerY = 46.3f; - final PointF pointF = new PointF(centerX, centerY); - when(myLocationView.getCenter()).thenReturn(pointF); - - trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_FOLLOW); - verify(focalPointChangeListener, atLeast(1)).onFocalPointChanged(pointF); - } - - @Test - public void testFocalPointChangeForNonTracking() { - trackingSettings.setMyLocationTrackingMode(MyLocationTracking.TRACKING_NONE); - verify(focalPointChangeListener, atLeast(1)).onFocalPointChanged(null); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/UiSettingsTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/UiSettingsTest.java deleted file mode 100644 index fbe00b4dce..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/UiSettingsTest.java +++ /dev/null @@ -1,375 +0,0 @@ -package com.mapbox.mapboxsdk.maps; - -import android.view.Gravity; -import android.view.View; -import android.widget.FrameLayout; -import android.widget.ImageView; - -import com.mapbox.mapboxsdk.maps.widgets.CompassView; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class UiSettingsTest { - - @InjectMocks - Projection projection = mock(Projection.class); - - @InjectMocks - FocalPointChangeListener focalPointChangeListener = mock(FocalPointChangeListener.class); - - @InjectMocks - CompassView compassView = mock(CompassView.class); - - @InjectMocks - ImageView imageView = mock(ImageView.class); - - @InjectMocks - ImageView logoView = mock(ImageView.class); - - @InjectMocks - FrameLayout.LayoutParams layoutParams = mock(FrameLayout.LayoutParams.class); - - private UiSettings uiSettings; - - @Before - public void beforeTest() { - uiSettings = new UiSettings(projection, focalPointChangeListener, compassView, imageView, logoView); - } - - @Test - public void testSanity() { - assertNotNull("uiSettings should not be null", uiSettings); - } - - @Test - public void testCompassEnabled() { - when(compassView.isEnabled()).thenReturn(true); - uiSettings.setCompassEnabled(true); - assertEquals("Compass should be enabled", true, uiSettings.isCompassEnabled()); - } - - @Test - public void testCompassDisabled() { - uiSettings.setCompassEnabled(false); - assertEquals("Compass should be disabled", false, uiSettings.isCompassEnabled()); - } - - @Test - public void testCompassGravity() { - when(compassView.getLayoutParams()).thenReturn(layoutParams); - layoutParams.gravity = Gravity.START; - uiSettings.setCompassGravity(Gravity.START); - assertEquals("Compass gravity should be same", Gravity.START, uiSettings.getCompassGravity()); - } - - @Test - public void testCompassMargins() { - when(projection.getContentPadding()).thenReturn(new int[] {0, 0, 0, 0}); - when(compassView.getLayoutParams()).thenReturn(layoutParams); - layoutParams.leftMargin = 1; - layoutParams.topMargin = 2; - layoutParams.rightMargin = 3; - layoutParams.bottomMargin = 4; - uiSettings.setCompassMargins(1, 2, 3, 4); - assertTrue("Compass margin left should be same", uiSettings.getCompassMarginLeft() == 1); - assertTrue("Compass margin top should be same", uiSettings.getCompassMarginTop() == 2); - assertTrue("Compass margin right should be same", uiSettings.getCompassMarginRight() == 3); - assertTrue("Compass margin bottom should be same", uiSettings.getCompassMarginBottom() == 4); - } - - @Test - public void testCompassFadeWhenFacingNorth() { - when(compassView.isFadeCompassViewFacingNorth()).thenReturn(true); - assertTrue("Compass should fade when facing north by default.", uiSettings.isCompassFadeWhenFacingNorth()); - uiSettings.setCompassFadeFacingNorth(false); - when(compassView.isFadeCompassViewFacingNorth()).thenReturn(false); - assertFalse("Compass fading should be disabled", uiSettings.isCompassFadeWhenFacingNorth()); - } - - @Test - public void testLogoEnabled() { - uiSettings.setLogoEnabled(true); - assertEquals("Logo should be enabled", true, uiSettings.isLogoEnabled()); - } - - @Test - public void testLogoDisabled() { - when(logoView.getVisibility()).thenReturn(View.GONE); - uiSettings.setLogoEnabled(false); - assertEquals("Logo should be disabled", false, uiSettings.isLogoEnabled()); - } - - @Test - public void testLogoGravity() { - layoutParams.gravity = Gravity.END; - when(logoView.getLayoutParams()).thenReturn(layoutParams); - uiSettings.setLogoGravity(Gravity.END); - assertEquals("Logo gravity should be same", Gravity.END, uiSettings.getLogoGravity()); - } - - @Test - public void testLogoMargins() { - when(projection.getContentPadding()).thenReturn(new int[] {0, 0, 0, 0}); - when(logoView.getLayoutParams()).thenReturn(layoutParams); - layoutParams.leftMargin = 1; - layoutParams.topMargin = 2; - layoutParams.rightMargin = 3; - layoutParams.bottomMargin = 4; - uiSettings.setLogoMargins(1, 2, 3, 4); - assertTrue("Compass margin left should be same", uiSettings.getLogoMarginLeft() == 1); - assertTrue("Compass margin top should be same", uiSettings.getLogoMarginTop() == 2); - assertTrue("Compass margin right should be same", uiSettings.getLogoMarginRight() == 3); - assertTrue("Compass margin bottom should be same", uiSettings.getLogoMarginBottom() == 4); - } - - @Test - public void testAttributionEnabled() { - when(imageView.getVisibility()).thenReturn(View.VISIBLE); - uiSettings.setAttributionEnabled(true); - assertEquals("Attribution should be enabled", true, uiSettings.isAttributionEnabled()); - } - - @Test - public void testAttributionDisabled() { - when(imageView.getVisibility()).thenReturn(View.GONE); - uiSettings.setAttributionEnabled(false); - assertEquals("Attribution should be disabled", false, uiSettings.isAttributionEnabled()); - } - - @Test - public void testAttributionGravity() { - when(imageView.getLayoutParams()).thenReturn(layoutParams); - layoutParams.gravity = Gravity.END; - uiSettings.setAttributionGravity(Gravity.END); - assertEquals("Attribution gravity should be same", Gravity.END, uiSettings.getAttributionGravity()); - } - - @Test - public void testAttributionMargins() { - when(imageView.getLayoutParams()).thenReturn(layoutParams); - when(projection.getContentPadding()).thenReturn(new int[] {0, 0, 0, 0}); - layoutParams.leftMargin = 1; - layoutParams.topMargin = 2; - layoutParams.rightMargin = 3; - layoutParams.bottomMargin = 4; - uiSettings.setAttributionMargins(1, 2, 3, 4); - assertTrue("Attribution margin left should be same", uiSettings.getAttributionMarginLeft() == 1); - assertTrue("Attribution margin top should be same", uiSettings.getAttributionMarginTop() == 2); - assertTrue("Attribution margin right should be same", uiSettings.getAttributionMarginRight() == 3); - assertTrue("Attribution margin bottom should be same", uiSettings.getAttributionMarginBottom() == 4); - } - - @Test - public void testRotateGesturesEnabled() { - uiSettings.setRotateGesturesEnabled(true); - assertEquals("Rotate gesture should be enabled", true, uiSettings.isRotateGesturesEnabled()); - } - - @Test - public void testRotateGesturesDisabled() { - uiSettings.setRotateGesturesEnabled(false); - assertEquals("Rotate gesture should be disabled", false, uiSettings.isRotateGesturesEnabled()); - } - - @Test - public void testRotateGestureChange() { - assertEquals("Default state should be true", true, uiSettings.isRotateGestureChangeAllowed()); - uiSettings.setRotateGestureChangeAllowed(false); - assertEquals("State should have been changed", false, uiSettings.isRotateGestureChangeAllowed()); - } - - @Test - public void testRotateGestureChangeAllowed() { - uiSettings.setRotateGesturesEnabled(false); - assertEquals("Rotate gesture should be false", false, uiSettings.isRotateGesturesEnabled()); - uiSettings.setRotateGesturesEnabled(true); - assertEquals("Rotate gesture should be true", true, uiSettings.isRotateGesturesEnabled()); - } - - @Test - public void testRotateGestureChangeDisallowed() { - assertEquals("Rotate gesture should be true", true, uiSettings.isRotateGesturesEnabled()); - uiSettings.setRotateGestureChangeAllowed(false); - uiSettings.setRotateGesturesEnabled(false); - assertEquals("Rotate gesture change should be ignored", true, uiSettings.isRotateGesturesEnabled()); - } - - @Test - public void testTiltGesturesEnabled() { - uiSettings.setTiltGesturesEnabled(true); - assertEquals("Tilt gesture should be enabled", true, uiSettings.isTiltGesturesEnabled()); - } - - @Test - public void testTiltGesturesDisabled() { - uiSettings.setTiltGesturesEnabled(false); - assertEquals("Tilt gesture should be disabled", false, uiSettings.isTiltGesturesEnabled()); - } - - @Test - public void testTiltGestureChange() { - assertEquals("Default state should be true", true, uiSettings.isTiltGestureChangeAllowed()); - uiSettings.setTiltGestureChangeAllowed(false); - assertEquals("State should have been changed", false, uiSettings.isTiltGestureChangeAllowed()); - } - - @Test - public void testTiltGestureChangeAllowed() { - uiSettings.setTiltGesturesEnabled(false); - assertEquals("Tilt gesture should be false", false, uiSettings.isTiltGesturesEnabled()); - uiSettings.setTiltGesturesEnabled(true); - assertEquals("Tilt gesture should be true", true, uiSettings.isTiltGesturesEnabled()); - } - - @Test - public void testTiltGestureChangeDisallowed() { - assertEquals("Tilt gesture should be true", true, uiSettings.isTiltGesturesEnabled()); - uiSettings.setTiltGestureChangeAllowed(false); - uiSettings.setTiltGesturesEnabled(false); - assertEquals("Tilt gesture change should be ignored", true, uiSettings.isTiltGesturesEnabled()); - } - - @Test - public void testZoomGesturesEnabled() { - uiSettings.setZoomGesturesEnabled(true); - assertEquals("Zoom gesture should be enabled", true, uiSettings.isZoomGesturesEnabled()); - } - - @Test - public void testZoomGesturesDisabled() { - uiSettings.setZoomGesturesEnabled(false); - assertEquals("Zoom gesture should be disabled", false, uiSettings.isZoomGesturesEnabled()); - } - - @Test - public void testZoomGestureChange() { - assertEquals("Default state should be true", true, uiSettings.isZoomGestureChangeAllowed()); - uiSettings.setZoomGestureChangeAllowed(false); - assertEquals("State should have been changed", false, uiSettings.isZoomGestureChangeAllowed()); - } - - @Test - public void testZoomGestureChangeAllowed() { - uiSettings.setZoomGesturesEnabled(false); - assertEquals("Zoom gesture should be false", false, uiSettings.isZoomGesturesEnabled()); - uiSettings.setZoomGesturesEnabled(true); - assertEquals("Zoom gesture should be true", true, uiSettings.isZoomGesturesEnabled()); - } - - @Test - public void testZoomGestureChangeDisallowed() { - assertEquals("Zoom gesture should be true", true, uiSettings.isZoomGesturesEnabled()); - uiSettings.setZoomGestureChangeAllowed(false); - uiSettings.setZoomGesturesEnabled(false); - assertEquals("Zooom gesture change should be ignored", true, uiSettings.isZoomGesturesEnabled()); - } - - @Test - public void testZoomControlsEnabled() { - uiSettings.setZoomControlsEnabled(true); - assertEquals("Zoom controls should be enabled", true, uiSettings.isZoomControlsEnabled()); - } - - @Test - public void testZoomControlsDisabled() { - uiSettings.setZoomControlsEnabled(false); - assertEquals("Zoom controls should be disabled", false, uiSettings.isZoomControlsEnabled()); - } - - @Test - public void testDoubleTapGesturesEnabled() { - uiSettings.setDoubleTapGesturesEnabled(true); - assertEquals("DoubleTap gesture should be enabled", true, uiSettings.isDoubleTapGesturesEnabled()); - } - - @Test - public void testDoubleTapGesturesDisabled() { - uiSettings.setDoubleTapGesturesEnabled(false); - assertEquals("DoubleTap gesture should be disabled", false, uiSettings.isDoubleTapGesturesEnabled()); - } - - @Test - public void testDoubleTapGestureChange() { - assertEquals("Default state should be true", true, uiSettings.isDoubleTapGestureChangeAllowed()); - uiSettings.setDoubleTapGestureChangeAllowed(false); - assertEquals("State should have been changed", false, uiSettings.isDoubleTapGestureChangeAllowed()); - } - - @Test - public void testDoubleTapGestureChangeAllowed() { - uiSettings.setDoubleTapGesturesEnabled(false); - assertEquals("DoubleTap gesture should be false", false, uiSettings.isDoubleTapGesturesEnabled()); - uiSettings.setDoubleTapGesturesEnabled(true); - assertEquals("DoubleTap gesture should be true", true, uiSettings.isDoubleTapGesturesEnabled()); - } - - @Test - public void testDoubleTapGestureChangeDisallowed() { - assertEquals("DoubleTap gesture should be true", true, uiSettings.isDoubleTapGesturesEnabled()); - uiSettings.setDoubleTapGestureChangeAllowed(false); - uiSettings.setDoubleTapGesturesEnabled(false); - assertEquals("DoubleTap gesture change should be ignored", true, uiSettings.isDoubleTapGesturesEnabled()); - } - - @Test - public void testScrollGesturesEnabled() { - uiSettings.setScrollGesturesEnabled(true); - assertEquals("Scroll gesture should be enabled", true, uiSettings.isScrollGesturesEnabled()); - } - - @Test - public void testScrollGesturesDisabled() { - uiSettings.setScrollGesturesEnabled(false); - assertEquals("Scroll gesture should be disabled", false, uiSettings.isScrollGesturesEnabled()); - } - - @Test - public void testScrollGestureChange() { - assertEquals("Default state should be true", true, uiSettings.isScrollGestureChangeAllowed()); - uiSettings.setScrollGestureChangeAllowed(false); - assertEquals("State should have been changed", false, uiSettings.isScrollGestureChangeAllowed()); - } - - @Test - public void testScrollGestureChangeAllowed() { - uiSettings.setScrollGesturesEnabled(false); - assertEquals("Scroll gesture should be false", false, uiSettings.isScrollGesturesEnabled()); - uiSettings.setScrollGesturesEnabled(true); - assertEquals("Scroll gesture should be true", true, uiSettings.isScrollGesturesEnabled()); - } - - @Test - public void testScrollGestureChangeDisallowed() { - assertEquals("Scroll gesture should be true", true, uiSettings.isScrollGesturesEnabled()); - uiSettings.setScrollGestureChangeAllowed(false); - uiSettings.setScrollGesturesEnabled(false); - assertEquals("Scroll gesture change should be ignored", true, uiSettings.isScrollGesturesEnabled()); - } - - @Test - public void testAllGesturesEnabled() { - uiSettings.setAllGesturesEnabled(true); - assertEquals("Rotate gesture should be enabled", true, uiSettings.isRotateGesturesEnabled()); - assertEquals("Tilt gesture should be enabled", true, uiSettings.isTiltGesturesEnabled()); - assertEquals("Zoom gesture should be enabled", true, uiSettings.isZoomGesturesEnabled()); - assertEquals("Scroll gesture should be enabled", true, uiSettings.isScrollGesturesEnabled()); - } - - @Test - public void testAllGesturesDisabled() { - uiSettings.setAllGesturesEnabled(false); - assertEquals("Rotate gesture should be enabled", false, uiSettings.isRotateGesturesEnabled()); - assertEquals("Tilt gesture should be disabled", false, uiSettings.isTiltGesturesEnabled()); - assertEquals("Zoom gesture should be disabled", false, uiSettings.isZoomGesturesEnabled()); - assertEquals("Scroll gesture should be disabled", false, uiSettings.isScrollGesturesEnabled()); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java deleted file mode 100644 index c9ce19dc85..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationViewSettingsTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.mapbox.mapboxsdk.maps.widgets; - -import android.graphics.Color; -import android.graphics.drawable.Drawable; - -import com.mapbox.mapboxsdk.maps.FocalPointChangeListener; -import com.mapbox.mapboxsdk.maps.Projection; -import com.mapbox.mapboxsdk.maps.TrackingSettings; - -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; - -import java.util.Arrays; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class MyLocationViewSettingsTest { - - @InjectMocks - Projection projection = mock(Projection.class); - - @InjectMocks - MyLocationView myLocationView = mock(MyLocationView.class); - - @InjectMocks - TrackingSettings trackingSettings = mock(TrackingSettings.class); - - @InjectMocks - FocalPointChangeListener focalPointChangeListener = mock(FocalPointChangeListener.class); - - private MyLocationViewSettings locationViewSettings; - - @Before - public void beforeTest() { - locationViewSettings = new MyLocationViewSettings(myLocationView, projection, focalPointChangeListener); - } - - @Test - public void testSanity() { - assertNotNull("should not be null", locationViewSettings); - } - - @Test - public void testForegroundDrawables() { - Drawable foregroundDrawable = mock(Drawable.class); - Drawable foregroundBearingDrawable = mock(Drawable.class); - Drawable.ConstantState constantState = mock(Drawable.ConstantState.class); - when(foregroundDrawable.getConstantState()).thenReturn(constantState); - when(constantState.newDrawable()).thenReturn(foregroundDrawable); - locationViewSettings.setForegroundDrawable(foregroundDrawable, foregroundBearingDrawable); - assertEquals("foreground should match", foregroundDrawable, locationViewSettings.getForegroundDrawable()); - assertEquals("foreground bearing should match", foregroundBearingDrawable, - locationViewSettings.getForegroundBearingDrawable()); - } - - @Test - public void testBackgroundDrawable() { - Drawable backgroundDrawable = mock(Drawable.class); - int[] offset = new int[] {1, 2, 3, 4}; - locationViewSettings.setBackgroundDrawable(backgroundDrawable, offset); - assertEquals("foreground should match", backgroundDrawable, locationViewSettings.getBackgroundDrawable()); - assertTrue("offsets should match", Arrays.equals(offset, locationViewSettings.getBackgroundOffset())); - } - - @Test - public void testForegroundTint() { - int color = Color.RED; - locationViewSettings.setForegroundTintColor(Color.RED); - assertEquals("color should match", color, locationViewSettings.getForegroundTintColor()); - } - - @Test - public void testForegroundTransparentTint() { - int color = Color.TRANSPARENT; - locationViewSettings.setForegroundTintColor(Color.TRANSPARENT); - assertEquals("color should match", color, locationViewSettings.getForegroundTintColor()); - } - - @Test - public void testBackgroundTint() { - int color = Color.RED; - locationViewSettings.setBackgroundTintColor(Color.RED); - assertEquals("color should match", color, locationViewSettings.getBackgroundTintColor()); - } - - @Test - public void testBackgroundTransparentTint() { - int color = Color.TRANSPARENT; - locationViewSettings.setBackgroundTintColor(Color.TRANSPARENT); - assertEquals("color should match", color, locationViewSettings.getBackgroundTintColor()); - } - - @Test - public void testEnabled() { - assertFalse("initial state should be false", locationViewSettings.isEnabled()); - locationViewSettings.setEnabled(true); - assertTrue("state should be true", locationViewSettings.isEnabled()); - } -} - diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/style/layers/FilterTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/style/layers/FilterTest.java deleted file mode 100644 index 933bf05b39..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/style/layers/FilterTest.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.mapbox.mapboxsdk.style.layers; - -import org.junit.Test; - -import static com.mapbox.mapboxsdk.style.layers.Filter.all; -import static com.mapbox.mapboxsdk.style.layers.Filter.any; -import static com.mapbox.mapboxsdk.style.layers.Filter.eq; -import static com.mapbox.mapboxsdk.style.layers.Filter.gt; -import static com.mapbox.mapboxsdk.style.layers.Filter.gte; -import static com.mapbox.mapboxsdk.style.layers.Filter.has; -import static com.mapbox.mapboxsdk.style.layers.Filter.in; -import static com.mapbox.mapboxsdk.style.layers.Filter.lt; -import static com.mapbox.mapboxsdk.style.layers.Filter.lte; -import static com.mapbox.mapboxsdk.style.layers.Filter.neq; -import static com.mapbox.mapboxsdk.style.layers.Filter.none; -import static com.mapbox.mapboxsdk.style.layers.Filter.notHas; -import static com.mapbox.mapboxsdk.style.layers.Filter.notIn; -import static org.junit.Assert.assertArrayEquals; - -/** - * Tests for Filter - */ -public class FilterTest { - - @Test - public void testAll() { - assertArrayEquals(all().toArray(), new Object[] {"all"}); - assertArrayEquals( - all(eq("key", 2), neq("key", 3)).toArray(), - new Object[] {"all", new Object[] {"==", "key", 2}, new Object[] {"!=", "key", 3}} - ); - } - - @Test - public void testAny() { - assertArrayEquals(any().toArray(), new Object[] {"any"}); - assertArrayEquals( - any(eq("key", 2), neq("key", 3)).toArray(), - new Object[] {"any", new Object[] {"==", "key", 2}, new Object[] {"!=", "key", 3}} - ); - } - - @Test - public void testNone() { - assertArrayEquals(none().toArray(), new Object[] {"none"}); - assertArrayEquals( - none(eq("key", 2), neq("key", 3)).toArray(), - new Object[] {"none", new Object[] {"==", "key", 2}, new Object[] {"!=", "key", 3}} - ); - } - - @Test - public void testHas() { - assertArrayEquals(has("key").toArray(), new Object[] {"has", "key"}); - } - - @Test - public void testHasNot() { - assertArrayEquals(notHas("key").toArray(), new Object[] {"!has", "key"}); - } - - @Test - public void testEq() { - assertArrayEquals(eq("key", 1).toArray(), new Object[] {"==", "key", 1}); - - } - - @Test - public void testNeq() { - assertArrayEquals(neq("key", 1).toArray(), new Object[] {"!=", "key", 1}); - } - - @Test - public void testGt() { - assertArrayEquals(gt("key", 1).toArray(), new Object[] {">", "key", 1}); - } - - @Test - public void testGte() { - assertArrayEquals(gte("key", 1).toArray(), new Object[] {">=", "key", 1}); - } - - @Test - public void testLt() { - assertArrayEquals(lt("key", 1).toArray(), new Object[] {"<", "key", 1}); - } - - @Test - public void testLte() { - assertArrayEquals(lte("key", 1).toArray(), new Object[] {"<=", "key", 1}); - } - - @Test - public void testIn() { - assertArrayEquals(in("key", 1, 2, "Aap").toArray(), new Object[] {"in", "key", 1, 2, "Aap"}); - } - - @Test - public void testNotIn() { - assertArrayEquals(notIn("key", 1, 2, "Noot").toArray(), new Object[] {"!in", "key", 1, 2, "Noot"}); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/style/layers/FunctionTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/style/layers/FunctionTest.java deleted file mode 100644 index bac1154d62..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/style/layers/FunctionTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.mapbox.mapboxsdk.style.layers; - -import com.mapbox.mapboxsdk.style.functions.Function; - -import org.junit.Test; - -import static com.mapbox.mapboxsdk.style.functions.Function.zoom; -import static com.mapbox.mapboxsdk.style.functions.stops.Stop.stop; -import static com.mapbox.mapboxsdk.style.functions.stops.Stops.interval; -import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineBlur; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertNotNull; - -/** - * Tests Function - */ -public class FunctionTest { - - @Test - public void testZoomFunction() { - Function<Float, Float> zoomF = zoom(interval( - stop(1f, lineBlur(1f)), - stop(10f, lineBlur(20f)) - ) - ); - - assertNotNull(zoomF.toValueObject()); - assertArrayEquals( - new Object[] {new Object[] {1f, 1f}, new Object[] {10f, 20f}}, - (Object[]) zoomF.toValueObject().get("stops") - ); - } - -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/telemetry/HttpTransportTest.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/telemetry/HttpTransportTest.java deleted file mode 100644 index 94a6dc2194..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/telemetry/HttpTransportTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mapbox.mapboxsdk.telemetry; - -import org.junit.Test; - -import okhttp3.internal.Util; - -import static junit.framework.Assert.assertEquals; - -public class HttpTransportTest { - - @Test - public void testNonAsciiUserAgent() { - - final String swedishUserAgent = "Sveriges Fjäll/1.0/1 MapboxEventsAndroid/4.0.0-SNAPSHOT"; - final String asciiVersion = "Sveriges Fj?ll/1.0/1 MapboxEventsAndroid/4.0.0-SNAPSHOT"; - - assertEquals("asciiVersion and swedishUserAgent should match", asciiVersion, - Util.toHumanReadableAscii(swedishUserAgent)); - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/utils/MockParcel.java b/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/utils/MockParcel.java deleted file mode 100644 index dd4c7b25ee..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/java/com/mapbox/mapboxsdk/utils/MockParcel.java +++ /dev/null @@ -1,254 +0,0 @@ -package com.mapbox.mapboxsdk.utils; - -import android.os.Parcel; -import android.os.Parcelable; -import android.support.annotation.NonNull; - -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -import static junit.framework.Assert.assertEquals; -import static org.junit.Assert.assertArrayEquals; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyByte; -import static org.mockito.Matchers.anyDouble; -import static org.mockito.Matchers.anyFloat; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyLong; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class MockParcel { - - public static Parcelable obtain(@NonNull Parcelable object) { - return obtain(object, 0); - } - - public static Parcelable obtain(@NonNull Parcelable object, int describeContentsValue) { - testDescribeContents(object, describeContentsValue); - testParcelableArray(object); - return testParcelable(object); - } - - public static Parcelable testParcelable(@NonNull Parcelable object) { - Parcel parcel = ParcelMocker.obtain(object); - object.writeToParcel(parcel, 0); - parcel.setDataPosition(0); - - try { - Field field = object.getClass().getDeclaredField("CREATOR"); - field.setAccessible(true); - Class<?> creatorClass = field.getType(); - Object fieldValue = field.get(object); - Method myMethod = creatorClass.getDeclaredMethod("createFromParcel", Parcel.class); - return (Parcelable) myMethod.invoke(fieldValue, parcel); - } catch (Exception exception) { - return null; - } - } - - public static void testParcelableArray(@NonNull Parcelable object) { - Parcelable[] objects = new Parcelable[] {object}; - Parcel parcel = ParcelMocker.obtain(objects); - parcel.writeParcelableArray(objects, 0); - parcel.setDataPosition(0); - Parcelable[] parcelableArray = parcel.readParcelableArray(object.getClass().getClassLoader()); - assertArrayEquals("parcel should match initial object", objects, parcelableArray); - } - - public static void testDescribeContents(@NonNull Parcelable object, int describeContentsValue) { - if (describeContentsValue == 0) { - assertEquals("\nExpecting a describeContents() value of 0 for a " + object.getClass().getSimpleName() - + " instance." + "\nYou can provide a different value for describeContentValue through the obtain method.", - 0, - object.describeContents()); - } else { - assertEquals("Expecting a describeContents() value of " + describeContentsValue, - describeContentsValue, - object.describeContents()); - } - } - - private static class ParcelMocker { - - public static Parcel obtain(@NonNull Parcelable target) { - Parcel parcel = new ParcelMocker(target).getMockedParcel(); - target.writeToParcel(parcel, 0); - parcel.setDataPosition(0); - return parcel; - } - - public static Parcel obtain(@NonNull Parcelable[] targets) { - if (targets.length == 0) { - throw new IllegalArgumentException("The passed argument may not be empty"); - } - Parcel parcel = new ParcelMocker(targets[0]).getMockedParcel(); - parcel.writeParcelableArray(targets, 0); - parcel.setDataPosition(0); - return parcel; - } - - private List<Object> objects; - private Object object; - private Parcel mockedParcel; - private int position; - - private ParcelMocker(Object o) { - this.object = o; - mockedParcel = mock(Parcel.class); - objects = new ArrayList<>(); - setupMock(); - } - - private Parcel getMockedParcel() { - return mockedParcel; - } - - private void setupMock() { - setupWrites(); - setupReads(); - setupOthers(); - } - - private void setupWrites() { - Answer<Void> writeValueAnswer = new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - Object parameter = invocation.getArguments()[0]; - objects.add(parameter); - return null; - } - }; - Answer<Void> writeArrayAnswer = new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - Object[] parameters = (Object[]) invocation.getArguments()[0]; - objects.add(parameters.length); - for (Object o : parameters) { - objects.add(o); - } - return null; - } - }; - Answer<Void> writeIntArrayAnswer = new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - int[] parameters = (int[]) invocation.getArguments()[0]; - if (parameters != null) { - objects.add(parameters.length); - for (Object o : parameters) { - objects.add(o); - } - } else { - objects.add(-1); - } - return null; - } - }; - doAnswer(writeValueAnswer).when(mockedParcel).writeByte(anyByte()); - doAnswer(writeValueAnswer).when(mockedParcel).writeLong(anyLong()); - doAnswer(writeValueAnswer).when(mockedParcel).writeString(anyString()); - doAnswer(writeValueAnswer).when(mockedParcel).writeInt(anyInt()); - doAnswer(writeIntArrayAnswer).when(mockedParcel).writeIntArray(any(int[].class)); - doAnswer(writeValueAnswer).when(mockedParcel).writeDouble(anyDouble()); - doAnswer(writeValueAnswer).when(mockedParcel).writeFloat(anyFloat()); - doAnswer(writeValueAnswer).when(mockedParcel).writeParcelable(any(Parcelable.class), eq(0)); - doAnswer(writeArrayAnswer).when(mockedParcel).writeParcelableArray(any(Parcelable[].class), eq(0)); - } - - private void setupReads() { - when(mockedParcel.readInt()).then(new Answer<Integer>() { - @Override - public Integer answer(InvocationOnMock invocation) throws Throwable { - return (Integer) objects.get(position++); - } - }); - when(mockedParcel.readByte()).thenAnswer(new Answer<Byte>() { - @Override - public Byte answer(InvocationOnMock invocation) throws Throwable { - return (Byte) objects.get(position++); - } - }); - when(mockedParcel.readLong()).thenAnswer(new Answer<Long>() { - @Override - public Long answer(InvocationOnMock invocation) throws Throwable { - return (Long) objects.get(position++); - } - }); - when(mockedParcel.readString()).thenAnswer(new Answer<String>() { - @Override - public String answer(InvocationOnMock invocation) throws Throwable { - return (String) objects.get(position++); - } - }); - when(mockedParcel.readDouble()).thenAnswer(new Answer<Double>() { - @Override - public Double answer(InvocationOnMock invocation) throws Throwable { - return (Double) objects.get(position++); - } - }); - when(mockedParcel.readFloat()).thenAnswer(new Answer<Float>() { - @Override - public Float answer(InvocationOnMock invocation) throws Throwable { - return (Float) objects.get(position++); - } - }); - when(mockedParcel.readParcelable(Parcelable.class.getClassLoader())).thenAnswer(new Answer<Parcelable>() { - @Override - public Parcelable answer(InvocationOnMock invocation) throws Throwable { - return (Parcelable) objects.get(position++); - } - }); - when(mockedParcel.readParcelableArray(Parcelable.class.getClassLoader())).thenAnswer(new Answer<Object[]>() { - @Override - public Object[] answer(InvocationOnMock invocation) throws Throwable { - int size = (Integer) objects.get(position++); - Field field = object.getClass().getDeclaredField("CREATOR"); - field.setAccessible(true); - Class<?> creatorClass = field.getType(); - Object fieldValue = field.get(object); - Method myMethod = creatorClass.getDeclaredMethod("newArray", int.class); - Object[] array = (Object[]) myMethod.invoke(fieldValue, size); - for (int i = 0; i < size; i++) { - array[i] = objects.get(position++); - } - return array; - } - }); - when(mockedParcel.createIntArray()).then(new Answer<int[]>() { - @Override - public int[] answer(InvocationOnMock invocation) throws Throwable { - int size = (Integer) objects.get(position++); - if (size == -1) { - return null; - } - - int[] array = new int[size]; - for (int i = 0; i < size; i++) { - array[i] = (Integer) objects.get(position++); - } - - return array; - } - }); - } - - private void setupOthers() { - doAnswer(new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - position = ((Integer) invocation.getArguments()[0]); - return null; - } - }).when(mockedParcel).setDataPosition(anyInt()); - } - } -} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/platform/android/MapboxGLAndroidSDKTestApp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index ca6ee9cea8..0000000000 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline
\ No newline at end of file |