summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java244
1 files changed, 0 insertions, 244 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
deleted file mode 100644
index 5384a29fca..0000000000
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/AttributionDialogManager.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package com.mapbox.mapboxsdk.maps;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-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;
-import com.mapbox.mapboxsdk.MapStrictMode;
-import com.mapbox.mapboxsdk.Mapbox;
-import com.mapbox.mapboxsdk.R;
-import com.mapbox.mapboxsdk.attribution.Attribution;
-import com.mapbox.mapboxsdk.attribution.AttributionParser;
-import com.mapbox.mapboxsdk.camera.CameraPosition;
-import com.mapbox.mapboxsdk.style.sources.Source;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-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.
- * <p>
- * When the user clicks the attribution icon, {@link AttributionDialogManager#onClick(View)} will be invoked.
- * An attribution dialog will be shown to the user with contents based on the attributions found in the map style.
- * Additionally an telemetry option item is shown to configure telemetry settings.
- * </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_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 = "^(.*://[^:^/]*)/(.*)/(.*)";
-
- @NonNull
- private final Context context;
- @NonNull
- private final MapboxMap mapboxMap;
- private Set<Attribution> attributionSet;
- private AlertDialog dialog;
-
- public AttributionDialogManager(@NonNull Context context, @NonNull MapboxMap mapboxMap) {
- this.context = context;
- this.mapboxMap = mapboxMap;
- }
-
- // Called when someone presses the attribution icon on the map
- @Override
- public void onClick(@NonNull View view) {
- attributionSet = new AttributionBuilder(mapboxMap, view.getContext()).build();
-
- boolean isActivityFinishing = false;
- if (context instanceof Activity) {
- isActivityFinishing = ((Activity) context).isFinishing();
- }
-
- // check is hosting activity isn't finishing
- // https://github.com/mapbox/mapbox-gl-native/issues/11238
- if (!isActivityFinishing) {
- showAttributionDialog(getAttributionTitles());
- }
- }
-
- protected void showAttributionDialog(@NonNull String[] attributionTitles) {
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.mapbox_attributionsDialogTitle);
- builder.setAdapter(new ArrayAdapter<>(context, R.layout.mapbox_attribution_list_item, attributionTitles), this);
- dialog = builder.show();
- }
-
- private String[] getAttributionTitles() {
- List<String> titles = new ArrayList<>();
- for (Attribution attribution : attributionSet) {
- titles.add(attribution.getTitle());
- }
- return titles.toArray(new String[titles.size()]);
- }
-
- // Called when someone selects an attribution or telemetry settings from the dialog
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (isLatestEntry(which)) {
- showTelemetryDialog();
- } else {
- showMapAttributionWebPage(which);
- }
- }
-
- public void onStop() {
- if (dialog != null && dialog.isShowing()) {
- dialog.dismiss();
- }
- }
-
- private boolean isLatestEntry(int attributionKeyIndex) {
- return attributionKeyIndex == getAttributionTitles().length - 1;
- }
-
- private void showTelemetryDialog() {
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setTitle(R.string.mapbox_attributionTelemetryTitle);
- builder.setMessage(R.string.mapbox_attributionTelemetryMessage);
- builder.setPositiveButton(R.string.mapbox_attributionTelemetryPositive, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(@NonNull DialogInterface dialog, int which) {
- TelemetryDefinition telemetry = Mapbox.getTelemetry();
- if (telemetry != null) {
- telemetry.setUserTelemetryRequestState(true);
- }
- dialog.cancel();
- }
- });
- builder.setNeutralButton(R.string.mapbox_attributionTelemetryNeutral, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(@NonNull DialogInterface dialog, int which) {
- showWebPage(context.getResources().getString(R.string.mapbox_telemetryLink));
- dialog.cancel();
- }
- });
- builder.setNegativeButton(R.string.mapbox_attributionTelemetryNegative, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(@NonNull DialogInterface dialog, int which) {
- TelemetryDefinition telemetry = Mapbox.getTelemetry();
- if (telemetry != null) {
- telemetry.setUserTelemetryRequestState(false);
- }
- dialog.cancel();
- }
- });
- builder.show();
- }
-
- private void showMapAttributionWebPage(int which) {
- Attribution[] attributions = attributionSet.toArray(new Attribution[attributionSet.size()]);
- String url = attributions[which].getUrl();
- if (url.contains(MAP_FEEDBACK_URL_OLD) || url.contains(MAP_FEEDBACK_URL)) {
- url = buildMapFeedbackMapUrl(Mapbox.getAccessToken());
- }
- showWebPage(url);
- }
-
- @NonNull
- String buildMapFeedbackMapUrl(@Nullable String accessToken) {
- // TODO Add Android Maps SDK version to the query parameter, currently the version API is not available.
- // TODO Keep track of this issue at [#15632](https://github.com/mapbox/mapbox-gl-native/issues/15632)
-
- Uri.Builder builder = Uri.parse(MAP_FEEDBACK_URL).buildUpon();
-
- 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));
- }
-
- String packageName = context.getApplicationContext().getPackageName();
- if (packageName != null) {
- builder.appendQueryParameter("referrer", packageName);
- }
-
- if (accessToken != null) {
- builder.appendQueryParameter("access_token", accessToken);
- }
-
- Style style = mapboxMap.getStyle();
- if (style != null) {
- String styleUri = style.getUri();
- Pattern pattern = Pattern.compile(MAP_FEEDBACK_STYLE_URI_REGEX);
- Matcher matcher = pattern.matcher(styleUri);
-
- if (matcher.find()) {
- String styleOwner = matcher.group(2);
- String styleId = matcher.group(3);
-
- builder.appendQueryParameter("owner", styleOwner)
- .appendQueryParameter("id", styleId);
- }
- }
-
- return builder.build().toString();
- }
-
- private void showWebPage(@NonNull String url) {
- try {
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse(url));
- context.startActivity(intent);
- } catch (ActivityNotFoundException exception) {
- // explicitly handling if the device hasn't have a web browser installed. #8899
- Toast.makeText(context, R.string.mapbox_attributionErrorNoBrowser, Toast.LENGTH_LONG).show();
- MapStrictMode.strictModeViolation(exception);
- }
- }
-
- private static class AttributionBuilder {
-
- private final MapboxMap mapboxMap;
- @NonNull
- private final WeakReference<Context> context;
-
- AttributionBuilder(MapboxMap mapboxMap, Context context) {
- this.mapboxMap = mapboxMap;
- this.context = new WeakReference<>(context);
- }
-
- private Set<Attribution> build() {
- Context context = this.context.get();
- if (context == null) {
- return Collections.emptySet();
- }
-
- List<String> attributions = new ArrayList<>();
- String attribution;
-
- Style style = mapboxMap.getStyle();
- if (style != null) {
- for (Source source : style.getSources()) {
- attribution = source.getAttribution();
- if (!attribution.isEmpty()) {
- attributions.add(attribution);
- }
- }
- }
-
- return new AttributionParser.Options(context)
- .withCopyrightSign(true)
- .withImproveMap(true)
- .withTelemetryAttribution(true)
- .withAttributionData(attributions.toArray(new String[attributions.size()]))
- .build().getAttributions();
- }
- }
-}