SetupDataFragment.java revision 87de90282bc7f00c154be460c66cef999072b555
1package com.android.email.activity.setup; 2 3import android.accounts.AccountAuthenticatorResponse; 4import android.app.Fragment; 5import android.os.Bundle; 6import android.os.Parcel; 7import android.os.Parcelable; 8 9import com.android.emailcommon.provider.Account; 10import com.android.emailcommon.provider.Policy; 11 12/** 13 * Headless fragment to hold setup data for the account setup or settings flows 14 */ 15public class SetupDataFragment extends Fragment implements Parcelable { 16 // The "extra" name for the Bundle saved with SetupData 17 public static final String EXTRA_SETUP_DATA = "com.android.email.setupdata"; 18 19 // NORMAL is the standard entry from the Email app; EAS and POP_IMAP are used when entering via 20 // Settings -> Accounts 21 public static final int FLOW_MODE_UNSPECIFIED = -1; 22 public static final int FLOW_MODE_NORMAL = 0; 23 public static final int FLOW_MODE_ACCOUNT_MANAGER = 1; 24 public static final int FLOW_MODE_EDIT = 3; 25 public static final int FLOW_MODE_FORCE_CREATE = 4; 26 // The following two modes are used to "pop the stack" and return from the setup flow. We 27 // either return to the caller (if we're in an account type flow) or go to the message list 28 public static final int FLOW_MODE_RETURN_TO_CALLER = 5; 29 public static final int FLOW_MODE_RETURN_TO_MESSAGE_LIST = 6; 30 public static final int FLOW_MODE_RETURN_NO_ACCOUNTS_RESULT = 7; 31 public static final int FLOW_MODE_NO_ACCOUNTS = 8; 32 33 // Mode bits for AccountSetupCheckSettings, indicating the type of check requested 34 public static final int CHECK_INCOMING = 1; 35 public static final int CHECK_OUTGOING = 2; 36 public static final int CHECK_AUTODISCOVER = 4; 37 38 private static final String SAVESTATE_FLOWMODE = "flowMode"; 39 private static final String SAVESTATE_FLOWACCOUNTTYPE = "flowAccountType"; 40 private static final String SAVESTATE_ACCOUNT = "account"; 41 private static final String SAVESTATE_USERNAME = "username"; 42 private static final String SAVESTATE_PASSWORD = "password"; 43 private static final String SAVESTATE_CHECKSETTINGSMODE = "checkSettingsMode"; 44 private static final String SAVESTATE_ALLOWAUTODISCOVER = "allowAutoDiscover"; 45 private static final String SAVESTATE_POLICY = "policy"; 46 private static final String SAVESTATE_ACCOUNTAUTHENTICATORRESPONSE = 47 "accountAuthenticatorResponse"; 48 private static final String SAVESTATE_REPORT_AUTHENTICATION_ERROR = 49 "reportAuthenticationError"; 50 51 // All access will be through getters/setters 52 private int mFlowMode = FLOW_MODE_NORMAL; 53 private String mFlowAccountType; 54 private Account mAccount; 55 private String mUsername; 56 private String mPassword; 57 private int mCheckSettingsMode = 0; 58 private boolean mAllowAutodiscover = true; 59 private Policy mPolicy; 60 private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null; 61 private boolean mReportAccountAuthenticationError = false; 62 63 public interface SetupDataContainer { 64 public SetupDataFragment getSetupData(); 65 public void setSetupData(SetupDataFragment setupData); 66 } 67 68 public SetupDataFragment() { 69 mPolicy = null; 70 mAllowAutodiscover = true; 71 mCheckSettingsMode = 0; 72 mAccount = new Account(); 73 mUsername = null; 74 mPassword = null; 75 mAccountAuthenticatorResponse = null; 76 mReportAccountAuthenticationError = false; 77 } 78 79 public SetupDataFragment(int flowMode) { 80 this(); 81 mFlowMode = flowMode; 82 } 83 84 public SetupDataFragment(int flowMode, String accountType) { 85 this(flowMode); 86 mFlowAccountType = accountType; 87 } 88 89 public SetupDataFragment(int flowMode, Account account) { 90 this(flowMode); 91 mAccount = account; 92 } 93 94 @Override 95 public void onSaveInstanceState(Bundle outState) { 96 super.onSaveInstanceState(outState); 97 outState.putInt(SAVESTATE_FLOWMODE, mFlowMode); 98 outState.putString(SAVESTATE_FLOWACCOUNTTYPE, mFlowAccountType); 99 outState.putParcelable(SAVESTATE_ACCOUNT, mAccount); 100 outState.putString(SAVESTATE_USERNAME, mUsername); 101 outState.putString(SAVESTATE_PASSWORD, mPassword); 102 outState.putInt(SAVESTATE_CHECKSETTINGSMODE, mCheckSettingsMode); 103 outState.putBoolean(SAVESTATE_ALLOWAUTODISCOVER, mAllowAutodiscover); 104 outState.putParcelable(SAVESTATE_POLICY, mPolicy); 105 outState.putParcelable(SAVESTATE_ACCOUNTAUTHENTICATORRESPONSE, 106 mAccountAuthenticatorResponse); 107 outState.putBoolean(SAVESTATE_REPORT_AUTHENTICATION_ERROR, 108 mReportAccountAuthenticationError); 109 } 110 111 @Override 112 public void onCreate(Bundle savedInstanceState) { 113 super.onCreate(savedInstanceState); 114 if (savedInstanceState != null) { 115 mFlowMode = savedInstanceState.getInt(SAVESTATE_FLOWMODE); 116 mFlowAccountType = savedInstanceState.getString(SAVESTATE_FLOWACCOUNTTYPE); 117 mAccount = savedInstanceState.getParcelable(SAVESTATE_ACCOUNT); 118 mUsername = savedInstanceState.getString(SAVESTATE_USERNAME); 119 mPassword = savedInstanceState.getString(SAVESTATE_PASSWORD); 120 mCheckSettingsMode = savedInstanceState.getInt(SAVESTATE_CHECKSETTINGSMODE); 121 mAllowAutodiscover = savedInstanceState.getBoolean(SAVESTATE_ALLOWAUTODISCOVER); 122 mPolicy = savedInstanceState.getParcelable(SAVESTATE_POLICY); 123 mAccountAuthenticatorResponse = 124 savedInstanceState.getParcelable(SAVESTATE_ACCOUNTAUTHENTICATORRESPONSE); 125 mReportAccountAuthenticationError = 126 savedInstanceState.getBoolean(SAVESTATE_REPORT_AUTHENTICATION_ERROR, false); 127 } 128 setRetainInstance(true); 129 } 130 131 // Getters and setters 132 public int getFlowMode() { 133 return mFlowMode; 134 } 135 136 public void setFlowMode(int flowMode) { 137 mFlowMode = flowMode; 138 } 139 140 public String getFlowAccountType() { 141 return mFlowAccountType; 142 } 143 144 public void setFlowAccountType(String flowAccountType) { 145 mFlowAccountType = flowAccountType; 146 } 147 148 public Account getAccount() { 149 return mAccount; 150 } 151 152 public void setAccount(Account account) { 153 mAccount = account; 154 } 155 156 public String getUsername() { 157 return mUsername; 158 } 159 160 public void setUsername(String username) { 161 mUsername = username; 162 } 163 164 public String getPassword() { 165 return mPassword; 166 } 167 168 public void setPassword(String password) { 169 mPassword = password; 170 } 171 172 public int getCheckSettingsMode() { 173 return mCheckSettingsMode; 174 } 175 176 public void setCheckSettingsMode(int checkSettingsMode) { 177 mCheckSettingsMode = checkSettingsMode; 178 } 179 180 public boolean isAllowAutodiscover() { 181 return mAllowAutodiscover; 182 } 183 184 public void setAllowAutodiscover(boolean allowAutodiscover) { 185 mAllowAutodiscover = allowAutodiscover; 186 } 187 188 public Policy getPolicy() { 189 return mPolicy; 190 } 191 192 public void setPolicy(Policy policy) { 193 mPolicy = policy; 194 } 195 196 public AccountAuthenticatorResponse getAccountAuthenticatorResponse() { 197 return mAccountAuthenticatorResponse; 198 } 199 200 public void setAccountAuthenticatorResponse( 201 AccountAuthenticatorResponse accountAuthenticatorResponse) { 202 mAccountAuthenticatorResponse = accountAuthenticatorResponse; 203 } 204 205 public boolean getReportAccountAuthenticationError() { 206 return mReportAccountAuthenticationError; 207 } 208 209 public void setReportAccountAuthenticationError(final boolean report) { 210 mReportAccountAuthenticationError = report; 211 } 212 213 // Parcelable methods 214 @Override 215 public int describeContents() { 216 return 0; 217 } 218 219 public static final Parcelable.Creator<SetupDataFragment> CREATOR = 220 new Parcelable.Creator<SetupDataFragment>() { 221 @Override 222 public SetupDataFragment createFromParcel(Parcel in) { 223 return new SetupDataFragment(in); 224 } 225 226 @Override 227 public SetupDataFragment[] newArray(int size) { 228 return new SetupDataFragment[size]; 229 } 230 }; 231 232 @Override 233 public void writeToParcel(Parcel dest, int flags) { 234 dest.writeInt(mFlowMode); 235 dest.writeString(mFlowAccountType); 236 dest.writeParcelable(mAccount, 0); 237 dest.writeString(mUsername); 238 dest.writeString(mPassword); 239 dest.writeInt(mCheckSettingsMode); 240 dest.writeInt(mAllowAutodiscover ? 1 : 0); 241 dest.writeParcelable(mPolicy, 0); 242 dest.writeParcelable(mAccountAuthenticatorResponse, 0); 243 } 244 245 public SetupDataFragment(Parcel in) { 246 final ClassLoader loader = getClass().getClassLoader(); 247 mFlowMode = in.readInt(); 248 mFlowAccountType = in.readString(); 249 mAccount = in.readParcelable(loader); 250 mUsername = in.readString(); 251 mPassword = in.readString(); 252 mCheckSettingsMode = in.readInt(); 253 mAllowAutodiscover = in.readInt() == 1; 254 mPolicy = in.readParcelable(loader); 255 mAccountAuthenticatorResponse = in.readParcelable(loader); 256 } 257 258 public String debugString() { 259 final StringBuilder sb = new StringBuilder("SetupData"); 260 sb.append(":acct="); 261 sb.append(mAccount == null ? "none" :mAccount.mId); 262 if (mUsername != null) { 263 sb.append(":user="); 264 sb.append(mUsername); 265 } 266 if (mPassword != null) { 267 sb.append(":pass="); 268 sb.append(mPassword); 269 } 270 sb.append(":a/d="); 271 sb.append(mAllowAutodiscover); 272 sb.append(":check="); 273 if ((mCheckSettingsMode & CHECK_INCOMING) != 0) sb.append("in+"); 274 if ((mCheckSettingsMode & CHECK_OUTGOING) != 0) sb.append("out+"); 275 if ((mCheckSettingsMode & CHECK_AUTODISCOVER) != 0) sb.append("a/d"); 276 sb.append(":policy="); 277 sb.append(mPolicy == null ? "none" : "exists"); 278 return sb.toString(); 279 } 280 281} 282