CrackMe.apk
Download file
package androidx.core.widget;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.widget.PopupWindow;
import androidx.core.view.GravityCompat;
import androidx.core.view.ViewCompat;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public final class PopupWindowCompat {
private static final String TAG = "PopupWindowCompatApi21";
private static Method sGetWindowLayoutTypeMethod;
private static boolean sGetWindowLayoutTypeMethodAttempted;
private static Field sOverlapAnchorField;
private static boolean sOverlapAnchorFieldAttempted;
private static Method sSetWindowLayoutTypeMethod;
private static boolean sSetWindowLayoutTypeMethodAttempted;
private PopupWindowCompat() {
}
public static void showAsDropDown(PopupWindow popupWindow, View view, int i, int i2, int i3) {
if (Build.VERSION.SDK_INT >= 19) {
Api19Impl.showAsDropDown(popupWindow, view, i, i2, i3);
return;
}
if ((GravityCompat.getAbsoluteGravity(i3, ViewCompat.getLayoutDirection(view)) & 7) == 5) {
i -= popupWindow.getWidth() - view.getWidth();
}
popupWindow.showAsDropDown(view, i, i2);
}
public static void setOverlapAnchor(PopupWindow popupWindow, boolean z) {
if (Build.VERSION.SDK_INT >= 23) {
Api23Impl.setOverlapAnchor(popupWindow, z);
} else if (Build.VERSION.SDK_INT >= 21) {
if (!sOverlapAnchorFieldAttempted) {
try {
Field declaredField = PopupWindow.class.getDeclaredField("mOverlapAnchor");
sOverlapAnchorField = declaredField;
declaredField.setAccessible(true);
} catch (NoSuchFieldException e) {
Log.i(TAG, "Could not fetch mOverlapAnchor field from PopupWindow", e);
}
sOverlapAnchorFieldAttempted = true;
}
Field field = sOverlapAnchorField;
if (field != null) {
try {
field.set(popupWindow, Boolean.valueOf(z));
} catch (IllegalAccessException e2) {
Log.i(TAG, "Could not set overlap anchor field in PopupWindow", e2);
}
}
}
}
public static boolean getOverlapAnchor(PopupWindow popupWindow) {
if (Build.VERSION.SDK_INT >= 23) {
return Api23Impl.getOverlapAnchor(popupWindow);
}
if (Build.VERSION.SDK_INT < 21) {
return false;
}
if (!sOverlapAnchorFieldAttempted) {
try {
Field declaredField = PopupWindow.class.getDeclaredField("mOverlapAnchor");
sOverlapAnchorField = declaredField;
declaredField.setAccessible(true);
} catch (NoSuchFieldException e) {
Log.i(TAG, "Could not fetch mOverlapAnchor field from PopupWindow", e);
}
sOverlapAnchorFieldAttempted = true;
}
Field field = sOverlapAnchorField;
if (field == null) {
return false;
}
try {
return ((Boolean) field.get(popupWindow)).booleanValue();
} catch (IllegalAccessException e2) {
Log.i(TAG, "Could not get overlap anchor field in PopupWindow", e2);
return false;
}
}
public static void setWindowLayoutType(PopupWindow popupWindow, int i) {
if (Build.VERSION.SDK_INT >= 23) {
Api23Impl.setWindowLayoutType(popupWindow, i);
return;
}
if (!sSetWindowLayoutTypeMethodAttempted) {
Class<PopupWindow> cls = PopupWindow.class;
try {
Method declaredMethod = cls.getDeclaredMethod("setWindowLayoutType", new Class[]{Integer.TYPE});
sSetWindowLayoutTypeMethod = declaredMethod;
declaredMethod.setAccessible(true);
} catch (Exception unused) {
}
sSetWindowLayoutTypeMethodAttempted = true;
}
Method method = sSetWindowLayoutTypeMethod;
if (method != null) {
try {
method.invoke(popupWindow, new Object[]{Integer.valueOf(i)});
} catch (Exception unused2) {
}
}
}
public static int getWindowLayoutType(PopupWindow popupWindow) {
if (Build.VERSION.SDK_INT >= 23) {
return Api23Impl.getWindowLayoutType(popupWindow);
}
if (!sGetWindowLayoutTypeMethodAttempted) {
try {
Method declaredMethod = PopupWindow.class.getDeclaredMethod("getWindowLayoutType", new Class[0]);
sGetWindowLayoutTypeMethod = declaredMethod;
declaredMethod.setAccessible(true);
} catch (Exception unused) {
}
sGetWindowLayoutTypeMethodAttempted = true;
}
Method method = sGetWindowLayoutTypeMethod;
if (method != null) {
try {
return ((Integer) method.invoke(popupWindow, new Object[0])).intValue();
} catch (Exception unused2) {
}
}
return 0;
}
static class Api23Impl {
private Api23Impl() {
}
static void setOverlapAnchor(PopupWindow popupWindow, boolean z) {
popupWindow.setOverlapAnchor(z);
}
static boolean getOverlapAnchor(PopupWindow popupWindow) {
return popupWindow.getOverlapAnchor();
}
static void setWindowLayoutType(PopupWindow popupWindow, int i) {
popupWindow.setWindowLayoutType(i);
}
static int getWindowLayoutType(PopupWindow popupWindow) {
return popupWindow.getWindowLayoutType();
}
}
static class Api19Impl {
private Api19Impl() {
}
static void showAsDropDown(PopupWindow popupWindow, View view, int i, int i2, int i3) {
popupWindow.showAsDropDown(view, i, i2, i3);
}
}
}
Download file