1e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankpackage com.android.email.activity.setup;
2e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
39c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantlerimport android.app.Fragment;
4064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantlerimport android.content.Context;
5e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankimport android.os.Bundle;
6e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankimport android.os.Parcel;
7e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankimport android.os.Parcelable;
8e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
9064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantlerimport com.android.email.service.EmailServiceUtils;
10f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.emailcommon.provider.Account;
11064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantlerimport com.android.emailcommon.provider.HostAuth;
12f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.emailcommon.provider.Policy;
13f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank
149c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler/**
159c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler * Headless fragment to hold setup data for the account setup or settings flows
169c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler */
179c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantlerpublic class SetupDataFragment extends Fragment implements Parcelable {
18e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // The "extra" name for the Bundle saved with SetupData
19e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final String EXTRA_SETUP_DATA = "com.android.email.setupdata";
20e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
21e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // NORMAL is the standard entry from the Email app; EAS and POP_IMAP are used when entering via
22e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Settings -> Accounts
23c5c44eed77b851e71803b972fb76fd91d5338fefBen Komalo    public static final int FLOW_MODE_UNSPECIFIED = -1;
24e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int FLOW_MODE_NORMAL = 0;
25f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    public static final int FLOW_MODE_ACCOUNT_MANAGER = 1;
26e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int FLOW_MODE_EDIT = 3;
27d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_FORCE_CREATE = 4;
28e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // The following two modes are used to "pop the stack" and return from the setup flow.  We
29e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // either return to the caller (if we're in an account type flow) or go to the message list
3076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // TODO: figure out if we still care about these
31d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_RETURN_TO_CALLER = 5;
32d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_RETURN_TO_MESSAGE_LIST = 6;
33f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    public static final int FLOW_MODE_RETURN_NO_ACCOUNTS_RESULT = 7;
34f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    public static final int FLOW_MODE_NO_ACCOUNTS = 8;
35e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
36e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Mode bits for AccountSetupCheckSettings, indicating the type of check requested
37e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_INCOMING = 1;
38e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_OUTGOING = 2;
39e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_AUTODISCOVER = 4;
40e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
4176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_FLOWMODE = "SetupDataFragment.flowMode";
4276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_ACCOUNT = "SetupDataFragment.account";
4376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_EMAIL = "SetupDataFragment.email";
4476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_CREDENTIAL = "SetupDataFragment.credential";
4576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_INCOMING_LOADED = "SetupDataFragment.incomingLoaded";
4676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_OUTGOING_LOADED = "SetupDataFragment.outgoingLoaded";
4776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_POLICY = "SetupDataFragment.policy";
48064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    private static final String SAVESTATE_INCOMING_PROTOCOL = "SetupDataFragment.incomingProtocol";
4953b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    private static final String SAVESTATE_AM_PROTOCOL = "SetupDataFragment.amProtocol";
509c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
51e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // All access will be through getters/setters
52e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private int mFlowMode = FLOW_MODE_NORMAL;
53e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private Account mAccount;
5476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private String mEmail;
5576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private Bundle mCredentialResults;
5676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // These are used to track whether we've preloaded the login credentials into incoming/outgoing
5776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // settings. Set them to 'true' by default, and false when we change the credentials or email
5876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private boolean mIncomingCredLoaded = true;
5976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private boolean mOutgoingCredLoaded = true;
6076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // This is accessed off-thread in AccountCheckSettingsFragment
6176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private volatile Policy mPolicy;
62064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    // Cache incoming protocol and service info here
63064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    private EmailServiceUtils.EmailServiceInfo mIncomingServiceInfo;
64064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    private String mIncomingProtocol;
6553b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    // Protocol the user chose in the account manager "Add an account" screen
6653b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    private String mAmProtocol;
67e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
6826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public interface SetupDataContainer {
699c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        public SetupDataFragment getSetupData();
70e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
71e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
729c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public SetupDataFragment() {
7326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        mPolicy = null;
74994c282d804a635f783681ae314a6b4b244b476eTony Mantler        setAccount(new Account());
7576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mEmail = null;
7676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mCredentialResults = null;
77e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
78e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
799c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    @Override
809c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public void onSaveInstanceState(Bundle outState) {
819c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        super.onSaveInstanceState(outState);
829c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        outState.putInt(SAVESTATE_FLOWMODE, mFlowMode);
839c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        outState.putParcelable(SAVESTATE_ACCOUNT, mAccount);
8476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putString(SAVESTATE_EMAIL, mEmail);
8576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putParcelable(SAVESTATE_CREDENTIAL, mCredentialResults);
8676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putBoolean(SAVESTATE_INCOMING_LOADED, mIncomingCredLoaded);
8776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putBoolean(SAVESTATE_OUTGOING_LOADED, mOutgoingCredLoaded);
889c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        outState.putParcelable(SAVESTATE_POLICY, mPolicy);
89064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        outState.putString(SAVESTATE_INCOMING_PROTOCOL, mIncomingProtocol);
9053b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler        outState.putString(SAVESTATE_AM_PROTOCOL, mAmProtocol);
919c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    }
929c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
939c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    @Override
949c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public void onCreate(Bundle savedInstanceState) {
959c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        super.onCreate(savedInstanceState);
969c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        if (savedInstanceState != null) {
979c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            mFlowMode = savedInstanceState.getInt(SAVESTATE_FLOWMODE);
98994c282d804a635f783681ae314a6b4b244b476eTony Mantler            setAccount((Account) savedInstanceState.getParcelable(SAVESTATE_ACCOUNT));
9976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mEmail = savedInstanceState.getString(SAVESTATE_EMAIL);
10076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mCredentialResults = savedInstanceState.getParcelable(SAVESTATE_CREDENTIAL);
10176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mIncomingCredLoaded = savedInstanceState.getBoolean(SAVESTATE_INCOMING_LOADED);
10276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mOutgoingCredLoaded = savedInstanceState.getBoolean(SAVESTATE_OUTGOING_LOADED);
1039c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            mPolicy = savedInstanceState.getParcelable(SAVESTATE_POLICY);
104064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler            mIncomingProtocol = savedInstanceState.getString(SAVESTATE_INCOMING_PROTOCOL);
10553b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler            mAmProtocol = savedInstanceState.getString(SAVESTATE_AM_PROTOCOL);
1069c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        }
1079c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        setRetainInstance(true);
1089c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    }
1099c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
1109c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    // Getters and setters
11126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public int getFlowMode() {
11226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        return mFlowMode;
113e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
114e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
1159c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public void setFlowMode(int flowMode) {
1169c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        mFlowMode = flowMode;
1179c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    }
1189c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
11926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public Account getAccount() {
12026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        return mAccount;
121e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
122e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
12326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public void setAccount(Account account) {
12426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        mAccount = account;
125994c282d804a635f783681ae314a6b4b244b476eTony Mantler        mAccount.setTemporary(true);
126e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
127e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
12876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public String getEmail() {
12976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mEmail;
130e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
131e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
13276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setEmail(String email) {
13376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mEmail = email;
13476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mAccount.mEmailAddress = email;
13576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = false;
13676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = false;
137e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
138e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
13976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public Bundle getCredentialResults() {
14076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mCredentialResults;
141e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
142e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
14376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setCredentialResults(Bundle credentialResults) {
14476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mCredentialResults = credentialResults;
14576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = false;
14676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = false;
147e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
148e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
14976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public boolean isIncomingCredLoaded() {
15076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mIncomingCredLoaded;
151e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
152e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
15376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setIncomingCredLoaded(boolean incomingCredLoaded) {
15476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = incomingCredLoaded;
155e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
156e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
15776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public boolean isOutgoingCredLoaded() {
15876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mOutgoingCredLoaded;
159f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    }
160f020910461908681978a9e0f8f98b748853b0e39Andy Stadler
16176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setOutgoingCredLoaded(boolean outgoingCredLoaded) {
16276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = outgoingCredLoaded;
163f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    }
164f020910461908681978a9e0f8f98b748853b0e39Andy Stadler
16576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public synchronized Policy getPolicy() {
16626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        return mPolicy;
16712a79eb4798093b7e8a276c4e96f07fd62e0933dMarc Blank    }
16812a79eb4798093b7e8a276c4e96f07fd62e0933dMarc Blank
16976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public synchronized void setPolicy(Policy policy) {
17026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        mPolicy = policy;
171e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
172e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
173064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    /**
174064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * Retrieve the service info for the incoming protocol
175064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @param context For resolving the service info, and possibly loading the {@link HostAuth}
176064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @return service info object
177064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     */
178064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public EmailServiceUtils.EmailServiceInfo getIncomingServiceInfo(Context context) {
179064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        if (mIncomingServiceInfo == null) {
180064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler            mIncomingServiceInfo = EmailServiceUtils.getServiceInfo(context,
181064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler                    getIncomingProtocol(context));
182064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        }
183064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        return mIncomingServiceInfo;
184064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
185064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
186064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    /**
187064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * Retrieve the protocol as previously set in setIncomingProtocol, but don't attempt to look at
188064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * {@link #mAccount#hostAuthRecv }
189064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @return Protocol string
190064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     */
191064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public String getIncomingProtocol() {
192064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        return mIncomingProtocol;
193064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
194064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
195064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    /**
196064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * Retrieve the protocol as previously set in setIncomingProtocol, or from
197064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * {@link #mAccount#hostAuthRecv}. Try not to call this on the main thread if it's unlikely that
198064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * the hostauth isn't already loaded.
199064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @param context context to possibly load the {@link HostAuth} from the provider
200064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @return Protocol string
201064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     */
202064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public String getIncomingProtocol(Context context) {
203064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        if (mIncomingProtocol != null) {
204064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler            return mIncomingProtocol;
205064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        }
206064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
207064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
208064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        return recvAuth.mProtocol;
209064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
210064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
211064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public void setIncomingProtocol(final Context context, final String protocol) {
212064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
213064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        recvAuth.setConnection(protocol, recvAuth.mAddress, recvAuth.mPort, recvAuth.mFlags);
214064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        mIncomingProtocol = protocol;
215064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        mIncomingServiceInfo = null;
216064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
217064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
218f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler    public String getClientCert(Context context) {
219f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler        final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
220f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler        return recvAuth.mClientCertAlias;
221f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler    }
222f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler
22353b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    public String getAmProtocol() {
22453b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler        return mAmProtocol;
22553b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    }
22653b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler
22753b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    public void setAmProtocol(String amProtocol) {
22853b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler        mAmProtocol = amProtocol;
22953b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    }
23053b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler
231e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Parcelable methods
232f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    @Override
233e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public int describeContents() {
234e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return 0;
235e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
236e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
2379c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public static final Parcelable.Creator<SetupDataFragment> CREATOR =
2389c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            new Parcelable.Creator<SetupDataFragment>() {
2399c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                @Override
2409c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                public SetupDataFragment createFromParcel(Parcel in) {
2419c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                    return new SetupDataFragment(in);
2429c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                }
243e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
2449c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                @Override
2459c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                public SetupDataFragment[] newArray(int size) {
2469c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                    return new SetupDataFragment[size];
2479c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                }
2489c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            };
249e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
250f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    @Override
251e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public void writeToParcel(Parcel dest, int flags) {
252e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeInt(mFlowMode);
253e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeParcelable(mAccount, 0);
25476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        dest.writeString(mEmail);
25576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        dest.writeParcelable(mCredentialResults, 0);
25676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        dest.writeBooleanArray(new boolean[] {mIncomingCredLoaded, mOutgoingCredLoaded});
257aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        dest.writeParcelable(mPolicy, 0);
258e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
259e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
2609c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public SetupDataFragment(Parcel in) {
26126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        final ClassLoader loader = getClass().getClassLoader();
262e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mFlowMode = in.readInt();
263994c282d804a635f783681ae314a6b4b244b476eTony Mantler        setAccount((Account) in.readParcelable(loader));
26476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mEmail = in.readString();
26576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mCredentialResults = in.readParcelable(loader);
26676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final boolean[] credsLoaded = in.createBooleanArray();
26776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = credsLoaded[0];
26876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = credsLoaded[1];
269aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        mPolicy = in.readParcelable(loader);
270e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
271e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
27276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    @Override
27376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public String toString() {
27426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        final StringBuilder sb = new StringBuilder("SetupData");
27526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(":acct=");
27626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(mAccount == null ? "none" :mAccount.mId);
27776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        if (mEmail != null) {
27826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler            sb.append(":user=");
27976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            sb.append(mEmail);
280e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
28176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        if (mCredentialResults != null) {
28276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            sb.append(":cred=");
28376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            sb.append(mCredentialResults.toString());
284e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
28526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(":policy=");
28626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(mPolicy == null ? "none" : "exists");
287e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return sb.toString();
288e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
2899c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
290e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank}
291