/v3.2/nimbits-android/src/com/nimbits/android/account/OwnerAccountImpl.java

http://nimbits-server.googlecode.com/ · Java · 108 lines · 82 code · 26 blank · 0 comment · 11 complexity · 515602545e463bc33421ee81ff103448 MD5 · raw file

  1. package com.nimbits.android.account;
  2. import android.accounts.*;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.os.Bundle;
  6. import android.util.Log;
  7. import com.nimbits.client.NimbitsClient;
  8. import com.nimbits.client.NimbitsClientFactory;
  9. import com.nimbits.client.exception.NimbitsRuntimeException;
  10. import com.nimbits.client.model.Const;
  11. import com.nimbits.client.model.common.CommonFactoryLocator;
  12. import com.nimbits.client.model.email.EmailAddress;
  13. import java.io.IOException;
  14. public class OwnerAccountImpl implements OwnerAccount {
  15. private static String tokenStore = null;
  16. private static EmailAddress emailStore = null;
  17. @Override
  18. public EmailAddress getEmail(final Context context) {
  19. if (emailStore == null) {
  20. final AccountManager accountManager = AccountManager.get(context);
  21. final Account account = getAccount(accountManager);
  22. if (account == null) {
  23. return null;
  24. } else {
  25. emailStore = CommonFactoryLocator.getInstance().createEmailAddress(account.name);
  26. return emailStore;
  27. }
  28. } else {
  29. return emailStore;
  30. }
  31. }
  32. @Override
  33. public String getToken(final Context context) {
  34. String authToken;
  35. if (tokenStore == null) {
  36. final AccountManager mgr = AccountManager.get(context);
  37. final Account[] accounts = mgr.getAccountsByType(Const.PARAM_GOOGLE_COM);
  38. if (accounts.length > 0) {
  39. AccountManagerFuture<Bundle> accountManagerFuture = mgr.getAuthToken(accounts[0], Const.CONST_AH, null, (Activity) context, null, null);
  40. try {
  41. final Bundle authTokenBundle = accountManagerFuture.getResult();
  42. authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
  43. tokenStore = authToken;
  44. Log.i(Const.N, "got new token: " + authToken);
  45. } catch (OperationCanceledException e) {
  46. Log.e(Const.N, e.getMessage(), e);
  47. authToken = Const.MESSAGE_NO_ACCOUNT;
  48. tokenStore = null;
  49. } catch (IOException e) {
  50. authToken = Const.MESSAGE_NO_ACCOUNT;
  51. tokenStore = null;
  52. Log.e(Const.N, e.getMessage(), e);
  53. } catch (AuthenticatorException e) {
  54. authToken = Const.MESSAGE_NO_ACCOUNT;
  55. tokenStore = null;
  56. Log.e(Const.N, e.getMessage(), e);
  57. }
  58. } else {
  59. authToken = Const.MESSAGE_NO_ACCOUNT;
  60. tokenStore = null;
  61. }
  62. } else {
  63. authToken = tokenStore;
  64. Log.i(Const.N, "using cached token: " + authToken);
  65. }
  66. return authToken;
  67. }
  68. @Override
  69. public NimbitsClient getNimbitsClient(final Context context, final String baseUrl) {
  70. try {
  71. final String authToken = getToken(context);
  72. final EmailAddress email = getEmail(context);
  73. return NimbitsClientFactory.getInstance(authToken, email, baseUrl);
  74. } catch (Exception e) {
  75. throw new NimbitsRuntimeException("Error getting Nimbits Client", e);
  76. }
  77. }
  78. private Account getAccount(final AccountManager accountManager) {
  79. final Account[] accounts = accountManager.getAccountsByType(Const.PARAM_GOOGLE_COM);
  80. return accounts.length > 0 ? accounts[0] : null;
  81. }
  82. }