discord-jadx/app/src/main/java/androidx/core/text/util/LinkifyCompat.java

317 lines
13 KiB
Java

package androidx.core.text.util;
import android.annotation.SuppressLint;
import android.os.Build;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.text.util.Linkify;
import android.webkit.WebView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RestrictTo;
import androidx.core.util.PatternsCompat;
import c.d.b.a.a;
import com.adjust.sdk.Constants;
import java.io.UnsupportedEncodingException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public final class LinkifyCompat {
private static final Comparator<LinkSpec> COMPARATOR = new AnonymousClass1();
private static final String[] EMPTY_STRING = new String[0];
/* renamed from: androidx.core.text.util.LinkifyCompat$1 reason: invalid class name */
public class AnonymousClass1 implements Comparator<LinkSpec> {
public int compare(LinkSpec linkSpec, LinkSpec linkSpec2) {
int i;
int i2;
int i3 = linkSpec.start;
int i4 = linkSpec2.start;
if (i3 < i4) {
return -1;
}
if (i3 <= i4 && (i = linkSpec.end) >= (i2 = linkSpec2.end)) {
return i > i2 ? -1 : 0;
}
return 1;
}
}
public static class LinkSpec {
public int end;
public URLSpan frameworkAddedSpan;
public int start;
public String url;
}
@Retention(RetentionPolicy.SOURCE)
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
public @interface LinkifyMask {
}
private LinkifyCompat() {
}
private static void addLinkMovementMethod(@NonNull TextView textView) {
if (!(textView.getMovementMethod() instanceof LinkMovementMethod) && textView.getLinksClickable()) {
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
}
public static void addLinks(@NonNull TextView textView, @NonNull Pattern pattern, @Nullable String str) {
if (shouldAddLinksFallbackToFramework()) {
Linkify.addLinks(textView, pattern, str);
} else {
addLinks(textView, pattern, str, (String[]) null, (Linkify.MatchFilter) null, (Linkify.TransformFilter) null);
}
}
public static void addLinks(@NonNull TextView textView, @NonNull Pattern pattern, @Nullable String str, @Nullable Linkify.MatchFilter matchFilter, @Nullable Linkify.TransformFilter transformFilter) {
if (shouldAddLinksFallbackToFramework()) {
Linkify.addLinks(textView, pattern, str, matchFilter, transformFilter);
} else {
addLinks(textView, pattern, str, (String[]) null, matchFilter, transformFilter);
}
}
@SuppressLint({"NewApi"})
public static void addLinks(@NonNull TextView textView, @NonNull Pattern pattern, @Nullable String str, @Nullable String[] strArr, @Nullable Linkify.MatchFilter matchFilter, @Nullable Linkify.TransformFilter transformFilter) {
if (shouldAddLinksFallbackToFramework()) {
Linkify.addLinks(textView, pattern, str, strArr, matchFilter, transformFilter);
return;
}
SpannableString valueOf = SpannableString.valueOf(textView.getText());
if (addLinks(valueOf, pattern, str, strArr, matchFilter, transformFilter)) {
textView.setText(valueOf);
addLinkMovementMethod(textView);
}
}
public static boolean addLinks(@NonNull Spannable spannable, int i) {
if (shouldAddLinksFallbackToFramework()) {
return Linkify.addLinks(spannable, i);
}
if (i == 0) {
return false;
}
URLSpan[] uRLSpanArr = (URLSpan[]) spannable.getSpans(0, spannable.length(), URLSpan.class);
for (int length = uRLSpanArr.length - 1; length >= 0; length--) {
spannable.removeSpan(uRLSpanArr[length]);
}
if ((i & 4) != 0) {
Linkify.addLinks(spannable, 4);
}
ArrayList arrayList = new ArrayList();
if ((i & 1) != 0) {
gatherLinks(arrayList, spannable, PatternsCompat.AUTOLINK_WEB_URL, new String[]{"http://", "https://", "rtsp://"}, Linkify.sUrlMatchFilter, null);
}
if ((i & 2) != 0) {
gatherLinks(arrayList, spannable, PatternsCompat.AUTOLINK_EMAIL_ADDRESS, new String[]{"mailto:"}, null, null);
}
if ((i & 8) != 0) {
gatherMapLinks(arrayList, spannable);
}
pruneOverlaps(arrayList, spannable);
if (arrayList.size() == 0) {
return false;
}
Iterator it = arrayList.iterator();
while (it.hasNext()) {
LinkSpec linkSpec = (LinkSpec) it.next();
if (linkSpec.frameworkAddedSpan == null) {
applyLink(linkSpec.url, linkSpec.start, linkSpec.end, spannable);
}
}
return true;
}
public static boolean addLinks(@NonNull Spannable spannable, @NonNull Pattern pattern, @Nullable String str) {
return shouldAddLinksFallbackToFramework() ? Linkify.addLinks(spannable, pattern, str) : addLinks(spannable, pattern, str, (String[]) null, (Linkify.MatchFilter) null, (Linkify.TransformFilter) null);
}
public static boolean addLinks(@NonNull Spannable spannable, @NonNull Pattern pattern, @Nullable String str, @Nullable Linkify.MatchFilter matchFilter, @Nullable Linkify.TransformFilter transformFilter) {
return shouldAddLinksFallbackToFramework() ? Linkify.addLinks(spannable, pattern, str, matchFilter, transformFilter) : addLinks(spannable, pattern, str, (String[]) null, matchFilter, transformFilter);
}
@SuppressLint({"NewApi"})
public static boolean addLinks(@NonNull Spannable spannable, @NonNull Pattern pattern, @Nullable String str, @Nullable String[] strArr, @Nullable Linkify.MatchFilter matchFilter, @Nullable Linkify.TransformFilter transformFilter) {
if (shouldAddLinksFallbackToFramework()) {
return Linkify.addLinks(spannable, pattern, str, strArr, matchFilter, transformFilter);
}
if (str == null) {
str = "";
}
if (strArr == null || strArr.length < 1) {
strArr = EMPTY_STRING;
}
String[] strArr2 = new String[(strArr.length + 1)];
strArr2[0] = str.toLowerCase(Locale.ROOT);
int i = 0;
while (i < strArr.length) {
String str2 = strArr[i];
i++;
strArr2[i] = str2 == null ? "" : str2.toLowerCase(Locale.ROOT);
}
Matcher matcher = pattern.matcher(spannable);
boolean z2 = false;
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
if (matchFilter != null ? matchFilter.acceptMatch(spannable, start, end) : true) {
applyLink(makeUrl(matcher.group(0), strArr2, matcher, transformFilter), start, end, spannable);
z2 = true;
}
}
return z2;
}
public static boolean addLinks(@NonNull TextView textView, int i) {
if (shouldAddLinksFallbackToFramework()) {
return Linkify.addLinks(textView, i);
}
if (i == 0) {
return false;
}
CharSequence text = textView.getText();
if (!(text instanceof Spannable)) {
SpannableString valueOf = SpannableString.valueOf(text);
if (!addLinks(valueOf, i)) {
return false;
}
addLinkMovementMethod(textView);
textView.setText(valueOf);
return true;
} else if (!addLinks((Spannable) text, i)) {
return false;
} else {
addLinkMovementMethod(textView);
return true;
}
}
private static void applyLink(String str, int i, int i2, Spannable spannable) {
spannable.setSpan(new URLSpan(str), i, i2, 33);
}
private static String findAddress(String str) {
return Build.VERSION.SDK_INT >= 28 ? WebView.findAddress(str) : FindAddress.findAddress(str);
}
private static void gatherLinks(ArrayList<LinkSpec> arrayList, Spannable spannable, Pattern pattern, String[] strArr, Linkify.MatchFilter matchFilter, Linkify.TransformFilter transformFilter) {
Matcher matcher = pattern.matcher(spannable);
while (matcher.find()) {
int start = matcher.start();
int end = matcher.end();
if (matchFilter == null || matchFilter.acceptMatch(spannable, start, end)) {
LinkSpec linkSpec = new LinkSpec();
linkSpec.url = makeUrl(matcher.group(0), strArr, matcher, transformFilter);
linkSpec.start = start;
linkSpec.end = end;
arrayList.add(linkSpec);
}
}
}
private static void gatherMapLinks(ArrayList<LinkSpec> arrayList, Spannable spannable) {
String obj = spannable.toString();
int i = 0;
while (true) {
try {
String findAddress = findAddress(obj);
if (findAddress != null) {
int indexOf = obj.indexOf(findAddress);
if (indexOf >= 0) {
LinkSpec linkSpec = new LinkSpec();
int length = findAddress.length() + indexOf;
linkSpec.start = indexOf + i;
i += length;
linkSpec.end = i;
obj = obj.substring(length);
try {
String encode = URLEncoder.encode(findAddress, Constants.ENCODING);
linkSpec.url = "geo:0,0?q=" + encode;
arrayList.add(linkSpec);
} catch (UnsupportedEncodingException unused) {
}
} else {
return;
}
} else {
return;
}
} catch (UnsupportedOperationException unused2) {
return;
}
}
}
private static String makeUrl(@NonNull String str, @NonNull String[] strArr, Matcher matcher, @Nullable Linkify.TransformFilter transformFilter) {
boolean z2;
if (transformFilter != null) {
str = transformFilter.transformUrl(matcher, str);
}
int i = 0;
while (true) {
z2 = true;
if (i >= strArr.length) {
z2 = false;
break;
} else if (!str.regionMatches(true, 0, strArr[i], 0, strArr[i].length())) {
i++;
} else if (!str.regionMatches(false, 0, strArr[i], 0, strArr[i].length())) {
str = strArr[i] + str.substring(strArr[i].length());
}
}
return (z2 || strArr.length <= 0) ? str : a.D(new StringBuilder(), strArr[0], str);
}
private static void pruneOverlaps(ArrayList<LinkSpec> arrayList, Spannable spannable) {
int i;
int i2 = 0;
Object[] objArr = (URLSpan[]) spannable.getSpans(0, spannable.length(), URLSpan.class);
for (int i3 = 0; i3 < objArr.length; i3++) {
LinkSpec linkSpec = new LinkSpec();
linkSpec.frameworkAddedSpan = objArr[i3];
linkSpec.start = spannable.getSpanStart(objArr[i3]);
linkSpec.end = spannable.getSpanEnd(objArr[i3]);
arrayList.add(linkSpec);
}
Collections.sort(arrayList, COMPARATOR);
int size = arrayList.size();
while (i2 < size - 1) {
LinkSpec linkSpec2 = arrayList.get(i2);
int i4 = i2 + 1;
LinkSpec linkSpec3 = arrayList.get(i4);
int i5 = linkSpec2.start;
int i6 = linkSpec3.start;
if (i5 <= i6 && (i = linkSpec2.end) > i6) {
int i7 = linkSpec3.end;
int i8 = (i7 > i && i - i5 <= i7 - i6) ? i - i5 < i7 - i6 ? i2 : -1 : i4;
if (i8 != -1) {
Object obj = arrayList.get(i8).frameworkAddedSpan;
if (obj != null) {
spannable.removeSpan(obj);
}
arrayList.remove(i8);
size--;
}
}
i2 = i4;
}
}
private static boolean shouldAddLinksFallbackToFramework() {
return Build.VERSION.SDK_INT >= 28;
}
}