• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.sync.test.util;
6 
7 import android.accounts.Account;
8 
9 import java.util.HashMap;
10 import java.util.Map;
11 
12 /**
13  * This class is used by the {@link MockAccountManager} to hold information about a given
14  * account, such as its password and set of granted auth tokens.
15  */
16 public class AccountHolder {
17 
18     private final Account mAccount;
19 
20     private final String mPassword;
21 
22     private final Map<String, String> mAuthTokens;
23 
24     private final Map<String, Boolean> mHasBeenAccepted;
25 
26     private final boolean mAlwaysAccept;
27 
AccountHolder(Account account, String password, Map<String, String> authTokens, Map<String, Boolean> hasBeenAccepted, boolean alwaysAccept)28     private AccountHolder(Account account, String password, Map<String, String> authTokens,
29             Map<String, Boolean> hasBeenAccepted, boolean alwaysAccept) {
30         mAlwaysAccept = alwaysAccept;
31         if (account == null) {
32             throw new IllegalArgumentException("Account can not be null");
33         }
34         mAccount = account;
35         mPassword = password;
36         mAuthTokens = authTokens == null ? new HashMap<String, String>() : authTokens;
37         mHasBeenAccepted = hasBeenAccepted == null ?
38                 new HashMap<String, Boolean>() : hasBeenAccepted;
39     }
40 
getAccount()41     public Account getAccount() {
42         return mAccount;
43     }
44 
getPassword()45     public String getPassword() {
46         return mPassword;
47     }
48 
hasAuthTokenRegistered(String authTokenType)49     public boolean hasAuthTokenRegistered(String authTokenType) {
50         return mAuthTokens.containsKey(authTokenType);
51     }
52 
getAuthToken(String authTokenType)53     public String getAuthToken(String authTokenType) {
54         return mAuthTokens.get(authTokenType);
55     }
56 
hasBeenAccepted(String authTokenType)57     public boolean hasBeenAccepted(String authTokenType) {
58         return mAlwaysAccept ||
59                 mHasBeenAccepted.containsKey(authTokenType) && mHasBeenAccepted.get(authTokenType);
60     }
61 
62     /**
63      * Removes an auth token from the auth token map.
64      *
65      * @param authToken the auth token to remove
66      * @return true if the auth token was found
67      */
removeAuthToken(String authToken)68     public boolean removeAuthToken(String authToken) {
69         String foundKey = null;
70         for (Map.Entry<String, String> tokenEntry : mAuthTokens.entrySet()) {
71             if (authToken.equals(tokenEntry.getValue())) {
72                 foundKey = tokenEntry.getKey();
73                 break;
74             }
75         }
76         if (foundKey == null) {
77             return false;
78         } else {
79             mAuthTokens.remove(foundKey);
80             return true;
81         }
82     }
83 
84     @Override
hashCode()85     public int hashCode() {
86         return mAccount.hashCode();
87     }
88 
89     @Override
equals(Object that)90     public boolean equals(Object that) {
91         return that != null && that instanceof AccountHolder && mAccount
92                 .equals(((AccountHolder) that).getAccount());
93     }
94 
create()95     public static Builder create() {
96         return new Builder();
97     }
98 
withPassword(String password)99     public AccountHolder withPassword(String password) {
100         return copy().password(password).build();
101     }
102 
withAuthTokens(Map<String, String> authTokens)103     public AccountHolder withAuthTokens(Map<String, String> authTokens) {
104         return copy().authTokens(authTokens).build();
105     }
106 
withAuthToken(String authTokenType, String authToken)107     public AccountHolder withAuthToken(String authTokenType, String authToken) {
108         return copy().authToken(authTokenType, authToken).build();
109     }
110 
withHasBeenAccepted(String authTokenType, boolean hasBeenAccepted)111     public AccountHolder withHasBeenAccepted(String authTokenType, boolean hasBeenAccepted) {
112         return copy().hasBeenAccepted(authTokenType, hasBeenAccepted).build();
113     }
114 
withAlwaysAccept(boolean alwaysAccept)115     public AccountHolder withAlwaysAccept(boolean alwaysAccept) {
116         return copy().alwaysAccept(alwaysAccept).build();
117     }
118 
copy()119     private Builder copy() {
120         return create().account(mAccount).password(mPassword).authTokens(mAuthTokens).
121                 hasBeenAcceptedMap(mHasBeenAccepted).alwaysAccept(mAlwaysAccept);
122     }
123 
124     public static class Builder {
125 
126         private Account mTempAccount;
127 
128         private String mTempPassword;
129 
130         private Map<String, String> mTempAuthTokens;
131 
132         private Map<String, Boolean> mTempHasBeenAccepted;
133 
134         private boolean mTempAlwaysAccept;
135 
account(Account account)136         public Builder account(Account account) {
137             mTempAccount = account;
138             return this;
139         }
140 
password(String password)141         public Builder password(String password) {
142             mTempPassword = password;
143             return this;
144         }
145 
authToken(String authTokenType, String authToken)146         public Builder authToken(String authTokenType, String authToken) {
147             if (mTempAuthTokens == null) {
148                 mTempAuthTokens = new HashMap<String, String>();
149             }
150             mTempAuthTokens.put(authTokenType, authToken);
151             return this;
152         }
153 
authTokens(Map<String, String> authTokens)154         public Builder authTokens(Map<String, String> authTokens) {
155             mTempAuthTokens = authTokens;
156             return this;
157         }
158 
hasBeenAccepted(String authTokenType, boolean hasBeenAccepted)159         public Builder hasBeenAccepted(String authTokenType, boolean hasBeenAccepted) {
160             if (mTempHasBeenAccepted == null) {
161                 mTempHasBeenAccepted = new HashMap<String, Boolean>();
162             }
163             mTempHasBeenAccepted.put(authTokenType, hasBeenAccepted);
164             return this;
165         }
166 
hasBeenAcceptedMap(Map<String, Boolean> hasBeenAcceptedMap)167         public Builder hasBeenAcceptedMap(Map<String, Boolean> hasBeenAcceptedMap) {
168             mTempHasBeenAccepted = hasBeenAcceptedMap;
169             return this;
170         }
171 
alwaysAccept(boolean alwaysAccept)172         public Builder alwaysAccept(boolean alwaysAccept) {
173             mTempAlwaysAccept = alwaysAccept;
174             return this;
175         }
176 
build()177         public AccountHolder build() {
178             return new AccountHolder(mTempAccount, mTempPassword, mTempAuthTokens,
179                     mTempHasBeenAccepted, mTempAlwaysAccept);
180         }
181     }
182 
183 }
184