diff options
author | tobrun <tobrun.van.nuland@gmail.com> | 2017-11-08 11:56:10 +0100 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2017-11-13 18:57:55 +0100 |
commit | 2f58155cfd486c140c3081ade21ff47664870f37 (patch) | |
tree | 5e77298bf17d71656431b43a127ca3432336bd6e | |
parent | ab57792ec9b28319bce9bbfaaf3f492436f421d5 (diff) | |
download | qtlocation-mapboxgl-2f58155cfd486c140c3081ade21ff47664870f37.tar.gz |
[android] - rework datamodel to attribution class
5 files changed, 90 insertions, 1 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/build.gradle b/platform/android/MapboxGLAndroidSDK/build.gradle index bf0af3052b..d9d6c2f3fc 100644 --- a/platform/android/MapboxGLAndroidSDK/build.gradle +++ b/platform/android/MapboxGLAndroidSDK/build.gradle @@ -10,6 +10,7 @@ dependencies { } testCompile rootProject.ext.dep.junit testCompile rootProject.ext.dep.mockito + testCompile rootProject.ext.dep.robolectric // Mapbox Android Services (GeoJSON support) compile(rootProject.ext.dep.mapboxJavaGeoJSON) { @@ -126,7 +127,10 @@ android { } testOptions { - unitTests.returnDefaultValues = true + unitTests{ + returnDefaultValues = true + includeAndroidResources = true + } } buildTypes { diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Attribution.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Attribution.java new file mode 100644 index 0000000000..801bede00c --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Attribution.java @@ -0,0 +1,20 @@ +package com.mapbox.mapboxsdk.maps; + +public class Attribution { + + private String title; + private String url; + + public Attribution(String title, String url) { + this.title = title; + this.url = url; + } + + public String getTitle() { + return title; + } + + public String getUrl() { + return url; + } +} diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/AttributionUtils.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/AttributionUtils.java new file mode 100644 index 0000000000..71fb89af82 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/AttributionUtils.java @@ -0,0 +1,41 @@ +package com.mapbox.mapboxsdk.utils; + +import android.text.Html; +import android.text.SpannableStringBuilder; +import android.text.style.URLSpan; +import com.mapbox.mapboxsdk.maps.Attribution; + +import java.util.ArrayList; +import java.util.List; + +public class AttributionUtils { + + public static List<Attribution> parseAttribution(String[] attribution) { + StringBuilder builder = new StringBuilder(); + for (String attr : attribution) { + if (!attr.isEmpty()) { + builder.append(attr); + } + } + return parseAttribution(builder.toString()); + } + + public static List<Attribution> parseAttribution(String attribution) { + List<Attribution> attributions = new ArrayList<>(); + SpannableStringBuilder htmlBuilder = (SpannableStringBuilder) Html.fromHtml(attribution); + URLSpan[] urlSpans = htmlBuilder.getSpans(0, htmlBuilder.length(), URLSpan.class); + for (URLSpan urlSpan : urlSpans) { + attributions.add(new Attribution(resolveAnchorValue(htmlBuilder, urlSpan), urlSpan.getURL())); + } + return attributions; + } + + private static String resolveAnchorValue(SpannableStringBuilder htmlBuilder, URLSpan urlSpan) { + int start = htmlBuilder.getSpanStart(urlSpan); + int end = htmlBuilder.getSpanEnd(urlSpan); + int length = end - start; + char[] charKey = new char[length]; + htmlBuilder.getChars(start, end, charKey, 0); + return String.valueOf(charKey); + } +} diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/utils/AttributionDataTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/utils/AttributionDataTest.java new file mode 100644 index 0000000000..a37086e11a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/utils/AttributionDataTest.java @@ -0,0 +1,23 @@ +package com.mapbox.mapboxsdk.utils; + +import com.mapbox.mapboxsdk.maps.Attribution; +import org.junit.Test; + +import java.util.List; + +import static junit.framework.Assert.assertEquals; + +public class AttributionDataTest { + + private final static String SINGLE_ATTRIBUTION = "<a href=\"https://www.digitalglobe.com/\" target=\"_blank\">© DigitalGlobe</a>"; + + + @Test + public void testParseAttributionString() throws Exception { + List<Attribution> attributionList = AttributionUtils.parseAttribution(SINGLE_ATTRIBUTION); + assertEquals("Size of list should match", 1, attributionList.size()); + Attribution attribution = attributionList.get(0); + assertEquals("URL should match", "https://www.digitalglobe.com/", attribution.getUrl()); + assertEquals("Title should match", "© DigitalGlobe", attribution.getTitle()); + } +} diff --git a/platform/android/dependencies.gradle b/platform/android/dependencies.gradle index eadf7aea56..0094b79281 100644 --- a/platform/android/dependencies.gradle +++ b/platform/android/dependencies.gradle @@ -25,6 +25,7 @@ ext { // unit test junit : 'junit:junit:4.12', mockito : 'org.mockito:mockito-core:2.10.0', + robolectric : 'org.robolectric:robolectric:3.5.1', // instrumentation test testRunner : "com.android.support.test:runner:${testRunnerVersion}", |