package com.lody.virtual.client.hook.patchs.job; import android.annotation.TargetApi; import android.app.job.JobInfo; import android.content.Context; import android.os.Build; import com.lody.virtual.client.hook.base.Hook; import com.lody.virtual.client.hook.base.PatchBinderDelegate; import com.lody.virtual.client.ipc.VJobScheduler; import java.lang.reflect.Method; import mirror.android.app.job.IJobScheduler; /** * @author Lody * * @see android.app.job.JobScheduler */ @TargetApi(Build.VERSION_CODES.LOLLIPOP) public class JobPatch extends PatchBinderDelegate { public JobPatch() { super(IJobScheduler.Stub.TYPE, Context.JOB_SCHEDULER_SERVICE); } @Override protected void onBindHooks() { super.onBindHooks(); addHook(new schedule()); addHook(new getAllPendingJobs()); addHook(new cancelAll()); addHook(new cancel()); } private class schedule extends Hook { @Override public String getName() { return "schedule"; } @Override public Object call(Object who, Method method, Object... args) throws Throwable { JobInfo jobInfo = (JobInfo) args[0]; return VJobScheduler.get().schedule(jobInfo); } } private class getAllPendingJobs extends Hook { @Override public String getName() { return "getAllPendingJobs"; } @Override public Object call(Object who, Method method, Object... args) throws Throwable { return VJobScheduler.get().getAllPendingJobs(); } } private class cancelAll extends Hook { @Override public String getName() { return "cancelAll"; } @Override public Object call(Object who, Method method, Object... args) throws Throwable { VJobScheduler.get().cancelAll(); return 0; } } private class cancel extends Hook { @Override public String getName() { return "cancel"; } @Override public Object call(Object who, Method method, Object... args) throws Throwable { int jobId = (int) args[0]; VJobScheduler.get().cancel(jobId); return 0; } } }