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; 21d23fa61a014fc567592592eac629680764f042b5Martin Hibdonimport android.content.Intent; 2276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport android.content.Loader; 231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.os.Bundle; 24294593c5f592f4eec6994909cca60450936a0812Tony Mantlerimport android.os.Parcel; 251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.Editable; 265125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komaloimport android.text.TextUtils; 271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.TextWatcher; 281b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.text.method.DigitsKeyListener; 291b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.LayoutInflater; 301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.View; 311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.view.ViewGroup; 323432bdb757c4195fb4726c8b401f2261e78d75a7Ben Komaloimport android.view.inputmethod.EditorInfo; 331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.AdapterView; 341b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.ArrayAdapter; 351b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.EditText; 361b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.Spinner; 371b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadlerimport android.widget.TextView; 381b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3969111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.R; 4069111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.activity.UiUtilities; 4126ff609ebff3ef0f5ff841eb5d78c11edf8f0936Martin Hibdonimport com.android.email.activity.setup.AuthenticationView.AuthenticationCallback; 4269111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.email.provider.AccountBackupRestore; 43f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport com.android.email.service.EmailServiceUtils.EmailServiceInfo; 44719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdonimport com.android.email.view.CertificateSelector; 45719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdonimport com.android.email.view.CertificateSelector.HostCallback; 46719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdonimport com.android.emailcommon.Device; 479c0463e6b485b3b50d9c6f110a9ece650cd4a692Martin Hibdonimport com.android.emailcommon.VendorPolicyLoader; 48f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account; 4958fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdonimport com.android.emailcommon.provider.Credential; 5069111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.provider.HostAuth; 51d23fa61a014fc567592592eac629680764f042b5Martin Hibdonimport com.android.emailcommon.utility.CertificateRequestor; 5269111b1e19456c4e861b031da3b3b7f26893d664Marc Blankimport com.android.emailcommon.utility.Utility; 5376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantlerimport com.android.mail.ui.MailAsyncTaskLoader; 5428a344042d0f8353d2e5c15fe3951c1e0520f1b7Paul Westbrookimport com.android.mail.utils.LogUtils; 5569111b1e19456c4e861b031da3b3b7f26893d664Marc Blank 56719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdonimport java.io.IOException; 57f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankimport java.util.ArrayList; 589c0463e6b485b3b50d9c6f110a9ece650cd4a692Martin Hibdonimport java.util.List; 59f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 60fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler/** 61fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * Provides UI for IMAP/POP account settings. 62fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * 63fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * This fragment is used by AccountSetupIncoming (for creating accounts) and by AccountSettingsXL 64fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler * (for editing existing accounts). 65fd14496c494a0d38c35c3788c9cc55f1984592e4Andrew Stadler */ 66f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blankpublic class AccountSetupIncomingFragment extends AccountServerBaseFragment 67719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon implements HostCallback, AuthenticationCallback { 681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 69d23fa61a014fc567592592eac629680764f042b5Martin Hibdon private static final int CERTIFICATE_REQUEST = 0; 7058fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon private static final int SIGN_IN_REQUEST = 1; 71d23fa61a014fc567592592eac629680764f042b5Martin Hibdon 721f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_CREDENTIAL = "AccountSetupIncomingFragment.credential"; 731f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private final static String STATE_KEY_LOADED = "AccountSetupIncomingFragment.loaded"; 741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mUsernameView; 7626ff609ebff3ef0f5ff841eb5d78c11edf8f0936Martin Hibdon private AuthenticationView mAuthenticationView; 77719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon private TextView mAuthenticationLabel; 781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mServerLabelView; 791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mServerView; 801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mPortView; 811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mSecurityTypeView; 821b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private TextView mDeletePolicyLabelView; 831b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private Spinner mDeletePolicyView; 84719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon private CertificateSelector mClientCertificateSelector; 85719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon private View mDeviceIdSection; 861b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private View mImapPathPrefixSectionView; 871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private EditText mImapPathPrefixView; 889c0463e6b485b3b50d9c6f110a9ece650cd4a692Martin Hibdon private boolean mOAuthProviderPresent; 89c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy // Delete policy as loaded from the device 90c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy private int mLoadedDeletePolicy; 911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 92ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler private TextWatcher mValidationTextWatcher; 93ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler 941b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Support for lifecycle 951b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private boolean mLoaded; 961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private String mCacheLoginCredential; 97f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank private EmailServiceInfo mServiceInfo; 981b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 9976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public static AccountSetupIncomingFragment newInstance(boolean settingsMode) { 10076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final AccountSetupIncomingFragment f = new AccountSetupIncomingFragment(); 10176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler f.setArguments(getArgs(settingsMode)); 10276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler return f; 10376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 10476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 1057985b43ab7310f76c170266da346f993d2f86051Paul Westbrook // Public no-args constructor needed for fragment re-instantiation 1067985b43ab7310f76c170266da346f993d2f86051Paul Westbrook public AccountSetupIncomingFragment() {} 1077985b43ab7310f76c170266da346f993d2f86051Paul Westbrook 1081b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 1091b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called to do initial creation of a fragment. This is called after 1101b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * {@link #onAttach(Activity)} and before {@link #onActivityCreated(Bundle)}. 1111b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 1121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onCreate(Bundle savedInstanceState) { 1141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onCreate(savedInstanceState); 1151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 116faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler if (savedInstanceState != null) { 117faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler mCacheLoginCredential = savedInstanceState.getString(STATE_KEY_CREDENTIAL); 1181f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = savedInstanceState.getBoolean(STATE_KEY_LOADED, false); 119faaa115e1a52eda9e675f9da5982c7a52b382336Andrew Stadler } 1201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public View onCreateView(LayoutInflater inflater, ViewGroup container, 1241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler Bundle savedInstanceState) { 125ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler final View view; 126ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler if (mSettingsMode) { 127ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler view = inflater.inflate(R.layout.account_settings_incoming_fragment, container, false); 128ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } else { 129ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler view = inflateTemplatedView(inflater, container, 130ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler R.layout.account_setup_incoming_fragment, 131ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler R.string.account_setup_incoming_headline); 132ae980cd685a867b3fecfd38c876fd18d98b7c86bTony Mantler } 133219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler 134219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mUsernameView = UiUtilities.getView(view, R.id.account_username); 135219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mServerLabelView = UiUtilities.getView(view, R.id.account_server_label); 136219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mServerView = UiUtilities.getView(view, R.id.account_server); 137219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mPortView = UiUtilities.getView(view, R.id.account_port); 138219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mSecurityTypeView = UiUtilities.getView(view, R.id.account_security_type); 139219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mDeletePolicyLabelView = UiUtilities.getView(view, R.id.account_delete_policy_label); 140219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mDeletePolicyView = UiUtilities.getView(view, R.id.account_delete_policy); 1412fbb3db5d86210d03175ce77ff08c989a96c5864Makoto Onuki mImapPathPrefixSectionView = UiUtilities.getView(view, R.id.imap_path_prefix_section); 142219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mImapPathPrefixView = UiUtilities.getView(view, R.id.imap_path_prefix); 14326ff609ebff3ef0f5ff841eb5d78c11edf8f0936Martin Hibdon mAuthenticationView = UiUtilities.getView(view, R.id.authentication_view); 144719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mClientCertificateSelector = UiUtilities.getView(view, R.id.client_certificate_selector); 145719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mDeviceIdSection = UiUtilities.getView(view, R.id.device_id_section); 146719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon // Don't use UiUtilities here. In some configurations this view does not exist, and 147719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon // UiUtilities throws an exception in this case. 148719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mAuthenticationLabel = (TextView)view.findViewById(R.id.authentication_label); 149f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 1501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Updates the port when the user changes the security type. This allows 1511b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // us to show a reasonable default which the user can change. 1521b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mSecurityTypeView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 153560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 1541b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 1551b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler updatePortFromSecurityType(); 1561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1571b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 158560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 1591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onNothingSelected(AdapterView<?> arg0) { } 1601b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }); 1611b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1621b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // After any text edits, call validateFields() which enables or disables the Next button 163ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mValidationTextWatcher = new TextWatcher() { 164560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 1651b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void afterTextChanged(Editable s) { 1661b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 1671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1681b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 169560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 1701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 171560bfadc3151f7a06f3b06e9a6c92cfa534c63ecScott Kennedy @Override 1721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onTextChanged(CharSequence s, int start, int before, int count) { } 1731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler }; 1745da2f12dc5b180195f2849738bbce47fcd875d2dTony Mantler 175ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mUsernameView.addTextChangedListener(mValidationTextWatcher); 176ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mServerView.addTextChangedListener(mValidationTextWatcher); 177ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mPortView.addTextChangedListener(mValidationTextWatcher); 1781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Only allow digits in the port field. 1801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler mPortView.setKeyListener(DigitsKeyListener.getInstance("0123456789")); 1811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 182112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler // Additional setup only used while in "settings" mode 183112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler onCreateViewSettingsMode(view); 184112ed496f817ebeab6b1ee1d5117259ef80342b2Andy Stadler 18526ff609ebff3ef0f5ff841eb5d78c11edf8f0936Martin Hibdon mAuthenticationView.setAuthenticationCallback(this); 1869195a1202483053606f43e871915a5405e955306Martin Hibdon 1871b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler return view; 1881b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 1891b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 1901b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 1911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onActivityCreated(Bundle savedInstanceState) { 1921b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onActivityCreated(savedInstanceState); 193719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mClientCertificateSelector.setHostCallback(this); 19426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler 19526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Context context = getActivity(); 1969c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler final SetupDataFragment.SetupDataContainer container = 1979c8c471f971f9c8e40002503a0799ce56c5bfd76Tony Mantler (SetupDataFragment.SetupDataContainer) context; 19826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSetupData = container.getSetupData(); 1999195a1202483053606f43e871915a5405e955306Martin Hibdon final Account account = mSetupData.getAccount(); 20076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final HostAuth recvAuth = account.getOrCreateHostAuthRecv(mAppContext); 20176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 20276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler // Pre-fill info as appropriate 20376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler if (!mSetupData.isIncomingCredLoaded()) { 20476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler recvAuth.mLogin = mSetupData.getEmail(); 20576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler AccountSetupCredentialsFragment.populateHostAuthWithResults(context, recvAuth, 20676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler mSetupData.getCredentialResults()); 20776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final String[] emailParts = mSetupData.getEmail().split("@"); 20876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final String domain = emailParts[1]; 20976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler recvAuth.setConnection(recvAuth.mProtocol, domain, HostAuth.PORT_UNKNOWN, 21076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler HostAuth.FLAG_NONE); 21176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler mSetupData.setIncomingCredLoaded(true); 21276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 21376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 214064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler mServiceInfo = mSetupData.getIncomingServiceInfo(context); 21526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler 21626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler if (mServiceInfo.offerLocalDeletes) { 21726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler SpinnerOption deletePolicies[] = { 21826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new SpinnerOption(Account.DELETE_POLICY_NEVER, 21926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler context.getString( 22026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler R.string.account_setup_incoming_delete_policy_never_label)), 22126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new SpinnerOption(Account.DELETE_POLICY_ON_DELETE, 22226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler context.getString( 22326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler R.string.account_setup_incoming_delete_policy_delete_label)), 22426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler }; 22526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler ArrayAdapter<SpinnerOption> deletePoliciesAdapter = 22626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new ArrayAdapter<SpinnerOption>(context, 22726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler android.R.layout.simple_spinner_item, deletePolicies); 22826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler deletePoliciesAdapter.setDropDownViewResource( 22926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler android.R.layout.simple_spinner_dropdown_item); 23026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mDeletePolicyView.setAdapter(deletePoliciesAdapter); 23126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler } 23226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler 23326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler // Set up security type spinner 23426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler ArrayList<SpinnerOption> securityTypes = new ArrayList<SpinnerOption>(); 23526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler securityTypes.add( 23626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new SpinnerOption(HostAuth.FLAG_NONE, context.getString( 23726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler R.string.account_setup_incoming_security_none_label))); 23826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler securityTypes.add( 23926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new SpinnerOption(HostAuth.FLAG_SSL, context.getString( 24026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler R.string.account_setup_incoming_security_ssl_label))); 24126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler securityTypes.add( 24226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new SpinnerOption(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, context.getString( 24326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler R.string.account_setup_incoming_security_ssl_trust_certificates_label))); 24426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler if (mServiceInfo.offerTls) { 24526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler securityTypes.add( 24626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler new SpinnerOption(HostAuth.FLAG_TLS, context.getString( 24726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler R.string.account_setup_incoming_security_tls_label))); 24826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler securityTypes.add(new SpinnerOption(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, 24926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler context.getString(R.string 25026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler .account_setup_incoming_security_tls_trust_certificates_label))); 25126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler } 25226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler ArrayAdapter<SpinnerOption> securityTypesAdapter = new ArrayAdapter<SpinnerOption>( 25326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler context, android.R.layout.simple_spinner_item, securityTypes); 25426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler securityTypesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 25526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler mSecurityTypeView.setAdapter(securityTypesAdapter); 2561b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2571f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler configureEditor(); 2581f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler loadSettings(); 259606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon 260606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon final List<VendorPolicyLoader.OAuthProvider> oauthProviders = 261606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon AccountSettingsUtils.getAllOAuthProviders(getActivity()); 262606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon final boolean offerOAuth = (mServiceInfo.offerOAuth && oauthProviders.size() > 0); 263606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon if (mAuthenticationLabel != null) { 264606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon if (offerOAuth) { 265606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon mAuthenticationLabel.setText(R.string.authentication_label); 266606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon } else { 267606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon mAuthenticationLabel.setText(R.string.account_setup_basics_password_label); 268606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon } 269606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon } 2701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2711b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 2731b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Called when the fragment is visible to the user and actively running. 2741b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 2751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 2761b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onResume() { 2771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onResume(); 2781b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 2791b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 2801b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 2811b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 282ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler public void onDestroyView() { 283ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler // Make sure we don't get callbacks after the views are supposed to be destroyed 284ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler // and also don't hold onto them longer than we need 285ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler if (mUsernameView != null) { 286ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mUsernameView.removeTextChangedListener(mValidationTextWatcher); 287ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler } 288ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mUsernameView = null; 289ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mServerLabelView = null; 290ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler if (mServerView != null) { 291ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mServerView.removeTextChangedListener(mValidationTextWatcher); 292ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler } 293ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mServerView = null; 294ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler if (mPortView != null) { 295ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mPortView.removeTextChangedListener(mValidationTextWatcher); 296ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler } 297ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mPortView = null; 298ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler if (mSecurityTypeView != null) { 299ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mSecurityTypeView.setOnItemSelectedListener(null); 300ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler } 301ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mSecurityTypeView = null; 302ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mDeletePolicyLabelView = null; 303ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mDeletePolicyView = null; 304ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mImapPathPrefixSectionView = null; 305ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler mImapPathPrefixView = null; 306719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mDeviceIdSection = null; 307719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mClientCertificateSelector = null; 308ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler 309ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler super.onDestroyView(); 310ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler } 311ecac654c6666072d3ed9627f0524fa46ea8c03fcTony Mantler 3121b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler @Override 3131b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler public void onSaveInstanceState(Bundle outState) { 3141b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler super.onSaveInstanceState(outState); 3151b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler outState.putString(STATE_KEY_CREDENTIAL, mCacheLoginCredential); 3171f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler outState.putBoolean(STATE_KEY_LOADED, mLoaded); 3181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 3191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 3211f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler * Configure the editor for the account type 3221f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler */ 3231f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler private void configureEditor() { 32426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Account account = mSetupData.getAccount(); 32528a344042d0f8353d2e5c15fe3951c1e0520f1b7Paul Westbrook if (account == null || account.mHostAuthRecv == null) { 32676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler LogUtils.e(LogUtils.TAG, 32728a344042d0f8353d2e5c15fe3951c1e0520f1b7Paul Westbrook "null account or host auth. account null: %b host auth null: %b", 32828a344042d0f8353d2e5c15fe3951c1e0520f1b7Paul Westbrook account == null, account == null || account.mHostAuthRecv == null); 329ceca4751b26b5da91cd8b2038a679be214d3b7dbMindy Pereira return; 330ceca4751b26b5da91cd8b2038a679be214d3b7dbMindy Pereira } 331040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mBaseScheme = account.mHostAuthRecv.mProtocol; 332f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank mServerLabelView.setText(R.string.account_setup_incoming_server_label); 333f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank mServerView.setContentDescription(getResources().getText( 334f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank R.string.account_setup_incoming_server_label)); 335f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (!mServiceInfo.offerPrefix) { 3361f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mImapPathPrefixSectionView.setVisibility(View.GONE); 337f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 338f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (!mServiceInfo.offerLocalDeletes) { 3391f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyLabelView.setVisibility(View.GONE); 3401f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mDeletePolicyView.setVisibility(View.GONE); 3413432bdb757c4195fb4726c8b401f2261e78d75a7Ben Komalo mPortView.setImeOptions(EditorInfo.IME_ACTION_NEXT); 3421f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 3431f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler } 3441f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler 3451f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler /** 3461b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Load the current settings into the UI 3471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 3481b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void loadSettings() { 3491f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler if (mLoaded) return; 3501b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 35126cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Account account = mSetupData.getAccount(); 35276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final HostAuth recvAuth = account.getOrCreateHostAuthRecv(mAppContext); 353064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler mServiceInfo = mSetupData.getIncomingServiceInfo(getActivity()); 3549c0463e6b485b3b50d9c6f110a9ece650cd4a692Martin Hibdon final List<VendorPolicyLoader.OAuthProvider> oauthProviders = 3559c0463e6b485b3b50d9c6f110a9ece650cd4a692Martin Hibdon AccountSettingsUtils.getAllOAuthProviders(getActivity()); 3569c0463e6b485b3b50d9c6f110a9ece650cd4a692Martin Hibdon 357606213ea022c75e156249c37d4374e8ceb4d2340Martin Hibdon final boolean offerOAuth = (mServiceInfo.offerOAuth && oauthProviders.size() > 0); 3589c0463e6b485b3b50d9c6f110a9ece650cd4a692Martin Hibdon mAuthenticationView.setAuthInfo(offerOAuth, recvAuth); 3591b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 36026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final String username = recvAuth.mLogin; 361040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (username != null) { 362f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank //*** For eas? 363f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank // Add a backslash to the start of the username, but only if the username has no 364f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank // backslash in it. 365f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank //if (userName.indexOf('\\') < 0) { 366f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank // userName = "\\" + userName; 367f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank //} 368040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mUsernameView.setText(username); 369040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3701b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 371f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (mServiceInfo.offerPrefix) { 37226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final String prefix = recvAuth.mDomain; 373040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (prefix != null && prefix.length() > 0) { 374040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mImapPathPrefixView.setText(prefix.substring(1)); 3751b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 376040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3771b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 3788c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // The delete policy is set for all legacy accounts. For POP3 accounts, the user sets 3798c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // the policy explicitly. For IMAP accounts, the policy is set when the Account object 3808c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy // is created. @see AccountSetupBasics#populateSetupData 3818c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy mLoadedDeletePolicy = account.getDeletePolicy(); 3828c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy SpinnerOption.setSpinnerOptionValue(mDeletePolicyView, mLoadedDeletePolicy); 3838c89674b64f6669fa94bf593abad0f1e2255a812Todd Kennedy 384040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int flags = recvAuth.mFlags; 385f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (mServiceInfo.defaultSsl) { 386f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank flags |= HostAuth.FLAG_SSL; 387f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 38858fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon // Strip out any flags that are not related to security type. 38976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler int securityTypeFlags = (flags & HostAuth.FLAG_TRANSPORTSECURITY_MASK); 39058fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, securityTypeFlags); 3911b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 39226cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final String hostname = recvAuth.mAddress; 393040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (hostname != null) { 394040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mServerView.setText(hostname); 395040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 3961b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 39726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final int port = recvAuth.mPort; 398040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy if (port != HostAuth.PORT_UNKNOWN) { 399040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPortView.setText(Integer.toString(port)); 400040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } else { 401040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy updatePortFromSecurityType(); 4021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 403c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 404f1789afa535b113047ef20623d79fdfb257537aaTony Mantler if (!TextUtils.isEmpty(recvAuth.mClientCertAlias)) { 4056ecdc1845778367f3c72d8f31cc63026539004d7Tony Mantler mClientCertificateSelector.setCertificate(recvAuth.mClientCertAlias); 4066ecdc1845778367f3c72d8f31cc63026539004d7Tony Mantler } 4076ecdc1845778367f3c72d8f31cc63026539004d7Tony Mantler 408294593c5f592f4eec6994909cca60450936a0812Tony Mantler // Make a deep copy of the HostAuth to compare with later 409294593c5f592f4eec6994909cca60450936a0812Tony Mantler final Parcel parcel = Parcel.obtain(); 410294593c5f592f4eec6994909cca60450936a0812Tony Mantler parcel.writeParcelable(recvAuth, recvAuth.describeContents()); 411294593c5f592f4eec6994909cca60450936a0812Tony Mantler parcel.setDataPosition(0); 412294593c5f592f4eec6994909cca60450936a0812Tony Mantler mLoadedRecvAuth = parcel.readParcelable(HostAuth.class.getClassLoader()); 413294593c5f592f4eec6994909cca60450936a0812Tony Mantler parcel.recycle(); 414294593c5f592f4eec6994909cca60450936a0812Tony Mantler 4151f3e117951e5ffe97a30bdd61c1cf99759f15406Andy Stadler mLoaded = true; 4161b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler validateFields(); 4171b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4181b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 4191b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 4201b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Check the values in the fields and decide if it makes sense to enable the "next" button 4211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 4221b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler private void validateFields() { 423f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (!mLoaded) return; 42426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler enableNextButton(!TextUtils.isEmpty(mUsernameView.getText()) 42526ff609ebff3ef0f5ff841eb5d78c11edf8f0936Martin Hibdon && mAuthenticationView.getAuthValid() 426ce4cce05b2ee5ea2d9629c189a79f7f30778f534Makoto Onuki && Utility.isServerNameValid(mServerView) 42726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler && Utility.isPortFieldValid(mPortView)); 428858c2822777f74947e81476125590ad06bfe4803Andy Stadler 429219c3b5b8474bc0b95a9dcab21067ff603fccb15Tony Mantler mCacheLoginCredential = mUsernameView.getText().toString().trim(); 4301b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4311b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 432f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank private int getPortFromSecurityType(boolean useSsl) { 433064726d9f9fb7c38a252fc9c4fe2b7cf645eade0Tony Mantler return useSsl ? mServiceInfo.portSsl : mServiceInfo.port; 434f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 435f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 436f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank private boolean getSslSelected() { 43726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final int securityType = 43826cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value; 439f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank return ((securityType & HostAuth.FLAG_SSL) != 0); 440f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 441f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 442f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank public void onUseSslChanged(boolean useSsl) { 443719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon if (mServiceInfo.offerCerts) { 444719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon final int mode = useSsl ? View.VISIBLE : View.GONE; 445719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mClientCertificateSelector.setVisibility(mode); 446719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon String deviceId = ""; 447719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon try { 44876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler deviceId = Device.getDeviceId(mAppContext); 449719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon } catch (IOException e) { 450719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon // Not required 451719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon } 452719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon ((TextView) UiUtilities.getView(getView(), R.id.device_id)).setText(deviceId); 453719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon 454719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mDeviceIdSection.setVisibility(mode); 455719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon } 456040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } 457040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 458040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy private void updatePortFromSecurityType() { 45926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final boolean sslSelected = getSslSelected(); 46026cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final int port = getPortFromSecurityType(sslSelected); 461040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy mPortView.setText(Integer.toString(port)); 462f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank onUseSslChanged(sslSelected); 4631b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 4641b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 465c83366c88770f336a8e9976af42389c616de0b62Tony Mantler @Override 466c83366c88770f336a8e9976af42389c616de0b62Tony Mantler public void saveSettings() { 467c83366c88770f336a8e9976af42389c616de0b62Tony Mantler // Reset this here so we don't get stuck on this screen 468c83366c88770f336a8e9976af42389c616de0b62Tony Mantler mLoadedDeletePolicy = mSetupData.getAccount().getDeletePolicy(); 469c83366c88770f336a8e9976af42389c616de0b62Tony Mantler super.saveSettings(); 470c83366c88770f336a8e9976af42389c616de0b62Tony Mantler } 471c83366c88770f336a8e9976af42389c616de0b62Tony Mantler 47276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler private static class SaveSettingsLoader extends MailAsyncTaskLoader<Boolean> { 47376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler private final SetupDataFragment mSetupData; 47476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler private final boolean mSettingsMode; 47576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 47676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler private SaveSettingsLoader(Context context, SetupDataFragment setupData, 47776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler boolean settingsMode) { 47876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler super(context); 47976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler mSetupData = setupData; 48076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler mSettingsMode = settingsMode; 48176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 48276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 48376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler @Override 48476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public Boolean loadInBackground() { 48576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler if (mSettingsMode) { 48676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler saveSettingsAfterEdit(getContext(), mSetupData); 48776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } else { 48876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler saveSettingsAfterSetup(getContext(), mSetupData); 48976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 49076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler return true; 49176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 49276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 49376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler @Override 49476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler protected void onDiscardResult(Boolean result) {} 49576472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 49676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 49776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler @Override 49876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public Loader<Boolean> getSaveSettingsLoader() { 49976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler return new SaveSettingsLoader(mAppContext, mSetupData, mSettingsMode); 50076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler } 50176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler 5021b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 5031b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after editing settings and verifying them. Must be FLOW_MODE_EDIT. 5046e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * Note, we update account here (as well as the account.mHostAuthRecv) because we edit 5056e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * account's delete policy here. 5066e71978ec38add2edf3ac5f3dd1f9abeea9c1ab6Andy Stadler * Blocking - do not call from UI Thread. 5071b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 50876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public static void saveSettingsAfterEdit(Context context, SetupDataFragment setupData) { 50976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final Account account = setupData.getAccount(); 51076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler account.update(context, account.toContentValues()); 51158fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon final Credential cred = account.mHostAuthRecv.mCredential; 51258fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon if (cred != null) { 51358fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon if (cred.isSaved()) { 51476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler cred.update(context, cred.toContentValues()); 51558fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon } else { 51676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler cred.save(context); 51758fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon account.mHostAuthRecv.mCredentialKey = cred.mId; 51858fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon } 51958fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon } 52076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler account.mHostAuthRecv.update(context, account.mHostAuthRecv.toContentValues()); 5211b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Update the backup (side copy) of the accounts 52276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler AccountBackupRestore.backup(context); 5231b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 5241b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 5251b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 5261b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity after entering new settings and verifying them. For setup mode. 5271b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 52876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler public static void saveSettingsAfterSetup(Context context, SetupDataFragment setupData) { 52976472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final Account account = setupData.getAccount(); 53076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final HostAuth recvAuth = account.getOrCreateHostAuthRecv(context); 53176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final HostAuth sendAuth = account.getOrCreateHostAuthSend(context); 5321b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 5331b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler // Set the username and password for the outgoing settings to the username and 534ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // password the user just set for incoming. Use the verified host address to try and 535ba4e72a9474bcbe33a8001a1964a02cb41ea08bbAndy Stadler // pick a smarter outgoing address. 53626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final String hostName = 53776472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler AccountSettingsUtils.inferServerName(context, recvAuth.mAddress, null, "smtp"); 538040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy sendAuth.setLogin(recvAuth.mLogin, recvAuth.mPassword); 539040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy sendAuth.setConnection(sendAuth.mProtocol, hostName, sendAuth.mPort, sendAuth.mFlags); 5401b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 5411b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler 5421b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler /** 5431b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler * Entry point from Activity, when "next" button is clicked 5441b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler */ 5451a5e1e159352f6e21bde878eebca3e3a1896045cAndrew Stadler @Override 546294593c5f592f4eec6994909cca60450936a0812Tony Mantler public int collectUserInputInternal() { 54726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final Account account = mSetupData.getAccount(); 548040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 54981a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank // Make sure delete policy is an valid option before using it; otherwise, the results are 55081a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank // indeterminate, I suspect... 55181a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank if (mDeletePolicyView.getVisibility() == View.VISIBLE) { 55281a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank account.setDeletePolicy( 55381a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank (Integer) ((SpinnerOption) mDeletePolicyView.getSelectedItem()).value); 55481a5ba47c67c75e92772bf8adb04a5361fc79b91Marc Blank } 5558d22e85e459df3d94968389852859dacaf2baafeAndy Stadler 55676472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final HostAuth recvAuth = account.getOrCreateHostAuthRecv(mAppContext); 55726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final String userName = mUsernameView.getText().toString().trim(); 55876472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final String userPassword = mAuthenticationView.getPassword(); 559040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy recvAuth.setLogin(userName, userPassword); 56058fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon if (!TextUtils.isEmpty(mAuthenticationView.getOAuthProvider())) { 56158fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon Credential cred = recvAuth.getOrCreateCredential(getActivity()); 56258fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon cred.mProviderId = mAuthenticationView.getOAuthProvider(); 56358fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon } 5648d22e85e459df3d94968389852859dacaf2baafeAndy Stadler 56526cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final String serverAddress = mServerView.getText().toString().trim(); 566040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy int serverPort; 5671b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler try { 568040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy serverPort = Integer.parseInt(mPortView.getText().toString().trim()); 569040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy } catch (NumberFormatException e) { 570f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank serverPort = getPortFromSecurityType(getSslSelected()); 57176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler LogUtils.d(LogUtils.TAG, "Non-integer server port; using '" + serverPort + "'"); 5721b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 57326cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final int securityType = 57426cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler (Integer) ((SpinnerOption) mSecurityTypeView.getSelectedItem()).value; 575040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy recvAuth.setConnection(mBaseScheme, serverAddress, serverPort, securityType); 576f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank if (mServiceInfo.offerPrefix) { 57726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final String prefix = mImapPathPrefixView.getText().toString().trim(); 5785125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo recvAuth.mDomain = TextUtils.isEmpty(prefix) ? null : ("/" + prefix); 5795125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo } else { 5805125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo recvAuth.mDomain = null; 5815125c06cef67447a0ef5881d8fbfd6b73e1dfd0aBen Komalo } 582719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon recvAuth.mClientCertAlias = mClientCertificateSelector.getCertificate(); 583040ddf60cfef4aaecf4bfe1f897fce3248d777a4Todd Kennedy 584294593c5f592f4eec6994909cca60450936a0812Tony Mantler return SetupDataFragment.CHECK_INCOMING; 5851b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler } 586c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 587c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy @Override 588c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy public boolean haveSettingsChanged() { 58926cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler final boolean deletePolicyChanged; 590c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 591c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy // Only verify the delete policy if the control is visible (i.e. is a pop3 account) 592648a067056db91d4a1bfd3c4eac9eec3d4c6adb4Tony Mantler if (mDeletePolicyView != null && mDeletePolicyView.getVisibility() == View.VISIBLE) { 593c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy int newDeletePolicy = 594c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy (Integer)((SpinnerOption)mDeletePolicyView.getSelectedItem()).value; 595c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy deletePolicyChanged = mLoadedDeletePolicy != newDeletePolicy; 59626cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler } else { 59726cd5e024c6af8ff9c8558325dd0930c9aacb370Tony Mantler deletePolicyChanged = false; 598c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy } 599c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy 600c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy return deletePolicyChanged || super.haveSettingsChanged(); 601c890a4e4a2cbb489aea4847cf25368a723586530Todd Kennedy } 602f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank 603f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank @Override 6049195a1202483053606f43e871915a5405e955306Martin Hibdon public void onValidateStateChanged() { 6059195a1202483053606f43e871915a5405e955306Martin Hibdon validateFields(); 606f419287f22ae44f25e1ba1f757ec33c7941bbfa8Marc Blank } 607d23fa61a014fc567592592eac629680764f042b5Martin Hibdon 60858fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon @Override 60958fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon public void onRequestSignIn() { 61076472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler // Launch the credentials activity. 61176472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final String protocol = 61276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler mSetupData.getAccount().getOrCreateHostAuthRecv(mAppContext).mProtocol; 61376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler final Intent intent = AccountCredentials.getAccountCredentialsIntent(getActivity(), 61476472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler mUsernameView.getText().toString(), protocol); 61558fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon startActivityForResult(intent, SIGN_IN_REQUEST); 61658fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon } 617d23fa61a014fc567592592eac629680764f042b5Martin Hibdon 618d23fa61a014fc567592592eac629680764f042b5Martin Hibdon @Override 619d23fa61a014fc567592592eac629680764f042b5Martin Hibdon public void onCertificateRequested() { 620f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler final Intent intent = new Intent(getString(R.string.intent_exchange_cert_action)); 621f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler intent.setData(CertificateRequestor.CERTIFICATE_REQUEST_URI); 622f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler intent.putExtra(CertificateRequestor.EXTRA_HOST, mServerView.getText().toString().trim()); 623f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler try { 624f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler intent.putExtra(CertificateRequestor.EXTRA_PORT, 625f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler Integer.parseInt(mPortView.getText().toString().trim())); 626f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler } catch (final NumberFormatException e) { 627f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler LogUtils.d(LogUtils.TAG, "Couldn't parse port %s", mPortView.getText()); 628f765f9b976222a8a0e45d4b04883566ecf355937Tony Mantler } 629d23fa61a014fc567592592eac629680764f042b5Martin Hibdon startActivityForResult(intent, CERTIFICATE_REQUEST); 630d23fa61a014fc567592592eac629680764f042b5Martin Hibdon } 631d23fa61a014fc567592592eac629680764f042b5Martin Hibdon 632d23fa61a014fc567592592eac629680764f042b5Martin Hibdon @Override 633d23fa61a014fc567592592eac629680764f042b5Martin Hibdon public void onActivityResult(int requestCode, int resultCode, Intent data) { 634d23fa61a014fc567592592eac629680764f042b5Martin Hibdon if (requestCode == CERTIFICATE_REQUEST && resultCode == Activity.RESULT_OK) { 635d23fa61a014fc567592592eac629680764f042b5Martin Hibdon final String certAlias = data.getStringExtra(CertificateRequestor.RESULT_ALIAS); 636719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon if (certAlias != null) { 637719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mClientCertificateSelector.setCertificate(certAlias); 638719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon } 63958fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon } else if (requestCode == SIGN_IN_REQUEST && resultCode == Activity.RESULT_OK) { 64058fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon final Account account = mSetupData.getAccount(); 64158fbd2a47729bd21b5e3001c76bd0723ea868728Martin Hibdon final HostAuth recvAuth = account.getOrCreateHostAuthRecv(getActivity()); 64276472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler AccountSetupCredentialsFragment.populateHostAuthWithResults(mAppContext, recvAuth, 64376472ae40cd55d17edb0420e8fc2a7bae60c50deTony Mantler data.getExtras()); 644719097387788a32256cfcc3c0a96eff7f170078fMartin Hibdon mAuthenticationView.setAuthInfo(mServiceInfo.offerOAuth, recvAuth); 645d23fa61a014fc567592592eac629680764f042b5Martin Hibdon } 646d23fa61a014fc567592592eac629680764f042b5Martin Hibdon } 6471b156352f3fc160da5ba050c2437bcd1c995b326Andrew Stadler} 648