From f47356054ae975f2829e08cfa37d0c36cd3b7ab5 Mon Sep 17 00:00:00 2001 From: Peng Liu Date: Thu, 12 Sep 2019 19:07:46 +0300 Subject: [android] Generate feedback url. --- .../mapboxsdk/maps/AttributionDialogManager.java | 86 ++++++++++++++-------- 1 file 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; *

*/ 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); } } -- cgit v1.2.1