package fr.pagesjaunes.mdm.authenticator; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerFuture; import android.content.Context; import fr.pagesjaunes.mdm.core.Constants; import fr.pagesjaunes.mdm.util.Ln; import fr.pagesjaunes.mdm.util.SafeAsyncTask; import javax.inject.Inject; /** * Class used for logging a user out. */ public class LogoutService { protected final Context context; protected final AccountManager accountManager; @Inject public LogoutService(final Context context, final AccountManager accountManager) { this.context = context; this.accountManager = accountManager; } public void logout(final Runnable onSuccess) { new LogoutTask(context, onSuccess).execute(); } private static class LogoutTask extends SafeAsyncTask<Boolean> { private final Context taskContext; private final Runnable onSuccess; protected LogoutTask(final Context context, final Runnable onSuccess) { this.taskContext = context; this.onSuccess = onSuccess; } @Override public Boolean call() throws Exception { final AccountManager accountManagerWithContext = AccountManager.get(taskContext); if (accountManagerWithContext != null) { final Account[] accounts = accountManagerWithContext .getAccountsByType(Constants.Auth.BOOTSTRAP_ACCOUNT_TYPE); if (accounts.length > 0) { final AccountManagerFuture<Boolean> removeAccountFuture = accountManagerWithContext.removeAccount(accounts[0], null, null); return removeAccountFuture.getResult(); } } else { Ln.w("accountManagerWithContext is null"); } return false; } @Override protected void onSuccess(final Boolean accountWasRemoved) throws Exception { super.onSuccess(accountWasRemoved); Ln.d("Logout succeeded: %s", accountWasRemoved); onSuccess.run(); } @Override protected void onException(final Exception e) throws RuntimeException { super.onException(e); Ln.e(e.getCause(), "Logout failed."); } } }