package jp.co.cyberagent.stf.query; import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AccountManagerFuture; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.content.Context; import com.google.protobuf.GeneratedMessageLite; import com.google.protobuf.InvalidProtocolBufferException; import java.io.IOException; import jp.co.cyberagent.stf.proto.Wire; public class DoRemoveAccountResponder extends AbstractResponder { public DoRemoveAccountResponder(Context context) { super(context); } @Override public GeneratedMessageLite respond(Wire.Envelope envelope) throws InvalidProtocolBufferException { Wire.DoRemoveAccountRequest request = Wire.DoRemoveAccountRequest.parseFrom(envelope.getMessage()); AccountManager am = AccountManager.get(context); Account[] accounts = am.getAccountsByType(request.getType()); AccountManagerFuture<Boolean> success = null; boolean successResult = false; if(request.hasAccount()) { for (Account account : accounts) { if(account.name.equals(request.getAccount())) { success = am.removeAccount(account, null, null); } } } else { for (Account account : accounts) { success = am.removeAccount(account, null, null); } } if(success != null) { try { successResult = success.getResult(); } catch (OperationCanceledException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (AuthenticatorException e) { e.printStackTrace(); } } return Wire.Envelope.newBuilder() .setId(envelope.getId()) .setType(Wire.MessageType.DO_REMOVE_ACCOUNT) .setMessage(Wire.DoRemoveAccountResponse.newBuilder() .setSuccess(successResult) .build() .toByteString()) .build(); } @Override public void cleanup() { // No-op } }