@Override public Object call(Object who, Method method, Object... args) throws Throwable { IBinder token = (IBinder) args[0]; return VActivityManager.get().getActivityForToken(token); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IBinder token = (IBinder) args[0]; return VActivityManager.get().getCallingPackage(token); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IBinder token = (IBinder) args[0]; return VActivityManager.get().getCallingActivity(token); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IBinder token = (IBinder) args[0]; Intent service = (Intent) args[1]; boolean doRebind = (boolean) args[2]; VActivityManager.get().unbindFinished(token, service, doRebind); return 0; }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { List<ActivityManager.RunningTaskInfo> runningTaskInfos = (List<ActivityManager.RunningTaskInfo>) method .invoke(who, args); for (ActivityManager.RunningTaskInfo info : runningTaskInfos) { AppTaskInfo taskInfo = VActivityManager.get().getTaskInfo(info.id); if (taskInfo != null) { info.topActivity = taskInfo.topActivity; info.baseActivity = taskInfo.baseActivity; } } return runningTaskInfos; }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { int maxNum = (int) args[0]; int flags = (int) args[1]; return VActivityManager.get().getServices(maxNum, flags).getList(); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IBinder token = (IBinder) args[0]; String pkg = VActivityManager.get().getPackageForToken(token); if (pkg != null) { return pkg; } return super.call(who, method, args); } }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IInterface sender = (IInterface) args[0]; if (sender != null) { String packageName = VActivityManager.get().getPackageForIntentSender(sender.asBinder()); if (packageName != null) { return packageName; } } return super.call(who, method, args); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { if (args.length > 1 && args[0] instanceof String && args[1] instanceof Integer) { String processName = (String) args[0]; int uid = (int) args[1]; VActivityManager.get().killApplicationProcess(processName, uid); return 0; } return method.invoke(who, args); }
/** * Is the specified app running in foreground / background? * * @param packageName package name * @param userId user id * @return if the specified app running in foreground / background. */ public boolean isAppRunning(String packageName, int userId) { return VActivityManager.get().isAppRunning(packageName, userId); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IBinder token = (IBinder) args[0]; if (!VActivityManager.get().isVAServiceToken(token)) { return method.invoke(who, args); } Intent intent = (Intent) args[1]; IBinder service = (IBinder) args[2]; VActivityManager.get().publishService(token, intent, service); return 0; }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IBinder token = (IBinder) args[0]; if (!VActivityManager.get().isVAServiceToken(token)) { return method.invoke(who, args); } int type = (int) args[1]; int startId = (int) args[2]; int res = (int) args[3]; VActivityManager.get().serviceDoneExecuting(token, type, startId, res); return 0; }
@Override public void finishActivity(IBinder token) { VActivityManager.get().finishActivity(token); }
public static boolean handleBadger(Intent intent) { IBadger badger = BADGERS.get(intent.getAction()); if (badger != null) { BadgerInfo info = badger.handleBadger(intent); VActivityManager.get().notifyBadgerChange(info); return true; } return false; }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { IServiceConnection conn = (IServiceConnection) args[0]; ServiceConnectionDelegate delegate = ServiceConnectionDelegate.removeDelegate(conn); if (delegate == null) { return method.invoke(who, args); } return VActivityManager.get().unbindService(delegate); }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { String pkg = (String) args[0]; int userId = VUserHandle.myUserId(); VActivityManager.get().killAppByPkg(pkg, userId); return 0; }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { MethodParameterUtils.replaceLastAppPkg(args); Intent service = (Intent) args[0]; String resolvedType = (String) args[1]; return VActivityManager.get().peekService(service, resolvedType); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); finish(); Intent intent = getIntent(); StubActivityRecord r = new StubActivityRecord(intent); if (r.intent == null) { return; } r.intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); VActivityManager.get().startActivity(r.intent, r.userId); } }
@Override public Object call(Object who, Method method, Object... args) throws Throwable { Intent[] intents = ArrayUtils.getFirst(args, Intent[].class); String[] resolvedTypes = ArrayUtils.getFirst(args, String[].class); IBinder token = null; int tokenIndex = ArrayUtils.indexOfObject(args, IBinder.class, 2); if (tokenIndex != -1) { token = (IBinder) args[tokenIndex]; } Bundle options = ArrayUtils.getFirst(args, Bundle.class); return VActivityManager.get().startActivities(intents, resolvedTypes, token, options, VUserHandle.myUserId()); }
@Override public void callActivityOnResume(Activity activity) { VirtualCore.get().getComponentDelegate().beforeActivityResume(activity); VActivityManager.get().onActivityResumed(activity); super.callActivityOnResume(activity); VirtualCore.get().getComponentDelegate().afterActivityResume(activity); Intent intent = activity.getIntent(); callUiCallback(intent, true); }