Centralize EmailServiceInfo retreival and pre-fill data for autodiscover
b/13341957 b/13356801 Change-Id: I9ed399bd6a695e14cf8019d3f62c7e5753e1f4d8
This commit is contained in:
parent
094656be6e
commit
064726d9f9
|
@ -562,7 +562,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
updateContentFragment(true /* addToBackstack */);
|
||||
} else {
|
||||
mState = STATE_AUTO_DISCOVER;
|
||||
initiateCheckSettingsFragment(SetupDataFragment.CHECK_AUTODISCOVER);
|
||||
initiateAutoDiscover();
|
||||
}
|
||||
break;
|
||||
case STATE_AUTO_DISCOVER:
|
||||
|
@ -578,8 +578,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
break;
|
||||
case STATE_CHECKING_INCOMING:
|
||||
final EmailServiceUtils.EmailServiceInfo serviceInfo =
|
||||
EmailServiceUtils.getServiceInfo(this,
|
||||
getSetupData().getAccount().getProtocol(this));
|
||||
mSetupData.getIncomingServiceInfo(this);
|
||||
if (serviceInfo.usesSmtp) {
|
||||
mState = STATE_MANUAL_OUTGOING;
|
||||
} else {
|
||||
|
@ -761,17 +760,20 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
recvAuth.setUserName(mProvider.incomingUsername);
|
||||
AccountSetupCredentialsFragment.populateHostAuthWithResults(this, recvAuth,
|
||||
mSetupData.getCredentialResults());
|
||||
mSetupData.setIncomingCredLoaded(true);
|
||||
|
||||
final EmailServiceUtils.EmailServiceInfo info = EmailServiceUtils.getServiceInfo(this,
|
||||
recvAuth.mProtocol);
|
||||
final EmailServiceUtils.EmailServiceInfo info = mSetupData.getIncomingServiceInfo(this);
|
||||
recvAuth.mPort =
|
||||
((recvAuth.mFlags & HostAuth.FLAG_SSL) != 0) ? info.portSsl : info.port;
|
||||
|
||||
final HostAuth sendAuth = account.getOrCreateHostAuthSend(this);
|
||||
sendAuth.setHostAuthFromString(mProvider.outgoingUri);
|
||||
sendAuth.setUserName(mProvider.outgoingUsername);
|
||||
AccountSetupCredentialsFragment.populateHostAuthWithResults(this, sendAuth,
|
||||
mSetupData.getCredentialResults());
|
||||
if (info.usesSmtp) {
|
||||
final HostAuth sendAuth = account.getOrCreateHostAuthSend(this);
|
||||
sendAuth.setHostAuthFromString(mProvider.outgoingUri);
|
||||
sendAuth.setUserName(mProvider.outgoingUsername);
|
||||
AccountSetupCredentialsFragment.populateHostAuthWithResults(this, sendAuth,
|
||||
mSetupData.getCredentialResults());
|
||||
mSetupData.setOutgoingCredLoaded(true);
|
||||
}
|
||||
|
||||
// Populate the setup data, assuming that the duplicate account check will succeed
|
||||
populateSetupData(mOwnerName, email);
|
||||
|
@ -797,10 +799,8 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
* @param account Account object to fill in
|
||||
*/
|
||||
public void setDefaultsForProtocol(Account account) {
|
||||
final String protocol = account.getOrCreateHostAuthRecv(this).mProtocol;
|
||||
if (protocol == null) return;
|
||||
final EmailServiceUtils.EmailServiceInfo info =
|
||||
EmailServiceUtils.getServiceInfo(this, protocol);
|
||||
final EmailServiceUtils.EmailServiceInfo info = mSetupData.getIncomingServiceInfo(this);
|
||||
if (info == null) return;
|
||||
account.mSyncInterval = info.defaultSyncInterval;
|
||||
account.mSyncLookback = info.defaultLookback;
|
||||
if (info.offerLocalDeletes) {
|
||||
|
@ -838,6 +838,37 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
@Override
|
||||
public void onAccountServerSaveComplete() {}
|
||||
|
||||
private void initiateAutoDiscover() {
|
||||
final String email = mSetupData.getEmail();
|
||||
final String[] emailParts = email.split("@");
|
||||
final String domain = emailParts[1];
|
||||
|
||||
final Account account = mSetupData.getAccount();
|
||||
|
||||
final HostAuth recvAuth = account.getOrCreateHostAuthRecv(this);
|
||||
recvAuth.setUserName(email);
|
||||
recvAuth.setConnection(mSetupData.getIncomingProtocol(), domain,
|
||||
HostAuth.PORT_UNKNOWN, HostAuth.FLAG_NONE);
|
||||
AccountSetupCredentialsFragment.populateHostAuthWithResults(this, recvAuth,
|
||||
mSetupData.getCredentialResults());
|
||||
mSetupData.setIncomingCredLoaded(true);
|
||||
|
||||
final EmailServiceUtils.EmailServiceInfo info =
|
||||
mSetupData.getIncomingServiceInfo(this);
|
||||
if (info.usesSmtp) {
|
||||
final HostAuth sendAuth = account.getOrCreateHostAuthSend(this);
|
||||
sendAuth.setUserName(email);
|
||||
sendAuth.setConnection(HostAuth.LEGACY_SCHEME_SMTP, domain,
|
||||
HostAuth.PORT_UNKNOWN, HostAuth.FLAG_NONE);
|
||||
AccountSetupCredentialsFragment.populateHostAuthWithResults(this, sendAuth,
|
||||
mSetupData.getCredentialResults());
|
||||
mSetupData.setOutgoingCredLoaded(true);
|
||||
}
|
||||
|
||||
// Populate the setup data, assuming that the duplicate account check will succeed
|
||||
initiateCheckSettingsFragment(SetupDataFragment.CHECK_AUTODISCOVER);
|
||||
}
|
||||
|
||||
private void initiateCheckSettingsFragment(int checkMode) {
|
||||
final Fragment f = AccountCheckSettingsFragment.newInstance(checkMode);
|
||||
final Fragment d = CheckSettingsProgressDialogFragment.newInstance(checkMode);
|
||||
|
@ -924,11 +955,8 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
|
||||
@Override
|
||||
public void onChooseProtocol(String protocol) {
|
||||
mSetupData.setIncomingProtocol(this, protocol);
|
||||
final Account account = mSetupData.getAccount();
|
||||
final HostAuth recvAuth = account.getOrCreateHostAuthRecv(this);
|
||||
recvAuth.setConnection(protocol, recvAuth.mAddress, recvAuth.mPort, recvAuth.mFlags);
|
||||
|
||||
recvAuth.mLogin = mSetupData.getEmail();
|
||||
setDefaultsForProtocol(account);
|
||||
proceed();
|
||||
}
|
||||
|
@ -956,8 +984,7 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
account.setDisplayName(account.getEmailAddress());
|
||||
int newFlags = account.getFlags() & ~(Account.FLAGS_BACKGROUND_ATTACHMENTS);
|
||||
final EmailServiceUtils.EmailServiceInfo serviceInfo =
|
||||
EmailServiceUtils.getServiceInfo(getApplicationContext(),
|
||||
account.mHostAuthRecv.mProtocol);
|
||||
mSetupData.getIncomingServiceInfo(this);
|
||||
if (serviceInfo.offerAttachmentPreload && fragment.getBackgroundAttachmentsValue()) {
|
||||
newFlags |= Account.FLAGS_BACKGROUND_ATTACHMENTS;
|
||||
}
|
||||
|
@ -1001,11 +1028,9 @@ public class AccountSetupFinal extends AccountSetupActivity
|
|||
// If the account manager initiated the creation, and success was not reported,
|
||||
// then we assume that we're giving up (for any reason) - report failure.
|
||||
if (mAccountAuthenticatorResponse != null) {
|
||||
final Account account = getSetupData().getAccount();
|
||||
final EmailServiceUtils.EmailServiceInfo info =
|
||||
EmailServiceUtils.getServiceInfo(this, account.getProtocol(this));
|
||||
final EmailServiceUtils.EmailServiceInfo info = mSetupData.getIncomingServiceInfo(this);
|
||||
final Bundle b = new Bundle(2);
|
||||
b.putString(AccountManager.KEY_ACCOUNT_NAME, account.getEmailAddress());
|
||||
b.putString(AccountManager.KEY_ACCOUNT_NAME, mSetupData.getEmail());
|
||||
b.putString(AccountManager.KEY_ACCOUNT_TYPE, info.accountType);
|
||||
mAccountAuthenticatorResponse.onResult(b);
|
||||
mAccountAuthenticatorResponse = null;
|
||||
|
|
|
@ -40,7 +40,6 @@ import com.android.email.R;
|
|||
import com.android.email.activity.UiUtilities;
|
||||
import com.android.email.activity.setup.AuthenticationView.AuthenticationCallback;
|
||||
import com.android.email.provider.AccountBackupRestore;
|
||||
import com.android.email.service.EmailServiceUtils;
|
||||
import com.android.email.service.EmailServiceUtils.EmailServiceInfo;
|
||||
import com.android.email.view.CertificateSelector;
|
||||
import com.android.email.view.CertificateSelector.HostCallback;
|
||||
|
@ -210,7 +209,7 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment
|
|||
mSetupData.setIncomingCredLoaded(true);
|
||||
}
|
||||
|
||||
mServiceInfo = EmailServiceUtils.getServiceInfo(mAppContext, recvAuth.mProtocol);
|
||||
mServiceInfo = mSetupData.getIncomingServiceInfo(context);
|
||||
|
||||
if (mServiceInfo.offerLocalDeletes) {
|
||||
SpinnerOption deletePolicies[] = {
|
||||
|
@ -341,7 +340,7 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment
|
|||
|
||||
final Account account = mSetupData.getAccount();
|
||||
final HostAuth recvAuth = account.getOrCreateHostAuthRecv(mAppContext);
|
||||
mServiceInfo = EmailServiceUtils.getServiceInfo(mAppContext, recvAuth.mProtocol);
|
||||
mServiceInfo = mSetupData.getIncomingServiceInfo(getActivity());
|
||||
mAuthenticationView.setAuthInfo(mServiceInfo.offerOAuth, recvAuth);
|
||||
if (mAuthenticationLabel != null) {
|
||||
if (mServiceInfo.offerOAuth) {
|
||||
|
@ -414,9 +413,7 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment
|
|||
}
|
||||
|
||||
private int getPortFromSecurityType(boolean useSsl) {
|
||||
final EmailServiceInfo info = EmailServiceUtils.getServiceInfo(mAppContext,
|
||||
mSetupData.getAccount().mHostAuthRecv.mProtocol);
|
||||
return useSsl ? info.portSsl : info.port;
|
||||
return useSsl ? mServiceInfo.portSsl : mServiceInfo.port;
|
||||
}
|
||||
|
||||
private boolean getSslSelected() {
|
||||
|
|
|
@ -105,7 +105,7 @@ public class AccountSetupNamesFragment extends AccountSetupFragment {
|
|||
|
||||
// Remember whether we're an EAS account, since it doesn't require the user name field
|
||||
final EmailServiceUtils.EmailServiceInfo info =
|
||||
EmailServiceUtils.getServiceInfo(getActivity(), account.mHostAuthRecv.mProtocol);
|
||||
setupData.getIncomingServiceInfo(getActivity());
|
||||
if (!info.usesSmtp) {
|
||||
mRequiresName = false;
|
||||
mName.setVisibility(View.GONE);
|
||||
|
|
|
@ -79,13 +79,12 @@ public class AccountSetupOptionsFragment extends AccountSetupFragment {
|
|||
|
||||
final View view = getView();
|
||||
|
||||
final SetupDataFragment.SetupDataContainer container =
|
||||
(SetupDataFragment.SetupDataContainer) getActivity();
|
||||
final Account account = container.getSetupData().getAccount();
|
||||
final SetupDataFragment setupData =
|
||||
((SetupDataFragment.SetupDataContainer) getActivity()).getSetupData();
|
||||
final Account account = setupData.getAccount();
|
||||
|
||||
final EmailServiceUtils.EmailServiceInfo serviceInfo =
|
||||
EmailServiceUtils.getServiceInfo(getActivity().getApplicationContext(),
|
||||
account.mHostAuthRecv.mProtocol);
|
||||
setupData.getIncomingServiceInfo(getActivity());
|
||||
|
||||
final CharSequence[] frequencyValues = serviceInfo.syncIntervals;
|
||||
final CharSequence[] frequencyEntries = serviceInfo.syncIntervalStrings;
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
package com.android.email.activity.setup;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import com.android.email.service.EmailServiceUtils;
|
||||
import com.android.emailcommon.provider.Account;
|
||||
import com.android.emailcommon.provider.HostAuth;
|
||||
import com.android.emailcommon.provider.Policy;
|
||||
|
||||
/**
|
||||
|
@ -42,6 +45,7 @@ public class SetupDataFragment extends Fragment implements Parcelable {
|
|||
private static final String SAVESTATE_INCOMING_LOADED = "SetupDataFragment.incomingLoaded";
|
||||
private static final String SAVESTATE_OUTGOING_LOADED = "SetupDataFragment.outgoingLoaded";
|
||||
private static final String SAVESTATE_POLICY = "SetupDataFragment.policy";
|
||||
private static final String SAVESTATE_INCOMING_PROTOCOL = "SetupDataFragment.incomingProtocol";
|
||||
|
||||
// All access will be through getters/setters
|
||||
private int mFlowMode = FLOW_MODE_NORMAL;
|
||||
|
@ -54,6 +58,9 @@ public class SetupDataFragment extends Fragment implements Parcelable {
|
|||
private boolean mOutgoingCredLoaded = true;
|
||||
// This is accessed off-thread in AccountCheckSettingsFragment
|
||||
private volatile Policy mPolicy;
|
||||
// Cache incoming protocol and service info here
|
||||
private EmailServiceUtils.EmailServiceInfo mIncomingServiceInfo;
|
||||
private String mIncomingProtocol;
|
||||
|
||||
public interface SetupDataContainer {
|
||||
public SetupDataFragment getSetupData();
|
||||
|
@ -86,6 +93,7 @@ public class SetupDataFragment extends Fragment implements Parcelable {
|
|||
outState.putBoolean(SAVESTATE_INCOMING_LOADED, mIncomingCredLoaded);
|
||||
outState.putBoolean(SAVESTATE_OUTGOING_LOADED, mOutgoingCredLoaded);
|
||||
outState.putParcelable(SAVESTATE_POLICY, mPolicy);
|
||||
outState.putString(SAVESTATE_INCOMING_PROTOCOL, mIncomingProtocol);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -99,6 +107,7 @@ public class SetupDataFragment extends Fragment implements Parcelable {
|
|||
mIncomingCredLoaded = savedInstanceState.getBoolean(SAVESTATE_INCOMING_LOADED);
|
||||
mOutgoingCredLoaded = savedInstanceState.getBoolean(SAVESTATE_OUTGOING_LOADED);
|
||||
mPolicy = savedInstanceState.getParcelable(SAVESTATE_POLICY);
|
||||
mIncomingProtocol = savedInstanceState.getString(SAVESTATE_INCOMING_PROTOCOL);
|
||||
}
|
||||
setRetainInstance(true);
|
||||
}
|
||||
|
@ -165,6 +174,51 @@ public class SetupDataFragment extends Fragment implements Parcelable {
|
|||
mPolicy = policy;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the service info for the incoming protocol
|
||||
* @param context For resolving the service info, and possibly loading the {@link HostAuth}
|
||||
* @return service info object
|
||||
*/
|
||||
public EmailServiceUtils.EmailServiceInfo getIncomingServiceInfo(Context context) {
|
||||
if (mIncomingServiceInfo == null) {
|
||||
mIncomingServiceInfo = EmailServiceUtils.getServiceInfo(context,
|
||||
getIncomingProtocol(context));
|
||||
}
|
||||
return mIncomingServiceInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the protocol as previously set in setIncomingProtocol, but don't attempt to look at
|
||||
* {@link #mAccount#hostAuthRecv }
|
||||
* @return Protocol string
|
||||
*/
|
||||
public String getIncomingProtocol() {
|
||||
return mIncomingProtocol;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the protocol as previously set in setIncomingProtocol, or from
|
||||
* {@link #mAccount#hostAuthRecv}. Try not to call this on the main thread if it's unlikely that
|
||||
* the hostauth isn't already loaded.
|
||||
* @param context context to possibly load the {@link HostAuth} from the provider
|
||||
* @return Protocol string
|
||||
*/
|
||||
public String getIncomingProtocol(Context context) {
|
||||
if (mIncomingProtocol != null) {
|
||||
return mIncomingProtocol;
|
||||
}
|
||||
|
||||
final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
|
||||
return recvAuth.mProtocol;
|
||||
}
|
||||
|
||||
public void setIncomingProtocol(final Context context, final String protocol) {
|
||||
final HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context);
|
||||
recvAuth.setConnection(protocol, recvAuth.mAddress, recvAuth.mPort, recvAuth.mFlags);
|
||||
mIncomingProtocol = protocol;
|
||||
mIncomingServiceInfo = null;
|
||||
}
|
||||
|
||||
// Parcelable methods
|
||||
@Override
|
||||
public int describeContents() {
|
||||
|
|
Loading…
Reference in New Issue