AccountSetupIncomingFragment.java revision fd14496c494a0d38c35c3788c9cc55f1984592e4
11b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler/* 21b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Copyright (C) 2010 The Android Open Source Project 31b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * 41b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Licensed under the Apache License, Version 2.0 (the "License"); 51b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * you may not use this file except in compliance with the License. 61b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * You may obtain a copy of the License at 71b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * 81b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * http://www.apache.org/licenses/LICENSE-2.0 91b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * 101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Unless required by applicable law or agreed to in writing, software 111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * distributed under the License is distributed on an "AS IS" BASIS, 121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * See the License for the specific language governing permissions and 141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * limitations under the License. 151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerpackage com.android.email.activity.setup; 181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport com.android.email.AccountBackupRestore; 201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport com.android.email.Email; 211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport com.android.email.R; 221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport com.android.email.Utility; 231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport com.android.email.provider.EmailContent; 241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport com.android.email.provider.EmailContent.Account; 251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.app.Activity; 271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.content.Context; 281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.os.Bundle; 291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.Editable; 301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.TextWatcher; 311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.method.DigitsKeyListener; 321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.util.Log; 331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.LayoutInflater; 341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.View; 351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.ViewGroup; 361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.AdapterView; 371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.ArrayAdapter; 381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.EditText; 391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.Spinner; 401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.TextView; 411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport java.net.URI; 431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport java.net.URISyntaxException; 441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 45fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler/** 46fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * Provides UI for IMAP/POP account settings. 47fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * 48fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * This fragment is used by AccountSetupIncoming (for creating accounts) and by AccountSettingsXL 49fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * (for editing existing accounts). 50fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler */ 511a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadlerpublic class AccountSetupIncomingFragment extends AccountServerBaseFragment { 521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private final static String STATE_KEY_CREDENTIAL = 541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler "AccountSetupIncomingFragment.loginCredential"; 551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private static final int POP_PORTS[] = { 571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 110, 995, 995, 110, 110 581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private static final String POP_SCHEMES[] = { 601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler "pop3", "pop3+ssl+", "pop3+ssl+trustallcerts", "pop3+tls+", "pop3+tls+trustallcerts" 611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private static final int IMAP_PORTS[] = { 631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 143, 993, 993, 143, 143 641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private static final String IMAP_SCHEMES[] = { 661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler "imap", "imap+ssl+", "imap+ssl+trustallcerts", "imap+tls+", "imap+tls+trustallcerts" 671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private int mAccountPorts[]; 701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private String mAccountSchemes[]; 711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mUsernameView; 721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mPasswordView; 731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mServerLabelView; 741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mServerView; 751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mPortView; 761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mSecurityTypeView; 771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mDeletePolicyLabelView; 781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mDeletePolicyView; 791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private View mImapPathPrefixSectionView; 801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mImapPathPrefixView; 811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Support for lifecycle 831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mStarted; 841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mLoaded; 851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private String mCacheLoginCredential; 861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called to do initial creation of a fragment. This is called after 891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * {@link #onAttach(Activity)} and before {@link #onActivityCreated(Bundle)}. 901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onCreate(Bundle savedInstanceState) { 931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onCreate"); 951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onCreate(savedInstanceState); 971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 98faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler if (savedInstanceState != null) { 99faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler mCacheLoginCredential = savedInstanceState.getString(STATE_KEY_CREDENTIAL); 100faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler } 1011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public View onCreateView(LayoutInflater inflater, ViewGroup container, 1051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Bundle savedInstanceState) { 1061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 1071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onCreateView"); 1081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler View view = inflater.inflate(R.layout.account_setup_incoming_fragment, container, false); 1101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Context context = getActivity(); 1111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView = (EditText) view.findViewById(R.id.account_username); 1131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView = (EditText) view.findViewById(R.id.account_password); 1141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerLabelView = (TextView) view.findViewById(R.id.account_server_label); 1151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView = (EditText) view.findViewById(R.id.account_server); 1161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView = (EditText) view.findViewById(R.id.account_port); 1171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView = (Spinner) view.findViewById(R.id.account_security_type); 1181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyLabelView = (TextView) view.findViewById(R.id.account_delete_policy_label); 1191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyView = (Spinner) view.findViewById(R.id.account_delete_policy); 1201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mImapPathPrefixSectionView = view.findViewById(R.id.imap_path_prefix_section); 1211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mImapPathPrefixView = (EditText) view.findViewById(R.id.imap_path_prefix); 1221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set up spinners 1241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption securityTypes[] = { 1251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(0, 1261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_security_none_label)), 1271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(1, 1281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_security_ssl_label)), 1291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(2, 1301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString( 1311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler R.string.account_setup_incoming_security_ssl_trust_certificates_label)), 1321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(3, 1331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_security_tls_label)), 1341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(4, 1351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString( 1361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler R.string.account_setup_incoming_security_tls_trust_certificates_label)), 1371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption deletePolicies[] = { 1401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_NEVER, 1411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_never_label)), 1421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_ON_DELETE, 1431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_delete_label)), 1441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> securityTypesAdapter = new ArrayAdapter<SpinnerOption>(context, 1471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, securityTypes); 1481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler securityTypesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 1491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setAdapter(securityTypesAdapter); 1501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> deletePoliciesAdapter = new ArrayAdapter<SpinnerOption>(context, 1521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, deletePolicies); 1531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler deletePoliciesAdapter.setDropDownViewResource( 1541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_dropdown_item); 1551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyView.setAdapter(deletePoliciesAdapter); 1561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Updates the port when the user changes the security type. This allows 1581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // us to show a reasonable default which the user can change. 1591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 1601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 1611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler updatePortFromSecurityType(); 1621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNothingSelected(AdapterView<?> arg0) { } 1651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }); 1661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // After any text edits, call validateFields() which enables or disables the Next button 1681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler TextWatcher validationTextWatcher = new TextWatcher() { 1691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void afterTextChanged(Editable s) { 1701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 1711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 1741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onTextChanged(CharSequence s, int start, int before, int count) { } 1751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.addTextChangedListener(validationTextWatcher); 1771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView.addTextChangedListener(validationTextWatcher); 1781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.addTextChangedListener(validationTextWatcher); 1791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.addTextChangedListener(validationTextWatcher); 1801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Only allow digits in the port field. 1821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setKeyListener(DigitsKeyListener.getInstance("0123456789")); 1831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return view; 1851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onActivityCreated(Bundle savedInstanceState) { 1891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 1901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onActivityCreated"); 1911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onActivityCreated(savedInstanceState); 1931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 1961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is visible to the user. 1971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 1981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStart() { 2001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onStart"); 2021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStart(); 2041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = true; 2051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (!mLoaded) { 2061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler loadSettings(); 2071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is visible to the user and actively running. 2121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onResume() { 2151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onResume"); 2171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onResume(); 2191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 2201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onPause() { 2241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onPause"); 2261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onPause(); 2281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is no longer started. 2321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStop() { 2351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onStop"); 2371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStop(); 2391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = false; 2401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is no longer in use. 2441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onDestroy() { 2471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onDestroy"); 2491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onDestroy(); 2511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onSaveInstanceState(Bundle outState) { 2551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onSaveInstanceState"); 2571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onSaveInstanceState(outState); 2591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler outState.putString(STATE_KEY_CREDENTIAL, mCacheLoginCredential); 2611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Activity provides callbacks here. This also triggers loading and setting up the UX 2651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2661a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 2671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void setCallback(Callback callback) { 2681a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler super.setCallback(callback); 2691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (mStarted && !mLoaded) { 2701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler loadSettings(); 2711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Load the current settings into the UI 2761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void loadSettings() { 2781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 2791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // TODO this should be accessed directly via the HostAuth structure 2801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = SetupData.getAccount(); 2811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = new URI(account.getStoreUri(mContext)); 2821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String username = null; 2831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String password = null; 2841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getUserInfo() != null) { 2851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String[] userInfoParts = uri.getUserInfo().split(":", 2); 2861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler username = userInfoParts[0]; 2871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (userInfoParts.length > 1) { 2881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler password = userInfoParts[1]; 2891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (username != null) { 2931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.setText(username); 2941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (password != null) { 2971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView.setText(password); 2981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getScheme().startsWith("pop3")) { 3011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerLabelView.setText(R.string.account_setup_incoming_pop_server_label); 3021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mAccountPorts = POP_PORTS; 3031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mAccountSchemes = POP_SCHEMES; 3041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mImapPathPrefixSectionView.setVisibility(View.GONE); 3061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else if (uri.getScheme().startsWith("imap")) { 3071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerLabelView.setText(R.string.account_setup_incoming_imap_server_label); 3081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mAccountPorts = IMAP_PORTS; 3091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mAccountSchemes = IMAP_SCHEMES; 3101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyLabelView.setVisibility(View.GONE); 3121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyView.setVisibility(View.GONE); 3131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getPath() != null && uri.getPath().length() > 0) { 3141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mImapPathPrefixView.setText(uri.getPath().substring(1)); 3151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else { 3171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler throw new Error("Unknown account type: " + account.getStoreUri(mContext)); 3181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler for (int i = 0; i < mAccountSchemes.length; i++) { 3211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (mAccountSchemes[i].equals(uri.getScheme())) { 3221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, i); 3231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption.setSpinnerOptionValue(mDeletePolicyView, account.getDeletePolicy()); 3271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getHost() != null) { 3291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.setText(uri.getHost()); 3301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getPort() != -1) { 3331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setText(Integer.toString(uri.getPort())); 3341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else { 3351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler updatePortFromSecurityType(); 3361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 3381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /* 3391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * We should always be able to parse our own settings. 3401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler throw new Error(use); 3421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 3451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Check the values in the fields and decide if it makes sense to enable the "next" button 3491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void validateFields() { 3511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler boolean enabled = Utility.isTextViewNotEmpty(mUsernameView) 3521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isTextViewNotEmpty(mPasswordView) 3531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isTextViewNotEmpty(mServerView) 3541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isPortFieldValid(mPortView); 3551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (enabled) { 3561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 3571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = getUri(); 3581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 3591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler enabled = false; 3601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3621a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler enableNextButton(enabled); 3631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void updatePortFromSecurityType() { 3661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value; 3671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setText(Integer.toString(mAccountPorts[securityType])); 3681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after editing settings and verifying them. Must be FLOW_MODE_EDIT. 3721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3731a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 3741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterEdit() { 3751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = SetupData.getAccount(); 3761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (account.isSaved()) { 3771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.update(mContext, account.toContentValues()); 3781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.mHostAuthRecv.update(mContext, account.mHostAuthRecv.toContentValues()); 3791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else { 3801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.save(mContext); 3811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Update the backup (side copy) of the accounts 3831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler AccountBackupRestore.backupAccounts(mContext); 3841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after entering new settings and verifying them. For setup mode. 3881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 389fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler @Override 3901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterSetup() { 3911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = SetupData.getAccount(); 3921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set the username and password for the outgoing settings to the username and 3941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // password the user just set for incoming. 3951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 3961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI oldUri = new URI(account.getSenderUri(mContext)); 3971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = new URI( 3981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler oldUri.getScheme(), 3991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.getText().toString().trim() + ":" 4001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler + mPasswordView.getText().toString().trim(), 4011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler oldUri.getHost(), 4021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler oldUri.getPort(), 4031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null, 4041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null, 4051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null); 4061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.setSenderUri(mContext, uri.toString()); 4071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 4081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // If we can't set up the URL we just continue. It's only for convenience. 4091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Attempt to create a URI from the fields provided. Throws URISyntaxException if there's 4141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * a problem with the user input. 4151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * @return a URI built from the account setup fields 4161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private URI getUri() throws URISyntaxException { 4181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value; 4191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String path = null; 4201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (mAccountSchemes[securityType].startsWith("imap")) { 4211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler path = "/" + mImapPathPrefixView.getText().toString().trim(); 4221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String userName = mUsernameView.getText().toString().trim(); 4241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mCacheLoginCredential = userName; 4251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = new URI( 4261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mAccountSchemes[securityType], 4271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler userName + ":" + mPasswordView.getText().toString().trim(), 4281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.getText().toString().trim(), 4291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Integer.parseInt(mPortView.getText().toString().trim()), 4301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler path, // path 4311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null, // query 4321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null); 4331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return uri; 4351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity, when "next" button is clicked 4391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4401a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 4411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNext() { 4421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account setupAccount = SetupData.getAccount(); 4431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 4441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = getUri(); 4451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler setupAccount.setStoreUri(mContext, uri.toString()); 4461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Stop here if the login credentials duplicate an existing account 4481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // (unless they duplicate the existing account, as they of course will) 4491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = Utility.findExistingAccount(mContext, setupAccount.mId, 4501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler uri.getHost(), mCacheLoginCredential); 4511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (account != null) { 4521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler DuplicateAccountDialogFragment dialogFragment = 4537b5c5cf2a993d68bb8fe1a65bde3184e8d59c10fAndrew Stadler DuplicateAccountDialogFragment.newInstance(account.mDisplayName); 4541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler dialogFragment.show(getActivity(), DuplicateAccountDialogFragment.TAG); 4551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return; 4561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 4581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /* 4591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * It's unrecoverable if we cannot create a URI from components that 4601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * we validated to be safe. 4611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler throw new Error(use); 4631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler setupAccount.setDeletePolicy( 4661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler (Integer)((SpinnerOption)mDeletePolicyView.getSelectedItem()).value); 4671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 468fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler mCallback.onProceedNext(SetupData.CHECK_INCOMING, this); 4691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler} 471