package com.lody.virtual.client.hook.patchs.alarm; import android.content.Context; import android.os.Build; import android.os.WorkSource; import com.lody.virtual.client.hook.base.Hook; import com.lody.virtual.client.hook.base.PatchBinderDelegate; import com.lody.virtual.helper.utils.ArrayUtils; import java.lang.reflect.Method; import mirror.android.app.IAlarmManager; /** * @author Lody * * @see android.app.AlarmManager */ public class AlarmManagerPatch extends PatchBinderDelegate { public AlarmManagerPatch() { super(IAlarmManager.Stub.TYPE, Context.ALARM_SERVICE); } @Override protected void onBindHooks() { super.onBindHooks(); addHook(new Set()); addHook(new SetTime()); addHook(new SetTimeZone()); } private static class SetTimeZone extends Hook { @Override public String getName() { return "setTimeZone"; } @Override public Object call(Object who, Method method, Object... args) throws Throwable { return null; } } private static class SetTime extends Hook { @Override public String getName() { return "setTime"; } @Override public Object call(Object who, Method method, Object... args) throws Throwable { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return false; } return null; } } private static class Set extends Hook { @Override public String getName() { return "set"; } @Override public boolean beforeCall(Object who, Method method, Object... args) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && args[0] instanceof String) { args[0] = getHostPkg(); } int index = ArrayUtils.indexOfFirst(args, WorkSource.class); if (index >= 0) { args[index] = null; } return true; } } }