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