AccountSetupIncomingFragment.java revision cf194df05c31045ec734ace84ce2b739639bf12e
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 android.app.Activity; 201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.content.Context; 211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.os.Bundle; 221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.Editable; 231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.TextWatcher; 241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.method.DigitsKeyListener; 251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.util.Log; 261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.LayoutInflater; 271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.View; 281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.ViewGroup; 291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.AdapterView; 301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.ArrayAdapter; 311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.EditText; 321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.Spinner; 331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.TextView; 341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3569111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.Email; 3669111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.R; 3769111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.activity.UiUtilities; 3869111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.provider.AccountBackupRestore; 3969111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.Logging; 40f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account; 4169111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.provider.HostAuth; 4269111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.utility.Utility; 4369111b1e19456c4e861b031da3b3b7f26893d664Marc Blank 44fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler/** 45fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * Provides UI for IMAP/POP account settings. 46fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * 47fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * This fragment is used by AccountSetupIncoming (for creating accounts) and by AccountSettingsXL 48fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * (for editing existing accounts). 49fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler */ 501a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadlerpublic class AccountSetupIncomingFragment extends AccountServerBaseFragment { 511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 521f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_CREDENTIAL = "AccountSetupIncomingFragment.credential"; 531f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_LOADED = "AccountSetupIncomingFragment.loaded"; 541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 55040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int POP3_PORT_NORMAL = 110; 56040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int POP3_PORT_SSL = 995; 57040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 58040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int IMAP_PORT_NORMAL = 143; 59040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int IMAP_PORT_SSL = 993; 60040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mUsernameView; 621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mPasswordView; 631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mServerLabelView; 641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mServerView; 651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mPortView; 661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mSecurityTypeView; 671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mDeletePolicyLabelView; 681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mDeletePolicyView; 691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private View mImapPathPrefixSectionView; 701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mImapPathPrefixView; 71c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy // Delete policy as loaded from the device 72c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy private int mLoadedDeletePolicy; 731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Support for lifecycle 751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mStarted; 761f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private boolean mConfigured; 771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mLoaded; 781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private String mCacheLoginCredential; 791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called to do initial creation of a fragment. This is called after 821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * {@link #onAttach(Activity)} and before {@link #onActivityCreated(Bundle)}. 831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onCreate(Bundle savedInstanceState) { 86bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 8731d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onCreate"); 881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onCreate(savedInstanceState); 901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 91faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler if (savedInstanceState != null) { 92faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler mCacheLoginCredential = savedInstanceState.getString(STATE_KEY_CREDENTIAL); 931f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = savedInstanceState.getBoolean(STATE_KEY_LOADED, false); 94faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler } 951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public View onCreateView(LayoutInflater inflater, ViewGroup container, 991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Bundle savedInstanceState) { 100bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 10131d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onCreateView"); 1021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 103112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler int layoutId = mSettingsMode 104112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler ? R.layout.account_settings_incoming_fragment 105112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler : R.layout.account_setup_incoming_fragment; 106112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 107112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler View view = inflater.inflate(layoutId, container, false); 1081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Context context = getActivity(); 1091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1102fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mUsernameView = (EditText) UiUtilities.getView(view, R.id.account_username); 1112fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mPasswordView = (EditText) UiUtilities.getView(view, R.id.account_password); 1122fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mServerLabelView = (TextView) UiUtilities.getView(view, R.id.account_server_label); 1132fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mServerView = (EditText) UiUtilities.getView(view, R.id.account_server); 1142fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mPortView = (EditText) UiUtilities.getView(view, R.id.account_port); 1152fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mSecurityTypeView = (Spinner) UiUtilities.getView(view, R.id.account_security_type); 1162fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mDeletePolicyLabelView = (TextView) UiUtilities.getView(view, 1172fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki R.id.account_delete_policy_label); 1182fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mDeletePolicyView = (Spinner) UiUtilities.getView(view, R.id.account_delete_policy); 1192fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mImapPathPrefixSectionView = UiUtilities.getView(view, R.id.imap_path_prefix_section); 1202fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mImapPathPrefixView = (EditText) UiUtilities.getView(view, R.id.imap_path_prefix); 1211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set up spinners 1231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption securityTypes[] = { 124040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_NONE, context.getString( 125040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_none_label)), 126040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_SSL, context.getString( 127040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_ssl_label)), 128040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, context.getString( 129040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_ssl_trust_certificates_label)), 130040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_TLS, context.getString( 131040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_tls_label)), 132040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, context.getString( 133040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_tls_trust_certificates_label)), 1341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption deletePolicies[] = { 1371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_NEVER, 1381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_never_label)), 1391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_ON_DELETE, 1401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_delete_label)), 1411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> securityTypesAdapter = new ArrayAdapter<SpinnerOption>(context, 1441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, securityTypes); 1451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler securityTypesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 1461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setAdapter(securityTypesAdapter); 1471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> deletePoliciesAdapter = new ArrayAdapter<SpinnerOption>(context, 1491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, deletePolicies); 1501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler deletePoliciesAdapter.setDropDownViewResource( 1511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_dropdown_item); 1521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyView.setAdapter(deletePoliciesAdapter); 1531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Updates the port when the user changes the security type. This allows 1551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // us to show a reasonable default which the user can change. 1561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 1571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 1581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler updatePortFromSecurityType(); 1591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNothingSelected(AdapterView<?> arg0) { } 1621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }); 1631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // After any text edits, call validateFields() which enables or disables the Next button 1651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler TextWatcher validationTextWatcher = new TextWatcher() { 1661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void afterTextChanged(Editable s) { 1671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 1681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 1711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onTextChanged(CharSequence s, int start, int before, int count) { } 1721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 173206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy // We're editing an existing account; don't allow modification of the user name 174206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy if (mSettingsMode) { 175206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy makeTextViewUneditable(mUsernameView, 176206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy getString(R.string.account_setup_username_uneditable_error)); 177206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy } 1781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.addTextChangedListener(validationTextWatcher); 1791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView.addTextChangedListener(validationTextWatcher); 1801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.addTextChangedListener(validationTextWatcher); 1811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.addTextChangedListener(validationTextWatcher); 1821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Only allow digits in the port field. 1841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setKeyListener(DigitsKeyListener.getInstance("0123456789")); 1851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 186112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler // Additional setup only used while in "settings" mode 187112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler onCreateViewSettingsMode(view); 188112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 1891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return view; 1901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onActivityCreated(Bundle savedInstanceState) { 194bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 19531d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onActivityCreated"); 1961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onActivityCreated(savedInstanceState); 1981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is visible to the user. 2021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStart() { 205bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 20631d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onStart"); 2071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStart(); 2091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = true; 2101f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler configureEditor(); 2111f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler loadSettings(); 2121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is visible to the user and actively running. 2161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onResume() { 219bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 22031d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onResume"); 2211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onResume(); 2231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 2241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onPause() { 228bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 22931d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onPause"); 2301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onPause(); 2321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is no longer started. 2361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStop() { 239bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 24031d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onStop"); 2411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStop(); 2431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = false; 2441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is no longer in use. 2481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onDestroy() { 251bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 25231d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onDestroy"); 2531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onDestroy(); 2551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onSaveInstanceState(Bundle outState) { 259bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 26031d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onSaveInstanceState"); 2611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onSaveInstanceState(outState); 2631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler outState.putString(STATE_KEY_CREDENTIAL, mCacheLoginCredential); 2651f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler outState.putBoolean(STATE_KEY_LOADED, mLoaded); 2661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Activity provides callbacks here. This also triggers loading and setting up the UX 2701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2711a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 2721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void setCallback(Callback callback) { 2731a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler super.setCallback(callback); 2741f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mStarted) { 2751f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler configureEditor(); 2761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler loadSettings(); 2771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2811f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler * Configure the editor for the account type 2821f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler */ 2831f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private void configureEditor() { 2841f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mConfigured) return; 2851f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler Account account = SetupData.getAccount(); 286040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mBaseScheme = account.mHostAuthRecv.mProtocol; 2876fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank if (HostAuth.SCHEME_POP3.equals(mBaseScheme)) { 2881f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mServerLabelView.setText(R.string.account_setup_incoming_pop_server_label); 2891f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mImapPathPrefixSectionView.setVisibility(View.GONE); 2906fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank } else if (HostAuth.SCHEME_IMAP.equals(mBaseScheme)) { 2911f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mServerLabelView.setText(R.string.account_setup_incoming_imap_server_label); 2921f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyLabelView.setVisibility(View.GONE); 2931f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyView.setVisibility(View.GONE); 2941f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } else { 2951f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler throw new Error("Unknown account type: " + account); 2961f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 2971f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mConfigured = true; 2981f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 2991f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler 3001f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler /** 3011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Load the current settings into the UI 3021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void loadSettings() { 3041f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mLoaded) return; 3051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 306040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Account account = SetupData.getAccount(); 307040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext); 3081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 309040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String username = recvAuth.mLogin; 310040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (username != null) { 311040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mUsernameView.setText(username); 312040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 313040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String password = recvAuth.mPassword; 314040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (password != null) { 315040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPasswordView.setText(password); 316cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo // Since username is uneditable, focus on the next editable field 317cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo if (mSettingsMode) { 318cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo mPasswordView.requestFocus(); 319cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo } 320040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3226fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank if (HostAuth.SCHEME_IMAP.equals(recvAuth.mProtocol)) { 323040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String prefix = recvAuth.mDomain; 324040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (prefix != null && prefix.length() > 0) { 325040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mImapPathPrefixView.setText(prefix.substring(1)); 3261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3276fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank } else if (!HostAuth.SCHEME_POP3.equals(recvAuth.mProtocol)) { 3288c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // Account must either be IMAP or POP3 32985e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blank throw new Error("Unknown account type: " + recvAuth.mProtocol); 330040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3328c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // The delete policy is set for all legacy accounts. For POP3 accounts, the user sets 3338c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // the policy explicitly. For IMAP accounts, the policy is set when the Account object 3348c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // is created. @see AccountSetupBasics#populateSetupData 3358c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy mLoadedDeletePolicy = account.getDeletePolicy(); 3368c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy SpinnerOption.setSpinnerOptionValue(mDeletePolicyView, mLoadedDeletePolicy); 3378c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy 338040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int flags = recvAuth.mFlags; 339040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy flags &= ~HostAuth.FLAG_AUTHENTICATE; 340040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, flags); 3411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 342040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String hostname = recvAuth.mAddress; 343040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (hostname != null) { 344040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mServerView.setText(hostname); 345040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 347040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int port = recvAuth.mPort; 348040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (port != HostAuth.PORT_UNKNOWN) { 349040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPortView.setText(Integer.toString(port)); 350040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } else { 351040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy updatePortFromSecurityType(); 3521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 353c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 354fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy mLoadedRecvAuth = recvAuth; 3551f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = true; 3561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 3571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Check the values in the fields and decide if it makes sense to enable the "next" button 3611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void validateFields() { 3631f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (!mConfigured || !mLoaded) return; 3641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler boolean enabled = Utility.isTextViewNotEmpty(mUsernameView) 3651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isTextViewNotEmpty(mPasswordView) 366ce4cce05b2ee5ea2d9629c189a79f7f30778f534Makoto Onuki && Utility.isServerNameValid(mServerView) 3671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isPortFieldValid(mPortView); 3681a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler enableNextButton(enabled); 369858c2822777f74947e81476125590ad06bfe4803Andy Stadler 37069111b1e19456c4e861b031da3b3b7f26893d664Marc Blank String userName = mUsernameView.getText().toString().trim(); 37169111b1e19456c4e861b031da3b3b7f26893d664Marc Blank mCacheLoginCredential = userName; 37269111b1e19456c4e861b031da3b3b7f26893d664Marc Blank 373858c2822777f74947e81476125590ad06bfe4803Andy Stadler // Warn (but don't prevent) if password has leading/trailing spaces 374858c2822777f74947e81476125590ad06bfe4803Andy Stadler AccountSettingsUtils.checkPasswordSpaces(mContext, mPasswordView); 3751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 377040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private int getPortFromSecurityType() { 3781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value; 379040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy boolean useSsl = ((securityType & HostAuth.FLAG_SSL) != 0); 380040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int port = useSsl ? IMAP_PORT_SSL : IMAP_PORT_NORMAL; // default to IMAP 3816fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank if (HostAuth.SCHEME_POP3.equals(mBaseScheme)) { 382040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy port = useSsl ? POP3_PORT_SSL : POP3_PORT_NORMAL; 383040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 384040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy return port; 385040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 386040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 387040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private void updatePortFromSecurityType() { 388040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int port = getPortFromSecurityType(); 389040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPortView.setText(Integer.toString(port)); 3901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after editing settings and verifying them. Must be FLOW_MODE_EDIT. 3946e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * Note, we update account here (as well as the account.mHostAuthRecv) because we edit 3956e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * account's delete policy here. 3966e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * Blocking - do not call from UI Thread. 3971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3981a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 3991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterEdit() { 4006e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler Account account = SetupData.getAccount(); 4016e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler account.update(mContext, account.toContentValues()); 4026e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler account.mHostAuthRecv.update(mContext, account.mHostAuthRecv.toContentValues()); 4031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Update the backup (side copy) of the accounts 4040993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank AccountBackupRestore.backup(mContext); 4051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after entering new settings and verifying them. For setup mode. 4091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 410fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler @Override 4111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterSetup() { 412040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Account account = SetupData.getAccount(); 413040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext); 414040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth sendAuth = account.getOrCreateHostAuthSend(mContext); 4151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set the username and password for the outgoing settings to the username and 417ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // password the user just set for incoming. Use the verified host address to try and 418ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // pick a smarter outgoing address. 419040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String hostName = AccountSettingsUtils.inferServerName(recvAuth.mAddress, null, "smtp"); 420040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy sendAuth.setLogin(recvAuth.mLogin, recvAuth.mPassword); 421040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy sendAuth.setConnection(sendAuth.mProtocol, hostName, sendAuth.mPort, sendAuth.mFlags); 4221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity, when "next" button is clicked 4261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4271a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 4281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNext() { 429040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Account account = SetupData.getAccount(); 430040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 431040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy account.setDeletePolicy( 432040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy (Integer) ((SpinnerOption) mDeletePolicyView.getSelectedItem()).value); 4338d22e85e459df3d94968389852859dacaf2baafeAndy Stadler 434040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext); 435040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String userName = mUsernameView.getText().toString().trim(); 436040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String userPassword = mPasswordView.getText().toString(); 437040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy recvAuth.setLogin(userName, userPassword); 4388d22e85e459df3d94968389852859dacaf2baafeAndy Stadler 439040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String serverAddress = mServerView.getText().toString().trim(); 440040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int serverPort; 4411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 442040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy serverPort = Integer.parseInt(mPortView.getText().toString().trim()); 443040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } catch (NumberFormatException e) { 444040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy serverPort = getPortFromSecurityType(); 445040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Log.d(Logging.LOG_TAG, "Non-integer server port; using '" + serverPort + "'"); 4461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 447040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int securityType = (Integer) ((SpinnerOption) mSecurityTypeView.getSelectedItem()).value; 448040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy recvAuth.setConnection(mBaseScheme, serverAddress, serverPort, securityType); 449040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy recvAuth.mDomain = null; 450040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 451040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy // Check for a duplicate account (requires async DB work) and if OK, 452040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy // proceed with check 453040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy startDuplicateTaskCheck( 454040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy account.mId, serverAddress, mCacheLoginCredential, SetupData.CHECK_INCOMING); 4551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 456c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 457c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy @Override 458c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy public boolean haveSettingsChanged() { 459c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy boolean deletePolicyChanged = false; 460c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 461c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy // Only verify the delete policy if the control is visible (i.e. is a pop3 account) 462c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy if (mDeletePolicyView.getVisibility() == View.VISIBLE) { 463c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy int newDeletePolicy = 464c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy (Integer)((SpinnerOption)mDeletePolicyView.getSelectedItem()).value; 465c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy deletePolicyChanged = mLoadedDeletePolicy != newDeletePolicy; 466c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy } 467c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 468c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy return deletePolicyChanged || super.haveSettingsChanged(); 469c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy } 4701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler} 471