package com.lody.virtual.client.hook.patchs.power;
import android.content.Context;
import com.lody.virtual.client.hook.base.PatchBinderDelegate;
import com.lody.virtual.client.hook.base.ReplaceLastPkgHook;
import com.lody.virtual.client.hook.base.ReplaceSequencePkgHook;
import com.lody.virtual.client.hook.base.ResultStaticHook;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import mirror.android.os.IPowerManager;
/**
* @author Lody
*/
public class PowerManagerPatch extends PatchBinderDelegate {
public PowerManagerPatch() {
super(IPowerManager.Stub.TYPE, Context.POWER_SERVICE);
}
@Override
protected void onBindHooks() {
super.onBindHooks();
addHook(new ReplaceSequencePkgHook("acquireWakeLock", 2) {
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
try {
return super.call(who, method, args);
} catch (InvocationTargetException e) {
return onHandleError(e);
}
}
});
addHook(new ReplaceLastPkgHook("acquireWakeLockWithUid") {
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
try {
return super.call(who, method, args);
} catch (InvocationTargetException e) {
return onHandleError(e);
}
}
});
addHook(new ResultStaticHook("updateWakeLockWorkSource", 0));
}
private Object onHandleError(InvocationTargetException e) throws Throwable {
if (e.getCause() instanceof SecurityException) {
return 0;
}
throw e.getCause();
}
}