CrackMe.apk
Download file
package androidx.core.view.inputmethod;
import android.os.Build;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.view.inputmethod.EditorInfo;
import androidx.core.util.Preconditions;
public final class EditorInfoCompat {
private static final String CONTENT_MIME_TYPES_INTEROP_KEY = "android.support.v13.view.inputmethod.EditorInfoCompat.CONTENT_MIME_TYPES";
private static final String CONTENT_MIME_TYPES_KEY = "androidx.core.view.inputmethod.EditorInfoCompat.CONTENT_MIME_TYPES";
private static final String CONTENT_SELECTION_END_KEY = "androidx.core.view.inputmethod.EditorInfoCompat.CONTENT_SELECTION_END";
private static final String CONTENT_SELECTION_HEAD_KEY = "androidx.core.view.inputmethod.EditorInfoCompat.CONTENT_SELECTION_HEAD";
private static final String CONTENT_SURROUNDING_TEXT_KEY = "androidx.core.view.inputmethod.EditorInfoCompat.CONTENT_SURROUNDING_TEXT";
private static final String[] EMPTY_STRING_ARRAY = new String[0];
public static final int IME_FLAG_FORCE_ASCII = Integer.MIN_VALUE;
public static final int IME_FLAG_NO_PERSONALIZED_LEARNING = 16777216;
static final int MAX_INITIAL_SELECTION_LENGTH = 1024;
static final int MEMORY_EFFICIENT_TEXT_LENGTH = 2048;
private static boolean isPasswordInputType(int i) {
int i2 = i & 4095;
return i2 == 129 || i2 == 225 || i2 == 18;
}
public static void setContentMimeTypes(EditorInfo editorInfo, String[] strArr) {
if (Build.VERSION.SDK_INT >= 25) {
editorInfo.contentMimeTypes = strArr;
return;
}
if (editorInfo.extras == null) {
editorInfo.extras = new Bundle();
}
editorInfo.extras.putStringArray(CONTENT_MIME_TYPES_KEY, strArr);
editorInfo.extras.putStringArray(CONTENT_MIME_TYPES_INTEROP_KEY, strArr);
}
public static String[] getContentMimeTypes(EditorInfo editorInfo) {
if (Build.VERSION.SDK_INT >= 25) {
String[] strArr = editorInfo.contentMimeTypes;
return strArr != null ? strArr : EMPTY_STRING_ARRAY;
} else if (editorInfo.extras == null) {
return EMPTY_STRING_ARRAY;
} else {
String[] stringArray = editorInfo.extras.getStringArray(CONTENT_MIME_TYPES_KEY);
if (stringArray == null) {
stringArray = editorInfo.extras.getStringArray(CONTENT_MIME_TYPES_INTEROP_KEY);
}
return stringArray != null ? stringArray : EMPTY_STRING_ARRAY;
}
}
public static void setInitialSurroundingText(EditorInfo editorInfo, CharSequence charSequence) {
if (Build.VERSION.SDK_INT >= 30) {
Api30Impl.setInitialSurroundingSubText(editorInfo, charSequence, 0);
} else {
setInitialSurroundingSubText(editorInfo, charSequence, 0);
}
}
public static void setInitialSurroundingSubText(EditorInfo editorInfo, CharSequence charSequence, int i) {
int i2;
int i3;
Preconditions.checkNotNull(charSequence);
if (Build.VERSION.SDK_INT >= 30) {
Api30Impl.setInitialSurroundingSubText(editorInfo, charSequence, i);
return;
}
if (editorInfo.initialSelStart > editorInfo.initialSelEnd) {
i2 = editorInfo.initialSelEnd;
} else {
i2 = editorInfo.initialSelStart;
}
int i4 = i2 - i;
if (editorInfo.initialSelStart > editorInfo.initialSelEnd) {
i3 = editorInfo.initialSelStart;
} else {
i3 = editorInfo.initialSelEnd;
}
int i5 = i3 - i;
int length = charSequence.length();
if (i < 0 || i4 < 0 || i5 > length) {
setSurroundingText(editorInfo, (CharSequence) null, 0, 0);
} else if (isPasswordInputType(editorInfo.inputType)) {
setSurroundingText(editorInfo, (CharSequence) null, 0, 0);
} else if (length <= 2048) {
setSurroundingText(editorInfo, charSequence, i4, i5);
} else {
trimLongSurroundingText(editorInfo, charSequence, i4, i5);
}
}
private static void trimLongSurroundingText(EditorInfo editorInfo, CharSequence charSequence, int i, int i2) {
CharSequence charSequence2;
int i3 = i2 - i;
int i4 = i3 > 1024 ? 0 : i3;
int i5 = 2048 - i4;
int min = Math.min(charSequence.length() - i2, i5 - Math.min(i, (int) (((double) i5) * 0.8d)));
int min2 = Math.min(i, i5 - min);
int i6 = i - min2;
if (isCutOnSurrogate(charSequence, i6, 0)) {
i6++;
min2--;
}
if (isCutOnSurrogate(charSequence, (i2 + min) - 1, 1)) {
min--;
}
int i7 = min2 + i4 + min;
if (i4 != i3) {
charSequence2 = TextUtils.concat(new CharSequence[]{charSequence.subSequence(i6, i6 + min2), charSequence.subSequence(i2, min + i2)});
} else {
charSequence2 = charSequence.subSequence(i6, i7 + i6);
}
int i8 = min2 + 0;
setSurroundingText(editorInfo, charSequence2, i8, i4 + i8);
}
public static CharSequence getInitialTextBeforeCursor(EditorInfo editorInfo, int i, int i2) {
CharSequence charSequence;
if (Build.VERSION.SDK_INT >= 30) {
return Api30Impl.getInitialTextBeforeCursor(editorInfo, i, i2);
}
if (editorInfo.extras == null || (charSequence = editorInfo.extras.getCharSequence(CONTENT_SURROUNDING_TEXT_KEY)) == null) {
return null;
}
int i3 = editorInfo.extras.getInt(CONTENT_SELECTION_HEAD_KEY);
int min = Math.min(i, i3);
if ((i2 & 1) != 0) {
return charSequence.subSequence(i3 - min, i3);
}
return TextUtils.substring(charSequence, i3 - min, i3);
}
public static CharSequence getInitialSelectedText(EditorInfo editorInfo, int i) {
CharSequence charSequence;
if (Build.VERSION.SDK_INT >= 30) {
return Api30Impl.getInitialSelectedText(editorInfo, i);
}
if (editorInfo.extras == null) {
return null;
}
int min = Math.min(editorInfo.initialSelStart, editorInfo.initialSelEnd);
int max = Math.max(editorInfo.initialSelStart, editorInfo.initialSelEnd);
int i2 = editorInfo.extras.getInt(CONTENT_SELECTION_HEAD_KEY);
int i3 = editorInfo.extras.getInt(CONTENT_SELECTION_END_KEY);
int i4 = max - min;
if (editorInfo.initialSelStart < 0 || editorInfo.initialSelEnd < 0 || i3 - i2 != i4 || (charSequence = editorInfo.extras.getCharSequence(CONTENT_SURROUNDING_TEXT_KEY)) == null) {
return null;
}
if ((i & 1) != 0) {
return charSequence.subSequence(i2, i3);
}
return TextUtils.substring(charSequence, i2, i3);
}
public static CharSequence getInitialTextAfterCursor(EditorInfo editorInfo, int i, int i2) {
CharSequence charSequence;
if (Build.VERSION.SDK_INT >= 30) {
return Api30Impl.getInitialTextAfterCursor(editorInfo, i, i2);
}
if (editorInfo.extras == null || (charSequence = editorInfo.extras.getCharSequence(CONTENT_SURROUNDING_TEXT_KEY)) == null) {
return null;
}
int i3 = editorInfo.extras.getInt(CONTENT_SELECTION_END_KEY);
int min = Math.min(i, charSequence.length() - i3);
if ((i2 & 1) != 0) {
return charSequence.subSequence(i3, min + i3);
}
return TextUtils.substring(charSequence, i3, min + i3);
}
private static boolean isCutOnSurrogate(CharSequence charSequence, int i, int i2) {
if (i2 == 0) {
return Character.isLowSurrogate(charSequence.charAt(i));
}
if (i2 != 1) {
return false;
}
return Character.isHighSurrogate(charSequence.charAt(i));
}
private static void setSurroundingText(EditorInfo editorInfo, CharSequence charSequence, int i, int i2) {
if (editorInfo.extras == null) {
editorInfo.extras = new Bundle();
}
editorInfo.extras.putCharSequence(CONTENT_SURROUNDING_TEXT_KEY, charSequence != null ? new SpannableStringBuilder(charSequence) : null);
editorInfo.extras.putInt(CONTENT_SELECTION_HEAD_KEY, i);
editorInfo.extras.putInt(CONTENT_SELECTION_END_KEY, i2);
}
static int getProtocol(EditorInfo editorInfo) {
if (Build.VERSION.SDK_INT >= 25) {
return 1;
}
if (editorInfo.extras == null) {
return 0;
}
boolean containsKey = editorInfo.extras.containsKey(CONTENT_MIME_TYPES_KEY);
boolean containsKey2 = editorInfo.extras.containsKey(CONTENT_MIME_TYPES_INTEROP_KEY);
if (containsKey && containsKey2) {
return 4;
}
if (containsKey) {
return 3;
}
if (containsKey2) {
return 2;
}
return 0;
}
private static class Api30Impl {
private Api30Impl() {
}
static void setInitialSurroundingSubText(EditorInfo editorInfo, CharSequence charSequence, int i) {
editorInfo.setInitialSurroundingSubText(charSequence, i);
}
static CharSequence getInitialTextBeforeCursor(EditorInfo editorInfo, int i, int i2) {
return editorInfo.getInitialTextBeforeCursor(i, i2);
}
static CharSequence getInitialSelectedText(EditorInfo editorInfo, int i) {
return editorInfo.getInitialSelectedText(i);
}
static CharSequence getInitialTextAfterCursor(EditorInfo editorInfo, int i, int i2) {
return editorInfo.getInitialTextAfterCursor(i, i2);
}
}
}
Download file