package tk.wasdennnoch.androidn_ify.android;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import tk.wasdennnoch.androidn_ify.XposedHook;
import tk.wasdennnoch.androidn_ify.utils.ConfigUtils;
public class AndroidHooks {
private static final String TAG = "AndroidHooks";
private static final String ACTION_SCREENSHOT = "tk.wasdennnoch.androidn_ify.action.ACTION_SCREENSHOT";
private static Object mPhoneWindowManager;
private static BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case ACTION_SCREENSHOT:
try {
XposedHelpers.callMethod(mPhoneWindowManager, "takeScreenshot");
} catch (Throwable t) {
XposedHook.logE(TAG, "Error while taking screenshot", t);
}
break;
}
}
};
public static void hook(ClassLoader classLoader) {
try {
Class<?> classPhoneWindowManager = XposedHelpers.findClass(
ConfigUtils.M ? "com.android.server.policy.PhoneWindowManager" :
"com.android.internal.policy.impl.PhoneWindowManager", classLoader);
XposedBridge.hookAllMethods(classPhoneWindowManager, "init", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
mPhoneWindowManager = param.thisObject;
Context context = (Context) param.args[0];
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ACTION_SCREENSHOT);
context.registerReceiver(mBroadcastReceiver, intentFilter);
}
});
} catch (Throwable t) {
XposedHook.logE(TAG, "Crash in screenshot hooks", t);
}
}
public static void sendTakeScreenshot(Context context) {
Intent intent = new Intent(ACTION_SCREENSHOT);
context.sendBroadcast(intent);
}
}