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