AccountSetupIncomingFragment.java revision 3432bdb757c4195fb4726c8b401f2261e78d75a7
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; 235125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komaloimport android.text.TextUtils; 241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.TextWatcher; 251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.method.DigitsKeyListener; 261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.util.Log; 271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.LayoutInflater; 281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.View; 291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.ViewGroup; 303432bdb757c4195fb4726c8b401f2261e78d75a7Ben Komaloimport android.view.inputmethod.EditorInfo; 311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.AdapterView; 321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.ArrayAdapter; 331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.EditText; 341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.Spinner; 351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.TextView; 361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3769111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.Email; 3869111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.R; 3969111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.activity.UiUtilities; 4069111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.provider.AccountBackupRestore; 4169111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.Logging; 42f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account; 4369111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.provider.HostAuth; 4469111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.utility.Utility; 4569111b1e19456c4e861b031da3b3b7f26893d664Marc Blank 46fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler/** 47fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * Provides UI for IMAP/POP account settings. 48fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * 49fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * This fragment is used by AccountSetupIncoming (for creating accounts) and by AccountSettingsXL 50fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * (for editing existing accounts). 51fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler */ 521a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadlerpublic class AccountSetupIncomingFragment extends AccountServerBaseFragment { 531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 541f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_CREDENTIAL = "AccountSetupIncomingFragment.credential"; 551f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_LOADED = "AccountSetupIncomingFragment.loaded"; 561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 57040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int POP3_PORT_NORMAL = 110; 58040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int POP3_PORT_SSL = 995; 59040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 60040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int IMAP_PORT_NORMAL = 143; 61040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private static final int IMAP_PORT_SSL = 993; 62040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mUsernameView; 641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mPasswordView; 651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mServerLabelView; 661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mServerView; 671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mPortView; 681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mSecurityTypeView; 691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mDeletePolicyLabelView; 701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mDeletePolicyView; 711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private View mImapPathPrefixSectionView; 721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mImapPathPrefixView; 73c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy // Delete policy as loaded from the device 74c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy private int mLoadedDeletePolicy; 751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Support for lifecycle 771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mStarted; 781f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private boolean mConfigured; 791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mLoaded; 801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private String mCacheLoginCredential; 811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called to do initial creation of a fragment. This is called after 841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * {@link #onAttach(Activity)} and before {@link #onActivityCreated(Bundle)}. 851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onCreate(Bundle savedInstanceState) { 88bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 8931d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onCreate"); 901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onCreate(savedInstanceState); 921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 93faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler if (savedInstanceState != null) { 94faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler mCacheLoginCredential = savedInstanceState.getString(STATE_KEY_CREDENTIAL); 951f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = savedInstanceState.getBoolean(STATE_KEY_LOADED, false); 96faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler } 971b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public View onCreateView(LayoutInflater inflater, ViewGroup container, 1011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Bundle savedInstanceState) { 102bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 10331d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onCreateView"); 1041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 105112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler int layoutId = mSettingsMode 106112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler ? R.layout.account_settings_incoming_fragment 107112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler : R.layout.account_setup_incoming_fragment; 108112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 109112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler View view = inflater.inflate(layoutId, container, false); 1101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Context context = getActivity(); 1111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1122fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mUsernameView = (EditText) UiUtilities.getView(view, R.id.account_username); 1132fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mPasswordView = (EditText) UiUtilities.getView(view, R.id.account_password); 1142fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mServerLabelView = (TextView) UiUtilities.getView(view, R.id.account_server_label); 1152fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mServerView = (EditText) UiUtilities.getView(view, R.id.account_server); 1162fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mPortView = (EditText) UiUtilities.getView(view, R.id.account_port); 1172fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mSecurityTypeView = (Spinner) UiUtilities.getView(view, R.id.account_security_type); 1182fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mDeletePolicyLabelView = (TextView) UiUtilities.getView(view, 1192fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki R.id.account_delete_policy_label); 1202fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mDeletePolicyView = (Spinner) UiUtilities.getView(view, R.id.account_delete_policy); 1212fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mImapPathPrefixSectionView = UiUtilities.getView(view, R.id.imap_path_prefix_section); 1222fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mImapPathPrefixView = (EditText) UiUtilities.getView(view, R.id.imap_path_prefix); 1231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set up spinners 1251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption securityTypes[] = { 126040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_NONE, context.getString( 127040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_none_label)), 128040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_SSL, context.getString( 129040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_ssl_label)), 130040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, context.getString( 131040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_ssl_trust_certificates_label)), 132040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_TLS, context.getString( 133040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_tls_label)), 134040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy new SpinnerOption(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, context.getString( 135040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy R.string.account_setup_incoming_security_tls_trust_certificates_label)), 1361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler SpinnerOption deletePolicies[] = { 1391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_NEVER, 1401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_never_label)), 1411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler new SpinnerOption(Account.DELETE_POLICY_ON_DELETE, 1421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler context.getString(R.string.account_setup_incoming_delete_policy_delete_label)), 1431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> securityTypesAdapter = new ArrayAdapter<SpinnerOption>(context, 1461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, securityTypes); 1471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler securityTypesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 1481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setAdapter(securityTypesAdapter); 1491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler ArrayAdapter<SpinnerOption> deletePoliciesAdapter = new ArrayAdapter<SpinnerOption>(context, 1511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_item, deletePolicies); 1521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler deletePoliciesAdapter.setDropDownViewResource( 1531b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler android.R.layout.simple_spinner_dropdown_item); 1541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mDeletePolicyView.setAdapter(deletePoliciesAdapter); 1551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Updates the port when the user changes the security type. This allows 1571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // us to show a reasonable default which the user can change. 1581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 1591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 1601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler updatePortFromSecurityType(); 1611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNothingSelected(AdapterView<?> arg0) { } 1641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }); 1651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // After any text edits, call validateFields() which enables or disables the Next button 1671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler TextWatcher validationTextWatcher = new TextWatcher() { 1681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void afterTextChanged(Editable s) { 1691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 1701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 1731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onTextChanged(CharSequence s, int start, int before, int count) { } 1741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 175206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy // We're editing an existing account; don't allow modification of the user name 176206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy if (mSettingsMode) { 177206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy makeTextViewUneditable(mUsernameView, 178206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy getString(R.string.account_setup_username_uneditable_error)); 179206109cf44e27e90e4a5208daa289704aa451198Todd Kennedy } 1801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mUsernameView.addTextChangedListener(validationTextWatcher); 1811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPasswordView.addTextChangedListener(validationTextWatcher); 1821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mServerView.addTextChangedListener(validationTextWatcher); 1831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.addTextChangedListener(validationTextWatcher); 1841b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Only allow digits in the port field. 1861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setKeyListener(DigitsKeyListener.getInstance("0123456789")); 1871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 188112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler // Additional setup only used while in "settings" mode 189112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler onCreateViewSettingsMode(view); 190112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 1911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return view; 1921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1931b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onActivityCreated(Bundle savedInstanceState) { 196bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 19731d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onActivityCreated"); 1981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1991b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onActivityCreated(savedInstanceState); 2001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is visible to the user. 2041b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2051b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2061b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStart() { 207bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 20831d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onStart"); 2091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStart(); 2111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = true; 2121f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler configureEditor(); 2131f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler loadSettings(); 2141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is visible to the user and actively running. 2181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onResume() { 221bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 22231d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onResume"); 2231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onResume(); 2251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 2261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onPause() { 230bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 23131d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onPause"); 2321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onPause(); 2341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the Fragment is no longer started. 2381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2391b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onStop() { 241bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 24231d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onStop"); 2431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onStop(); 2451b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mStarted = false; 2461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2491b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is no longer in use. 2501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onDestroy() { 253bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 25431d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onDestroy"); 2551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onDestroy(); 2571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2581b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onSaveInstanceState(Bundle outState) { 261bfac9f2e8a13f6c719608a6948203bbef921c99fMakoto Onuki if (Logging.DEBUG_LIFECYCLE && Email.DEBUG) { 26231d9acbf0623872f9d4a2b3210b5970854b654c7Marc Blank Log.d(Logging.LOG_TAG, "AccountSetupIncomingFragment onSaveInstanceState"); 2631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onSaveInstanceState(outState); 2651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler outState.putString(STATE_KEY_CREDENTIAL, mCacheLoginCredential); 2671f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler outState.putBoolean(STATE_KEY_LOADED, mLoaded); 2681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Activity provides callbacks here. This also triggers loading and setting up the UX 2721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2731a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 2741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void setCallback(Callback callback) { 2751a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler super.setCallback(callback); 2761f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mStarted) { 2771f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler configureEditor(); 2781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler loadSettings(); 2791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2831f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler * Configure the editor for the account type 2841f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler */ 2851f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private void configureEditor() { 2861f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mConfigured) return; 2871f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler Account account = SetupData.getAccount(); 2883432bdb757c4195fb4726c8b401f2261e78d75a7Ben Komalo TextView lastView = mImapPathPrefixView; 289040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mBaseScheme = account.mHostAuthRecv.mProtocol; 2906fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank if (HostAuth.SCHEME_POP3.equals(mBaseScheme)) { 2911f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mServerLabelView.setText(R.string.account_setup_incoming_pop_server_label); 2927667632eb24653ef208261651298996f5fdf6911Jorge Lugo mServerView.setContentDescription( 2937667632eb24653ef208261651298996f5fdf6911Jorge Lugo getResources().getString(R.string.account_setup_incoming_pop_server_label)); 2941f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mImapPathPrefixSectionView.setVisibility(View.GONE); 2953432bdb757c4195fb4726c8b401f2261e78d75a7Ben Komalo lastView = mPortView; 2966fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank } else if (HostAuth.SCHEME_IMAP.equals(mBaseScheme)) { 2971f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mServerLabelView.setText(R.string.account_setup_incoming_imap_server_label); 2987667632eb24653ef208261651298996f5fdf6911Jorge Lugo mServerView.setContentDescription( 2997667632eb24653ef208261651298996f5fdf6911Jorge Lugo getResources().getString(R.string.account_setup_incoming_imap_server_label)); 3001f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyLabelView.setVisibility(View.GONE); 3011f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyView.setVisibility(View.GONE); 3023432bdb757c4195fb4726c8b401f2261e78d75a7Ben Komalo mPortView.setImeOptions(EditorInfo.IME_ACTION_NEXT); 3031f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } else { 3041f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler throw new Error("Unknown account type: " + account); 3051f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 3063432bdb757c4195fb4726c8b401f2261e78d75a7Ben Komalo lastView.setOnEditorActionListener(mDismissImeOnDoneListener); 3071f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mConfigured = true; 3081f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 3091f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler 3101f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler /** 3111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Load the current settings into the UI 3121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void loadSettings() { 3141f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mLoaded) return; 3151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 316040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Account account = SetupData.getAccount(); 317040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext); 3181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 319040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String username = recvAuth.mLogin; 320040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (username != null) { 321040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mUsernameView.setText(username); 322040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 323040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String password = recvAuth.mPassword; 324040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (password != null) { 325040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPasswordView.setText(password); 326cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo // Since username is uneditable, focus on the next editable field 327cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo if (mSettingsMode) { 328cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo mPasswordView.requestFocus(); 329cf194df05c31045ec734ace84ce2b739639bf12eJorge Lugo } 330040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3326fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank if (HostAuth.SCHEME_IMAP.equals(recvAuth.mProtocol)) { 333040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String prefix = recvAuth.mDomain; 334040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (prefix != null && prefix.length() > 0) { 335040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mImapPathPrefixView.setText(prefix.substring(1)); 3361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3376fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank } else if (!HostAuth.SCHEME_POP3.equals(recvAuth.mProtocol)) { 3388c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // Account must either be IMAP or POP3 33985e4c101b014857fe40f87c3837b82564cfc5b6cMarc Blank throw new Error("Unknown account type: " + recvAuth.mProtocol); 340040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3428c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // The delete policy is set for all legacy accounts. For POP3 accounts, the user sets 3438c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // the policy explicitly. For IMAP accounts, the policy is set when the Account object 3448c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // is created. @see AccountSetupBasics#populateSetupData 3458c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy mLoadedDeletePolicy = account.getDeletePolicy(); 3468c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy SpinnerOption.setSpinnerOptionValue(mDeletePolicyView, mLoadedDeletePolicy); 3478c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy 348040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int flags = recvAuth.mFlags; 349040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy flags &= ~HostAuth.FLAG_AUTHENTICATE; 350040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, flags); 3511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 352040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String hostname = recvAuth.mAddress; 353040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (hostname != null) { 354040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mServerView.setText(hostname); 355040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 357040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int port = recvAuth.mPort; 358040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (port != HostAuth.PORT_UNKNOWN) { 359040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPortView.setText(Integer.toString(port)); 360040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } else { 361040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy updatePortFromSecurityType(); 3621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 363c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 364fe68c0e7c2672e09076038b36ad24f095633d313Todd Kennedy mLoadedRecvAuth = recvAuth; 3651f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = true; 3661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 3671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3691b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Check the values in the fields and decide if it makes sense to enable the "next" button 3711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void validateFields() { 3731f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (!mConfigured || !mLoaded) return; 3741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler boolean enabled = Utility.isTextViewNotEmpty(mUsernameView) 3751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isTextViewNotEmpty(mPasswordView) 376ce4cce05b2ee5ea2d9629c189a79f7f30778f534Makoto Onuki && Utility.isServerNameValid(mServerView) 3771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler && Utility.isPortFieldValid(mPortView); 3781a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler enableNextButton(enabled); 379858c2822777f74947e81476125590ad06bfe4803Andy Stadler 38069111b1e19456c4e861b031da3b3b7f26893d664Marc Blank String userName = mUsernameView.getText().toString().trim(); 38169111b1e19456c4e861b031da3b3b7f26893d664Marc Blank mCacheLoginCredential = userName; 38269111b1e19456c4e861b031da3b3b7f26893d664Marc Blank 383858c2822777f74947e81476125590ad06bfe4803Andy Stadler // Warn (but don't prevent) if password has leading/trailing spaces 384858c2822777f74947e81476125590ad06bfe4803Andy Stadler AccountSettingsUtils.checkPasswordSpaces(mContext, mPasswordView); 3851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 387040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private int getPortFromSecurityType() { 3881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value; 389040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy boolean useSsl = ((securityType & HostAuth.FLAG_SSL) != 0); 390040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int port = useSsl ? IMAP_PORT_SSL : IMAP_PORT_NORMAL; // default to IMAP 3916fea021e3dbe71aaa93512aba699d1bfda3d520dMarc Blank if (HostAuth.SCHEME_POP3.equals(mBaseScheme)) { 392040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy port = useSsl ? POP3_PORT_SSL : POP3_PORT_NORMAL; 393040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 394040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy return port; 395040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 396040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 397040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private void updatePortFromSecurityType() { 398040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int port = getPortFromSecurityType(); 399040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPortView.setText(Integer.toString(port)); 4001b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4011b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after editing settings and verifying them. Must be FLOW_MODE_EDIT. 4046e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * Note, we update account here (as well as the account.mHostAuthRecv) because we edit 4056e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * account's delete policy here. 4066e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * Blocking - do not call from UI Thread. 4071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4081a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 4091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterEdit() { 4106e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler Account account = SetupData.getAccount(); 4116e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler account.update(mContext, account.toContentValues()); 4126e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler account.mHostAuthRecv.update(mContext, account.mHostAuthRecv.toContentValues()); 4131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Update the backup (side copy) of the accounts 4140993190cafebc107bd27a26996b5d63d4a4ede10Marc Blank AccountBackupRestore.backup(mContext); 4151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after entering new settings and verifying them. For setup mode. 4191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 420fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler @Override 4211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void saveSettingsAfterSetup() { 422040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Account account = SetupData.getAccount(); 423040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext); 424040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth sendAuth = account.getOrCreateHostAuthSend(mContext); 4251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set the username and password for the outgoing settings to the username and 427ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // password the user just set for incoming. Use the verified host address to try and 428ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // pick a smarter outgoing address. 429040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String hostName = AccountSettingsUtils.inferServerName(recvAuth.mAddress, null, "smtp"); 430040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy sendAuth.setLogin(recvAuth.mLogin, recvAuth.mPassword); 431040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy sendAuth.setConnection(sendAuth.mProtocol, hostName, sendAuth.mPort, sendAuth.mFlags); 4321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity, when "next" button is clicked 4361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4371a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 4381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNext() { 439040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Account account = SetupData.getAccount(); 440040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 44181a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank // Make sure delete policy is an valid option before using it; otherwise, the results are 44281a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank // indeterminate, I suspect... 44381a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank if (mDeletePolicyView.getVisibility() == View.VISIBLE) { 44481a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank account.setDeletePolicy( 44581a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank (Integer) ((SpinnerOption) mDeletePolicyView.getSelectedItem()).value); 44681a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank } 4478d22e85e459df3d94968389852859dacaf2baafeAndy Stadler 448040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext); 449040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String userName = mUsernameView.getText().toString().trim(); 450040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String userPassword = mPasswordView.getText().toString(); 451040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy recvAuth.setLogin(userName, userPassword); 4528d22e85e459df3d94968389852859dacaf2baafeAndy Stadler 453040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy String serverAddress = mServerView.getText().toString().trim(); 454040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int serverPort; 4551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 456040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy serverPort = Integer.parseInt(mPortView.getText().toString().trim()); 457040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } catch (NumberFormatException e) { 458040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy serverPort = getPortFromSecurityType(); 459040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy Log.d(Logging.LOG_TAG, "Non-integer server port; using '" + serverPort + "'"); 4601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 461040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int securityType = (Integer) ((SpinnerOption) mSecurityTypeView.getSelectedItem()).value; 462040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy recvAuth.setConnection(mBaseScheme, serverAddress, serverPort, securityType); 4635125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo if (HostAuth.SCHEME_IMAP.equals(recvAuth.mProtocol)) { 4645125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo String prefix = mImapPathPrefixView.getText().toString().trim(); 4655125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo recvAuth.mDomain = TextUtils.isEmpty(prefix) ? null : ("/" + prefix); 4665125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo } else { 4675125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo recvAuth.mDomain = null; 4685125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo } 469040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 470040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy // Check for a duplicate account (requires async DB work) and if OK, 471040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy // proceed with check 472040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy startDuplicateTaskCheck( 473040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy account.mId, serverAddress, mCacheLoginCredential, SetupData.CHECK_INCOMING); 4741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 475c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 476c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy @Override 477c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy public boolean haveSettingsChanged() { 478c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy boolean deletePolicyChanged = false; 479c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 480c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy // Only verify the delete policy if the control is visible (i.e. is a pop3 account) 481c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy if (mDeletePolicyView.getVisibility() == View.VISIBLE) { 482c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy int newDeletePolicy = 483c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy (Integer)((SpinnerOption)mDeletePolicyView.getSelectedItem()).value; 484c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy deletePolicyChanged = mLoadedDeletePolicy != newDeletePolicy; 485c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy } 486c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 487c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy return deletePolicyChanged || super.haveSettingsChanged(); 488c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy } 4891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler} 490