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