CrackMe.apk
Download file
package androidx.emoji2.viewsintegration;
import android.text.InputFilter;
import android.text.Selection;
import android.text.Spannable;
import android.text.Spanned;
import android.widget.TextView;
import androidx.emoji2.text.EmojiCompat;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
final class EmojiInputFilter implements InputFilter {
private EmojiCompat.InitCallback mInitCallback;
private final TextView mTextView;
EmojiInputFilter(TextView textView) {
this.mTextView = textView;
}
public CharSequence filter(CharSequence charSequence, int i, int i2, Spanned spanned, int i3, int i4) {
if (this.mTextView.isInEditMode()) {
return charSequence;
}
int loadState = EmojiCompat.get().getLoadState();
if (loadState != 0) {
boolean z = true;
if (loadState == 1) {
if (i4 == 0 && i3 == 0 && spanned.length() == 0 && charSequence == this.mTextView.getText()) {
z = false;
}
if (!z || charSequence == null) {
return charSequence;
}
if (!(i == 0 && i2 == charSequence.length())) {
charSequence = charSequence.subSequence(i, i2);
}
return EmojiCompat.get().process(charSequence, 0, charSequence.length());
} else if (loadState != 3) {
return charSequence;
}
}
EmojiCompat.get().registerInitCallback(getInitCallback());
return charSequence;
}
private EmojiCompat.InitCallback getInitCallback() {
if (this.mInitCallback == null) {
this.mInitCallback = new InitCallbackImpl(this.mTextView, this);
}
return this.mInitCallback;
}
private static class InitCallbackImpl extends EmojiCompat.InitCallback {
private final Reference<EmojiInputFilter> mEmojiInputFilterReference;
private final Reference<TextView> mViewRef;
InitCallbackImpl(TextView textView, EmojiInputFilter emojiInputFilter) {
this.mViewRef = new WeakReference(textView);
this.mEmojiInputFilterReference = new WeakReference(emojiInputFilter);
}
public void onInitialized() {
super.onInitialized();
TextView textView = this.mViewRef.get();
if (isInputFilterCurrentlyRegisteredOnTextView(textView, this.mEmojiInputFilterReference.get()) && textView.isAttachedToWindow()) {
CharSequence process = EmojiCompat.get().process(textView.getText());
int selectionStart = Selection.getSelectionStart(process);
int selectionEnd = Selection.getSelectionEnd(process);
textView.setText(process);
if (process instanceof Spannable) {
EmojiInputFilter.updateSelection((Spannable) process, selectionStart, selectionEnd);
}
}
}
private boolean isInputFilterCurrentlyRegisteredOnTextView(TextView textView, InputFilter inputFilter) {
InputFilter[] filters;
if (inputFilter == null || textView == null || (filters = textView.getFilters()) == null) {
return false;
}
for (InputFilter inputFilter2 : filters) {
if (inputFilter2 == inputFilter) {
return true;
}
}
return false;
}
}
static void updateSelection(Spannable spannable, int i, int i2) {
if (i >= 0 && i2 >= 0) {
Selection.setSelection(spannable, i, i2);
} else if (i >= 0) {
Selection.setSelection(spannable, i);
} else if (i2 >= 0) {
Selection.setSelection(spannable, i2);
}
}
}
Download file