CrackMe.apk
Download file
package androidx.core.text.util;
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.core.net.MailTo;
import androidx.core.util.PatternsCompat;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
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 Comparator<LinkSpec>() {
public int compare(LinkSpec linkSpec, LinkSpec linkSpec2) {
if (linkSpec.start < linkSpec2.start) {
return -1;
}
if (linkSpec.start > linkSpec2.start || linkSpec.end < linkSpec2.end) {
return 1;
}
if (linkSpec.end > linkSpec2.end) {
return -1;
}
return 0;
}
};
private static final String[] EMPTY_STRING = new String[0];
@Retention(RetentionPolicy.SOURCE)
public @interface LinkifyMask {
}
public static boolean addLinks(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, (Linkify.TransformFilter) null);
}
if ((i & 2) != 0) {
gatherLinks(arrayList, spannable, PatternsCompat.AUTOLINK_EMAIL_ADDRESS, new String[]{MailTo.MAILTO_SCHEME}, (Linkify.MatchFilter) null, (Linkify.TransformFilter) 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(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((Spannable) valueOf, i)) {
return false;
}
addLinkMovementMethod(textView);
textView.setText(valueOf);
return true;
} else if (!addLinks((Spannable) text, i)) {
return false;
} else {
addLinkMovementMethod(textView);
return true;
}
}
public static void addLinks(TextView textView, Pattern pattern, 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(TextView textView, Pattern pattern, String str, Linkify.MatchFilter matchFilter, Linkify.TransformFilter transformFilter) {
if (shouldAddLinksFallbackToFramework()) {
Linkify.addLinks(textView, pattern, str, matchFilter, transformFilter);
} else {
addLinks(textView, pattern, str, (String[]) null, matchFilter, transformFilter);
}
}
public static void addLinks(TextView textView, Pattern pattern, String str, String[] strArr, Linkify.MatchFilter matchFilter, Linkify.TransformFilter transformFilter) {
if (shouldAddLinksFallbackToFramework()) {
Linkify.addLinks(textView, pattern, str, strArr, matchFilter, transformFilter);
return;
}
SpannableString valueOf = SpannableString.valueOf(textView.getText());
if (addLinks((Spannable) valueOf, pattern, str, strArr, matchFilter, transformFilter)) {
textView.setText(valueOf);
addLinkMovementMethod(textView);
}
}
public static boolean addLinks(Spannable spannable, Pattern pattern, String str) {
if (shouldAddLinksFallbackToFramework()) {
return Linkify.addLinks(spannable, pattern, str);
}
return addLinks(spannable, pattern, str, (String[]) null, (Linkify.MatchFilter) null, (Linkify.TransformFilter) null);
}
public static boolean addLinks(Spannable spannable, Pattern pattern, String str, Linkify.MatchFilter matchFilter, Linkify.TransformFilter transformFilter) {
if (shouldAddLinksFallbackToFramework()) {
return Linkify.addLinks(spannable, pattern, str, matchFilter, transformFilter);
}
return addLinks(spannable, pattern, str, (String[]) null, matchFilter, transformFilter);
}
public static boolean addLinks(Spannable spannable, Pattern pattern, String str, String[] strArr, Linkify.MatchFilter matchFilter, Linkify.TransformFilter transformFilter) {
String str2;
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 str3 = strArr[i];
i++;
if (str3 == null) {
str2 = "";
} else {
str2 = str3.toLowerCase(Locale.ROOT);
}
strArr2[i] = str2;
}
Matcher matcher = pattern.matcher(spannable);
boolean z = 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);
z = true;
}
}
return z;
}
private static boolean shouldAddLinksFallbackToFramework() {
return Build.VERSION.SDK_INT >= 28;
}
private static void addLinkMovementMethod(TextView textView) {
if (!(textView.getMovementMethod() instanceof LinkMovementMethod) && textView.getLinksClickable()) {
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
}
private static String makeUrl(String str, String[] strArr, Matcher matcher, Linkify.TransformFilter transformFilter) {
boolean z;
if (transformFilter != null) {
str = transformFilter.transformUrl(matcher, str);
}
int i = 0;
while (true) {
z = true;
if (i >= strArr.length) {
z = false;
break;
}
if (str.regionMatches(true, 0, strArr[i], 0, strArr[i].length())) {
if (!str.regionMatches(false, 0, strArr[i], 0, strArr[i].length())) {
str = strArr[i] + str.substring(strArr[i].length());
}
} else {
i++;
}
}
if (z || strArr.length <= 0) {
return str;
}
return strArr[0] + 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 applyLink(String str, int i, int i2, Spannable spannable) {
spannable.setSpan(new URLSpan(str), i, i2, 33);
}
/* JADX WARNING: Failed to process nested try/catch */
/* JADX WARNING: Missing exception handler attribute for start block: B:1:0x0005 */
/* JADX WARNING: Removed duplicated region for block: B:1:0x0005 A[LOOP:0: B:1:0x0005->B:14:0x0005, LOOP_START, PHI: r0 r6
PHI: (r0v1 int) = (r0v0 int), (r0v2 int) binds: [B:0:0x0000, B:14:0x0005] A[DONT_GENERATE, DONT_INLINE]
PHI: (r6v2 java.lang.String) = (r6v1 java.lang.String), (r6v3 java.lang.String) binds: [B:0:0x0000, B:14:0x0005] A[DONT_GENERATE, DONT_INLINE], SYNTHETIC, Splitter:B:1:0x0005] */
/* Code decompiled incorrectly, please refer to instructions dump. */
private static void gatherMapLinks(java.util.ArrayList<androidx.core.text.util.LinkifyCompat.LinkSpec> r5, android.text.Spannable r6) {
/*
java.lang.String r6 = r6.toString()
r0 = 0
L_0x0005:
java.lang.String r1 = findAddress(r6) // Catch:{ UnsupportedOperationException -> 0x0043 }
if (r1 == 0) goto L_0x0043
int r2 = r6.indexOf(r1) // Catch:{ UnsupportedOperationException -> 0x0043 }
if (r2 >= 0) goto L_0x0012
goto L_0x0043
L_0x0012:
androidx.core.text.util.LinkifyCompat$LinkSpec r3 = new androidx.core.text.util.LinkifyCompat$LinkSpec // Catch:{ UnsupportedOperationException -> 0x0043 }
r3.<init>() // Catch:{ UnsupportedOperationException -> 0x0043 }
int r4 = r1.length() // Catch:{ UnsupportedOperationException -> 0x0043 }
int r4 = r4 + r2
int r2 = r2 + r0
r3.start = r2 // Catch:{ UnsupportedOperationException -> 0x0043 }
int r0 = r0 + r4
r3.end = r0 // Catch:{ UnsupportedOperationException -> 0x0043 }
java.lang.String r6 = r6.substring(r4) // Catch:{ UnsupportedOperationException -> 0x0043 }
java.lang.String r2 = "UTF-8"
java.lang.String r1 = java.net.URLEncoder.encode(r1, r2) // Catch:{ UnsupportedEncodingException -> 0x0005 }
java.lang.StringBuilder r2 = new java.lang.StringBuilder // Catch:{ UnsupportedOperationException -> 0x0043 }
r2.<init>() // Catch:{ UnsupportedOperationException -> 0x0043 }
java.lang.String r4 = "geo:0,0?q="
r2.append(r4) // Catch:{ UnsupportedOperationException -> 0x0043 }
r2.append(r1) // Catch:{ UnsupportedOperationException -> 0x0043 }
java.lang.String r1 = r2.toString() // Catch:{ UnsupportedOperationException -> 0x0043 }
r3.url = r1 // Catch:{ UnsupportedOperationException -> 0x0043 }
r5.add(r3) // Catch:{ UnsupportedOperationException -> 0x0043 }
goto L_0x0005
L_0x0043:
return
*/
throw new UnsupportedOperationException("Method not decompiled: androidx.core.text.util.LinkifyCompat.gatherMapLinks(java.util.ArrayList, android.text.Spannable):void");
}
private static String findAddress(String str) {
if (Build.VERSION.SDK_INT >= 28) {
return WebView.findAddress(str);
}
return FindAddress.findAddress(str);
}
private static void pruneOverlaps(ArrayList<LinkSpec> arrayList, Spannable spannable) {
int i;
int i2 = 0;
URLSpan[] uRLSpanArr = (URLSpan[]) spannable.getSpans(0, spannable.length(), URLSpan.class);
for (int i3 = 0; i3 < uRLSpanArr.length; i3++) {
LinkSpec linkSpec = new LinkSpec();
linkSpec.frameworkAddedSpan = uRLSpanArr[i3];
linkSpec.start = spannable.getSpanStart(uRLSpanArr[i3]);
linkSpec.end = spannable.getSpanEnd(uRLSpanArr[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);
if (linkSpec2.start <= linkSpec3.start && linkSpec2.end > linkSpec3.start) {
if (linkSpec3.end > linkSpec2.end && linkSpec2.end - linkSpec2.start <= linkSpec3.end - linkSpec3.start) {
i = linkSpec2.end - linkSpec2.start < linkSpec3.end - linkSpec3.start ? i2 : -1;
} else {
i = i4;
}
if (i != -1) {
URLSpan uRLSpan = arrayList.get(i).frameworkAddedSpan;
if (uRLSpan != null) {
spannable.removeSpan(uRLSpan);
}
arrayList.remove(i);
size--;
}
}
i2 = i4;
}
}
private LinkifyCompat() {
}
private static class LinkSpec {
int end;
URLSpan frameworkAddedSpan;
int start;
String url;
LinkSpec() {
}
}
}
Download file