package com.lody.virtual.helper.compat; import android.content.Intent; import android.content.pm.ServiceInfo; import android.os.Build; import android.os.IBinder; import android.os.IInterface; import android.os.RemoteException; import mirror.android.app.IApplicationThread; import mirror.android.app.IApplicationThreadICSMR1; import mirror.android.app.IApplicationThreadKitkat; import mirror.android.content.res.CompatibilityInfo; /** * @author Lody */ public class IApplicationThreadCompat { public static void scheduleCreateService(IInterface appThread, IBinder token, ServiceInfo info, int processState) throws RemoteException { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { IApplicationThreadKitkat.scheduleCreateService.call(appThread, token, info, CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO.get(), processState); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { IApplicationThreadICSMR1.scheduleCreateService.call(appThread, token, info, CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO.get()); } else { IApplicationThread.scheduleCreateService.call(appThread, token, info); } } public static void scheduleBindService(IInterface appThread, IBinder token, Intent intent, boolean rebind, int processState) throws RemoteException { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { IApplicationThreadKitkat.scheduleBindService.call(appThread, token, intent, rebind, processState); } else { IApplicationThread.scheduleBindService.call(appThread, token, intent, rebind); } } public static void scheduleUnbindService(IInterface appThread, IBinder token, Intent intent) throws RemoteException { IApplicationThread.scheduleUnbindService.call(appThread, token, intent); } public static void scheduleServiceArgs(IInterface appThread, IBinder token, boolean taskRemoved, int startId, int flags, Intent args) throws RemoteException { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { IApplicationThreadICSMR1.scheduleServiceArgs.call(appThread, token, taskRemoved, startId, flags, args); } else { IApplicationThread.scheduleServiceArgs.call(appThread, token, startId, flags, args); } } public static void scheduleStopService(IInterface appThread, IBinder token) throws RemoteException { IApplicationThread.scheduleStopService.call(appThread, token); } }