AccountSetupBasics.java revision 9dac94975f31013d4b31ffb15eba27f352b2e758
196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/*
296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * you may not use this file except in compliance with the License.
696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * You may obtain a copy of the License at
796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * See the License for the specific language governing permissions and
1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * limitations under the License.
1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage com.android.email.activity.setup;
1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
19d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadlerimport com.android.email.R;
20d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadlerimport com.android.email.Utility;
21f613489663cdc5df71b029dfcec5fd3c5173a549Makoto Onukiimport com.android.email.VendorPolicyLoader;
22b98f219cf088fef9288045813c963be070dde9d0Makoto Onukiimport com.android.email.activity.Welcome;
2354c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadlerimport com.android.email.provider.EmailContent.Account;
242731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadlerimport com.android.email.provider.EmailContent.HostAuth;
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
269dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawaimport android.accounts.AccountAuthenticatorResponse;
279dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawaimport android.accounts.AccountManager;
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.Activity;
29fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadlerimport android.app.FragmentTransaction;
30bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadlerimport android.content.Context;
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.Intent;
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.os.Bundle;
338bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadlerimport android.view.Menu;
348bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadlerimport android.view.MenuItem;
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
37fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * Prompts the user for the email address and password. Also prompts for "Use this account as
38fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * default" if this is the 2nd+ account being set up.
39fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *
40fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * If the domain is well-known, the account is configured fully and checked immediately
41fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * using AccountCheckSettingsFragment.  If this succeeds we proceed directly to AccountSetupOptions.
42fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler *
43fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * If the domain is not known, or the user selects Manual setup, we invoke the
44fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * AccountSetupAccountType activity where the user can begin to manually configure the account.
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
46e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankpublic class AccountSetupBasics extends AccountSetupActivity
47fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler        implements AccountSetupBasicsFragment.Callback, AccountCheckSettingsFragment.Callbacks {
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
49a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler    private AccountSetupBasicsFragment mFragment;
508bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    private boolean mManualButtonDisplayed;
518bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    private boolean mNextButtonEnabled;
52e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
539dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    // Used when this Activity is called as part of account authentification flow,
549dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    // which requires to do extra work before and after the account creation.
559dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    // See also AccountAuthenticatorActivity.
569dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null;
579dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    private Bundle mResultBundle = null;
589dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa
59d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadler    public static void actionNewAccount(Activity fromActivity) {
60e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData.init(SetupData.FLOW_MODE_NORMAL);
61e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        fromActivity.startActivity(new Intent(fromActivity, AccountSetupBasics.class));
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
64bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler    /**
65e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank     * This generates setup data that can be used to start a self-contained account creation flow
66bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler     * for exchange accounts.
67bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler     */
68bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler    public static Intent actionSetupExchangeIntent(Context context) {
69e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData.init(SetupData.FLOW_MODE_ACCOUNT_MANAGER_EAS);
70e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return new Intent(context, AccountSetupBasics.class);
71e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    }
72e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank
73e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    /**
74e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank     * This generates setup data that can be used to start a self-contained account creation flow
75e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank     * for pop/imap accounts.
76e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank     */
77e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static Intent actionSetupPopImapIntent(Context context) {
78e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData.init(SetupData.FLOW_MODE_ACCOUNT_MAANGER_POP_IMAP);
79e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        return new Intent(context, AccountSetupBasics.class);
80bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler    }
81bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler
82e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static void actionAccountCreateFinishedAccountFlow(Activity fromActivity) {
83f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank        Intent i= new Intent(fromActivity, AccountSetupBasics.class);
84e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        // If we're in the "account flow" (from AccountManager), we want to return to the caller
85f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank        // (in the settings app)
86e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        SetupData.init(SetupData.FLOW_MODE_RETURN_TO_CALLER);
87f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
88f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank        fromActivity.startActivity(i);
89f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank    }
90f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank
91e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank    public static void actionAccountCreateFinished(final Activity fromActivity,
92e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            final long accountId) {
93e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        Utility.runAsync(new Runnable() {
94e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank           public void run() {
95e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank               Intent i = new Intent(fromActivity, AccountSetupBasics.class);
96e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank               // If we're not in the "account flow" (from AccountManager), we want to show the
97e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank               // message list for the new inbox
98e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank               Account account = Account.restoreAccountWithId(fromActivity, accountId);
99e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank               SetupData.init(SetupData.FLOW_MODE_RETURN_TO_MESSAGE_LIST, account);
100e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank               i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
101e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank               fromActivity.startActivity(i);
102e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            }});
103f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank    }
104f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    public void onCreate(Bundle savedInstanceState) {
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        super.onCreate(savedInstanceState);
108f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank
109e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        int flowMode = SetupData.getFlowMode();
110e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (flowMode == SetupData.FLOW_MODE_RETURN_TO_CALLER) {
111f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank            // Return to the caller who initiated account creation
112f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank            finish();
113f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank            return;
114e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        } else if (flowMode == SetupData.FLOW_MODE_RETURN_TO_MESSAGE_LIST) {
115e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            Account account = SetupData.getAccount();
116e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank            if (account != null && account.mId >= 0) {
117f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank                // Show the message list for the new account
118b98f219cf088fef9288045813c963be070dde9d0Makoto Onuki                Welcome.actionOpenAccountInbox(this, account.mId);
119f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank                finish();
120f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank                return;
121f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank            }
122f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank        }
123f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        setContentView(R.layout.account_setup_basics);
12517da1767e396b873723d53b2aef93da8aca2c00eMarc Blank
1268bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        mFragment = (AccountSetupBasicsFragment)
1278bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler                getFragmentManager().findFragmentById(R.id.setup_basics_fragment);
128fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler
1298bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        mManualButtonDisplayed = true;
130a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler        boolean alternateStrings = false;
131e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        if (flowMode == SetupData.FLOW_MODE_ACCOUNT_MANAGER_EAS) {
1328067b54294356f375521ba3d1e7db3df117b65a4Andrew Stadler            // No need for manual button -> next is appropriate
1338bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler            mManualButtonDisplayed = false;
1348067b54294356f375521ba3d1e7db3df117b65a4Andrew Stadler            // Swap welcome text for EAS-specific text
135a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler            alternateStrings = VendorPolicyLoader.getInstance(this).useAlternateExchangeStrings();
136e5c3c98e9a85198e0b023fd25529512baeb88cdbMakoto Onuki            setTitle(alternateStrings
137e5c3c98e9a85198e0b023fd25529512baeb88cdbMakoto Onuki                    ? R.string.account_setup_basics_exchange_title_alternate
138e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank                            : R.string.account_setup_basics_exchange_title);
139bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler        }
140bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler
141a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler        // Configure fragment
142a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler        mFragment.setCallback(this, alternateStrings);
1439dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa
1449dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa        mAccountAuthenticatorResponse =
1459dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa            getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE);
1469dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa
1479dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa        if (mAccountAuthenticatorResponse != null) {
1489dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa            mAccountAuthenticatorResponse.onRequestContinued();
1499dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa        }
15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
152fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler    /**
153fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler     * Implements AccountCheckSettingsFragment.Callbacks
154fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler     *
155a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * This is used in automatic setup mode to jump directly down to the names screen.
156a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     *
157a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * NOTE:  With this organization, it is *not* possible to auto-create an exchange account,
158a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * because certain necessary actions happen during AccountSetupOptions (which we are
159a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * skipping here).
160a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     */
16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
1622731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler    public void onCheckSettingsComplete(int result) {
1632731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler        if (result == AccountCheckSettingsFragment.CHECK_SETTINGS_OK) {
1642731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler            AccountSetupOptions.actionOptions(this);
1652731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler            finish();
1662731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler        }
1672731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler    }
1682731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler
1692731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler    /**
1702731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler     * Implements AccountCheckSettingsFragment.Callbacks
1712731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler     * This is overridden only by AccountSetupExchange
1722731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler     */
1732731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler    @Override
1742731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler    public void onAutoDiscoverComplete(int result, HostAuth hostAuth) {
1752731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler        throw new IllegalStateException();
17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1788bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    /**
1798bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler     * Add "Next" & "Manual" buttons when this activity is displayed
1808bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler     */
1818bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    @Override
1828bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    public boolean onCreateOptionsMenu(Menu menu) {
1838bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        int menuId = mManualButtonDisplayed
184fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler                ? R.menu.account_setup_manual_next_option
1858bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler                : R.menu.account_setup_next_option;
1868bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        getMenuInflater().inflate(menuId, menu);
1878bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        return super.onCreateOptionsMenu(menu);
1888bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    }
1898bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler
1908bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    /**
1918bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler     * Enable/disable "Next" & "Manual" buttons
1928bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler     */
1938bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    @Override
1948bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    public boolean onPrepareOptionsMenu(Menu menu) {
1958bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        menu.findItem(R.id.next).setEnabled(mNextButtonEnabled);
1968bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        if (mManualButtonDisplayed) {
1978bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler            menu.findItem(R.id.manual_setup).setEnabled(mNextButtonEnabled);
1988bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        }
1998bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        return super.onPrepareOptionsMenu(menu);
2008bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    }
2018bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler
2028bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    /**
2038bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler     * Respond to clicks in the "Next" button
2048bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler     */
2058bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    @Override
2068bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    public boolean onOptionsItemSelected(MenuItem item) {
2078bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        switch (item.getItemId()) {
208a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler            case R.id.next:
209a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler                mFragment.onNext();
2108bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler                return true;
211a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler            case R.id.manual_setup:
212a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler                // no AutoDiscover - user clicked "manual"
213a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler                mFragment.onManualSetup(false);
2148bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler                return true;
215a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler        }
2168bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        return super.onOptionsItemSelected(item);
21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
219a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler    /**
220a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * Implements AccountSetupBasicsFragment.Callback
221a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     */
222a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler    @Override
2238bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler    public void onEnableProceedButtons(boolean enabled) {
2248bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        boolean wasEnabled = mNextButtonEnabled;
2258bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        mNextButtonEnabled = enabled;
2268bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler
2278bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        if (enabled != wasEnabled) {
2288bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler            invalidateOptionsMenu();
2298bcb572ccfdac6974c111fe6dfc753a5e0d4e7caAndrew Stadler        }
23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
232da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    /**
233a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * Implements AccountSetupBasicsFragment.Callback
234fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler     *
235fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler     * This is called when auto-setup (from hardcoded server info) is attempted.
236fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler     * Replace the name/password fragment with the account checker, which will begin to
237fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler     * check incoming/outgoing.
238da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler     */
239da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler    @Override
240a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler    public void onProceedAutomatic() {
241fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler        AccountCheckSettingsFragment checkerFragment =
242fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler            AccountCheckSettingsFragment.newInstance(
243fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler                    SetupData.CHECK_INCOMING | SetupData.CHECK_OUTGOING, null);
244fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler        FragmentTransaction transaction = getFragmentManager().openTransaction();
245fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler        transaction.replace(R.id.setup_basics_fragment, checkerFragment);
246fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler        transaction.addToBackStack("back");
247fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler        transaction.commit();
24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
250bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler    /**
251a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * Implements AccountSetupBasicsFragment.Callback
252bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler     */
25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    @Override
254a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler    public void onProceedDebugSettings() {
25557f125a01b5fbb5860b144b3057153a50d07ddd1Andrew Stadler        AccountSettingsXL.actionSettingsWithDebug(this);
25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
25863ab9de1b881bf1496228285511cab213501f404Andrew Stadler    /**
259a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler     * Implements AccountSetupBasicsFragment.Callback
26063ab9de1b881bf1496228285511cab213501f404Andrew Stadler     */
261a75bab550423e0cd0b2d58379d8210ce6c7c7aa9Andrew Stadler    @Override
2622731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler    public void onProceedManual(boolean allowAutoDiscover) {
2632731aef45c6f2f9792ae698ebf7d65ca6338a02cAndrew Stadler        SetupData.setAllowAutodiscover(allowAutoDiscover);
264e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank        AccountSetupAccountType.actionSelectAccountType(this);
26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
2669dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa
2679dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    @Override
2689dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    public void finish() {
2699dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa        if (mAccountAuthenticatorResponse != null) {
2709dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa            // send the result bundle back if set, otherwise send an error.
2719dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa            if (mResultBundle != null) {
2729dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa                mAccountAuthenticatorResponse.onResult(mResultBundle);
2739dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa            } else {
2749dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa                mAccountAuthenticatorResponse.onError(AccountManager.ERROR_CODE_CANCELED,
2759dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa                        "canceled");
2769dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa            }
2779dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa            mAccountAuthenticatorResponse = null;
2789dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa        }
2799dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa        super.finish();
2809dac94975f31013d4b31ffb15eba27f352b2e758Daisuke Miyakawa    }
28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
282