Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7df3ef9c authored by Siyamed Sinir's avatar Siyamed Sinir Committed by Android (Google) Code Review
Browse files

Merge "Change UrlSpanFactory to a Function"

parents 562e68fb 584d6d8c
Loading
Loading
Loading
Loading
+2 −7
Original line number Diff line number Diff line
@@ -47081,7 +47081,7 @@ package android.text.util {
  public class Linkify {
    ctor public Linkify();
    method public static final boolean addLinks(android.text.Spannable, int);
    method public static final boolean addLinks(android.text.Spannable, int, android.text.util.Linkify.UrlSpanFactory);
    method public static final boolean addLinks(android.text.Spannable, int, java.util.function.Function<java.lang.String, android.text.style.URLSpan>);
    method public static final boolean addLinks(android.widget.TextView, int);
    method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String);
    method public static final void addLinks(android.widget.TextView, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
@@ -47089,7 +47089,7 @@ package android.text.util {
    method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String);
    method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
    method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter);
    method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter, android.text.util.Linkify.UrlSpanFactory);
    method public static final boolean addLinks(android.text.Spannable, java.util.regex.Pattern, java.lang.String, java.lang.String[], android.text.util.Linkify.MatchFilter, android.text.util.Linkify.TransformFilter, java.util.function.Function<java.lang.String, android.text.style.URLSpan>);
    field public static final int ALL = 15; // 0xf
    field public static final int EMAIL_ADDRESSES = 2; // 0x2
    field public static final deprecated int MAP_ADDRESSES = 8; // 0x8
@@ -47108,11 +47108,6 @@ package android.text.util {
    method public abstract java.lang.String transformUrl(java.util.regex.Matcher, java.lang.String);
  }
  public static class Linkify.UrlSpanFactory {
    ctor public Linkify.UrlSpanFactory();
    method public android.text.style.URLSpan create(java.lang.String);
  }
  public class Rfc822Token {
    ctor public Rfc822Token(java.lang.String, java.lang.String, java.lang.String);
    method public java.lang.String getAddress();
+22 −57
Original line number Diff line number Diff line
@@ -37,7 +37,6 @@ import android.widget.TextView;
import com.android.i18n.phonenumbers.PhoneNumberMatch;
import com.android.i18n.phonenumbers.PhoneNumberUtil;
import com.android.i18n.phonenumbers.PhoneNumberUtil.Leniency;
import com.android.internal.annotations.GuardedBy;

import libcore.util.EmptyArray;

@@ -49,6 +48,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Locale;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@@ -69,7 +69,6 @@ import java.util.regex.Pattern;
 *
 * @see MatchFilter
 * @see TransformFilter
 * @see UrlSpanFactory
 */

public class Linkify {
@@ -227,44 +226,6 @@ public class Linkify {
        String transformUrl(final Matcher match, String url);
    }

    /**
     * Factory class to create {@link URLSpan}s. While adding spans to a {@link Spannable},
     * {@link Linkify} will call {@link UrlSpanFactory#create(String)} function to create a
     * {@link URLSpan}.
     *
     * @see #addLinks(Spannable, int, UrlSpanFactory)
     * @see #addLinks(Spannable, Pattern, String, String[], MatchFilter, TransformFilter,
     * UrlSpanFactory)
     */
    public static class UrlSpanFactory {
        private static final Object sInstanceLock = new Object();

        @GuardedBy("sInstanceLock")
        private static volatile UrlSpanFactory sInstance = null;

        private static synchronized UrlSpanFactory getInstance() {
            if (sInstance == null) {
                synchronized (sInstanceLock) {
                    if (sInstance == null) {
                        sInstance = new UrlSpanFactory();
                    }
                }
            }
            return sInstance;
        }

        /**
         * Factory function that will called by {@link Linkify} in order to create a
         * {@link URLSpan}.
         *
         * @param url URL found
         * @return a URLSpan instance
         */
        public URLSpan create(final String url) {
            return new URLSpan(url);
        }
    }

    /**
     *  Scans the text of the provided Spannable and turns all occurrences
     *  of the link types indicated in the mask into clickable links.
@@ -277,7 +238,7 @@ public class Linkify {
     *
     *  @return True if at least one link is found and applied.
     *
     * @see #addLinks(Spannable, int, UrlSpanFactory)
     * @see #addLinks(Spannable, int, Function)
     */
    public static final boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask) {
        return addLinks(text, mask, null, null);
@@ -292,11 +253,11 @@ public class Linkify {
     *
     *  @param text Spannable whose text is to be marked-up with links
     *  @param mask mask to define which kinds of links will be searched
     *  @param urlSpanFactory factory class used to create {@link URLSpan}s
     *  @param urlSpanFactory function used to create {@link URLSpan}s
     *  @return True if at least one link is found and applied.
     */
    public static final boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask,
            @Nullable UrlSpanFactory urlSpanFactory) {
            @Nullable Function<String, URLSpan> urlSpanFactory) {
        return addLinks(text, mask, null, urlSpanFactory);
    }

@@ -309,11 +270,11 @@ public class Linkify {
     * @param text Spannable whose text is to be marked-up with links
     * @param mask mask to define which kinds of links will be searched
     * @param context Context to be used while identifying phone numbers
     * @param urlSpanFactory factory class used to create {@link URLSpan}s
     * @param urlSpanFactory function used to create {@link URLSpan}s
     * @return true if at least one link is found and applied.
     */
    private static boolean addLinks(@NonNull Spannable text, @LinkifyMask int mask,
            @Nullable Context context, @Nullable UrlSpanFactory urlSpanFactory) {
            @Nullable Context context, @Nullable Function<String, URLSpan> urlSpanFactory) {
        if (text != null && containsUnsupportedCharacters(text.toString())) {
            android.util.EventLog.writeEvent(0x534e4554, "116321860", -1, "");
            return false;
@@ -398,7 +359,7 @@ public class Linkify {
     *
     *  @return True if at least one link is found and applied.
     *
     *  @see #addLinks(Spannable, int, UrlSpanFactory)
     *  @see #addLinks(Spannable, int, Function)
     */
    public static final boolean addLinks(@NonNull TextView text, @LinkifyMask int mask) {
        if (mask == 0) {
@@ -512,8 +473,7 @@ public class Linkify {
     *  @param pattern      Regex pattern to be used for finding links
     *  @param scheme       URL scheme string (eg <code>http://</code>) to be
     *                      prepended to the links that do not start with this scheme.
     * @see #addLinks(Spannable, Pattern, String, String[], MatchFilter, TransformFilter,
     * UrlSpanFactory)
     * @see #addLinks(Spannable, Pattern, String, String[], MatchFilter, TransformFilter, Function)
     */
    public static final boolean addLinks(@NonNull Spannable text, @NonNull Pattern pattern,
            @Nullable String scheme) {
@@ -534,8 +494,7 @@ public class Linkify {
     * @param transformFilter Filter to allow the client code to update the link found.
     *
     * @return True if at least one link is found and applied.
     * @see #addLinks(Spannable, Pattern, String, String[], MatchFilter, TransformFilter,
     * UrlSpanFactory)
     * @see #addLinks(Spannable, Pattern, String, String[], MatchFilter, TransformFilter, Function)
     */
    public static final boolean addLinks(@NonNull Spannable spannable, @NonNull Pattern pattern,
            @Nullable String scheme, @Nullable MatchFilter matchFilter,
@@ -560,8 +519,7 @@ public class Linkify {
     *
     * @return True if at least one link is found and applied.
     *
     * @see #addLinks(Spannable, Pattern, String, String[], MatchFilter, TransformFilter,
     * UrlSpanFactory)
     * @see #addLinks(Spannable, Pattern, String, String[], MatchFilter, TransformFilter, Function)
     */
    public static final boolean addLinks(@NonNull Spannable spannable, @NonNull Pattern pattern,
            @Nullable String defaultScheme, @Nullable String[] schemes,
@@ -584,14 +542,14 @@ public class Linkify {
     * @param matchFilter     the filter that is used to allow the client code additional control
     *                        over which pattern matches are to be converted into links.
     * @param transformFilter filter to allow the client code to update the link found.
     * @param urlSpanFactory  factory class used to create {@link URLSpan}s
     * @param urlSpanFactory  function used to create {@link URLSpan}s
     *
     * @return True if at least one link is found and applied.
     */
    public static final boolean addLinks(@NonNull Spannable spannable, @NonNull Pattern pattern,
            @Nullable String defaultScheme, @Nullable String[] schemes,
            @Nullable MatchFilter matchFilter, @Nullable TransformFilter transformFilter,
            @Nullable UrlSpanFactory urlSpanFactory) {
            @Nullable Function<String, URLSpan> urlSpanFactory) {
        if (spannable != null && containsUnsupportedCharacters(spannable.toString())) {
            android.util.EventLog.writeEvent(0x534e4554, "116321860", -1, "");
            return false;
@@ -634,11 +592,11 @@ public class Linkify {
    }

    private static void applyLink(String url, int start, int end, Spannable text,
            @Nullable UrlSpanFactory urlSpanFactory) {
            @Nullable Function<String, URLSpan> urlSpanFactory) {
        if (urlSpanFactory == null) {
            urlSpanFactory = UrlSpanFactory.getInstance();
            urlSpanFactory = DEFAULT_SPAN_FACTORY;
        }
        final URLSpan span = urlSpanFactory.create(url);
        final URLSpan span = urlSpanFactory.apply(url);
        text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

@@ -805,6 +763,13 @@ public class Linkify {
            i++;
        }
    }

    /**
     * Default factory function to create {@link URLSpan}s. While adding spans to a
     * {@link Spannable}, {@link Linkify} will call this function to create a {@link URLSpan}.
     */
    private static final Function<String, URLSpan> DEFAULT_SPAN_FACTORY =
            (String string) -> new URLSpan(string);
}

class LinkSpec {