package jp.co.cyberagent.stf.query; import android.accounts.AccountManager; import android.accounts.AccountManagerFuture; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.google.protobuf.GeneratedMessageLite; import com.google.protobuf.InvalidProtocolBufferException; import java.io.IOException; import jp.co.cyberagent.stf.proto.Wire; public class DoAddAccountMenuResponder extends AbstractResponder { public DoAddAccountMenuResponder(Context context) { super(context); } @Override public GeneratedMessageLite respond(Wire.Envelope envelope) throws InvalidProtocolBufferException { Wire.DoAddAccountMenuRequest request = Wire.DoAddAccountMenuRequest.parseFrom(envelope.getMessage()); try { showAddAccountMenu(); } catch (AuthenticatorException e) { e.printStackTrace(); } catch (OperationCanceledException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return Wire.Envelope.newBuilder() .setId(envelope.getId()) .setType(Wire.MessageType.DO_ADD_ACCOUNT_MENU) .setMessage(Wire.DoAddAccountMenuResponse.newBuilder() .setSuccess(true) .build() .toByteString()) .build(); } @Override public void cleanup() { // No-op } private void showAddAccountMenu() throws AuthenticatorException, OperationCanceledException, IOException { AccountManager account = AccountManager.get(context); AccountManagerFuture<Bundle> accountFuture = account.addAccount("com.google", null, null, null, null, null, null); Bundle bundle = accountFuture.getResult(); Intent intent = (Intent)bundle.get(AccountManager.KEY_INTENT); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }