You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
5.2 KiB
Java

package com.langerhans.one.mods;
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
import static de.robv.android.xposed.XposedHelpers.findClass;
import static de.robv.android.xposed.XposedHelpers.findMethodExact;
import static de.robv.android.xposed.XposedHelpers.getObjectField;
import static de.robv.android.xposed.XposedHelpers.newInstance;
import java.lang.reflect.Method;
import android.view.KeyEvent;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class CamMods{
private static Method takeFocus;
private static Method takePicture;
private static Method triggerRecord;
private static Method changeZoom;
static LoadPackageParam lpparamF;
public static void execHook_VolKey(final LoadPackageParam lpparam, final int volup, final int voldown) {
lpparamF = lpparam;
takePicture = findMethodExact("com.android.camera.HTCCamera", lpparamF.classLoader, "takePicture", String.class);
takeFocus = findMethodExact("com.android.camera.HTCCamera", lpparamF.classLoader, "takeFocus", int.class, int.class);
triggerRecord = findMethodExact("com.android.camera.HTCCamera", lpparamF.classLoader, "triggerRecord");
changeZoom = findMethodExact("com.android.camera.HTCCamera", lpparamF.classLoader, "changeZoom", int.class);
hookKeyUp();
findAndHookMethod("com.android.camera.HTCCamera", lpparamF.classLoader, "onKeyDown", int.class, android.view.KeyEvent.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
KeyEvent key = (KeyEvent) param.args[1];
String currentZoom = "";
if (key.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN)
{
switch (voldown){
case 1:
takePicture.invoke(param.thisObject, "HTCCamera");
param.setResult(true);
return;
case 2:
takeFocus.invoke(param.thisObject, 540, 960);
param.setResult(true);
return;
case 3:
triggerRecord.invoke(param.thisObject);
param.setResult(true);
return;
case 5:
takeFocus.invoke(param.thisObject, 540, 960);
takePicture.invoke(param.thisObject, "HTCCamera");
param.setResult(true);
return;
case 6:
currentZoom = getObjectField(param.thisObject, "zoomValue").toString();
changeZoom.invoke(param.thisObject, Integer.valueOf(currentZoom) + 12); //12 = 5 zoom steps from 0-60
param.setResult(true);
return;
case 7:
currentZoom = getObjectField(param.thisObject, "zoomValue").toString();
changeZoom.invoke(param.thisObject, Integer.valueOf(currentZoom) - 12); //12 = 5 zoom steps from 0-60
param.setResult(true);
return;
default:
}
}
if (key.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP)
{
switch (volup){
case 1:
takePicture.invoke(param.thisObject, "HTCCamera");
param.setResult(true);
return;
case 2:
takeFocus.invoke(param.thisObject, 540, 960);
param.setResult(true);
return;
case 3:
triggerRecord.invoke(param.thisObject);
param.setResult(true);
return;
case 5:
takeFocus.invoke(param.thisObject, 540, 960);
takePicture.invoke(param.thisObject, "HTCCamera");
param.setResult(true);
return;
case 6:
currentZoom = getObjectField(param.thisObject, "zoomValue").toString();
changeZoom.invoke(param.thisObject, Integer.valueOf(currentZoom) + 12); //12 = 5 zoom steps from 0-60
param.setResult(true);
return;
case 7:
currentZoom = getObjectField(param.thisObject, "zoomValue").toString();
changeZoom.invoke(param.thisObject, Integer.valueOf(currentZoom) - 12); //12 = 5 zoom steps from 0-60
param.setResult(true);
return;
default:
}
}
Object keyeventargs = newInstance(findClass("com.android.camera.input.KeyEventArgs", lpparamF.classLoader), key);
Object keydownevent = getObjectField(param.thisObject, "keyDownEvent");
Method raise = findMethodExact("com.android.camera.event.Event", lpparamF.classLoader, "raise", Object.class, findClass("com.android.camera.event.EventArgs", lpparam.classLoader));
raise.invoke(keydownevent, param.thisObject, keyeventargs);
}
});
}
private static void hookKeyUp()
{
findAndHookMethod("com.android.camera.HTCCamera", lpparamF.classLoader, "onKeyUp", int.class, android.view.KeyEvent.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
KeyEvent key = (KeyEvent) param.args[1];
int keycode = key.getKeyCode();
if (keycode == KeyEvent.KEYCODE_VOLUME_DOWN || keycode == KeyEvent.KEYCODE_VOLUME_UP)
{
param.setResult(true);
}
}
});
}
}