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;
10bb68c13afa630cae058eb40d3ce68644f3f3c8b9Paul Westbrookimport com.android.email.setup.AuthenticatorSetupIntentHelper;
11f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.emailcommon.provider.Account;
12064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantlerimport com.android.emailcommon.provider.HostAuth;
13f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.emailcommon.provider.Policy;
14f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank
159c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler/**
169c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler * Headless fragment to hold setup data for the account setup or settings flows
179c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler */
189c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantlerpublic class SetupDataFragment extends Fragment implements Parcelable {
19e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // The "extra" name for the Bundle saved with SetupData
20e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final String EXTRA_SETUP_DATA = "com.android.email.setupdata";
21e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
22e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // The following two modes are used to "pop the stack" and return from the setup flow.  We
23e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // either return to the caller (if we're in an account type flow) or go to the message list
2476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // TODO: figure out if we still care about these
25d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_RETURN_TO_CALLER = 5;
26d685b469c73c3479c09301da2e65cd7c11fd4aceAndy Stadler    public static final int FLOW_MODE_RETURN_TO_MESSAGE_LIST = 6;
27f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    public static final int FLOW_MODE_RETURN_NO_ACCOUNTS_RESULT = 7;
28e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
29e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Mode bits for AccountSetupCheckSettings, indicating the type of check requested
30e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_INCOMING = 1;
31e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_OUTGOING = 2;
32e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static final int CHECK_AUTODISCOVER = 4;
33e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
3476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_FLOWMODE = "SetupDataFragment.flowMode";
3576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_ACCOUNT = "SetupDataFragment.account";
3676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_EMAIL = "SetupDataFragment.email";
3776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_CREDENTIAL = "SetupDataFragment.credential";
3876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_INCOMING_LOADED = "SetupDataFragment.incomingLoaded";
3976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_OUTGOING_LOADED = "SetupDataFragment.outgoingLoaded";
4076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private static final String SAVESTATE_POLICY = "SetupDataFragment.policy";
41064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    private static final String SAVESTATE_INCOMING_PROTOCOL = "SetupDataFragment.incomingProtocol";
4253b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    private static final String SAVESTATE_AM_PROTOCOL = "SetupDataFragment.amProtocol";
439c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
44e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // All access will be through getters/setters
45bb68c13afa630cae058eb40d3ce68644f3f3c8b9Paul Westbrook    private int mFlowMode = AuthenticatorSetupIntentHelper.FLOW_MODE_NORMAL;
46e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    private Account mAccount;
4776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private String mEmail;
4876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private Bundle mCredentialResults;
4976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // These are used to track whether we've preloaded the login credentials into incoming/outgoing
5076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // settings. Set them to 'true' by default, and false when we change the credentials or email
5176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private boolean mIncomingCredLoaded = true;
5276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private boolean mOutgoingCredLoaded = true;
5376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    // This is accessed off-thread in AccountCheckSettingsFragment
5476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    private volatile Policy mPolicy;
55064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    // Cache incoming protocol and service info here
56064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    private EmailServiceUtils.EmailServiceInfo mIncomingServiceInfo;
57064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    private String mIncomingProtocol;
5853b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    // Protocol the user chose in the account manager "Add an account" screen
5953b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    private String mAmProtocol;
60e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
6126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public interface SetupDataContainer {
629c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        public SetupDataFragment getSetupData();
63e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
64e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
659c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public SetupDataFragment() {
6626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        mPolicy = null;
67994c282d804a635f783681ae314a6b4b244b476eTony Mantler        setAccount(new Account());
6876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mEmail = null;
6976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mCredentialResults = null;
70e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
71e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
729c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    @Override
739c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public void onSaveInstanceState(Bundle outState) {
749c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        super.onSaveInstanceState(outState);
759c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        outState.putInt(SAVESTATE_FLOWMODE, mFlowMode);
769c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        outState.putParcelable(SAVESTATE_ACCOUNT, mAccount);
7776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putString(SAVESTATE_EMAIL, mEmail);
7876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putParcelable(SAVESTATE_CREDENTIAL, mCredentialResults);
7976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putBoolean(SAVESTATE_INCOMING_LOADED, mIncomingCredLoaded);
8076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        outState.putBoolean(SAVESTATE_OUTGOING_LOADED, mOutgoingCredLoaded);
819c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        outState.putParcelable(SAVESTATE_POLICY, mPolicy);
82064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        outState.putString(SAVESTATE_INCOMING_PROTOCOL, mIncomingProtocol);
8353b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler        outState.putString(SAVESTATE_AM_PROTOCOL, mAmProtocol);
849c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    }
859c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
869c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    @Override
879c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public void onCreate(Bundle savedInstanceState) {
889c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        super.onCreate(savedInstanceState);
899c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        if (savedInstanceState != null) {
909c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            mFlowMode = savedInstanceState.getInt(SAVESTATE_FLOWMODE);
91994c282d804a635f783681ae314a6b4b244b476eTony Mantler            setAccount((Account) savedInstanceState.getParcelable(SAVESTATE_ACCOUNT));
9276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mEmail = savedInstanceState.getString(SAVESTATE_EMAIL);
9376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mCredentialResults = savedInstanceState.getParcelable(SAVESTATE_CREDENTIAL);
9476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mIncomingCredLoaded = savedInstanceState.getBoolean(SAVESTATE_INCOMING_LOADED);
9576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            mOutgoingCredLoaded = savedInstanceState.getBoolean(SAVESTATE_OUTGOING_LOADED);
969c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            mPolicy = savedInstanceState.getParcelable(SAVESTATE_POLICY);
97064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler            mIncomingProtocol = savedInstanceState.getString(SAVESTATE_INCOMING_PROTOCOL);
9853b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler            mAmProtocol = savedInstanceState.getString(SAVESTATE_AM_PROTOCOL);
999c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        }
1009c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        setRetainInstance(true);
1019c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    }
1029c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
1039c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    // Getters and setters
10426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public int getFlowMode() {
10526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        return mFlowMode;
106e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
107e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
1089c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public void setFlowMode(int flowMode) {
1099c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler        mFlowMode = flowMode;
1109c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    }
1119c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
11226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public Account getAccount() {
11326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        return mAccount;
114e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
115e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
11626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler    public void setAccount(Account account) {
11726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        mAccount = account;
118994c282d804a635f783681ae314a6b4b244b476eTony Mantler        mAccount.setTemporary(true);
119e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
120e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
12176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public String getEmail() {
12276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mEmail;
123e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
124e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
12576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setEmail(String email) {
12676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mEmail = email;
12776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mAccount.mEmailAddress = email;
12876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = false;
12976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = false;
130e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
131e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
13276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public Bundle getCredentialResults() {
13376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mCredentialResults;
134e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
135e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
13676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setCredentialResults(Bundle credentialResults) {
13776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mCredentialResults = credentialResults;
13876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = false;
13976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = false;
140e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
141e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
14276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public boolean isIncomingCredLoaded() {
14376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mIncomingCredLoaded;
144e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
145e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
14676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setIncomingCredLoaded(boolean incomingCredLoaded) {
14776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = incomingCredLoaded;
148e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
149e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
15076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public boolean isOutgoingCredLoaded() {
15176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        return mOutgoingCredLoaded;
152f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    }
153f020910461908681978a9e0f8f98b748853b0e39Andy Stadler
15476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public void setOutgoingCredLoaded(boolean outgoingCredLoaded) {
15576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = outgoingCredLoaded;
156f020910461908681978a9e0f8f98b748853b0e39Andy Stadler    }
157f020910461908681978a9e0f8f98b748853b0e39Andy Stadler
15876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public synchronized Policy getPolicy() {
15926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        return mPolicy;
16012a79eb4798093b7e8a276c4e96f07fd62e0933dMarc Blank    }
16112a79eb4798093b7e8a276c4e96f07fd62e0933dMarc Blank
16276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public synchronized void setPolicy(Policy policy) {
16326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        mPolicy = policy;
164e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
165e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
166064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    /**
167064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * Retrieve the service info for the incoming protocol
168064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @param context For resolving the service info, and possibly loading the {@link HostAuth}
169064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @return service info object
170064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     */
171064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public EmailServiceUtils.EmailServiceInfo getIncomingServiceInfo(Context context) {
172064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        if (mIncomingServiceInfo == null) {
173064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler            mIncomingServiceInfo = EmailServiceUtils.getServiceInfo(context,
174064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler                    getIncomingProtocol(context));
175064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        }
176064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        return mIncomingServiceInfo;
177064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
178064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
179064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    /**
180064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * Retrieve the protocol as previously set in setIncomingProtocol, but don't attempt to look at
181064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * {@link #mAccount#hostAuthRecv }
182064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @return Protocol string
183064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     */
184064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public String getIncomingProtocol() {
185064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        return mIncomingProtocol;
186064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
187064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
188064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    /**
189064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * Retrieve the protocol as previously set in setIncomingProtocol, or from
190064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * {@link #mAccount#hostAuthRecv}. Try not to call this on the main thread if it's unlikely that
191064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * the hostauth isn't already loaded.
192064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @param context context to possibly load the {@link HostAuth} from the provider
193064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     * @return Protocol string
194064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler     */
195064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public String getIncomingProtocol(Context context) {
196064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        if (mIncomingProtocol != null) {
197064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler            return mIncomingProtocol;
198064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        }
199064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
200064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
201064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        return recvAuth.mProtocol;
202064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
203064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
204064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    public void setIncomingProtocol(final Context context, final String protocol) {
205064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
206064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        recvAuth.setConnection(protocol, recvAuth.mAddress, recvAuth.mPort, recvAuth.mFlags);
207064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        mIncomingProtocol = protocol;
208064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler        mIncomingServiceInfo = null;
209064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler    }
210064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler
211f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler    public String getClientCert(Context context) {
212f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler        final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
213f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler        return recvAuth.mClientCertAlias;
214f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler    }
215f6a945a6cf53327db81be84ef4d16708a864fc18Tony Mantler
21653b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    public String getAmProtocol() {
21753b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler        return mAmProtocol;
21853b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    }
21953b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler
22053b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    public void setAmProtocol(String amProtocol) {
22153b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler        mAmProtocol = amProtocol;
22253b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler    }
22353b64eee54cdb74dc325089b8362a6ff4811759eTony Mantler
224e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    // Parcelable methods
225f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    @Override
226e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public int describeContents() {
227e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return 0;
228e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
229e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
2309c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public static final Parcelable.Creator<SetupDataFragment> CREATOR =
2319c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            new Parcelable.Creator<SetupDataFragment>() {
2329c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                @Override
2339c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                public SetupDataFragment createFromParcel(Parcel in) {
2349c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                    return new SetupDataFragment(in);
2359c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                }
236e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
2379c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                @Override
2389c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                public SetupDataFragment[] newArray(int size) {
2399c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                    return new SetupDataFragment[size];
2409c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler                }
2419c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler            };
242e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
243f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank    @Override
244e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public void writeToParcel(Parcel dest, int flags) {
245e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeInt(mFlowMode);
246e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        dest.writeParcelable(mAccount, 0);
24776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        dest.writeString(mEmail);
24876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        dest.writeParcelable(mCredentialResults, 0);
24976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        dest.writeBooleanArray(new boolean[] {mIncomingCredLoaded, mOutgoingCredLoaded});
250aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        dest.writeParcelable(mPolicy, 0);
251e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
252e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
2539c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler    public SetupDataFragment(Parcel in) {
25426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        final ClassLoader loader = getClass().getClassLoader();
255e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        mFlowMode = in.readInt();
256994c282d804a635f783681ae314a6b4b244b476eTony Mantler        setAccount((Account) in.readParcelable(loader));
25776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mEmail = in.readString();
25876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mCredentialResults = in.readParcelable(loader);
25976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        final boolean[] credsLoaded = in.createBooleanArray();
26076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mIncomingCredLoaded = credsLoaded[0];
26176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        mOutgoingCredLoaded = credsLoaded[1];
262aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        mPolicy = in.readParcelable(loader);
263e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
264e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
26576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    @Override
26676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler    public String toString() {
26726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        final StringBuilder sb = new StringBuilder("SetupData");
26826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(":acct=");
26926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(mAccount == null ? "none" :mAccount.mId);
27076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        if (mEmail != null) {
27126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler            sb.append(":user=");
27276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            sb.append(mEmail);
273e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
27476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler        if (mCredentialResults != null) {
27576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            sb.append(":cred=");
27676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler            sb.append(mCredentialResults.toString());
277e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        }
27826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(":policy=");
27926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler        sb.append(mPolicy == null ? "none" : "exists");
280e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return sb.toString();
281e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
2829c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler
283e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank}
284