AccountSetupBasics.java revision e6cc662abc0b5fffe223cda5e980b4f05a4e91dd
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.EmailAddressValidator; 20d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadlerimport com.android.email.R; 21d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadlerimport com.android.email.Utility; 22f613489663cdc5df71b029dfcec5fd3c5173a549Makoto Onukiimport com.android.email.VendorPolicyLoader; 23d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadlerimport com.android.email.activity.Debug; 24f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blankimport com.android.email.activity.MessageList; 259f73249031303856670651305adff255a00918b7Andrew Stadlerimport com.android.email.activity.setup.AccountSettingsUtils.Provider; 26a290f503f14432163f74548a5e5d1dc5003ad049Marc Blankimport com.android.email.provider.EmailContent; 2754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadlerimport com.android.email.provider.EmailContent.Account; 28f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blankimport com.android.email.provider.EmailContent.Mailbox; 2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.Activity; 3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.AlertDialog; 3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.app.Dialog; 33bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadlerimport android.content.Context; 3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.DialogInterface; 3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.content.Intent; 3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.database.Cursor; 3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.os.Bundle; 3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.text.Editable; 3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.text.TextWatcher; 4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.view.View; 4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.view.View.OnClickListener; 4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.Button; 4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.CheckBox; 4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.EditText; 458067b54294356f375521ba3d1e7db3df117b65a4Andrew Stadlerimport android.widget.TextView; 4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectimport android.widget.Toast; 4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 48d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadlerimport java.net.URI; 49d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadlerimport java.net.URISyntaxException; 5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/** 5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Prompts the user for the email address and password. Also prompts for 5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * "Use this account as default" if this is the 2nd+ account being set up. 5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Attempts to lookup default settings for the domain the user specified. If the 5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * domain is known the settings are handed off to the AccountSetupCheckSettings 5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * activity. If no settings are found the settings are handed off to the 5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * AccountSetupAccountType activity. 5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 59e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blankpublic class AccountSetupBasics extends AccountSetupActivity 6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project implements OnClickListener, TextWatcher { 6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private final static boolean ENTER_DEBUG_SCREEN = true; 62bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler 6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private final static int DIALOG_NOTE = 1; 64da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler private final static int DIALOG_DUPLICATE_ACCOUNT = 2; 65da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private final static String STATE_KEY_PROVIDER = 6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project "com.android.email.AccountSetupBasics.provider"; 68cc402e42ab70699fb43d23e69a724639b9507738Marc Blank 6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // NOTE: If you change this value, confirm that the new interval exists in arrays.xml 7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private final static int DEFAULT_ACCOUNT_CHECK_INTERVAL = 15; 7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private EditText mEmailView; 7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private EditText mPasswordView; 7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private CheckBox mDefaultView; 7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private Button mNextButton; 7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private Button mManualSetupButton; 77e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank 7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private Provider mProvider; 79da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler private String mDuplicateAccountName; 8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private EmailAddressValidator mEmailValidator = new EmailAddressValidator(); 8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 83d5059731780b81c91eff85be8830cafad41f3ed1Andy Stadler public static void actionNewAccount(Activity fromActivity) { 84e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.init(SetupData.FLOW_MODE_NORMAL); 85e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank fromActivity.startActivity(new Intent(fromActivity, AccountSetupBasics.class)); 8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 8817da1767e396b873723d53b2aef93da8aca2c00eMarc Blank public static void actionNewAccountWithCredentials(Activity fromActivity, 89e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank String username, String password, int accountFlowMode) { 90e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.init(accountFlowMode, username, password); 91e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank fromActivity.startActivity(new Intent(fromActivity, AccountSetupBasics.class)); 9217da1767e396b873723d53b2aef93da8aca2c00eMarc Blank } 9317da1767e396b873723d53b2aef93da8aca2c00eMarc Blank 94bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler /** 95e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * This generates setup data that can be used to start a self-contained account creation flow 96bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler * for exchange accounts. 97bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler */ 98bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler public static Intent actionSetupExchangeIntent(Context context) { 99e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.init(SetupData.FLOW_MODE_ACCOUNT_MANAGER_EAS); 100e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank return new Intent(context, AccountSetupBasics.class); 101e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank } 102e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank 103e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank /** 104e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * This generates setup data that can be used to start a self-contained account creation flow 105e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank * for pop/imap accounts. 106e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank */ 107e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank public static Intent actionSetupPopImapIntent(Context context) { 108e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.init(SetupData.FLOW_MODE_ACCOUNT_MAANGER_POP_IMAP); 109e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank return new Intent(context, AccountSetupBasics.class); 110bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler } 111bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler 112e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank public static void actionAccountCreateFinishedAccountFlow(Activity fromActivity) { 113f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank Intent i= new Intent(fromActivity, AccountSetupBasics.class); 114e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank // If we're in the "account flow" (from AccountManager), we want to return to the caller 115f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank // (in the settings app) 116e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.init(SetupData.FLOW_MODE_RETURN_TO_CALLER); 117f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 118f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank fromActivity.startActivity(i); 119f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank } 120f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank 121e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank public static void actionAccountCreateFinished(final Activity fromActivity, 122e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank final long accountId) { 123e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank Utility.runAsync(new Runnable() { 124e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank public void run() { 125e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank Intent i = new Intent(fromActivity, AccountSetupBasics.class); 126e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank // If we're not in the "account flow" (from AccountManager), we want to show the 127e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank // message list for the new inbox 128e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank Account account = Account.restoreAccountWithId(fromActivity, accountId); 129e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.init(SetupData.FLOW_MODE_RETURN_TO_MESSAGE_LIST, account); 130e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 131e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank fromActivity.startActivity(i); 132e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank }}); 133f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank } 134f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank 13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void onCreate(Bundle savedInstanceState) { 13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super.onCreate(savedInstanceState); 138f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank 139e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank int flowMode = SetupData.getFlowMode(); 140e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if (flowMode == SetupData.FLOW_MODE_RETURN_TO_CALLER) { 141f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank // Return to the caller who initiated account creation 142f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank finish(); 143f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank return; 144e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank } else if (flowMode == SetupData.FLOW_MODE_RETURN_TO_MESSAGE_LIST) { 145e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank Account account = SetupData.getAccount(); 146e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if (account != null && account.mId >= 0) { 147f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank // Show the message list for the new account 148e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank MessageList.actionHandleAccount(this, account.mId, Mailbox.TYPE_INBOX); 149f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank finish(); 150f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank return; 151f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank } 152f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank } 153f1efd65a5ebac0a2f1e218c0ae6bb8ceb1a19af6Marc Blank 15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project setContentView(R.layout.account_setup_basics); 15517da1767e396b873723d53b2aef93da8aca2c00eMarc Blank 15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mEmailView = (EditText)findViewById(R.id.account_email); 15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mPasswordView = (EditText)findViewById(R.id.account_password); 15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mDefaultView = (CheckBox)findViewById(R.id.account_default); 15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mNextButton = (Button)findViewById(R.id.next); 16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mManualSetupButton = (Button)findViewById(R.id.manual_setup); 16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mNextButton.setOnClickListener(this); 16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mManualSetupButton.setOnClickListener(this); 16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mEmailView.addTextChangedListener(this); 16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mPasswordView.addTextChangedListener(this); 16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 16868a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler // Find out how many accounts we have, and if there one or more, then we have a choice 16968a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler // about being default or not. 17068a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler Cursor c = null; 17168a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler try { 17268a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler c = getContentResolver().query( 173cc402e42ab70699fb43d23e69a724639b9507738Marc Blank EmailContent.Account.CONTENT_URI, 174a290f503f14432163f74548a5e5d1dc5003ad049Marc Blank EmailContent.Account.ID_PROJECTION, 17568a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler null, null, null); 176e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if (c != null && c.getCount() > 0) { 17768a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler mDefaultView.setVisibility(View.VISIBLE); 17868a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler } 17968a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler } finally { 18068a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler if (c != null) { 18168a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler c.close(); 18268a9ccfcde85505f06ddba28c22481c80419ddd4Andrew Stadler } 18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 185e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if (flowMode == SetupData.FLOW_MODE_ACCOUNT_MANAGER_EAS) { 1868067b54294356f375521ba3d1e7db3df117b65a4Andrew Stadler // No need for manual button -> next is appropriate 187bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler mManualSetupButton.setVisibility(View.GONE); 1888067b54294356f375521ba3d1e7db3df117b65a4Andrew Stadler // Swap welcome text for EAS-specific text 1898067b54294356f375521ba3d1e7db3df117b65a4Andrew Stadler TextView welcomeView = (TextView) findViewById(R.id.instructions); 190e5c3c98e9a85198e0b023fd25529512baeb88cdbMakoto Onuki final boolean alternateStrings = 191e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank VendorPolicyLoader.getInstance(this).useAlternateExchangeStrings(); 192e5c3c98e9a85198e0b023fd25529512baeb88cdbMakoto Onuki setTitle(alternateStrings 193e5c3c98e9a85198e0b023fd25529512baeb88cdbMakoto Onuki ? R.string.account_setup_basics_exchange_title_alternate 194e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank : R.string.account_setup_basics_exchange_title); 195e5c3c98e9a85198e0b023fd25529512baeb88cdbMakoto Onuki welcomeView.setText(alternateStrings 196f613489663cdc5df71b029dfcec5fd3c5173a549Makoto Onuki ? R.string.accounts_welcome_exchange_alternate 197e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank : R.string.accounts_welcome_exchange); 198bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler } 199bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler 200e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if (SetupData.getUsername() != null) { 201e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank mEmailView.setText(SetupData.getUsername()); 20217da1767e396b873723d53b2aef93da8aca2c00eMarc Blank } 203e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if (SetupData.getPassword() != null) { 204e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank mPasswordView.setText(SetupData.getPassword()); 20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (savedInstanceState != null && savedInstanceState.containsKey(STATE_KEY_PROVIDER)) { 20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mProvider = (Provider)savedInstanceState.getSerializable(STATE_KEY_PROVIDER); 20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void onResume() { 21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super.onResume(); 21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project validateFields(); 21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void onSaveInstanceState(Bundle outState) { 21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project super.onSaveInstanceState(outState); 22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (mProvider != null) { 22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project outState.putSerializable(STATE_KEY_PROVIDER, mProvider); 22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void afterTextChanged(Editable s) { 22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project validateFields(); 22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void beforeTextChanged(CharSequence s, int start, int count, int after) { 23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void onTextChanged(CharSequence s, int start, int before, int count) { 23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private void validateFields() { 236e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank boolean valid = Utility.isTextViewNotEmpty(mEmailView) 237e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank && Utility.isTextViewNotEmpty(mPasswordView) 23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project && mEmailValidator.isValid(mEmailView.getText().toString().trim()); 23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mNextButton.setEnabled(valid); 24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mManualSetupButton.setEnabled(valid); 24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /* 24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * Dim the next button's icon to 50% if the button is disabled. 24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * TODO this can probably be done with a stateful drawable. Check into it. 24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * android:state_enabled 24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Utility.setCompoundDrawablesAlpha(mNextButton, mNextButton.isEnabled() ? 255 : 128); 24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private String getOwnerName() { 25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String name = null; 251d382107bdc95d4472050d0879dff7e30193ef1c2Jeff Hamilton/* TODO figure out another way to get the owner name 25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String projection[] = { 25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project ContactMethods.NAME 25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project }; 25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Cursor c = getContentResolver().query( 25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Uri.withAppendedPath(Contacts.People.CONTENT_URI, "owner"), projection, null, null, 25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project null); 258fb67ec958c44fcd46b524cc85d5f8ad3aeb4d2fdJeff Hamilton if (c != null) { 259fb67ec958c44fcd46b524cc85d5f8ad3aeb4d2fdJeff Hamilton if (c.moveToFirst()) { 260fb67ec958c44fcd46b524cc85d5f8ad3aeb4d2fdJeff Hamilton name = c.getString(0); 261fb67ec958c44fcd46b524cc85d5f8ad3aeb4d2fdJeff Hamilton } 26296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project c.close(); 26396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 264d382107bdc95d4472050d0879dff7e30193ef1c2Jeff Hamilton*/ 26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 26696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (name == null || name.length() == 0) { 26754c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler long defaultId = Account.getDefaultAccountId(this); 26854c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler if (defaultId != -1) { 26954c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler Account account = Account.restoreAccountWithId(this, defaultId); 27054c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler if (account != null) { 2719e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler name = account.getSenderName(); 27254c1f2bf9a6574240b7c9af253f83a2b566442abAndrew Stadler } 27396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 27496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 27596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return name; 27696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 27796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 27896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 27996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public Dialog onCreateDialog(int id) { 28096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (id == DIALOG_NOTE) { 28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (mProvider != null && mProvider.note != null) { 28296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return new AlertDialog.Builder(this) 28317da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setIcon(android.R.drawable.ic_dialog_alert) 28417da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setTitle(android.R.string.dialog_alert_title) 28517da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setMessage(mProvider.note) 28617da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setPositiveButton( 28717da1767e396b873723d53b2aef93da8aca2c00eMarc Blank getString(R.string.okay_action), 28817da1767e396b873723d53b2aef93da8aca2c00eMarc Blank new DialogInterface.OnClickListener() { 28917da1767e396b873723d53b2aef93da8aca2c00eMarc Blank public void onClick(DialogInterface dialog, int which) { 29017da1767e396b873723d53b2aef93da8aca2c00eMarc Blank finishAutoSetup(); 29117da1767e396b873723d53b2aef93da8aca2c00eMarc Blank } 29217da1767e396b873723d53b2aef93da8aca2c00eMarc Blank }) 29317da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setNegativeButton( 29417da1767e396b873723d53b2aef93da8aca2c00eMarc Blank getString(R.string.cancel_action), 29517da1767e396b873723d53b2aef93da8aca2c00eMarc Blank null) 29617da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .create(); 29796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 298da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } else if (id == DIALOG_DUPLICATE_ACCOUNT) { 299da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler return new AlertDialog.Builder(this) 30017da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setIcon(android.R.drawable.ic_dialog_alert) 30117da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setTitle(R.string.account_duplicate_dlg_title) 30217da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setMessage(getString(R.string.account_duplicate_dlg_message_fmt, 30317da1767e396b873723d53b2aef93da8aca2c00eMarc Blank mDuplicateAccountName)) 30417da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .setPositiveButton(R.string.okay_action, 30517da1767e396b873723d53b2aef93da8aca2c00eMarc Blank new DialogInterface.OnClickListener() { 30617da1767e396b873723d53b2aef93da8aca2c00eMarc Blank public void onClick(DialogInterface dialog, int which) { 30717da1767e396b873723d53b2aef93da8aca2c00eMarc Blank dismissDialog(DIALOG_DUPLICATE_ACCOUNT); 30817da1767e396b873723d53b2aef93da8aca2c00eMarc Blank } 30917da1767e396b873723d53b2aef93da8aca2c00eMarc Blank }) 31017da1767e396b873723d53b2aef93da8aca2c00eMarc Blank .create(); 31196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 31296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return null; 31396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 31496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 315da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler /** 316da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler * Update a cached dialog with current values (e.g. account name) 317da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler */ 318da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler @Override 319da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler public void onPrepareDialog(int id, Dialog dialog) { 320da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler switch (id) { 321da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler case DIALOG_NOTE: 322da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler if (mProvider != null && mProvider.note != null) { 323da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler AlertDialog alert = (AlertDialog) dialog; 324da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler alert.setMessage(mProvider.note); 325da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } 326da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler break; 327da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler case DIALOG_DUPLICATE_ACCOUNT: 328da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler if (mDuplicateAccountName != null) { 329da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler AlertDialog alert = (AlertDialog) dialog; 330da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler alert.setMessage(getString(R.string.account_duplicate_dlg_message_fmt, 331da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler mDuplicateAccountName)); 332da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } 333da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler break; 334da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } 335da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } 336da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 33796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private void finishAutoSetup() { 33896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String email = mEmailView.getText().toString().trim(); 33996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String password = mPasswordView.getText().toString().trim(); 34096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String[] emailParts = email.split("@"); 34196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String user = emailParts[0]; 34296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String domain = emailParts[1]; 34396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project URI incomingUri = null; 34496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project URI outgoingUri = null; 34596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project try { 34696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String incomingUsername = mProvider.incomingUsernameTemplate; 34796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project incomingUsername = incomingUsername.replaceAll("\\$email", email); 34896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project incomingUsername = incomingUsername.replaceAll("\\$user", user); 34996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project incomingUsername = incomingUsername.replaceAll("\\$domain", domain); 35096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 35196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project URI incomingUriTemplate = mProvider.incomingUriTemplate; 35296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project incomingUri = new URI(incomingUriTemplate.getScheme(), incomingUsername + ":" 353bd681454608d518e938e2e7b3ce801f560b14131Andy Stadler + password, incomingUriTemplate.getHost(), incomingUriTemplate.getPort(), 354bd681454608d518e938e2e7b3ce801f560b14131Andy Stadler incomingUriTemplate.getPath(), null, null); 35596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 35696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String outgoingUsername = mProvider.outgoingUsernameTemplate; 35796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project outgoingUsername = outgoingUsername.replaceAll("\\$email", email); 35896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project outgoingUsername = outgoingUsername.replaceAll("\\$user", user); 35996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project outgoingUsername = outgoingUsername.replaceAll("\\$domain", domain); 36096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 36196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project URI outgoingUriTemplate = mProvider.outgoingUriTemplate; 36296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project outgoingUri = new URI(outgoingUriTemplate.getScheme(), outgoingUsername + ":" 363bd681454608d518e938e2e7b3ce801f560b14131Andy Stadler + password, outgoingUriTemplate.getHost(), outgoingUriTemplate.getPort(), 364bd681454608d518e938e2e7b3ce801f560b14131Andy Stadler outgoingUriTemplate.getPath(), null, null); 365da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 366da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler // Stop here if the login credentials duplicate an existing account 3679d387ff0bb88ad952b53c956b468dcbcec248752Marc Blank Account account = Utility.findExistingAccount(this, -1, 368da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler incomingUri.getHost(), incomingUsername); 3699d387ff0bb88ad952b53c956b468dcbcec248752Marc Blank if (account != null) { 3709d387ff0bb88ad952b53c956b468dcbcec248752Marc Blank mDuplicateAccountName = account.mDisplayName; 371da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler this.showDialog(DIALOG_DUPLICATE_ACCOUNT); 372da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler return; 373da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler } 374da8836a76cd8a6eaa7e3693eeacc6393870b2066Andrew Stadler 37596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } catch (URISyntaxException use) { 37696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project /* 37796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * If there is some problem with the URI we give up and go on to 37863ab9de1b881bf1496228285511cab213501f404Andrew Stadler * manual setup. Technically speaking, AutoDiscover is OK here, since user clicked 37963ab9de1b881bf1496228285511cab213501f404Andrew Stadler * "Next" to get here. This would never happen in practice because we don't expect 38063ab9de1b881bf1496228285511cab213501f404Andrew Stadler * to find any EAS accounts in the providers list. 38196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */ 38263ab9de1b881bf1496228285511cab213501f404Andrew Stadler onManualSetup(true); 38396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return; 38496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 38596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 386e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank Account account = SetupData.getAccount(); 387e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setSenderName(getOwnerName()); 388e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setEmailAddress(email); 389e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setStoreUri(this, incomingUri.toString()); 390e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setSenderUri(this, outgoingUri.toString()); 391294a4fd0c6b15c1f8f41ca03be66ed95e16e5a6dAndrew Stadler/* TODO figure out the best way to implement this concept 39296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setDraftsFolderName(getString(R.string.special_mailbox_name_drafts)); 39396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setTrashFolderName(getString(R.string.special_mailbox_name_trash)); 39496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setOutboxFolderName(getString(R.string.special_mailbox_name_outbox)); 39596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setSentFolderName(getString(R.string.special_mailbox_name_sent)); 396294a4fd0c6b15c1f8f41ca03be66ed95e16e5a6dAndrew Stadler*/ 39796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (incomingUri.toString().startsWith("imap")) { 39896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // Delete policy must be set explicitly, because IMAP does not provide a UI selection 39996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // for it. This logic needs to be followed in the auto setup flow as well. 400e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setDeletePolicy(EmailContent.Account.DELETE_POLICY_ON_DELETE); 40196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 402e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setSyncInterval(DEFAULT_ACCOUNT_CHECK_INTERVAL); 403e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank AccountSetupCheckSettings.actionCheckSettings(this, 404e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.CHECK_INCOMING | SetupData.CHECK_OUTGOING); 40596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 40696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 40796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project private void onNext() { 408e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank // If this is EAS flow, don't try to find a provider for the domain! 409e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank if (SetupData.getFlowMode() != SetupData.FLOW_MODE_ACCOUNT_MANAGER_EAS) { 410e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank String email = mEmailView.getText().toString().trim(); 411e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank String[] emailParts = email.split("@"); 412e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank String domain = emailParts[1].trim(); 4139f73249031303856670651305adff255a00918b7Andrew Stadler mProvider = AccountSettingsUtils.findProviderForDomain(this, domain); 414e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank if (mProvider != null) { 415e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank if (mProvider.note != null) { 416e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank showDialog(DIALOG_NOTE); 417e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank } else { 418e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank finishAutoSetup(); 419e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank } 420e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank return; 421e1145d173971ebe741e42e9caa209ef2f7bbefa4Marc Blank } 42296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 42363ab9de1b881bf1496228285511cab213501f404Andrew Stadler // Can't use auto setup (although EAS accounts may still be able to AutoDiscover) 42463ab9de1b881bf1496228285511cab213501f404Andrew Stadler onManualSetup(true); 42596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 42696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 427bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler /** 428bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler * This is used in automatic setup mode to jump directly down to the names screen. 429bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler * 430bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler * NOTE: With this organization, it is *not* possible to auto-create an exchange account, 431bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler * because certain necessary actions happen during AccountSetupOptions (which we are 432bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler * skipping here). 433bcff14acf25d3a999b7448e317604e694c204f47Andrew Stadler */ 43496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project @Override 43596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void onActivityResult(int requestCode, int resultCode, Intent data) { 43696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project if (resultCode == RESULT_OK) { 437e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank Account account = SetupData.getAccount(); 438e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank String email = account.getEmailAddress(); 439e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setDisplayName(email); 4409e2c6bd5f21f2d19eef7ebfe30e6fdf94ede0857Andrew Stadler boolean isDefault = mDefaultView.isChecked(); 441e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setDefaultAccount(isDefault); 442e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank SetupData.setDefault(isDefault); 443e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank AccountSetupOptions.actionOptions(this); 44496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project finish(); 44596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 44696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 44796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 44863ab9de1b881bf1496228285511cab213501f404Andrew Stadler /** 44963ab9de1b881bf1496228285511cab213501f404Andrew Stadler * @param allowAutoDiscover - true if the user clicked 'next' and (if the account is EAS) 45063ab9de1b881bf1496228285511cab213501f404Andrew Stadler * it's OK to use autodiscover. false to prevent autodiscover and go straight to manual setup. 45163ab9de1b881bf1496228285511cab213501f404Andrew Stadler * Ignored for IMAP & POP accounts. 45263ab9de1b881bf1496228285511cab213501f404Andrew Stadler */ 45363ab9de1b881bf1496228285511cab213501f404Andrew Stadler private void onManualSetup(boolean allowAutoDiscover) { 45496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String email = mEmailView.getText().toString().trim(); 45596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String password = mPasswordView.getText().toString().trim(); 45696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String[] emailParts = email.split("@"); 45796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String user = emailParts[0].trim(); 45896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project String domain = emailParts[1].trim(); 459cc402e42ab70699fb43d23e69a724639b9507738Marc Blank 46096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // Alternate entry to the debug options screen (for devices without a physical keyboard: 461a5af05f1a94ba9d0a91bd6507492cf6946f88a4dMihai Preda // Username: d@d.d 46296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // Password: debug 463a5af05f1a94ba9d0a91bd6507492cf6946f88a4dMihai Preda if (ENTER_DEBUG_SCREEN && "d@d.d".equals(email) && "debug".equals(password)) { 464cc402e42ab70699fb43d23e69a724639b9507738Marc Blank mEmailView.setText(""); 465cc402e42ab70699fb43d23e69a724639b9507738Marc Blank mPasswordView.setText(""); 46642e3f10a9575e277ba6f121e6cac56ddb02fda12Makoto Onuki Debug.actionShow(this); 46796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return; 46896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 46996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 470e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank Account account = SetupData.getAccount(); 471e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setSenderName(getOwnerName()); 472e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setEmailAddress(email); 47396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project try { 47496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project URI uri = new URI("placeholder", user + ":" + password, domain, -1, null, null, null); 475e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setStoreUri(this, uri.toString()); 476e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setSenderUri(this, uri.toString()); 47796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } catch (URISyntaxException use) { 47896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project // If we can't set up the URL, don't continue - account setup pages will fail too 47996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project Toast.makeText(this, R.string.account_setup_username_password_toast, Toast.LENGTH_LONG) 48096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project .show(); 481e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account = null; 48296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project return; 48396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 484294a4fd0c6b15c1f8f41ca03be66ed95e16e5a6dAndrew Stadler/* TODO figure out the best way to implement this concept 48596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setDraftsFolderName(getString(R.string.special_mailbox_name_drafts)); 48696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setTrashFolderName(getString(R.string.special_mailbox_name_trash)); 48796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setOutboxFolderName(getString(R.string.special_mailbox_name_outbox)); 48896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project mAccount.setSentFolderName(getString(R.string.special_mailbox_name_sent)); 489294a4fd0c6b15c1f8f41ca03be66ed95e16e5a6dAndrew Stadler*/ 490e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank account.setSyncInterval(DEFAULT_ACCOUNT_CHECK_INTERVAL); 49196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 492e6cc662abc0b5fffe223cda5e980b4f05a4e91ddMarc Blank AccountSetupAccountType.actionSelectAccountType(this); 49396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 49496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project 49596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project public void onClick(View v) { 49696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project switch (v.getId()) { 49796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project case R.id.next: 49896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project onNext(); 49996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project break; 50096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project case R.id.manual_setup: 50163ab9de1b881bf1496228285511cab213501f404Andrew Stadler // no AutoDiscover - user clicked "manual" 50263ab9de1b881bf1496228285511cab213501f404Andrew Stadler onManualSetup(false); 50396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project break; 50496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 50596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project } 50696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project} 507