1e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank/*
2e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * Copyright (C) 2010 The Android Open Source Project
3e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank *
4e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * Licensed under the Apache License, Version 2.0 (the "License");
5e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * you may not use this file except in compliance with the License.
6e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * You may obtain a copy of the License at
7e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank *
8e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank *      http://www.apache.org/licenses/LICENSE-2.0
9e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank *
10e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * Unless required by applicable law or agreed to in writing, software
11e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * distributed under the License is distributed on an "AS IS" BASIS,
12e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * See the License for the specific language governing permissions and
14e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * limitations under the License.
15e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank */
16e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
17e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankpackage com.android.email.activity.setup;
18e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
19f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account;
20aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blankimport com.android.emailcommon.provider.Policy;
21e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
22f020910461908681978a9e0f8f98b748853b0e39Andy Stadlerimport android.accounts.AccountAuthenticatorResponse;
23e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankimport android.os.Bundle;
24e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankimport android.os.Parcel;
25e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankimport android.os.Parcelable;
26e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
27e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankpublic class SetupData implements Parcelable {
28e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // The "extra" name for the Bundle saved with SetupData
29e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final String EXTRA_SETUP_DATA = "com.android.email.setupdata";
30e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
31e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // NORMAL is the standard entry from the Email app; EAS and POP_IMAP are used when entering via
32e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Settings -> Accounts
33c5c44eed77b851e71803b972fb76fd91d5338fefBen Komalo    public static final int FLOW_MODE_UNSPECIFIED = -1;
34e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int FLOW_MODE_NORMAL = 0;
35e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int FLOW_MODE_ACCOUNT_MANAGER_EAS = 1;
36d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_ACCOUNT_MANAGER_POP_IMAP = 2;
37e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int FLOW_MODE_EDIT = 3;
38d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_FORCE_CREATE = 4;
39e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // The following two modes are used to "pop the stack" and return from the setup flow.  We
40e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // either return to the caller (if we're in an account type flow) or go to the message list
41d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_RETURN_TO_CALLER = 5;
42d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_RETURN_TO_MESSAGE_LIST = 6;
43e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
44e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // For debug logging
45d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    private static final String[] FLOW_MODES = {"normal", "eas", "pop/imap", "edit", "force",
46d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler            "rtc", "rtl"};
47e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
48e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Mode bits for AccountSetupCheckSettings, indicating the type of check requested
49e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_INCOMING = 1;
50e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_OUTGOING = 2;
51e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_AUTODISCOVER = 4;
52e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
53e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // All access will be through getters/setters
54e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private int mFlowMode = FLOW_MODE_NORMAL;
55e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private Account mAccount;
56e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private String mUsername;
57e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private String mPassword;
58e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private int mCheckSettingsMode = 0;
59e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private boolean mAllowAutodiscover = true;
60aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    private Policy mPolicy;
61e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private boolean mAutoSetup = false;
62e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private boolean mDefault = false;
63f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null;
64e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
65e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // We only have one instance of SetupData; if/when the process is destroyed, this data will be
66e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // saved in the savedInstanceState Bundle
67e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private static SetupData INSTANCE = null;
68e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
69e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static synchronized SetupData getInstance() {
70e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (INSTANCE == null) {
71e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            INSTANCE = new SetupData();
72e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
73e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return INSTANCE;
74e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
75e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
76e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Don't allow instantiation outside of this class
77e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private SetupData() {
78e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
79e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
80e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public int getFlowMode() {
81e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return getInstance().mFlowMode;
82e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
83e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
84e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public void setFlowMode(int mFlowMode) {
85e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        getInstance().mFlowMode = mFlowMode;
86e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
87e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
88e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public Account getAccount() {
89e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return getInstance().mAccount;
90e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
91e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
92e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public void setAccount(Account mAccount) {
93e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        getInstance().mAccount = mAccount;
94e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
95e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
96e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public String getUsername() {
97e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return getInstance().mUsername;
98e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
99e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
100e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public void setUsername(String mUsername) {
101e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        getInstance().mUsername = mUsername;
102e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
103e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
104e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public String getPassword() {
105e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return getInstance().mPassword;
106e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
107e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
108e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public void setPassword(String mPassword) {
109e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        getInstance().mPassword = mPassword;
110e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
111e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
112e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public void setCheckSettingsMode(int mCheckSettingsMode) {
113e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        getInstance().mCheckSettingsMode = mCheckSettingsMode;
114e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
115e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
116e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public boolean isCheckIncoming() {
117e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return (getInstance().mCheckSettingsMode & CHECK_INCOMING) != 0;
118e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
119e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
120e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public boolean isCheckOutgoing() {
121e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return (getInstance().mCheckSettingsMode & CHECK_OUTGOING) != 0;
122e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
123e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public boolean isCheckAutodiscover() {
124e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return (getInstance().mCheckSettingsMode & CHECK_AUTODISCOVER) != 0;
125e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
126e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public boolean isAllowAutodiscover() {
127e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return getInstance().mAllowAutodiscover;
128e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
129e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
130e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public void setAllowAutodiscover(boolean mAllowAutodiscover) {
131e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        getInstance().mAllowAutodiscover = mAllowAutodiscover;
132e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
133e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
134aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    static public Policy getPolicy() {
135aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        return getInstance().mPolicy;
136e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
137e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
138aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    static public void setPolicy(Policy policy) {
139aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        SetupData data = getInstance();
140aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        data.mPolicy = policy;
141aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        data.mAccount.mPolicy = policy;
142e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
143e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
144e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public boolean isAutoSetup() {
145e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return getInstance().mAutoSetup;
146e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
147e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
148aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    static public void setAutoSetup(boolean autoSetup) {
149aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        getInstance().mAutoSetup = autoSetup;
150e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
151e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
152e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public boolean isDefault() {
153e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return getInstance().mDefault;
154e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
155e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
156aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    static public void setDefault(boolean _default) {
157aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        getInstance().mDefault = _default;
158e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
159e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
160f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    static public AccountAuthenticatorResponse getAccountAuthenticatorResponse() {
161f020910461908681978a9e0f8f98b748853b0e39Andy Stadler        return getInstance().mAccountAuthenticatorResponse;
162f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    }
163f020910461908681978a9e0f8f98b748853b0e39Andy Stadler
164f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    static public void setAccountAuthenticatorResponse(AccountAuthenticatorResponse response) {
165f020910461908681978a9e0f8f98b748853b0e39Andy Stadler        getInstance().mAccountAuthenticatorResponse = response;
166f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    }
167f020910461908681978a9e0f8f98b748853b0e39Andy Stadler
168e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static void init(int flowMode) {
169e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData data = getInstance();
170e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        data.commonInit();
171e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        data.mFlowMode = flowMode;
172e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
173e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
174e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static void init(int flowMode, Account account) {
175e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData data = getInstance();
176e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        data.commonInit();
177e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        data.mFlowMode = flowMode;
178e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        data.mAccount = account;
179e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
180e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
181e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    void commonInit() {
182aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        mPolicy = null;
183e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mAutoSetup = false;
184e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mAllowAutodiscover = true;
185e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mCheckSettingsMode = 0;
186e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mAccount = new Account();
187e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mDefault = false;
188e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mUsername = null;
189e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mPassword = null;
190f020910461908681978a9e0f8f98b748853b0e39Andy Stadler        mAccountAuthenticatorResponse = null;
191e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
192e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
193e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Parcelable methods
194e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public int describeContents() {
195e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return 0;
196e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
197e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
198e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final Parcelable.Creator<SetupData> CREATOR =
199e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            new Parcelable.Creator<SetupData>() {
200e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        public SetupData createFromParcel(Parcel in) {
201e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            return new SetupData(in);
202e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
203e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
204e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        public SetupData[] newArray(int size) {
205e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            return new SetupData[size];
206e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
207e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    };
208e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
209e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public void writeToParcel(Parcel dest, int flags) {
210e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeInt(mFlowMode);
211e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeParcelable(mAccount, 0);
212e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeString(mUsername);
213e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeString(mPassword);
214e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeInt(mCheckSettingsMode);
215e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeInt(mAllowAutodiscover ? 1 : 0);
216aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        dest.writeParcelable(mPolicy, 0);
217e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeInt(mAutoSetup ? 1 : 0);
218e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeInt(mDefault ? 1 : 0);
219f020910461908681978a9e0f8f98b748853b0e39Andy Stadler        dest.writeParcelable(mAccountAuthenticatorResponse, 0);
220e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
221e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
222e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public SetupData(Parcel in) {
223bbe25adfc87bf72cd031969bb736833780c1dd1dMakoto Onuki        ClassLoader loader = getClass().getClassLoader();
224e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mFlowMode = in.readInt();
225bbe25adfc87bf72cd031969bb736833780c1dd1dMakoto Onuki        mAccount = in.readParcelable(loader);
226e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mUsername = in.readString();
227e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mPassword = in.readString();
228e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mCheckSettingsMode = in.readInt();
229e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mAllowAutodiscover = in.readInt() == 1;
230aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        mPolicy = in.readParcelable(loader);
231e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mAutoSetup = in.readInt() == 1;
232e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mDefault = in.readInt() == 1;
233f020910461908681978a9e0f8f98b748853b0e39Andy Stadler        mAccountAuthenticatorResponse = in.readParcelable(loader);
234e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
235e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
236e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Save/restore our SetupData (used in AccountSetupActivity)
237e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public void save(Bundle bundle) {
238e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        bundle.putParcelable(EXTRA_SETUP_DATA, getInstance());
239e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
240e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
241e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    static public synchronized SetupData restore(Bundle bundle) {
242e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (bundle != null && bundle.containsKey(EXTRA_SETUP_DATA)) {
243e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            INSTANCE = bundle.getParcelable(EXTRA_SETUP_DATA);
244e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            return INSTANCE;
245e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        } else {
246e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            return getInstance();
247e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
248e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
249e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
250e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static String debugString() {
251e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        StringBuilder sb = new StringBuilder("SetupData");
252e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData data = getInstance();
253e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        sb.append(":flow=" + FLOW_MODES[data.mFlowMode]);
254e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        sb.append(":acct=" + (data.mAccount == null ? "none" : data.mAccount.mId));
255e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (data.mUsername != null) {
256e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            sb.append(":user=" + data.mUsername);
257e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
258e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (data.mPassword != null) {
259e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            sb.append(":pass=" + data.mPassword);
260e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
261e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        sb.append(":a/d=" + data.mAllowAutodiscover);
262e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        sb.append(":auto=" + data.mAutoSetup);
263e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        sb.append(":default=" + data.mDefault);
264e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        sb.append(":check=");
265e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (SetupData.isCheckIncoming()) sb.append("in+");
266e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (SetupData.isCheckOutgoing()) sb.append("out+");
267e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (SetupData.isCheckAutodiscover()) sb.append("a/d");
268aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        sb.append(":policy=" + (data.mPolicy == null ? "none" : "exists"));
269e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return sb.toString();
270e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
271e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank}
272