summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortobrun <tobrun.van.nuland@gmail.com>2017-11-08 11:56:10 +0100
committerTobrun <tobrun.van.nuland@gmail.com>2017-11-13 18:57:55 +0100
commit2f58155cfd486c140c3081ade21ff47664870f37 (patch)
tree5e77298bf17d71656431b43a127ca3432336bd6e
parentab57792ec9b28319bce9bbfaaf3f492436f421d5 (diff)
downloadqtlocation-mapboxgl-2f58155cfd486c140c3081ade21ff47664870f37.tar.gz
[android] - rework datamodel to attribution class
-rw-r--r--platform/android/MapboxGLAndroidSDK/build.gradle6
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Attribution.java20
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/AttributionUtils.java41
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/utils/AttributionDataTest.java23
-rw-r--r--platform/android/dependencies.gradle1
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\">&copy; 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", "&copy; 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}",