导航菜单

页面标题

页面副标题

Perplexity v2.48.1 - AttributionParser.java 源代码

正在查看: Perplexity v2.48.1 应用的 AttributionParser.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.mapbox.maps.attribution;

import android.content.Context;
import android.text.Html;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.style.URLSpan;
import com.mapbox.maps.R;
import com.mapbox.maps.plugin.attribution.Attribution;
import gm.i;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import kotlin.Metadata;
import kotlin.jvm.JvmOverloads;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;

@Metadata(d1 = {"\u0000R\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000e\n\u0000\n\u0002\u0010\u000b\n\u0002\b\u0006\n\u0002\u0010#\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0003\n\u0002\u0010\"\n\u0002\b\t\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010 \n\u0002\b\u0007\b\u0016\u0018\u0000 +2\u00020\u0001:\u0002+,BE\b\u0000\u0012\f\u0010\u0002\u001a\b\u0012\u0004\u0012\u00020\u00040\u0003\u0012\u0006\u0010\u0005\u001a\u00020\u0006\u0012\u0006\u0010\u0007\u001a\u00020\b\u0012\u0006\u0010\t\u001a\u00020\b\u0012\u0006\u0010\n\u001a\u00020\b\u0012\u0006\u0010\u000b\u001a\u00020\b\u0012\u0006\u0010\f\u001a\u00020\b¢\u0006\u0002\u0010\rJ\b\u0010\u0011\u001a\u00020\u0012H\u0002J\u0012\u0010\u0013\u001a\u00020\u00062\b\b\u0002\u0010\u0014\u001a\u00020\bH\u0007J\f\u0010\u0015\u001a\b\u0012\u0004\u0012\u00020\u00100\u0016J\u0010\u0010\u0017\u001a\u00020\b2\u0006\u0010\u0018\u001a\u00020\u0006H\u0002J\u0010\u0010\u0019\u001a\u00020\b2\u0006\u0010\u001a\u001a\u00020\u0006H\u0002J\u0010\u0010\u001b\u001a\u00020\b2\u0006\u0010\u001a\u001a\u00020\u0006H\u0002J\u0010\u0010\u001c\u001a\u00020\b2\u0006\u0010\u001a\u001a\u00020\u0006H\u0002J\b\u0010\u001d\u001a\u00020\u0012H\u0004J\u0018\u0010\u001e\u001a\u00020\u00062\u0006\u0010\u001f\u001a\u00020 2\u0006\u0010!\u001a\u00020\"H\u0002J\b\u0010#\u001a\u00020\u0012H\u0002J\u0016\u0010$\u001a\u00020\u00122\f\u0010%\u001a\b\u0012\u0004\u0012\u00020\u00060&H\u0002J\u0018\u0010'\u001a\u00020\u00122\u0006\u0010\u001f\u001a\u00020 2\u0006\u0010!\u001a\u00020\"H\u0002J\u0010\u0010(\u001a\u00020\u00062\u0006\u0010)\u001a\u00020\u0006H\u0002J\u0010\u0010*\u001a\u00020\u00062\u0006\u0010)\u001a\u00020\u0006H\u0002R\u000e\u0010\u0005\u001a\u00020\u0006X\u0082\u0004¢\u0006\u0002\n\u0000R\u0014\u0010\u000e\u001a\b\u0012\u0004\u0012\u00020\u00100\u000fX\u0082\u0004¢\u0006\u0002\n\u0000R\u0014\u0010\u0002\u001a\b\u0012\u0004\u0012\u00020\u00040\u0003X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\t\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0007\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u000b\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\f\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\n\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000¨\u0006-"}, d2 = {"Lcom/mapbox/maps/attribution/AttributionParser;", AttributionParser.EMPTY_STRING, "context", "Ljava/lang/ref/WeakReference;", "Landroid/content/Context;", "attributionData", AttributionParser.EMPTY_STRING, "withImproveMap", AttributionParser.EMPTY_STRING, "withCopyrightSign", "withTelemetryAttribution", "withMapboxAttribution", "withMapboxPrivacyPolicy", "(Ljava/lang/ref/WeakReference;Ljava/lang/String;ZZZZZ)V", "attributions", AttributionParser.EMPTY_STRING, "Lcom/mapbox/maps/plugin/attribution/Attribution;", "addAdditionalAttributions", AttributionParser.EMPTY_STRING, "createAttributionString", "shortenedOutput", "getAttributions", AttributionParser.EMPTY_STRING, "isImproveThisMapAnchor", "anchor", "isUrlValid", "url", "isValidForImproveThisMap", "isValidForMapbox", "parse", "parseAnchorValue", "htmlBuilder", "Landroid/text/SpannableStringBuilder;", "urlSpan", "Landroid/text/style/URLSpan;", "parseAttributions", "parseStringLiteralToAttributions", "stringLiteralList", AttributionParser.EMPTY_STRING, "parseUrlSpan", "stripCopyright", "anchorString", "translateImproveThisMapAnchor", "Companion", "Options", "sdk_release"}, k = 1, mv = {1, 7, 1}, xi = 48)
public class AttributionParser {
    private static final String COPYRIGHT = "© ";

    public static final Companion INSTANCE = new Companion(null);
    private static final String EMPTY_STRING = "";
    private static final List<String> IMPROVE_MAP_URLS;
    private static final String IMPROVE_THIS_MAP = "Improve this map";
    private final String attributionData;
    private final Set<Attribution> attributions;
    private final WeakReference<Context> context;
    private final boolean withCopyrightSign;
    private final boolean withImproveMap;
    private final boolean withMapboxAttribution;
    private final boolean withMapboxPrivacyPolicy;
    private final boolean withTelemetryAttribution;

    @Metadata(d1 = {"\u0000$\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0002\b\u0002\n\u0002\u0010!\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u0010\u0010\u000b\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\u0004H\u0002R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R\u0017\u0010\u0006\u001a\b\u0012\u0004\u0012\u00020\u00040\u0007¢\u0006\b\n\u0000\u001a\u0004\b\b\u0010\tR\u000e\u0010\n\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000¨\u0006\u000e"}, d2 = {"Lcom/mapbox/maps/attribution/AttributionParser$Companion;", AttributionParser.EMPTY_STRING, "()V", "COPYRIGHT", AttributionParser.EMPTY_STRING, "EMPTY_STRING", "IMPROVE_MAP_URLS", AttributionParser.EMPTY_STRING, "getIMPROVE_MAP_URLS", "()Ljava/util/List;", "IMPROVE_THIS_MAP", "fromHtml", "Landroid/text/Spanned;", "html", "sdk_release"}, k = 1, mv = {1, 7, 1}, xi = 48)
    public static final class Companion {
        public Companion(DefaultConstructorMarker defaultConstructorMarker) {
            this();
        }

        public final Spanned fromHtml(String html) {
            Spanned fromHtml = Html.fromHtml(html, 0);
            Intrinsics.g(fromHtml, "{\n        Html.fromHtml(…HTML_MODE_LEGACY)\n      }");
            return fromHtml;
        }

        public final List<String> getIMPROVE_MAP_URLS() {
            return AttributionParser.IMPROVE_MAP_URLS;
        }

        private Companion() {
        }
    }

    @Metadata(d1 = {"\u00008\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0011\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010!\n\u0000\n\u0002\u0010\u000b\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\n\u0018\u0000 \u001c2\u00020\u0001:\u0001\u001cB\r\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004J\u0006\u0010\u0012\u001a\u00020\u0013J\u0010\u0010\u0014\u001a\u00020\r2\u0006\u0010\u0015\u001a\u00020\u0007H\u0002J\u001b\u0010\u0016\u001a\u00020\u00072\f\u0010\u0017\u001a\b\u0012\u0004\u0012\u00020\u00070\u0006H\u0002¢\u0006\u0002\u0010\u0018J\u001f\u0010\u0019\u001a\u00020\u00002\u0012\u0010\u001a\u001a\n\u0012\u0006\b\u0001\u0012\u00020\u00070\u0006\"\u00020\u0007¢\u0006\u0002\u0010\u001bJ\u000e\u0010\f\u001a\u00020\u00002\u0006\u0010\f\u001a\u00020\rJ\u000e\u0010\u000e\u001a\u00020\u00002\u0006\u0010\u000e\u001a\u00020\rJ\u000e\u0010\u000f\u001a\u00020\u00002\u0006\u0010\u000f\u001a\u00020\rJ\u000e\u0010\u0010\u001a\u00020\u00002\u0006\u0010\u0010\u001a\u00020\rJ\u000e\u0010\u0011\u001a\u00020\u00002\u0006\u0010\u0011\u001a\u00020\rR\u0018\u0010\u0005\u001a\n\u0012\u0004\u0012\u00020\u0007\u0018\u00010\u0006X\u0082\u000e¢\u0006\u0004\n\u0002\u0010\bR\u0014\u0010\u0002\u001a\b\u0012\u0004\u0012\u00020\u00030\tX\u0082\u0004¢\u0006\u0002\n\u0000R\u0014\u0010\n\u001a\b\u0012\u0004\u0012\u00020\u00070\u000bX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\f\u001a\u00020\rX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u000e\u001a\u00020\rX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u000f\u001a\u00020\rX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0010\u001a\u00020\rX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0011\u001a\u00020\rX\u0082\u000e¢\u0006\u0002\n\u0000¨\u0006\u001d"}, d2 = {"Lcom/mapbox/maps/attribution/AttributionParser$Options;", AttributionParser.EMPTY_STRING, "context", "Landroid/content/Context;", "(Landroid/content/Context;)V", "attributionDataStringArray", AttributionParser.EMPTY_STRING, AttributionParser.EMPTY_STRING, "[Ljava/lang/String;", "Ljava/lang/ref/WeakReference;", "stringLiteralArray", AttributionParser.EMPTY_STRING, "withCopyrightSign", AttributionParser.EMPTY_STRING, "withImproveMap", "withMapboxAttribution", "withMapboxPrivacyPolicy", "withTelemetryAttribution", "build", "Lcom/mapbox/maps/attribution/AttributionParser;", "hasValidHTMLTag", "htmlStr", "parseAttribution", "attribution", "([Ljava/lang/String;)Ljava/lang/String;", "withAttributionData", "attributionData", "([Ljava/lang/String;)Lcom/mapbox/maps/attribution/AttributionParser$Options;", "Companion", "sdk_release"}, k = 1, mv = {1, 7, 1}, xi = 48)
    public static final class Options {
        private static final Companion Companion = new Companion(null);

        @Deprecated
        public static final String HTML_STYLE_REGEX = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
        private String[] attributionDataStringArray;
        private final WeakReference<Context> context;
        private List<String> stringLiteralArray;
        private boolean withCopyrightSign;
        private boolean withImproveMap;
        private boolean withMapboxAttribution;
        private boolean withMapboxPrivacyPolicy;
        private boolean withTelemetryAttribution;

        @Metadata(d1 = {"\u0000\u0012\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0000\b\u0082\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002R\u000e\u0010\u0003\u001a\u00020\u0004X\u0086T¢\u0006\u0002\n\u0000¨\u0006\u0005"}, d2 = {"Lcom/mapbox/maps/attribution/AttributionParser$Options$Companion;", AttributionParser.EMPTY_STRING, "()V", "HTML_STYLE_REGEX", AttributionParser.EMPTY_STRING, "sdk_release"}, k = 1, mv = {1, 7, 1}, xi = 48)
        public static final class Companion {
            public Companion(DefaultConstructorMarker defaultConstructorMarker) {
                this();
            }

            private Companion() {
            }
        }

        public Options(Context context) {
            Intrinsics.h(context, "context");
            this.context = new WeakReference<>(context);
            this.withImproveMap = true;
            this.withCopyrightSign = true;
            this.withMapboxAttribution = true;
            this.withMapboxPrivacyPolicy = true;
            this.stringLiteralArray = new ArrayList();
        }

        private final boolean hasValidHTMLTag(String htmlStr) {
            return Pattern.compile(HTML_STYLE_REGEX).matcher(htmlStr).find();
        }

        private final String parseAttribution(String[] attribution) {
            StringBuilder sb = new StringBuilder();
            for (String str : attribution) {
                if (str.length() > 0) {
                    if (hasValidHTMLTag(str)) {
                        sb.append(str);
                    } else {
                        this.stringLiteralArray.add(str);
                    }
                }
            }
            String sb2 = sb.toString();
            Intrinsics.g(sb2, "builder.toString()");
            return sb2;
        }

        public final AttributionParser build() {
            String[] strArr = this.attributionDataStringArray;
            if (strArr == null) {
                throw new IllegalStateException("Using builder without providing attribution data");
            }
            Intrinsics.e(strArr);
            AttributionParser attributionParser = new AttributionParser(this.context, parseAttribution(strArr), this.withImproveMap, this.withCopyrightSign, this.withTelemetryAttribution, this.withMapboxAttribution, this.withMapboxPrivacyPolicy);
            attributionParser.parse();
            attributionParser.parseStringLiteralToAttributions(this.stringLiteralArray);
            return attributionParser;
        }

        public final Options withAttributionData(String... attributionData) {
            Intrinsics.h(attributionData, "attributionData");
            this.attributionDataStringArray = (String[]) Arrays.copyOf(attributionData, attributionData.length);
            return this;
        }

        public final Options withCopyrightSign(boolean withCopyrightSign) {
            this.withCopyrightSign = withCopyrightSign;
            return this;
        }

        public final Options withImproveMap(boolean withImproveMap) {
            this.withImproveMap = withImproveMap;
            return this;
        }

        public final Options withMapboxAttribution(boolean withMapboxAttribution) {
            this.withMapboxAttribution = withMapboxAttribution;
            return this;
        }

        public final Options withMapboxPrivacyPolicy(boolean withMapboxPrivacyPolicy) {
            this.withMapboxPrivacyPolicy = withMapboxPrivacyPolicy;
            return this;
        }

        public final Options withTelemetryAttribution(boolean withTelemetryAttribution) {
            this.withTelemetryAttribution = withTelemetryAttribution;
            return this;
        }
    }

    static {
        ArrayList arrayList = new ArrayList();
        IMPROVE_MAP_URLS = arrayList;
        arrayList.add("https://www.mapbox.com/feedback/");
        arrayList.add("https://www.mapbox.com/map-feedback/");
        arrayList.add("https://apps.mapbox.com/feedback/");
    }

    public AttributionParser(WeakReference<Context> weakReference, String str, boolean z, boolean z2, boolean z3, boolean z4, boolean z5) {
        Intrinsics.h(weakReference, "context");
        Intrinsics.h(str, "attributionData");
        this.context = weakReference;
        this.attributionData = str;
        this.withImproveMap = z;
        this.withCopyrightSign = z2;
        this.withTelemetryAttribution = z3;
        this.withMapboxAttribution = z4;
        this.withMapboxPrivacyPolicy = z5;
        this.attributions = new LinkedHashSet();
    }

    private final void addAdditionalAttributions() {
        Context context = this.context.get();
        if (this.withTelemetryAttribution) {
            Set<Attribution> set = this.attributions;
            String string = context != null ? context.getString(R.string.mapbox_telemetrySettings) : Attribution.TELEMETRY_SETTINGS;
            Intrinsics.g(string, "if (context != null) con…bution.TELEMETRY_SETTINGS");
            set.add(new Attribution(string, Attribution.ABOUT_TELEMETRY_URL));
        }
        if (this.withMapboxPrivacyPolicy) {
            Set<Attribution> set2 = this.attributions;
            String string2 = context != null ? context.getString(R.string.mapbox_privacy_policy) : Attribution.PRIVACY_POLICY;
            Intrinsics.g(string2, "if (context != null) con…ttribution.PRIVACY_POLICY");
            set2.add(new Attribution(string2, Attribution.PRIVACY_POLICY_URL));
        }
    }

    public static String createAttributionString$default(AttributionParser attributionParser, boolean z, int i, Object obj) {
        if (obj != null) {
            throw new UnsupportedOperationException("Super calls with default arguments not supported in this target, function: createAttributionString");
        }
        if ((i & 1) != 0) {
            z = false;
        }
        return attributionParser.createAttributionString(z);
    }

    private final boolean isImproveThisMapAnchor(String anchor) {
        return Intrinsics.c(anchor, IMPROVE_THIS_MAP);
    }

    private final boolean isUrlValid(String url) {
        return isValidForImproveThisMap(url) && isValidForMapbox(url);
    }

    private final boolean isValidForImproveThisMap(String url) {
        return this.withImproveMap || !IMPROVE_MAP_URLS.contains(url);
    }

    private final boolean isValidForMapbox(String url) {
        return this.withMapboxAttribution || !Intrinsics.c(url, Attribution.ABOUT_MAPS_URL);
    }

    private final String parseAnchorValue(SpannableStringBuilder htmlBuilder, URLSpan urlSpan) {
        int spanStart = htmlBuilder.getSpanStart(urlSpan);
        int spanEnd = htmlBuilder.getSpanEnd(urlSpan);
        char[] cArr = new char[spanEnd - spanStart];
        htmlBuilder.getChars(spanStart, spanEnd, cArr, 0);
        return stripCopyright(new String(cArr));
    }

    private final void parseAttributions() {
        Spanned fromHtml = INSTANCE.fromHtml(this.attributionData);
        Intrinsics.f(fromHtml, "null cannot be cast to non-null type android.text.SpannableStringBuilder");
        SpannableStringBuilder spannableStringBuilder = (SpannableStringBuilder) fromHtml;
        URLSpan[] uRLSpanArr = (URLSpan[]) spannableStringBuilder.getSpans(0, spannableStringBuilder.length(), URLSpan.class);
        Intrinsics.g(uRLSpanArr, "urlSpans");
        for (URLSpan uRLSpan : uRLSpanArr) {
            Intrinsics.g(uRLSpan, "urlSpan");
            parseUrlSpan(spannableStringBuilder, uRLSpan);
        }
    }

    public final void parseStringLiteralToAttributions(List<String> stringLiteralList) {
        Iterator<String> it = stringLiteralList.iterator();
        while (it.hasNext()) {
            String obj = INSTANCE.fromHtml(it.next()).toString();
            if (!this.withCopyrightSign) {
                obj = stripCopyright(obj);
            }
            this.attributions.add(new Attribution(obj, EMPTY_STRING));
        }
    }

    private final void parseUrlSpan(SpannableStringBuilder htmlBuilder, URLSpan urlSpan) {
        String url = urlSpan.getURL();
        Intrinsics.g(url, "url");
        if (isUrlValid(url)) {
            String parseAnchorValue = parseAnchorValue(htmlBuilder, urlSpan);
            if (isImproveThisMapAnchor(parseAnchorValue)) {
                parseAnchorValue = translateImproveThisMapAnchor(parseAnchorValue);
            }
            this.attributions.add(new Attribution(parseAnchorValue, url));
        }
    }

    private final String stripCopyright(String anchorString) {
        if (this.withCopyrightSign || !i.P(anchorString, COPYRIGHT, false)) {
            return anchorString;
        }
        String substring = anchorString.substring(2, anchorString.length());
        Intrinsics.g(substring, "this as java.lang.String…ing(startIndex, endIndex)");
        return substring;
    }

    private final String translateImproveThisMapAnchor(String anchorString) {
        Context context = this.context.get();
        if (context == null) {
            return anchorString;
        }
        String string = context.getString(R.string.mapbox_telemetryImproveMap);
        Intrinsics.g(string, "context.getString(R.stri…pbox_telemetryImproveMap)");
        return string;
    }

    @JvmOverloads
    public final String createAttributionString() {
        return createAttributionString$default(this, false, 1, null);
    }

    public final Set<Attribution> getAttributions() {
        return this.attributions;
    }

    public final void parse() {
        parseAttributions();
        addAdditionalAttributions();
    }

    @JvmOverloads
    public final String createAttributionString(boolean shortenedOutput) {
        boolean isEmpty = this.attributions.isEmpty();
        String str = EMPTY_STRING;
        if (isEmpty) {
            return EMPTY_STRING;
        }
        if (!this.withCopyrightSign) {
            str = COPYRIGHT;
        }
        StringBuilder sb = new StringBuilder(str);
        int i = 0;
        for (Attribution attribution : this.attributions) {
            i++;
            sb.append(!shortenedOutput ? attribution.getTitle() : attribution.getTitleAbbreviated());
            if (i != this.attributions.size()) {
                sb.append(" / ");
            }
        }
        String sb2 = sb.toString();
        Intrinsics.g(sb2, "stringBuilder.toString()");
        return sb2;
    }
}