package io.github.libxposed; import android.content.Context; import android.content.ContextWrapper; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class XposedContextWrapper extends ContextWrapper implements XposedInterface { XposedContextWrapper(XposedContext base) { super(base); } public XposedContextWrapper(XposedContextWrapper base) { super(base); } final long getAPIVersion() { return 100; } @Override final public XposedContext getBaseContext() { return (XposedContext) super.getBaseContext(); } @NonNull @Override final public String implementationName() { return getBaseContext().implementationVersion(); } @NonNull @Override final public String implementationVersion() { return getBaseContext().implementationVersion(); } @Override final public long implementationVersionCode() { return getBaseContext().implementationVersionCode(); } @Override public MethodUnhooker, Method> hookBefore(@NonNull Method origin, @NonNull BeforeMethodHooker hooker) { return getBaseContext().hookBefore(origin, hooker); } @Override public MethodUnhooker, Method> hookAfter(@NonNull Method origin, @NonNull AfterMethodHooker hooker) { return getBaseContext().hookAfter(origin, hooker); } @Override public MethodUnhooker, Method> hook(@NonNull Method origin, @NonNull MethodHooker hooker) { return getBaseContext().hook(origin, hooker); } @Override public MethodUnhooker, Method> hookBefore(@NonNull Method origin, int priority, @NonNull BeforeMethodHooker hooker) { return getBaseContext().hookBefore(origin, priority, hooker); } @Override public MethodUnhooker, Method> hookAfter(@NonNull Method origin, int priority, @NonNull AfterMethodHooker hooker) { return getBaseContext().hookAfter(origin, priority, hooker); } @Override public MethodUnhooker, Method> hook(@NonNull Method origin, int priority, @NonNull MethodHooker hooker) { return getBaseContext().hook(origin, priority, hooker); } @Override public MethodUnhooker>, Constructor> hookBefore(@NonNull Constructor origin, @NonNull BeforeMethodHooker> hooker) { return getBaseContext().hookBefore(origin, hooker); } @Override public MethodUnhooker>, Constructor> hookAfter(@NonNull Constructor origin, @NonNull AfterMethodHooker> hooker) { return getBaseContext().hookAfter(origin, hooker); } @Override public MethodUnhooker>, Constructor> hook(@NonNull Constructor origin, @NonNull MethodHooker> hooker) { return getBaseContext().hook(origin, hooker); } @Override public MethodUnhooker>, Constructor> hookBefore(@NonNull Constructor origin, int priority, @NonNull BeforeMethodHooker> hooker) { return getBaseContext().hookBefore(origin, priority, hooker); } @Override public MethodUnhooker>, Constructor> hookAfter(@NonNull Constructor origin, int priority, @NonNull AfterMethodHooker> hooker) { return getBaseContext().hookAfter(origin, priority, hooker); } @Override public MethodUnhooker>, Constructor> hook(@NonNull Constructor origin, int priority, @NonNull MethodHooker> hooker) { return getBaseContext().hook(origin, priority, hooker); } @Override public boolean deoptimize(@Nullable Method method) { return getBaseContext().deoptimize(method); } @Override public boolean deoptimize(@Nullable Constructor constructor) { return getBaseContext().deoptimize(constructor); } @Nullable @Override public XposedUtils getUtils() { return getBaseContext().getUtils(); } @Override final public void log(@NonNull String message) { getBaseContext().log(message); } @Override final public void log(@NonNull String message, @NonNull Throwable throwable) { getBaseContext().log(message, throwable); } @Override final protected void attachBaseContext(Context base) { if (base instanceof XposedContext || base instanceof XposedContextWrapper) { super.attachBaseContext(base); } else { throw new IllegalArgumentException(); } } }