AccountSetupIncomingFragment.java revision 112ed496f817ebeab6b1ee1d5117259ef80342b2
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 531f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_CREDENTIAL = "AccountSetupIncomingFragment.credential"; 541f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_LOADED = "AccountSetupIncomingFragment.loaded"; 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; 841f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private boolean mConfigured; 851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mLoaded; 861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private String mCacheLoginCredential; 871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 89112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler * Create the fragment with parameters - used mainly to force into settings mode (with buttons) 90112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler * @param settingsMode if true, alters appearance for use in settings (default is "setup") 91112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler */ 92112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler public static AccountSetupIncomingFragment newInstance(boolean settingsMode) { 93112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler AccountSetupIncomingFragment f = new AccountSetupIncomingFragment(); 94112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler f.setSetupArguments(settingsMode); 95112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler return f; 96112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler } 97112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 98112ed496f817ebeab6b1ee1d5117259ef80342b2Andy 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); 1111f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = savedInstanceState.getBoolean(STATE_KEY_LOADED, false); 112faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler } 1131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public View onCreateView(LayoutInflater inflater, ViewGroup container, 1171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Bundle savedInstanceState) { 1181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 1191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onCreateView"); 1201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 121112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler int layoutId = mSettingsMode 122112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler ? R.layout.account_settings_incoming_fragment 123112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler : R.layout.account_setup_incoming_fragment; 124112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 125112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler View view = inflater.inflate(layoutId, container, false); 1261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Context context = getActivity(); 1271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView = (EditText) view.findViewById(R.id.account_username); 1291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView = (EditText) view.findViewById(R.id.account_password); 1301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerLabelView = (TextView) view.findViewById(R.id.account_server_label); 1311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView = (EditText) view.findViewById(R.id.account_server); 1321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView = (EditText) view.findViewById(R.id.account_port); 1331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView = (Spinner) view.findViewById(R.id.account_security_type); 1341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyLabelView = (TextView) view.findViewById(R.id.account_delete_policy_label); 1351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyView = (Spinner) view.findViewById(R.id.account_delete_policy); 1361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mImapPathPrefixSectionView = view.findViewById(R.id.imap_path_prefix_section); 1371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mImapPathPrefixView = (EditText) view.findViewById(R.id.imap_path_prefix); 1381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set up spinners 1401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption securityTypes[] = { 1411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(0, 1421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_security_none_label)), 1431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(1, 1441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_security_ssl_label)), 1451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(2, 1461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString( 1471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler R.string.account_setup_incoming_security_ssl_trust_certificates_label)), 1481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(3, 1491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_security_tls_label)), 1501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(4, 1511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString( 1521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler R.string.account_setup_incoming_security_tls_trust_certificates_label)), 1531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption deletePolicies[] = { 1561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_NEVER, 1571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_never_label)), 1581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_ON_DELETE, 1591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_delete_label)), 1601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> securityTypesAdapter = new ArrayAdapter<SpinnerOption>(context, 1631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, securityTypes); 1641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler securityTypesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 1651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setAdapter(securityTypesAdapter); 1661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> deletePoliciesAdapter = new ArrayAdapter<SpinnerOption>(context, 1681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, deletePolicies); 1691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler deletePoliciesAdapter.setDropDownViewResource( 1701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_dropdown_item); 1711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyView.setAdapter(deletePoliciesAdapter); 1721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Updates the port when the user changes the security type. This allows 1741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // us to show a reasonable default which the user can change. 1751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 1761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 1771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler updatePortFromSecurityType(); 1781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNothingSelected(AdapterView<?> arg0) { } 1811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }); 1821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // After any text edits, call validateFields() which enables or disables the Next button 1841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler TextWatcher validationTextWatcher = new TextWatcher() { 1851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void afterTextChanged(Editable s) { 1861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 1871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 1901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onTextChanged(CharSequence s, int start, int before, int count) { } 1911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.addTextChangedListener(validationTextWatcher); 1931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView.addTextChangedListener(validationTextWatcher); 1941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.addTextChangedListener(validationTextWatcher); 1951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.addTextChangedListener(validationTextWatcher); 1961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Only allow digits in the port field. 1981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setKeyListener(DigitsKeyListener.getInstance("0123456789")); 1991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 200112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler // Additional setup only used while in "settings" mode 201112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler onCreateViewSettingsMode(view); 202112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 2031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return view; 2041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onActivityCreated(Bundle savedInstanceState) { 2081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onActivityCreated"); 2101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onActivityCreated(savedInstanceState); 2121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is visible to the user. 2161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStart() { 2191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onStart"); 2211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStart(); 2231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = true; 2241f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler configureEditor(); 2251f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler loadSettings(); 2261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is visible to the user and actively running. 2301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onResume() { 2331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onResume"); 2351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onResume(); 2371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 2381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onPause() { 2421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onPause"); 2441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onPause(); 2461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is no longer started. 2501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStop() { 2531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onStop"); 2551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStop(); 2571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = false; 2581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is no longer in use. 2621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onDestroy() { 2651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onDestroy"); 2671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onDestroy(); 2691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onSaveInstanceState(Bundle outState) { 2731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (Email.DEBUG_LIFECYCLE && Email.DEBUG) { 2741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Log.d(Email.LOG_TAG, "AccountSetupIncomingFragment onSaveInstanceState"); 2751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onSaveInstanceState(outState); 2771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler outState.putString(STATE_KEY_CREDENTIAL, mCacheLoginCredential); 2791f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler outState.putBoolean(STATE_KEY_LOADED, mLoaded); 2801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Activity provides callbacks here. This also triggers loading and setting up the UX 2841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2851a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 2861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void setCallback(Callback callback) { 2871a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler super.setCallback(callback); 2881f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mStarted) { 2891f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler configureEditor(); 2901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler loadSettings(); 2911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2951f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler * Configure the editor for the account type 2961f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler */ 2971f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private void configureEditor() { 2981f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mConfigured) return; 2991f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler Account account = SetupData.getAccount(); 3001f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler String protocol = account.mHostAuthRecv.mProtocol; 3011f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (protocol.startsWith("pop3")) { 3021f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mServerLabelView.setText(R.string.account_setup_incoming_pop_server_label); 3031f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mAccountPorts = POP_PORTS; 3041f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mAccountSchemes = POP_SCHEMES; 3051f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mImapPathPrefixSectionView.setVisibility(View.GONE); 3061f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } else if (protocol.startsWith("imap")) { 3071f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mServerLabelView.setText(R.string.account_setup_incoming_imap_server_label); 3081f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mAccountPorts = IMAP_PORTS; 3091f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mAccountSchemes = IMAP_SCHEMES; 3101f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyLabelView.setVisibility(View.GONE); 3111f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyView.setVisibility(View.GONE); 3121f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } else { 3131f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler throw new Error("Unknown account type: " + account); 3141f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 3151f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mConfigured = true; 3161f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 3171f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler 3181f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler /** 3191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Load the current settings into the UI 3201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void loadSettings() { 3221f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mLoaded) return; 3231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 3241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // TODO this should be accessed directly via the HostAuth structure 3251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = SetupData.getAccount(); 3261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = new URI(account.getStoreUri(mContext)); 3271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String username = null; 3281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String password = null; 3291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getUserInfo() != null) { 3301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String[] userInfoParts = uri.getUserInfo().split(":", 2); 3311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler username = userInfoParts[0]; 3321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (userInfoParts.length > 1) { 3331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler password = userInfoParts[1]; 3341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (username != null) { 3381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.setText(username); 3391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (password != null) { 3421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView.setText(password); 3431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getScheme().startsWith("pop3")) { 3461f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler SpinnerOption.setSpinnerOptionValue(mDeletePolicyView, account.getDeletePolicy()); 3471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else if (uri.getScheme().startsWith("imap")) { 3481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getPath() != null && uri.getPath().length() > 0) { 3491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mImapPathPrefixView.setText(uri.getPath().substring(1)); 3501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else { 3521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler throw new Error("Unknown account type: " + account.getStoreUri(mContext)); 3531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler for (int i = 0; i < mAccountSchemes.length; i++) { 3561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (mAccountSchemes[i].equals(uri.getScheme())) { 3571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, i); 3581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getHost() != null) { 3621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.setText(uri.getHost()); 3631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (uri.getPort() != -1) { 3661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setText(Integer.toString(uri.getPort())); 3671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else { 3681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler updatePortFromSecurityType(); 3691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 3711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /* 3721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * We should always be able to parse our own settings. 3731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler throw new Error(use); 3751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3761f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = true; 3771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 3781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Check the values in the fields and decide if it makes sense to enable the "next" button 3821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void validateFields() { 3841f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (!mConfigured || !mLoaded) return; 3851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler boolean enabled = Utility.isTextViewNotEmpty(mUsernameView) 3861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isTextViewNotEmpty(mPasswordView) 3871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isTextViewNotEmpty(mServerView) 3881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isPortFieldValid(mPortView); 3891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (enabled) { 3901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 3911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = getUri(); 3921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 3931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler enabled = false; 3941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3961a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler enableNextButton(enabled); 3971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void updatePortFromSecurityType() { 4001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value; 4011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setText(Integer.toString(mAccountPorts[securityType])); 4021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after editing settings and verifying them. Must be FLOW_MODE_EDIT. 4061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4071a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 4081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterEdit() { 4091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = SetupData.getAccount(); 4101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (account.isSaved()) { 4111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.update(mContext, account.toContentValues()); 4121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.mHostAuthRecv.update(mContext, account.mHostAuthRecv.toContentValues()); 4131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } else { 4141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.save(mContext); 4151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Update the backup (side copy) of the accounts 4171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler AccountBackupRestore.backupAccounts(mContext); 4181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after entering new settings and verifying them. For setup mode. 4221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 423fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler @Override 4241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterSetup() { 4251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = SetupData.getAccount(); 4261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set the username and password for the outgoing settings to the username and 428ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // password the user just set for incoming. Use the verified host address to try and 429ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // pick a smarter outgoing address. 4301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 431ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler String hostName = 432ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler AccountSettingsUtils.inferServerName(account.mHostAuthRecv.mAddress, null, "smtp"); 4331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI oldUri = new URI(account.getSenderUri(mContext)); 4341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = new URI( 4351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler oldUri.getScheme(), 4361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.getText().toString().trim() + ":" 437ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler + mPasswordView.getText().toString(), 438ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler hostName, 4391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler oldUri.getPort(), 4401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null, 4411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null, 4421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null); 4431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler account.setSenderUri(mContext, uri.toString()); 4441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 4451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // If we can't set up the URL we just continue. It's only for convenience. 4461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Attempt to create a URI from the fields provided. Throws URISyntaxException if there's 4511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * a problem with the user input. 4521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * @return a URI built from the account setup fields 4531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 454fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler /* package */ URI getUri() throws URISyntaxException { 4551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value; 4561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String path = null; 4571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (mAccountSchemes[securityType].startsWith("imap")) { 4581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler path = "/" + mImapPathPrefixView.getText().toString().trim(); 4591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler String userName = mUsernameView.getText().toString().trim(); 4611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mCacheLoginCredential = userName; 4621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = new URI( 4631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mAccountSchemes[securityType], 464fb4333b3a5051b08d3a255000bb1b8331e2a1d43Andrew Stadler userName + ":" + mPasswordView.getText(), 4651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.getText().toString().trim(), 4661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Integer.parseInt(mPortView.getText().toString().trim()), 4671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler path, // path 4681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null, // query 4691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler null); 4701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return uri; 4721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity, when "next" button is clicked 4761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4771a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 4781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNext() { 4791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account setupAccount = SetupData.getAccount(); 4801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 4811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler URI uri = getUri(); 4821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler setupAccount.setStoreUri(mContext, uri.toString()); 4831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Stop here if the login credentials duplicate an existing account 4851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // (unless they duplicate the existing account, as they of course will) 4861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler EmailContent.Account account = Utility.findExistingAccount(mContext, setupAccount.mId, 4871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler uri.getHost(), mCacheLoginCredential); 4881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler if (account != null) { 4891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler DuplicateAccountDialogFragment dialogFragment = 4907b5c5cf2a993d68bb8fe1a65bde3184e8d59c10fAndrew Stadler DuplicateAccountDialogFragment.newInstance(account.mDisplayName); 4911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler dialogFragment.show(getActivity(), DuplicateAccountDialogFragment.TAG); 4921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return; 4931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } catch (URISyntaxException use) { 4951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /* 4961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * It's unrecoverable if we cannot create a URI from components that 4971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * we validated to be safe. 4981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler throw new Error(use); 5001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 5011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 5021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler setupAccount.setDeletePolicy( 5031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler (Integer)((SpinnerOption)mDeletePolicyView.getSelectedItem()).value); 5041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 505fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler mCallback.onProceedNext(SetupData.CHECK_INCOMING, this); 5061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 5071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler} 508