package com.lody.virtual.client.ipc; import android.accounts.Account; import android.accounts.AuthenticatorDescription; import android.accounts.IAccountManagerResponse; import android.os.Bundle; import android.os.RemoteException; import com.lody.virtual.client.env.VirtualRuntime; import com.lody.virtual.os.VUserHandle; import com.lody.virtual.server.IAccountManager; /** * @author Lody */ public class VAccountManager { private static VAccountManager sMgr = new VAccountManager(); private IAccountManager mRemote; public static VAccountManager get() { return sMgr; } public IAccountManager getRemote() { if (mRemote == null) { Object remote = getStubInterface(); mRemote = LocalProxyUtils.genProxy(IAccountManager.class, remote); } return mRemote; } private Object getStubInterface() { return IAccountManager.Stub .asInterface(ServiceManagerNative.getService(ServiceManagerNative.ACCOUNT)); } public AuthenticatorDescription[] getAuthenticatorTypes() { try { return getRemote().getAuthenticatorTypes(VUserHandle.myUserId()); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public void removeAccount(IAccountManagerResponse response, Account account, boolean expectActivityLaunch) { try { getRemote().removeAccount(VUserHandle.myUserId(), response, account, expectActivityLaunch); } catch (RemoteException e) { e.printStackTrace(); } } public void getAuthToken(IAccountManagerResponse response, Account account, String authTokenType, boolean notifyOnAuthFailure, boolean expectActivityLaunch, Bundle loginOptions) { try { getRemote().getAuthToken(VUserHandle.myUserId(), response, account, authTokenType, notifyOnAuthFailure, expectActivityLaunch, loginOptions); } catch (RemoteException e) { e.printStackTrace(); } } public boolean addAccountExplicitly(Account account, String password, Bundle extras) { try { return getRemote().addAccountExplicitly(VUserHandle.myUserId(), account, password, extras); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public Account[] getAccounts(String type) { try { return getRemote().getAccounts(VUserHandle.myUserId(), type); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public String peekAuthToken(Account account, String authTokenType) { try { return getRemote().peekAuthToken(VUserHandle.myUserId(), account, authTokenType); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public String getPreviousName(Account account) { try { return getRemote().getPreviousName(VUserHandle.myUserId(), account); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public void hasFeatures(IAccountManagerResponse response, Account account, String[] features) { try { getRemote().hasFeatures(VUserHandle.myUserId(), response, account, features); } catch (RemoteException e) { e.printStackTrace(); } } public boolean accountAuthenticated(Account account) { try { return getRemote().accountAuthenticated(VUserHandle.myUserId(), account); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public void clearPassword(Account account) { try { getRemote().clearPassword(VUserHandle.myUserId(), account); } catch (RemoteException e) { e.printStackTrace(); } } public void renameAccount(IAccountManagerResponse response, Account accountToRename, String newName) { try { getRemote().renameAccount(VUserHandle.myUserId(), response, accountToRename, newName); } catch (RemoteException e) { e.printStackTrace(); } } public void setPassword(Account account, String password) { try { getRemote().setPassword(VUserHandle.myUserId(), account, password); } catch (RemoteException e) { e.printStackTrace(); } } public void addAccount(IAccountManagerResponse response, String accountType, String authTokenType, String[] requiredFeatures, boolean expectActivityLaunch, Bundle optionsIn) { try { getRemote().addAccount(VUserHandle.myUserId(), response, accountType, authTokenType, requiredFeatures, expectActivityLaunch, optionsIn); } catch (RemoteException e) { e.printStackTrace(); } } public void updateCredentials(IAccountManagerResponse response, Account account, String authTokenType, boolean expectActivityLaunch, Bundle loginOptions) { try { getRemote().updateCredentials(VUserHandle.myUserId(), response, account, authTokenType, expectActivityLaunch, loginOptions); } catch (RemoteException e) { e.printStackTrace(); } } public boolean removeAccountExplicitly(Account account) { try { return getRemote().removeAccountExplicitly(VUserHandle.myUserId(), account); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public void setUserData(Account account, String key, String value) { try { getRemote().setUserData(VUserHandle.myUserId(), account, key, value); } catch (RemoteException e) { e.printStackTrace(); } } public void editProperties(IAccountManagerResponse response, String accountType, boolean expectActivityLaunch) { try { getRemote().editProperties(VUserHandle.myUserId(), response, accountType, expectActivityLaunch); } catch (RemoteException e) { e.printStackTrace(); } } public void getAuthTokenLabel(IAccountManagerResponse response, String accountType, String authTokenType) { try { getRemote().getAuthTokenLabel(VUserHandle.myUserId(), response, accountType, authTokenType); } catch (RemoteException e) { e.printStackTrace(); } } public void confirmCredentials(IAccountManagerResponse response, Account account, Bundle options, boolean expectActivityLaunch) { try { getRemote().confirmCredentials(VUserHandle.myUserId(), response, account, options, expectActivityLaunch); } catch (RemoteException e) { e.printStackTrace(); } } public void invalidateAuthToken(String accountType, String authToken) { try { getRemote().invalidateAuthToken(VUserHandle.myUserId(), accountType, authToken); } catch (RemoteException e) { e.printStackTrace(); } } public void getAccountsByFeatures(IAccountManagerResponse response, String type, String[] features) { try { getRemote().getAccountsByFeatures(VUserHandle.myUserId(), response, type, features); } catch (RemoteException e) { e.printStackTrace(); } } public void setAuthToken(Account account, String authTokenType, String authToken) { try { getRemote().setAuthToken(VUserHandle.myUserId(), account, authTokenType, authToken); } catch (RemoteException e) { e.printStackTrace(); } } public Object getPassword(Account account) { try { return getRemote().getPassword(VUserHandle.myUserId(), account); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } public String getUserData(Account account, String key) { try { return getRemote().getUserData(VUserHandle.myUserId(), account, key); } catch (RemoteException e) { return VirtualRuntime.crash(e); } } }