summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Liu <peng.liu@mapbox.com>2019-09-12 19:07:46 +0300
committerPeng Liu <peng.liu@mapbox.com>2019-09-19 11:52:49 +0300
commitf47356054ae975f2829e08cfa37d0c36cd3b7ab5 (patch)
treebf8b96675801a01bc05832e023f0817b789cc26d
parentc7f0081be04797228a6d4bb7b2afb3f9dfadeee7 (diff)
downloadqtlocation-mapboxgl-f47356054ae975f2829e08cfa37d0c36cd3b7ab5.tar.gz
[android] Generate feedback url.
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java86
1 files changed, 57 insertions, 29 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java
index 7ab7513c48..dc1314a781 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java
@@ -8,7 +8,6 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Toast;
@@ -27,6 +26,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Responsible for managing attribution interactions on the map.
@@ -37,9 +38,11 @@ import java.util.Set;
* </p>
*/
public class AttributionDialogManager implements View.OnClickListener, DialogInterface.OnClickListener {
-
private static final String MAP_FEEDBACK_URL = "https://apps.mapbox.com/feedback";
- private static final String MAP_FEEDBACK_LOCATION_FORMAT = MAP_FEEDBACK_URL + "/#/%f/%f/%d";
+ private static final String MAP_FEEDBACK_URL_OLD = "https://www.mapbox.com/map-feedback";
+ private static final String MAP_FEEDBACK_URL_LOCATION_FRAGMENT_FORMAT = "/%f/%f/%f/%f/%d";
+ private static final String MAP_FEEDBACK_STYLE_URI_REGEX = "^(.*://[^:^/]*)/(.*)/(.*)";
+ private final String TAG = this.getClass().getName();
@NonNull
private final Context context;
@@ -91,7 +94,7 @@ public class AttributionDialogManager implements View.OnClickListener, DialogInt
if (isLatestEntry(which)) {
showTelemetryDialog();
} else {
- showMapFeedbackWebPage(which);
+ showMapAttributionWebPage(which);
}
}
@@ -139,36 +142,62 @@ public class AttributionDialogManager implements View.OnClickListener, DialogInt
builder.show();
}
- private void showMapFeedbackWebPage(int which) {
+ private void showMapAttributionWebPage(int which) {
Attribution[] attributions = attributionSet.toArray(new Attribution[attributionSet.size()]);
String url = attributions[which].getUrl();
- Logger.w("AttributionManager", "url:" + url);
+ Logger.d(TAG, "attribution url: " + url);
+ if (url.contains(MAP_FEEDBACK_URL_OLD) || url.contains(MAP_FEEDBACK_URL)) {
+ url = buildMapFeedbackMapUrl();
+ }
+ Logger.d(TAG, "final feedback url: " + url);
+ showWebPage(url);
+ }
- Logger.w("AttributionManager", "camera position:" + mapboxMap.getCameraPosition().toString());
- Logger.w("AttributionManager", "token:" + Mapbox.getAccessToken());
- Logger.w("AttributionManager", "owner:" + Mapbox.getSkuToken());
- Logger.w("AttributionManager", "package name:" + context.getPackageName());
- mapboxMap.getStyle(new Style.OnStyleLoaded() {
- @Override
- public void onStyleLoaded(@NonNull Style style) {
- String styleUri = style.getUri();
+ @NonNull
+ private String buildMapFeedbackMapUrl() {
+ // TODO Add Android Maps SDK version to the query parameter, currently the version API is not available.
- Logger.w("AttributionManager", "id:" + style.getUri());
- }
- });
+ Uri.Builder builder = Uri.parse(MAP_FEEDBACK_URL).buildUpon();
- url = buildMapFeedbackMapUrl(mapboxMap.getCameraPosition());
+ CameraPosition cameraPosition = mapboxMap.getCameraPosition();
+ if (cameraPosition != null) {
+ builder.encodedFragment(String.format(Locale.getDefault(), MAP_FEEDBACK_URL_LOCATION_FRAGMENT_FORMAT,
+ cameraPosition.target.getLongitude(), cameraPosition.target.getLatitude(),
+ cameraPosition.zoom, cameraPosition.bearing, (int) cameraPosition.tilt));
+ }
- Logger.w("AttributionManager", "final url to show:" + url);
- showWebPage(url);
- }
+ String packageName = context.getPackageName();
+ if (packageName != null) {
+ builder.appendQueryParameter("referrer", packageName);
+ }
- @NonNull
- private String buildMapFeedbackMapUrl(@Nullable CameraPosition cameraPosition) {
- // appends current location to the map feedback url if available
- return cameraPosition != null ? String.format(Locale.getDefault(),
- MAP_FEEDBACK_LOCATION_FORMAT, cameraPosition.target.getLongitude(), cameraPosition.target.getLatitude(),
- (int) cameraPosition.zoom) : MAP_FEEDBACK_URL;
+ String accessToken = Mapbox.getAccessToken();
+ if (accessToken != null) {
+ builder.appendQueryParameter("access_token", accessToken);
+ }
+
+ Style style = mapboxMap.getStyle();
+ if (style != null) {
+ String styleUri = style.getUri();
+ Logger.d(TAG, "style uri:" + styleUri);
+
+ Pattern pattern = Pattern.compile(MAP_FEEDBACK_STYLE_URI_REGEX);
+ Matcher matcher = pattern.matcher(styleUri);
+
+ if (matcher.find()) {
+ String styleApi = matcher.group(1);
+ String styleOwner = matcher.group(2);
+ String styleId = matcher.group(3);
+ Logger.d(TAG, "style API: " + styleApi);
+ Logger.d(TAG, "style owner: " + styleOwner);
+ Logger.d(TAG, "style id: " + styleId);
+
+ builder.appendQueryParameter("owner", styleOwner)
+ .appendQueryParameter("id", styleId);
+ }
+ }
+
+ return builder.build().toString();
}
private void showWebPage(@NonNull String url) {
@@ -205,10 +234,9 @@ public class AttributionDialogManager implements View.OnClickListener, DialogInt
Style style = mapboxMap.getStyle();
if (style != null) {
- for (Source source : mapboxMap.getStyle().getSources()) {
+ for (Source source : style.getSources()) {
attribution = source.getAttribution();
if (!attribution.isEmpty()) {
- Logger.w("AttributionManager", "add attribution:" + source.getAttribution());
attributions.add(attribution);
}
}