package com.lody.virtual.client.hook.patchs.account;
import android.accounts.Account;
import android.accounts.IAccountManagerResponse;
import android.content.Context;
import android.os.Bundle;
import com.lody.virtual.client.hook.base.Hook;
import com.lody.virtual.client.hook.base.PatchBinderDelegate;
import com.lody.virtual.client.ipc.VAccountManager;
import java.lang.reflect.Method;
import mirror.android.accounts.IAccountManager;
/**
* @author Lody
*/
public class AccountManagerPatch extends PatchBinderDelegate {
private static VAccountManager Mgr = VAccountManager.get();
public AccountManagerPatch() {
super(IAccountManager.Stub.TYPE, Context.ACCOUNT_SERVICE);
}
@Override
protected void onBindHooks() {
super.onBindHooks();
addHook(new getPassword());
addHook(new getUserData());
addHook(new getAuthenticatorTypes());
addHook(new getAccounts());
addHook(new getAccountsForPackage());
addHook(new getAccountsByTypeForPackage());
addHook(new getAccountsAsUser());
addHook(new hasFeatures());
addHook(new getAccountsByFeatures());
addHook(new addAccountExplicitly());
addHook(new removeAccount());
addHook(new removeAccountAsUser());
addHook(new removeAccountExplicitly());
addHook(new copyAccountToUser());
addHook(new invalidateAuthToken());
addHook(new peekAuthToken());
addHook(new setAuthToken());
addHook(new setPassword());
addHook(new clearPassword());
addHook(new setUserData());
addHook(new updateAppPermission());
addHook(new getAuthToken());
addHook(new addAccount());
addHook(new addAccountAsUser());
addHook(new updateCredentials());
addHook(new editProperties());
addHook(new confirmCredentialsAsUser());
addHook(new accountAuthenticated());
addHook(new getAuthTokenLabel());
addHook(new addSharedAccountAsUser());
addHook(new getSharedAccountsAsUser());
addHook(new removeSharedAccountAsUser());
addHook(new renameAccount());
addHook(new getPreviousName());
addHook(new renameSharedAccountAsUser());
}
private static class getPassword extends Hook {
@Override
public String getName() {
return "getPassword";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
return Mgr.getPassword(account);
}
}
private static class getUserData extends Hook {
@Override
public String getName() {
return "getUserData";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
String key = (String) args[1];
return Mgr.getUserData(account, key);
}
}
private static class getAuthenticatorTypes extends Hook {
@Override
public String getName() {
return "getAuthenticatorTypes";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
return Mgr.getAuthenticatorTypes();
}
}
private static class getAccounts extends Hook {
@Override
public String getName() {
return "getAccounts";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
String accountType = (String) args[0];
return Mgr.getAccounts(accountType);
}
}
private static class getAccountsForPackage extends Hook {
@Override
public String getName() {
return "getAccountsForPackage";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
String packageName = (String) args[0];
return Mgr.getAccounts(null);
}
}
private static class getAccountsByTypeForPackage extends Hook {
@Override
public String getName() {
return "getAccountsByTypeForPackage";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
String type = (String) args[0];
String packageName = (String) args[1];
return Mgr.getAccounts(type);
}
}
private static class getAccountsAsUser extends Hook {
@Override
public String getName() {
return "getAccountsAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
String accountType = (String) args[0];
return Mgr.getAccounts(accountType);
}
}
private static class hasFeatures extends Hook {
@Override
public String getName() {
return "hasFeatures";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account account = (Account) args[1];
String[] features = (String[]) args[2];
Mgr.hasFeatures(response, account, features);
return 0;
}
}
private static class getAccountsByFeatures extends Hook {
@Override
public String getName() {
return "getAccountsByFeatures";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
String accountType = (String) args[1];
String[] features = (String[]) args[2];
Mgr.getAccountsByFeatures(response, accountType, features);
return 0;
}
}
private static class addAccountExplicitly extends Hook {
@Override
public String getName() {
return "addAccountExplicitly";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
String password = (String) args[1];
Bundle extras = (Bundle) args[2];
return Mgr.addAccountExplicitly(account, password, extras);
}
}
private static class removeAccount extends Hook {
@Override
public String getName() {
return "removeAccount";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account account = (Account) args[1];
boolean expectActivityLaunch = (boolean) args[2];
Mgr.removeAccount(response, account, expectActivityLaunch);
return 0;
}
}
private static class removeAccountAsUser extends Hook {
@Override
public String getName() {
return "removeAccountAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account account = (Account) args[1];
boolean expectActivityLaunch = (boolean) args[2];
Mgr.removeAccount(response, account, expectActivityLaunch);
return 0;
}
}
private static class removeAccountExplicitly extends Hook {
@Override
public String getName() {
return "removeAccountExplicitly";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
return Mgr.removeAccountExplicitly(account);
}
}
private static class copyAccountToUser extends Hook {
@Override
public String getName() {
return "copyAccountToUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account account = (Account) args[1];
int userFrom = (int) args[2];
int userTo = (int) args[3];
method.invoke(who, args);
return 0;
}
}
private static class invalidateAuthToken extends Hook {
@Override
public String getName() {
return "invalidateAuthToken";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
String accountType = (String) args[0];
String authToken = (String) args[1];
Mgr.invalidateAuthToken(accountType, authToken);
return 0;
}
}
private static class peekAuthToken extends Hook {
@Override
public String getName() {
return "peekAuthToken";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
String authTokenType = (String) args[1];
return Mgr.peekAuthToken(account, authTokenType);
}
}
private static class setAuthToken extends Hook {
@Override
public String getName() {
return "setAuthToken";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
String authTokenType = (String) args[1];
String authToken = (String) args[2];
Mgr.setAuthToken(account, authTokenType, authToken);
return 0;
}
}
private static class setPassword extends Hook {
@Override
public String getName() {
return "setPassword";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
String password = (String) args[1];
Mgr.setPassword(account, password);
return 0;
}
}
private static class clearPassword extends Hook {
@Override
public String getName() {
return "clearPassword";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
Mgr.clearPassword(account);
return 0;
}
}
private static class setUserData extends Hook {
@Override
public String getName() {
return "setUserData";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
String key = (String) args[1];
String value = (String) args[2];
Mgr.setUserData(account, key, value);
return 0;
}
}
private static class updateAppPermission extends Hook {
@Override
public String getName() {
return "updateAppPermission";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
String authTokenType = (String) args[1];
int uid = (int) args[2];
boolean val = (boolean) args[3];
method.invoke(who, args);
return 0;
}
}
private static class getAuthToken extends Hook {
@Override
public String getName() {
return "getAuthToken";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account account = (Account) args[1];
String authTokenType = (String) args[2];
boolean notifyOnAuthFailure = (boolean) args[3];
boolean expectActivityLaunch = (boolean) args[4];
Bundle options = (Bundle) args[5];
Mgr.getAuthToken(response, account, authTokenType, notifyOnAuthFailure, expectActivityLaunch, options);
return 0;
}
}
private static class addAccount extends Hook {
@Override
public String getName() {
return "addAccount";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
String accountType = (String) args[1];
String authTokenType = (String) args[2];
String[] requiredFeatures = (String[]) args[3];
boolean expectActivityLaunch = (boolean) args[4];
Bundle options = (Bundle) args[5];
Mgr.addAccount(response, accountType, authTokenType, requiredFeatures, expectActivityLaunch, options);
return 0;
}
}
private static class addAccountAsUser extends Hook {
@Override
public String getName() {
return "addAccountAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
String accountType = (String) args[1];
String authTokenType = (String) args[2];
String[] requiredFeatures = (String[]) args[3];
boolean expectActivityLaunch = (boolean) args[4];
Bundle options = (Bundle) args[5];
Mgr.addAccount(response, accountType, authTokenType, requiredFeatures, expectActivityLaunch, options);
return 0;
}
}
private static class updateCredentials extends Hook {
@Override
public String getName() {
return "updateCredentials";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account account = (Account) args[1];
String authTokenType = (String) args[2];
boolean expectActivityLaunch = (boolean) args[3];
Bundle options = (Bundle) args[4];
Mgr.updateCredentials(response, account, authTokenType, expectActivityLaunch, options);
return 0;
}
}
private static class editProperties extends Hook {
@Override
public String getName() {
return "editProperties";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
String authTokenType = (String) args[1];
boolean expectActivityLaunch = (boolean) args[2];
Mgr.editProperties(response, authTokenType, expectActivityLaunch);
return 0;
}
}
private static class confirmCredentialsAsUser extends Hook {
@Override
public String getName() {
return "confirmCredentialsAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account account = (Account) args[1];
Bundle options = (Bundle) args[2];
boolean expectActivityLaunch = (boolean) args[3];
Mgr.confirmCredentials(response, account, options, expectActivityLaunch);
return 0;
}
}
private static class accountAuthenticated extends Hook {
@Override
public String getName() {
return "accountAuthenticated";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
return Mgr.accountAuthenticated(account);
}
}
private static class getAuthTokenLabel extends Hook {
@Override
public String getName() {
return "getAuthTokenLabel";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
String accountType = (String) args[1];
String authTokenType = (String) args[2];
Mgr.getAuthTokenLabel(response, accountType, authTokenType);
return 0;
}
}
private static class addSharedAccountAsUser extends Hook {
@Override
public String getName() {
return "addSharedAccountAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
int userId = (int) args[1];
return method.invoke(who, args);
}
}
private static class getSharedAccountsAsUser extends Hook {
@Override
public String getName() {
return "getSharedAccountsAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
int userId = (int) args[0];
return method.invoke(who, args);
}
}
private static class removeSharedAccountAsUser extends Hook {
@Override
public String getName() {
return "removeSharedAccountAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
int userId = (int) args[1];
return method.invoke(who, args);
}
}
private static class renameAccount extends Hook {
@Override
public String getName() {
return "renameAccount";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
IAccountManagerResponse response = (IAccountManagerResponse) args[0];
Account accountToRename = (Account) args[1];
String newName = (String) args[2];
Mgr.renameAccount(response, accountToRename, newName);
return 0;
}
}
private static class getPreviousName extends Hook {
@Override
public String getName() {
return "getPreviousName";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account account = (Account) args[0];
return Mgr.getPreviousName(account);
}
}
private static class renameSharedAccountAsUser extends Hook {
@Override
public String getName() {
return "renameSharedAccountAsUser";
}
@Override
public Object call(Object who, Method method, Object... args) throws Throwable {
Account accountToRename = (Account) args[0];
String newName = (String) args[1];
int userId = (int) args[2];
return method.invoke(who, args);
}
}
}