Resolve build warnings; part 5
Remove dependence upon URIs for creating the host auth structure Change-Id: I92dee36fa329a8976b76bbd4991ed3469c6475f2
This commit is contained in:
parent
d25610356d
commit
040ddf60cf
|
@ -103,6 +103,10 @@
|
|||
*** setRecipient(com.android.emailcommon.mail.Message$RecipientType, com.android.emailcommon.mail.Address);
|
||||
}
|
||||
|
||||
-keepclasseswithmembers class com.android.emailcommon.internet.MimeHeader {
|
||||
*** writeToString();
|
||||
}
|
||||
|
||||
-keepclasseswithmembers class com.android.emailcommon.internet.MimeMessage {
|
||||
<init>();
|
||||
<init>(java.io.InputStream);
|
||||
|
|
|
@ -32,8 +32,10 @@ import com.android.emailcommon.mail.Message.RecipientType;
|
|||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.Attachment;
|
||||
import com.android.emailcommon.provider.EmailContent.AttachmentColumns;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.provider.EmailContent.Mailbox;
|
||||
import com.android.emailcommon.utility.AttachmentUtilities;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
|
@ -48,6 +50,7 @@ import java.io.File;
|
|||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
|
@ -519,8 +522,20 @@ public class LegacyConversions {
|
|||
result.mSecuritySyncKey = null;
|
||||
result.mSignature = fromAccount.mSignature;
|
||||
|
||||
result.setStoreUri(context, fromAccount.getStoreUri());
|
||||
result.setSenderUri(context, fromAccount.getSenderUri());
|
||||
try {
|
||||
HostAuth recvAuth = result.getOrCreateHostAuthRecv(context);
|
||||
Utility.setHostAuthFromString(recvAuth, fromAccount.getStoreUri());
|
||||
} catch (URISyntaxException e) {
|
||||
result.mHostAuthRecv = new HostAuth();
|
||||
Log.w(Logging.LOG_TAG, e);
|
||||
}
|
||||
try {
|
||||
HostAuth sendAuth = result.getOrCreateHostAuthSend(context);
|
||||
Utility.setHostAuthFromString(sendAuth, fromAccount.getSenderUri());
|
||||
} catch (URISyntaxException e) {
|
||||
result.mHostAuthSend = new HostAuth();
|
||||
Log.w(Logging.LOG_TAG, e);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -219,20 +219,16 @@ public class VendorPolicyLoader {
|
|||
params.putString(FIND_PROVIDER, domain);
|
||||
Bundle out = getPolicy(FIND_PROVIDER, params);
|
||||
if (out != null && !out.isEmpty()) {
|
||||
try {
|
||||
Provider p = new Provider();
|
||||
p.id = null;
|
||||
p.label = null;
|
||||
p.domain = domain;
|
||||
p.incomingUriTemplate = new URI(out.getString(FIND_PROVIDER_IN_URI));
|
||||
p.incomingUsernameTemplate = out.getString(FIND_PROVIDER_IN_USER);
|
||||
p.outgoingUriTemplate = new URI(out.getString(FIND_PROVIDER_OUT_URI));
|
||||
p.outgoingUsernameTemplate = out.getString(FIND_PROVIDER_OUT_USER);
|
||||
p.note = out.getString(FIND_PROVIDER_NOTE);
|
||||
return p;
|
||||
} catch (URISyntaxException e) {
|
||||
Log.d(Logging.LOG_TAG, "uri exception while vendor policy loads " + domain);
|
||||
}
|
||||
Provider p = new Provider();
|
||||
p.id = null;
|
||||
p.label = null;
|
||||
p.domain = domain;
|
||||
p.incomingUriTemplate = out.getString(FIND_PROVIDER_IN_URI);
|
||||
p.incomingUsernameTemplate = out.getString(FIND_PROVIDER_IN_USER);
|
||||
p.outgoingUriTemplate = out.getString(FIND_PROVIDER_OUT_URI);
|
||||
p.outgoingUsernameTemplate = out.getString(FIND_PROVIDER_OUT_USER);
|
||||
p.note = out.getString(FIND_PROVIDER_NOTE);
|
||||
return p;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -501,9 +501,10 @@ public class AccountCheckSettingsFragment extends Fragment {
|
|||
return new MessagingException(MessagingException.AUTHENTICATION_FAILED);
|
||||
}
|
||||
// Return "real" AD results
|
||||
HostAuth serverInfo = new HostAuth();
|
||||
serverInfo.setStoreUri("eas://user:password@testserver.com");
|
||||
return new AutoDiscoverResults(false, serverInfo);
|
||||
HostAuth auth = new HostAuth();
|
||||
auth.setLogin("user", "password");
|
||||
auth.setConnection(Store.STORE_SCHEME_EAS, "testserver.com", 0);
|
||||
return new AutoDiscoverResults(false, auth);
|
||||
}
|
||||
if (isCancelled()) return null;
|
||||
if ((mMode & SetupData.CHECK_INCOMING) != 0) {
|
||||
|
@ -632,6 +633,7 @@ public class AccountCheckSettingsFragment extends Fragment {
|
|||
* recreated at any time without affecting the account checking progress.
|
||||
*/
|
||||
public static class CheckingDialog extends DialogFragment {
|
||||
@SuppressWarnings("hiding")
|
||||
public final static String TAG = "CheckProgressDialog";
|
||||
|
||||
// Extras for saved instance state
|
||||
|
@ -729,6 +731,7 @@ public class AccountCheckSettingsFragment extends Fragment {
|
|||
* The standard error dialog. Calls back to onErrorDialogButton().
|
||||
*/
|
||||
public static class ErrorDialog extends DialogFragment {
|
||||
@SuppressWarnings("hiding")
|
||||
public final static String TAG = "ErrorDialog";
|
||||
|
||||
// Bundle keys for arguments
|
||||
|
@ -784,6 +787,7 @@ public class AccountCheckSettingsFragment extends Fragment {
|
|||
* same as any other failed check.)
|
||||
*/
|
||||
public static class SecurityRequiredDialog extends DialogFragment {
|
||||
@SuppressWarnings("hiding")
|
||||
public final static String TAG = "SecurityRequiredDialog";
|
||||
|
||||
// Bundle keys for arguments
|
||||
|
|
|
@ -53,6 +53,7 @@ public abstract class AccountServerBaseFragment extends Fragment
|
|||
protected Context mContext;
|
||||
protected Callback mCallback = EmptyCallback.INSTANCE;
|
||||
protected boolean mSettingsMode;
|
||||
// TODO See how to get rid of this. Maybe define an "equals()" for HostAuth?
|
||||
// The URI that represents this account's currently saved settings
|
||||
protected URI mLoadedUri;
|
||||
|
||||
|
@ -60,6 +61,7 @@ public abstract class AccountServerBaseFragment extends Fragment
|
|||
public Button mProceedButton;
|
||||
// This is used to debounce multiple clicks on the proceed button (which does async work)
|
||||
public boolean mProceedButtonPressed;
|
||||
/*package*/ String mBaseScheme = "protocol";
|
||||
|
||||
/**
|
||||
* Callback interface that owning activities must provide
|
||||
|
|
|
@ -119,13 +119,13 @@ public class AccountSettingsUtils {
|
|||
else if (xmlEventType == XmlResourceParser.START_TAG
|
||||
&& "incoming".equals(xml.getName())
|
||||
&& provider != null) {
|
||||
provider.incomingUriTemplate = new URI(getXmlAttribute(context, xml, "uri"));
|
||||
provider.incomingUriTemplate = getXmlAttribute(context, xml, "uri");
|
||||
provider.incomingUsernameTemplate = getXmlAttribute(context, xml, "username");
|
||||
}
|
||||
else if (xmlEventType == XmlResourceParser.START_TAG
|
||||
&& "outgoing".equals(xml.getName())
|
||||
&& provider != null) {
|
||||
provider.outgoingUriTemplate = new URI(getXmlAttribute(context, xml, "uri"));
|
||||
provider.outgoingUriTemplate = getXmlAttribute(context, xml, "uri");
|
||||
provider.outgoingUsernameTemplate = getXmlAttribute(context, xml, "username");
|
||||
}
|
||||
else if (xmlEventType == XmlResourceParser.END_TAG
|
||||
|
@ -164,9 +164,9 @@ public class AccountSettingsUtils {
|
|||
public String id;
|
||||
public String label;
|
||||
public String domain;
|
||||
public URI incomingUriTemplate;
|
||||
public String incomingUriTemplate;
|
||||
public String incomingUsernameTemplate;
|
||||
public URI outgoingUriTemplate;
|
||||
public String outgoingUriTemplate;
|
||||
public String outgoingUsernameTemplate;
|
||||
public String note;
|
||||
}
|
||||
|
|
|
@ -116,24 +116,17 @@ public class AccountSetupAccountType extends AccountSetupActivity implements OnC
|
|||
}
|
||||
|
||||
/**
|
||||
* The user has selected an exchange account type. Try to put together a URI using the entered
|
||||
* email address. Also set the mail delete policy here, because there is no UI (for exchange),
|
||||
* and switch the default sync interval to "push".
|
||||
* The user has selected an exchange account type. Set the mail delete policy here, because
|
||||
* there is no UI (for exchange), and switch the default sync interval to "push".
|
||||
*/
|
||||
private void onExchange() {
|
||||
Account account = SetupData.getAccount();
|
||||
try {
|
||||
URI uri = new URI(account.getStoreUri(this));
|
||||
uri = new URI("eas+ssl+", uri.getUserInfo(), uri.getHost(), uri.getPort(),
|
||||
null, null, null);
|
||||
account.setStoreUri(this, uri.toString());
|
||||
account.setSenderUri(this, uri.toString());
|
||||
} catch (URISyntaxException use) {
|
||||
/*
|
||||
* This should not happen.
|
||||
*/
|
||||
throw new Error(use);
|
||||
}
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(this);
|
||||
recvAuth.setConnection(
|
||||
"eas", recvAuth.mAddress, recvAuth.mPort, recvAuth.mFlags | HostAuth.FLAG_SSL);
|
||||
HostAuth sendAuth = account.getOrCreateHostAuthSend(this);
|
||||
sendAuth.setConnection(
|
||||
"eas", sendAuth.mAddress, sendAuth.mPort, sendAuth.mFlags | HostAuth.FLAG_SSL);
|
||||
// TODO: Confirm correct delete policy for exchange
|
||||
account.setDeletePolicy(Account.DELETE_POLICY_ON_DELETE);
|
||||
account.setSyncInterval(Account.CHECK_INTERVAL_PUSH);
|
||||
|
|
|
@ -22,6 +22,7 @@ import com.android.email.VendorPolicyLoader;
|
|||
import com.android.email.activity.ActivityHelper;
|
||||
import com.android.email.activity.Welcome;
|
||||
import com.android.email.activity.setup.AccountSettingsUtils.Provider;
|
||||
import com.android.email.mail.Store;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.Account;
|
||||
|
@ -53,7 +54,6 @@ import android.widget.EditText;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
@ -421,47 +421,40 @@ public class AccountSetupBasics extends AccountSetupActivity
|
|||
String[] emailParts = email.split("@");
|
||||
String user = emailParts[0];
|
||||
String domain = emailParts[1];
|
||||
URI incomingUri = null;
|
||||
URI outgoingUri = null;
|
||||
String incomingUsername = mProvider.incomingUsernameTemplate;
|
||||
|
||||
try {
|
||||
String incomingUsername = mProvider.incomingUsernameTemplate;
|
||||
incomingUsername = incomingUsername.replaceAll("\\$email", email);
|
||||
incomingUsername = incomingUsername.replaceAll("\\$user", user);
|
||||
incomingUsername = incomingUsername.replaceAll("\\$domain", domain);
|
||||
|
||||
URI incomingUriTemplate = mProvider.incomingUriTemplate;
|
||||
incomingUri = new URI(incomingUriTemplate.getScheme(), incomingUsername + ":"
|
||||
+ password, incomingUriTemplate.getHost(), incomingUriTemplate.getPort(),
|
||||
incomingUriTemplate.getPath(), null, null);
|
||||
Account account = SetupData.getAccount();
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(this);
|
||||
Utility.setHostAuthFromString(recvAuth, mProvider.incomingUriTemplate);
|
||||
|
||||
String outgoingUsername = mProvider.outgoingUsernameTemplate;
|
||||
outgoingUsername = outgoingUsername.replaceAll("\\$email", email);
|
||||
outgoingUsername = outgoingUsername.replaceAll("\\$user", user);
|
||||
outgoingUsername = outgoingUsername.replaceAll("\\$domain", domain);
|
||||
|
||||
URI outgoingUriTemplate = mProvider.outgoingUriTemplate;
|
||||
outgoingUri = new URI(outgoingUriTemplate.getScheme(), outgoingUsername + ":"
|
||||
+ password, outgoingUriTemplate.getHost(), outgoingUriTemplate.getPort(),
|
||||
outgoingUriTemplate.getPath(), null, null);
|
||||
HostAuth sendAuth = account.getOrCreateHostAuthSend(this);
|
||||
Utility.setHostAuthFromString(sendAuth, mProvider.outgoingUriTemplate);
|
||||
|
||||
} catch (URISyntaxException use) {
|
||||
// Populate the setup data, assuming that the duplicate account check will succeed
|
||||
populateSetupData(getOwnerName(), email, mDefaultView.isChecked());
|
||||
|
||||
// Stop here if the login credentials duplicate an existing account
|
||||
// Launch an Async task to do the work
|
||||
new DuplicateCheckTask(this, recvAuth.mAddress, incomingUsername).execute();
|
||||
} catch (URISyntaxException e) {
|
||||
/*
|
||||
* If there is some problem with the URI we give up and go on to
|
||||
* manual setup. Technically speaking, AutoDiscover is OK here, since user clicked
|
||||
* "Next" to get here. This would never happen in practice because we don't expect
|
||||
* to find any EAS accounts in the providers list.
|
||||
* If there is some problem with the URI we give up and go on to manual setup.
|
||||
* Technically speaking, AutoDiscover is OK here, since the user clicked "Next"
|
||||
* to get here. This will not happen in practice because we don't expect to
|
||||
* find any EAS accounts in the providers list.
|
||||
*/
|
||||
onManualSetup(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Populate the setup data, assuming that the duplicate account check will succeed
|
||||
populateSetupData(getOwnerName(), email, mDefaultView.isChecked(),
|
||||
incomingUri.toString(), outgoingUri.toString());
|
||||
|
||||
// Stop here if the login credentials duplicate an existing account
|
||||
// Launch an Async task to do the work
|
||||
new DuplicateCheckTask(this, incomingUri.getHost(), incomingUsername).execute();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -561,18 +554,16 @@ public class AccountSetupBasics extends AccountSetupActivity
|
|||
return;
|
||||
}
|
||||
|
||||
String uriString = null;
|
||||
try {
|
||||
URI uri = new URI("placeholder", user + ":" + password, domain, -1, null, null, null);
|
||||
uriString = uri.toString();
|
||||
} catch (URISyntaxException use) {
|
||||
// If we can't set up the URL, don't continue - account setup pages will fail too
|
||||
Toast.makeText(this, R.string.account_setup_username_password_toast,
|
||||
Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
Account account = SetupData.getAccount();
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(this);
|
||||
recvAuth.setLogin(user, password);
|
||||
recvAuth.setConnection("placeholder", domain, HostAuth.PORT_UNKNOWN, HostAuth.FLAG_NONE);
|
||||
|
||||
populateSetupData(getOwnerName(), email, mDefaultView.isChecked(), uriString, uriString);
|
||||
HostAuth sendAuth = account.getOrCreateHostAuthSend(this);
|
||||
sendAuth.setLogin(user, password);
|
||||
sendAuth.setConnection("placeholder", domain, HostAuth.PORT_UNKNOWN, HostAuth.FLAG_NONE);
|
||||
|
||||
populateSetupData(getOwnerName(), email, mDefaultView.isChecked());
|
||||
|
||||
SetupData.setAllowAutodiscover(allowAutoDiscover);
|
||||
AccountSetupAccountType.actionSelectAccountType(this);
|
||||
|
@ -590,31 +581,42 @@ public class AccountSetupBasics extends AccountSetupActivity
|
|||
* @param outgoing The URI-style string defining the outgoing account
|
||||
*/
|
||||
private void forceCreateAccount(String email, String user, String incoming, String outgoing) {
|
||||
populateSetupData(user, email, false, incoming, outgoing);
|
||||
Account account = SetupData.getAccount();
|
||||
try {
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(this);
|
||||
Utility.setHostAuthFromString(recvAuth, incoming);
|
||||
|
||||
HostAuth sendAuth = account.getOrCreateHostAuthSend(this);
|
||||
Utility.setHostAuthFromString(sendAuth, outgoing);
|
||||
|
||||
populateSetupData(user, email, false);
|
||||
} catch (URISyntaxException e) {
|
||||
// If we can't set up the URL, don't continue - account setup pages will fail too
|
||||
Toast.makeText(
|
||||
this, R.string.account_setup_username_password_toast, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate SetupData's account with complete setup info.
|
||||
*/
|
||||
private void populateSetupData(String senderName, String senderEmail, boolean isDefault,
|
||||
String incoming, String outgoing) {
|
||||
private void populateSetupData(String senderName, String senderEmail, boolean isDefault) {
|
||||
Account account = SetupData.getAccount();
|
||||
account.setSenderName(senderName);
|
||||
account.setEmailAddress(senderEmail);
|
||||
account.setDisplayName(senderEmail);
|
||||
account.setDefaultAccount(isDefault);
|
||||
SetupData.setDefault(isDefault); // TODO - why duplicated, if already set in account
|
||||
account.setStoreUri(this, incoming);
|
||||
account.setSenderUri(this, outgoing);
|
||||
|
||||
// Set sync and delete policies for specific account types
|
||||
if (incoming.startsWith("imap")) {
|
||||
String protocol = account.mHostAuthRecv.mProtocol;
|
||||
// Set sync and delete policies for specific inbound account types
|
||||
if (Store.STORE_SCHEME_IMAP.equals(protocol)) {
|
||||
// Delete policy must be set explicitly, because IMAP does not provide a UI selection
|
||||
// for it. This logic needs to be followed in the auto setup flow as well.
|
||||
account.setDeletePolicy(EmailContent.Account.DELETE_POLICY_ON_DELETE);
|
||||
}
|
||||
|
||||
if (incoming.startsWith("eas")) {
|
||||
if (Store.STORE_SCHEME_EAS.equals(protocol)) {
|
||||
account.setSyncInterval(Account.CHECK_INTERVAL_PUSH);
|
||||
} else {
|
||||
account.setSyncInterval(DEFAULT_ACCOUNT_CHECK_INTERVAL);
|
||||
|
|
|
@ -20,8 +20,10 @@ import com.android.email.AccountBackupRestore;
|
|||
import com.android.email.Email;
|
||||
import com.android.email.ExchangeUtils;
|
||||
import com.android.email.R;
|
||||
import com.android.email.mail.Store;
|
||||
import com.android.emailcommon.Device;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
@ -85,6 +87,7 @@ public class AccountSetupExchangeFragment extends AccountServerBaseFragment
|
|||
mCacheLoginCredential = savedInstanceState.getString(STATE_KEY_CREDENTIAL);
|
||||
mLoaded = savedInstanceState.getBoolean(STATE_KEY_LOADED, false);
|
||||
}
|
||||
mBaseScheme = Store.STORE_SCHEME_EAS;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -255,11 +258,13 @@ public class AccountSetupExchangeFragment extends AccountServerBaseFragment
|
|||
}
|
||||
|
||||
boolean ssl = 0 != (hostAuth.mFlags & HostAuth.FLAG_SSL);
|
||||
boolean trustCertificates = 0 != (hostAuth.mFlags & HostAuth.FLAG_TRUST_ALL_CERTIFICATES);
|
||||
boolean trustCertificates = 0 != (hostAuth.mFlags & HostAuth.FLAG_TRUST_ALL);
|
||||
mSslSecurityView.setChecked(ssl);
|
||||
mTrustCertificatesView.setChecked(trustCertificates);
|
||||
showTrustCertificates(ssl);
|
||||
|
||||
// TODO See how to get rid of this. Maybe define an "equals()" for HostAuth?
|
||||
// used to determine if these settings have changed
|
||||
try {
|
||||
mLoadedUri = getUri();
|
||||
} catch (URISyntaxException ignore) {
|
||||
|
@ -357,11 +362,9 @@ public class AccountSetupExchangeFragment extends AccountServerBaseFragment
|
|||
*/
|
||||
@Override
|
||||
protected URI getUri() throws URISyntaxException {
|
||||
Account account = SetupData.getAccount();
|
||||
boolean sslRequired = mSslSecurityView.isChecked();
|
||||
boolean trustCertificates = mTrustCertificatesView.isChecked();
|
||||
String scheme = (sslRequired)
|
||||
? (trustCertificates ? "eas+ssl+trustallcerts" : "eas+ssl+")
|
||||
: "eas";
|
||||
String userName = mUsernameView.getText().toString().trim();
|
||||
// Remove a leading backslash, if there is one, since we now automatically put one at
|
||||
// the start of the username field
|
||||
|
@ -372,16 +375,18 @@ public class AccountSetupExchangeFragment extends AccountServerBaseFragment
|
|||
String userInfo = userName + ":" + mPasswordView.getText();
|
||||
String host = mServerView.getText().toString().trim();
|
||||
String path = null;
|
||||
int port = mSslSecurityView.isChecked() ? 443 : 80;
|
||||
// Ensure TLS is not set
|
||||
int flags = account.getOrCreateHostAuthRecv(mContext).mFlags & ~HostAuth.FLAG_TLS;
|
||||
|
||||
URI uri = new URI(
|
||||
scheme,
|
||||
HostAuth.getSchemeString(mBaseScheme, flags),
|
||||
userInfo,
|
||||
host,
|
||||
0,
|
||||
port,
|
||||
path,
|
||||
null,
|
||||
null);
|
||||
|
||||
return uri;
|
||||
}
|
||||
|
||||
|
@ -399,21 +404,38 @@ public class AccountSetupExchangeFragment extends AccountServerBaseFragment
|
|||
*/
|
||||
@Override
|
||||
public void onNext() {
|
||||
try {
|
||||
URI uri = getUri();
|
||||
Account setupAccount = SetupData.getAccount();
|
||||
setupAccount.setStoreUri(mContext, uri.toString());
|
||||
setupAccount.setSenderUri(mContext, uri.toString());
|
||||
EmailContent.Account account = SetupData.getAccount();
|
||||
|
||||
// Check for a duplicate account (requires async DB work) and if OK, proceed with check
|
||||
startDuplicateTaskCheck(setupAccount.mId, uri.getHost(), mCacheLoginCredential,
|
||||
SetupData.CHECK_INCOMING);
|
||||
} catch (URISyntaxException use) {
|
||||
/*
|
||||
* It's unrecoverable if we cannot create a URI from components that
|
||||
* we validated to be safe.
|
||||
*/
|
||||
throw new Error(use);
|
||||
String userName = mUsernameView.getText().toString().trim();
|
||||
if (userName.startsWith("\\")) {
|
||||
userName = userName.substring(1);
|
||||
}
|
||||
mCacheLoginCredential = userName;
|
||||
String userPassword = mPasswordView.getText().toString();
|
||||
|
||||
int flags = 0;
|
||||
if (mSslSecurityView.isChecked()) {
|
||||
flags |= HostAuth.FLAG_SSL;
|
||||
}
|
||||
if (mTrustCertificatesView.isChecked()) {
|
||||
flags |= HostAuth.FLAG_TRUST_ALL;
|
||||
}
|
||||
String serverAddress = mServerView.getText().toString().trim();
|
||||
|
||||
int port = mSslSecurityView.isChecked() ? 443 : 80;
|
||||
HostAuth sendAuth = account.getOrCreateHostAuthSend(mContext);
|
||||
sendAuth.setLogin(userName, userPassword);
|
||||
sendAuth.setConnection(mBaseScheme, serverAddress, port, flags);
|
||||
sendAuth.mDomain = null;
|
||||
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext);
|
||||
recvAuth.setLogin(userName, userPassword);
|
||||
recvAuth.setConnection(mBaseScheme, serverAddress, port, flags);
|
||||
recvAuth.mDomain = null;
|
||||
|
||||
// Check for a duplicate account (requires async DB work) and if OK, proceed with check
|
||||
startDuplicateTaskCheck(account.mId, serverAddress, mCacheLoginCredential,
|
||||
SetupData.CHECK_INCOMING);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,9 +19,10 @@ package com.android.email.activity.setup;
|
|||
import com.android.email.AccountBackupRestore;
|
||||
import com.android.email.Email;
|
||||
import com.android.email.R;
|
||||
import com.android.email.mail.Store;
|
||||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.app.Activity;
|
||||
|
@ -54,21 +55,12 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
private final static String STATE_KEY_CREDENTIAL = "AccountSetupIncomingFragment.credential";
|
||||
private final static String STATE_KEY_LOADED = "AccountSetupIncomingFragment.loaded";
|
||||
|
||||
private static final int POP_PORTS[] = {
|
||||
110, 995, 995, 110, 110
|
||||
};
|
||||
private static final String POP_SCHEMES[] = {
|
||||
"pop3", "pop3+ssl+", "pop3+ssl+trustallcerts", "pop3+tls+", "pop3+tls+trustallcerts"
|
||||
};
|
||||
private static final int IMAP_PORTS[] = {
|
||||
143, 993, 993, 143, 143
|
||||
};
|
||||
private static final String IMAP_SCHEMES[] = {
|
||||
"imap", "imap+ssl+", "imap+ssl+trustallcerts", "imap+tls+", "imap+tls+trustallcerts"
|
||||
};
|
||||
private static final int POP3_PORT_NORMAL = 110;
|
||||
private static final int POP3_PORT_SSL = 995;
|
||||
|
||||
private static final int IMAP_PORT_NORMAL = 143;
|
||||
private static final int IMAP_PORT_SSL = 993;
|
||||
|
||||
private int mAccountPorts[];
|
||||
private String mAccountSchemes[];
|
||||
private EditText mUsernameView;
|
||||
private EditText mPasswordView;
|
||||
private TextView mServerLabelView;
|
||||
|
@ -131,18 +123,16 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
|
||||
// Set up spinners
|
||||
SpinnerOption securityTypes[] = {
|
||||
new SpinnerOption(0,
|
||||
context.getString(R.string.account_setup_incoming_security_none_label)),
|
||||
new SpinnerOption(1,
|
||||
context.getString(R.string.account_setup_incoming_security_ssl_label)),
|
||||
new SpinnerOption(2,
|
||||
context.getString(
|
||||
R.string.account_setup_incoming_security_ssl_trust_certificates_label)),
|
||||
new SpinnerOption(3,
|
||||
context.getString(R.string.account_setup_incoming_security_tls_label)),
|
||||
new SpinnerOption(4,
|
||||
context.getString(
|
||||
R.string.account_setup_incoming_security_tls_trust_certificates_label)),
|
||||
new SpinnerOption(HostAuth.FLAG_NONE, context.getString(
|
||||
R.string.account_setup_incoming_security_none_label)),
|
||||
new SpinnerOption(HostAuth.FLAG_SSL, context.getString(
|
||||
R.string.account_setup_incoming_security_ssl_label)),
|
||||
new SpinnerOption(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, context.getString(
|
||||
R.string.account_setup_incoming_security_ssl_trust_certificates_label)),
|
||||
new SpinnerOption(HostAuth.FLAG_TLS, context.getString(
|
||||
R.string.account_setup_incoming_security_tls_label)),
|
||||
new SpinnerOption(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, context.getString(
|
||||
R.string.account_setup_incoming_security_tls_trust_certificates_label)),
|
||||
};
|
||||
|
||||
SpinnerOption deletePolicies[] = {
|
||||
|
@ -290,16 +280,12 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
private void configureEditor() {
|
||||
if (mConfigured) return;
|
||||
Account account = SetupData.getAccount();
|
||||
String protocol = account.mHostAuthRecv.mProtocol;
|
||||
if (protocol.startsWith("pop3")) {
|
||||
mBaseScheme = account.mHostAuthRecv.mProtocol;
|
||||
if (Store.STORE_SCHEME_POP3.equals(mBaseScheme)) {
|
||||
mServerLabelView.setText(R.string.account_setup_incoming_pop_server_label);
|
||||
mAccountPorts = POP_PORTS;
|
||||
mAccountSchemes = POP_SCHEMES;
|
||||
mImapPathPrefixSectionView.setVisibility(View.GONE);
|
||||
} else if (protocol.startsWith("imap")) {
|
||||
} else if (Store.STORE_SCHEME_IMAP.equals(mBaseScheme)) {
|
||||
mServerLabelView.setText(R.string.account_setup_incoming_imap_server_label);
|
||||
mAccountPorts = IMAP_PORTS;
|
||||
mAccountSchemes = IMAP_SCHEMES;
|
||||
mDeletePolicyLabelView.setVisibility(View.GONE);
|
||||
mDeletePolicyView.setVisibility(View.GONE);
|
||||
} else {
|
||||
|
@ -313,61 +299,49 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
*/
|
||||
private void loadSettings() {
|
||||
if (mLoaded) return;
|
||||
try {
|
||||
// TODO this should be accessed directly via the HostAuth structure
|
||||
EmailContent.Account account = SetupData.getAccount();
|
||||
URI uri = new URI(account.getStoreUri(mContext));
|
||||
String username = null;
|
||||
String password = null;
|
||||
if (uri.getUserInfo() != null) {
|
||||
String[] userInfoParts = uri.getUserInfo().split(":", 2);
|
||||
username = userInfoParts[0];
|
||||
if (userInfoParts.length > 1) {
|
||||
password = userInfoParts[1];
|
||||
}
|
||||
}
|
||||
|
||||
if (username != null) {
|
||||
mUsernameView.setText(username);
|
||||
}
|
||||
Account account = SetupData.getAccount();
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext);
|
||||
|
||||
if (password != null) {
|
||||
mPasswordView.setText(password);
|
||||
}
|
||||
|
||||
if (uri.getScheme().startsWith("pop3")) {
|
||||
mLoadedDeletePolicy = account.getDeletePolicy();
|
||||
SpinnerOption.setSpinnerOptionValue(mDeletePolicyView, mLoadedDeletePolicy);
|
||||
} else if (uri.getScheme().startsWith("imap")) {
|
||||
if (uri.getPath() != null && uri.getPath().length() > 0) {
|
||||
mImapPathPrefixView.setText(uri.getPath().substring(1));
|
||||
}
|
||||
} else {
|
||||
throw new Error("Unknown account type: " + account.getStoreUri(mContext));
|
||||
}
|
||||
|
||||
for (int i = 0; i < mAccountSchemes.length; i++) {
|
||||
if (mAccountSchemes[i].equals(uri.getScheme())) {
|
||||
SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, i);
|
||||
}
|
||||
}
|
||||
|
||||
if (uri.getHost() != null) {
|
||||
mServerView.setText(uri.getHost());
|
||||
}
|
||||
|
||||
if (uri.getPort() != -1) {
|
||||
mPortView.setText(Integer.toString(uri.getPort()));
|
||||
} else {
|
||||
updatePortFromSecurityType();
|
||||
}
|
||||
} catch (URISyntaxException use) {
|
||||
/*
|
||||
* We should always be able to parse our own settings.
|
||||
*/
|
||||
throw new Error(use);
|
||||
String username = recvAuth.mLogin;
|
||||
if (username != null) {
|
||||
mUsernameView.setText(username);
|
||||
}
|
||||
String password = recvAuth.mPassword;
|
||||
if (password != null) {
|
||||
mPasswordView.setText(password);
|
||||
}
|
||||
|
||||
if (Store.STORE_SCHEME_POP3.equals(recvAuth.mProtocol)) {
|
||||
mLoadedDeletePolicy = account.getDeletePolicy();
|
||||
SpinnerOption.setSpinnerOptionValue(mDeletePolicyView, mLoadedDeletePolicy);
|
||||
} else if (Store.STORE_SCHEME_IMAP.equals(recvAuth.mProtocol)) {
|
||||
String prefix = recvAuth.mDomain;
|
||||
if (prefix != null && prefix.length() > 0) {
|
||||
mImapPathPrefixView.setText(prefix.substring(1));
|
||||
}
|
||||
} else {
|
||||
throw new Error("Unknown account type: " + account.getStoreUri(mContext));
|
||||
}
|
||||
|
||||
int flags = recvAuth.mFlags;
|
||||
flags &= ~HostAuth.FLAG_AUTHENTICATE;
|
||||
SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, flags);
|
||||
|
||||
String hostname = recvAuth.mAddress;
|
||||
if (hostname != null) {
|
||||
mServerView.setText(hostname);
|
||||
}
|
||||
|
||||
int port = recvAuth.mPort;
|
||||
if (port != HostAuth.PORT_UNKNOWN) {
|
||||
mPortView.setText(Integer.toString(port));
|
||||
} else {
|
||||
updatePortFromSecurityType();
|
||||
}
|
||||
|
||||
// TODO See how to get rid of this. Maybe define an "equals()" for HostAuth?
|
||||
// used to determine if these settings have changed
|
||||
try {
|
||||
mLoadedUri = getUri();
|
||||
} catch (URISyntaxException ignore) {
|
||||
|
@ -400,9 +374,19 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
AccountSettingsUtils.checkPasswordSpaces(mContext, mPasswordView);
|
||||
}
|
||||
|
||||
private void updatePortFromSecurityType() {
|
||||
private int getPortFromSecurityType() {
|
||||
int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value;
|
||||
mPortView.setText(Integer.toString(mAccountPorts[securityType]));
|
||||
boolean useSsl = ((securityType & HostAuth.FLAG_SSL) != 0);
|
||||
int port = useSsl ? IMAP_PORT_SSL : IMAP_PORT_NORMAL; // default to IMAP
|
||||
if (Store.STORE_SCHEME_POP3.equals(mBaseScheme)) {
|
||||
port = useSsl ? POP3_PORT_SSL : POP3_PORT_NORMAL;
|
||||
}
|
||||
return port;
|
||||
}
|
||||
|
||||
private void updatePortFromSecurityType() {
|
||||
int port = getPortFromSecurityType();
|
||||
mPortView.setText(Integer.toString(port));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -425,28 +409,16 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
*/
|
||||
@Override
|
||||
public void saveSettingsAfterSetup() {
|
||||
EmailContent.Account account = SetupData.getAccount();
|
||||
Account account = SetupData.getAccount();
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext);
|
||||
HostAuth sendAuth = account.getOrCreateHostAuthSend(mContext);
|
||||
|
||||
// Set the username and password for the outgoing settings to the username and
|
||||
// password the user just set for incoming. Use the verified host address to try and
|
||||
// pick a smarter outgoing address.
|
||||
try {
|
||||
String hostName =
|
||||
AccountSettingsUtils.inferServerName(account.mHostAuthRecv.mAddress, null, "smtp");
|
||||
URI oldUri = new URI(account.getSenderUri(mContext));
|
||||
URI uri = new URI(
|
||||
oldUri.getScheme(),
|
||||
mUsernameView.getText().toString().trim() + ":"
|
||||
+ mPasswordView.getText().toString(),
|
||||
hostName,
|
||||
oldUri.getPort(),
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
account.setSenderUri(mContext, uri.toString());
|
||||
} catch (URISyntaxException use) {
|
||||
// If we can't set up the URL we just continue. It's only for convenience.
|
||||
}
|
||||
String hostName = AccountSettingsUtils.inferServerName(recvAuth.mAddress, null, "smtp");
|
||||
sendAuth.setLogin(recvAuth.mLogin, recvAuth.mPassword);
|
||||
sendAuth.setConnection(sendAuth.mProtocol, hostName, sendAuth.mPort, sendAuth.mFlags);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -458,20 +430,23 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
protected URI getUri() throws URISyntaxException {
|
||||
int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value;
|
||||
String path = null;
|
||||
if (mAccountSchemes[securityType].startsWith("imap")) {
|
||||
if (Store.STORE_SCHEME_IMAP.equals(mBaseScheme)) {
|
||||
path = "/" + mImapPathPrefixView.getText().toString().trim();
|
||||
}
|
||||
String userName = mUsernameView.getText().toString().trim();
|
||||
mCacheLoginCredential = userName;
|
||||
String userInfo = userName + ":" + mPasswordView.getText();
|
||||
String host = mServerView.getText().toString().trim();
|
||||
int port = Integer.parseInt(mPortView.getText().toString().trim());
|
||||
|
||||
URI uri = new URI(
|
||||
mAccountSchemes[securityType],
|
||||
userName + ":" + mPasswordView.getText(),
|
||||
mServerView.getText().toString().trim(),
|
||||
Integer.parseInt(mPortView.getText().toString().trim()),
|
||||
HostAuth.getSchemeString(mBaseScheme, securityType),
|
||||
userInfo,
|
||||
host,
|
||||
port,
|
||||
path, // path
|
||||
null, // query
|
||||
null);
|
||||
|
||||
return uri;
|
||||
}
|
||||
|
||||
|
@ -480,25 +455,32 @@ public class AccountSetupIncomingFragment extends AccountServerBaseFragment {
|
|||
*/
|
||||
@Override
|
||||
public void onNext() {
|
||||
EmailContent.Account setupAccount = SetupData.getAccount();
|
||||
Account account = SetupData.getAccount();
|
||||
|
||||
setupAccount.setDeletePolicy(
|
||||
(Integer)((SpinnerOption)mDeletePolicyView.getSelectedItem()).value);
|
||||
account.setDeletePolicy(
|
||||
(Integer) ((SpinnerOption) mDeletePolicyView.getSelectedItem()).value);
|
||||
|
||||
HostAuth recvAuth = account.getOrCreateHostAuthRecv(mContext);
|
||||
String userName = mUsernameView.getText().toString().trim();
|
||||
String userPassword = mPasswordView.getText().toString();
|
||||
recvAuth.setLogin(userName, userPassword);
|
||||
|
||||
String serverAddress = mServerView.getText().toString().trim();
|
||||
int serverPort;
|
||||
try {
|
||||
URI uri = getUri();
|
||||
setupAccount.setStoreUri(mContext, uri.toString());
|
||||
|
||||
// Check for a duplicate account (requires async DB work) and if OK, proceed with check
|
||||
startDuplicateTaskCheck(setupAccount.mId, uri.getHost(), mCacheLoginCredential,
|
||||
SetupData.CHECK_INCOMING);
|
||||
} catch (URISyntaxException use) {
|
||||
/*
|
||||
* It's unrecoverable if we cannot create a URI from components that
|
||||
* we validated to be safe.
|
||||
*/
|
||||
throw new Error(use);
|
||||
serverPort = Integer.parseInt(mPortView.getText().toString().trim());
|
||||
} catch (NumberFormatException e) {
|
||||
serverPort = getPortFromSecurityType();
|
||||
Log.d(Logging.LOG_TAG, "Non-integer server port; using '" + serverPort + "'");
|
||||
}
|
||||
int securityType = (Integer) ((SpinnerOption) mSecurityTypeView.getSelectedItem()).value;
|
||||
recvAuth.setConnection(mBaseScheme, serverAddress, serverPort, securityType);
|
||||
recvAuth.mDomain = null;
|
||||
|
||||
// Check for a duplicate account (requires async DB work) and if OK,
|
||||
// proceed with check
|
||||
startDuplicateTaskCheck(
|
||||
account.mId, serverAddress, mCacheLoginCredential, SetupData.CHECK_INCOMING);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -22,6 +22,7 @@ import com.android.email.R;
|
|||
import com.android.emailcommon.Logging;
|
||||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.app.Activity;
|
||||
|
@ -56,13 +57,8 @@ public class AccountSetupOutgoingFragment extends AccountServerBaseFragment
|
|||
|
||||
private final static String STATE_KEY_LOADED = "AccountSetupOutgoingFragment.loaded";
|
||||
|
||||
private static final int SMTP_PORTS[] = {
|
||||
587, 465, 465, 587, 587
|
||||
};
|
||||
|
||||
private static final String SMTP_SCHEMES[] = {
|
||||
"smtp", "smtp+ssl+", "smtp+ssl+trustallcerts", "smtp+tls+", "smtp+tls+trustallcerts"
|
||||
};
|
||||
private static final int SMTP_PORT_NORMAL = 587;
|
||||
private static final int SMTP_PORT_SSL = 465;
|
||||
|
||||
private EditText mUsernameView;
|
||||
private EditText mPasswordView;
|
||||
|
@ -91,6 +87,7 @@ public class AccountSetupOutgoingFragment extends AccountServerBaseFragment
|
|||
if (savedInstanceState != null) {
|
||||
mLoaded = savedInstanceState.getBoolean(STATE_KEY_LOADED, false);
|
||||
}
|
||||
mBaseScheme = "smtp";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -118,15 +115,15 @@ public class AccountSetupOutgoingFragment extends AccountServerBaseFragment
|
|||
|
||||
// Note: Strings are shared with AccountSetupIncomingFragment
|
||||
SpinnerOption securityTypes[] = {
|
||||
new SpinnerOption(0, context.getString(
|
||||
new SpinnerOption(HostAuth.FLAG_NONE, context.getString(
|
||||
R.string.account_setup_incoming_security_none_label)),
|
||||
new SpinnerOption(1, context.getString(
|
||||
new SpinnerOption(HostAuth.FLAG_SSL, context.getString(
|
||||
R.string.account_setup_incoming_security_ssl_label)),
|
||||
new SpinnerOption(2, context.getString(
|
||||
new SpinnerOption(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, context.getString(
|
||||
R.string.account_setup_incoming_security_ssl_trust_certificates_label)),
|
||||
new SpinnerOption(3, context.getString(
|
||||
new SpinnerOption(HostAuth.FLAG_TLS, context.getString(
|
||||
R.string.account_setup_incoming_security_tls_label)),
|
||||
new SpinnerOption(4, context.getString(
|
||||
new SpinnerOption(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, context.getString(
|
||||
R.string.account_setup_incoming_security_tls_trust_certificates_label)),
|
||||
};
|
||||
|
||||
|
@ -258,50 +255,38 @@ public class AccountSetupOutgoingFragment extends AccountServerBaseFragment
|
|||
*/
|
||||
private void loadSettings() {
|
||||
if (mLoaded) return;
|
||||
try {
|
||||
// TODO this should be accessed directly via the HostAuth structure
|
||||
URI uri = new URI(SetupData.getAccount().getSenderUri(mContext));
|
||||
String username = null;
|
||||
String password = null;
|
||||
if (uri.getUserInfo() != null) {
|
||||
String[] userInfoParts = uri.getUserInfo().split(":", 2);
|
||||
username = userInfoParts[0];
|
||||
if (userInfoParts.length > 1) {
|
||||
password = userInfoParts[1];
|
||||
}
|
||||
}
|
||||
|
||||
HostAuth senderAuth = SetupData.getAccount().getOrCreateHostAuthSend(mContext);
|
||||
if ((senderAuth.mFlags & HostAuth.FLAG_AUTHENTICATE) != 0) {
|
||||
String username = senderAuth.mLogin;
|
||||
if (username != null) {
|
||||
mUsernameView.setText(username);
|
||||
mRequireLoginView.setChecked(true);
|
||||
}
|
||||
|
||||
String password = senderAuth.mPassword;
|
||||
if (password != null) {
|
||||
mPasswordView.setText(password);
|
||||
}
|
||||
|
||||
for (int i = 0; i < SMTP_SCHEMES.length; i++) {
|
||||
if (SMTP_SCHEMES[i].equals(uri.getScheme())) {
|
||||
SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, i);
|
||||
}
|
||||
}
|
||||
|
||||
if (uri.getHost() != null) {
|
||||
mServerView.setText(uri.getHost());
|
||||
}
|
||||
|
||||
if (uri.getPort() != -1) {
|
||||
mPortView.setText(Integer.toString(uri.getPort()));
|
||||
} else {
|
||||
updatePortFromSecurityType();
|
||||
}
|
||||
} catch (URISyntaxException use) {
|
||||
/*
|
||||
* We should always be able to parse our own settings.
|
||||
*/
|
||||
throw new Error(use);
|
||||
}
|
||||
|
||||
int flags = senderAuth.mFlags & ~HostAuth.FLAG_AUTHENTICATE;
|
||||
SpinnerOption.setSpinnerOptionValue(mSecurityTypeView, flags);
|
||||
|
||||
String hostname = senderAuth.mAddress;
|
||||
if (hostname != null) {
|
||||
mServerView.setText(hostname);
|
||||
}
|
||||
|
||||
int port = senderAuth.mPort;
|
||||
if (port != -1) {
|
||||
mPortView.setText(Integer.toString(port));
|
||||
} else {
|
||||
updatePortFromSecurityType();
|
||||
}
|
||||
|
||||
// TODO See how to get rid of this. Maybe define an "equals()" for HostAuth?
|
||||
// used to determine if these settings have changed
|
||||
try {
|
||||
mLoadedUri = getUri();
|
||||
} catch (URISyntaxException ignore) {
|
||||
|
@ -350,9 +335,15 @@ public class AccountSetupOutgoingFragment extends AccountServerBaseFragment
|
|||
validateFields();
|
||||
}
|
||||
|
||||
private void updatePortFromSecurityType() {
|
||||
private int getPortFromSecurityType() {
|
||||
int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value;
|
||||
mPortView.setText(Integer.toString(SMTP_PORTS[securityType]));
|
||||
int port = (securityType & HostAuth.FLAG_SSL) != 0 ? SMTP_PORT_SSL : SMTP_PORT_NORMAL;
|
||||
return port;
|
||||
}
|
||||
|
||||
private void updatePortFromSecurityType() {
|
||||
int port = getPortFromSecurityType();
|
||||
mPortView.setText(Integer.toString(port));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -386,12 +377,18 @@ public class AccountSetupOutgoingFragment extends AccountServerBaseFragment
|
|||
if (mRequireLoginView.isChecked()) {
|
||||
userInfo = mUsernameView.getText().toString().trim() + ":" + mPasswordView.getText();
|
||||
}
|
||||
String host = mServerView.getText().toString().trim();
|
||||
String path = null;
|
||||
int port = Integer.parseInt(mPortView.getText().toString().trim());
|
||||
|
||||
URI uri = new URI(
|
||||
SMTP_SCHEMES[securityType],
|
||||
HostAuth.getSchemeString(mBaseScheme, securityType),
|
||||
userInfo,
|
||||
mServerView.getText().toString().trim(),
|
||||
Integer.parseInt(mPortView.getText().toString().trim()),
|
||||
null, null, null);
|
||||
host,
|
||||
port,
|
||||
path,
|
||||
null,
|
||||
null);
|
||||
return uri;
|
||||
}
|
||||
|
||||
|
@ -401,17 +398,23 @@ public class AccountSetupOutgoingFragment extends AccountServerBaseFragment
|
|||
@Override
|
||||
public void onNext() {
|
||||
EmailContent.Account account = SetupData.getAccount();
|
||||
HostAuth sendAuth = account.getOrCreateHostAuthSend(mContext);
|
||||
|
||||
String userName = mUsernameView.getText().toString().trim();
|
||||
String userPassword = mPasswordView.getText().toString();
|
||||
sendAuth.setLogin(userName, userPassword);
|
||||
|
||||
String serverAddress = mServerView.getText().toString().trim();
|
||||
int serverPort;
|
||||
try {
|
||||
// TODO this should be accessed directly via the HostAuth structure
|
||||
URI uri = getUri();
|
||||
account.setSenderUri(mContext, uri.toString());
|
||||
} catch (URISyntaxException use) {
|
||||
/*
|
||||
* It's unrecoverable if we cannot create a URI from components that
|
||||
* we validated to be safe.
|
||||
*/
|
||||
throw new Error(use);
|
||||
serverPort = Integer.parseInt(mPortView.getText().toString().trim());
|
||||
} catch (NumberFormatException e) {
|
||||
serverPort = getPortFromSecurityType();
|
||||
Log.d(Logging.LOG_TAG, "Non-integer server port; using '" + serverPort + "'");
|
||||
}
|
||||
int securityType = (Integer)((SpinnerOption)mSecurityTypeView.getSelectedItem()).value;
|
||||
sendAuth.setConnection(mBaseScheme, serverAddress, serverPort, securityType);
|
||||
sendAuth.mDomain = null;
|
||||
|
||||
mCallback.onProceedNext(SetupData.CHECK_OUTGOING, this);
|
||||
}
|
||||
|
|
|
@ -32,6 +32,7 @@ import android.os.Environment;
|
|||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.os.RemoteException;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
|
@ -454,6 +455,7 @@ public abstract class EmailContent {
|
|||
public static final String DELETED_TABLE_NAME = "Message_Deletes";
|
||||
|
||||
// To refer to a specific message, use ContentUris.withAppendedId(CONTENT_URI, id)
|
||||
@SuppressWarnings("hiding")
|
||||
public static final Uri CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/message");
|
||||
public static final Uri CONTENT_URI_LIMIT_1 = uriWithLimit(CONTENT_URI, 1);
|
||||
public static final Uri SYNCED_CONTENT_URI =
|
||||
|
@ -965,6 +967,7 @@ public abstract class EmailContent {
|
|||
|
||||
public static final class Account extends EmailContent implements AccountColumns, Parcelable {
|
||||
public static final String TABLE_NAME = "Account";
|
||||
@SuppressWarnings("hiding")
|
||||
public static final Uri CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/account");
|
||||
public static final Uri ADD_TO_FIELD_URI =
|
||||
Uri.parse(EmailContent.CONTENT_URI + "/accountIdAddToField");
|
||||
|
@ -1353,37 +1356,7 @@ public abstract class EmailContent {
|
|||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* For compatibility while converting to provider model, set the store URI
|
||||
*
|
||||
* @param context
|
||||
* @param storeUri the new value
|
||||
*/
|
||||
@Deprecated
|
||||
public void setStoreUri(Context context, String storeUri) {
|
||||
// reconstitute or create if necessary
|
||||
if (mHostAuthRecv == null) {
|
||||
if (mHostAuthKeyRecv != 0) {
|
||||
mHostAuthRecv = HostAuth.restoreHostAuthWithId(context, mHostAuthKeyRecv);
|
||||
} else {
|
||||
mHostAuthRecv = new EmailContent.HostAuth();
|
||||
}
|
||||
}
|
||||
|
||||
if (mHostAuthRecv != null) {
|
||||
mHostAuthRecv.setStoreUri(storeUri);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* For compatibility while converting to provider model, set the sender URI
|
||||
*
|
||||
* @param context
|
||||
* @param senderUri the new value
|
||||
*/
|
||||
@Deprecated
|
||||
public void setSenderUri(Context context, String senderUri) {
|
||||
// reconstitute or create if necessary
|
||||
public HostAuth getOrCreateHostAuthSend(Context context) {
|
||||
if (mHostAuthSend == null) {
|
||||
if (mHostAuthKeySend != 0) {
|
||||
mHostAuthSend = HostAuth.restoreHostAuthWithId(context, mHostAuthKeySend);
|
||||
|
@ -1391,10 +1364,18 @@ public abstract class EmailContent {
|
|||
mHostAuthSend = new EmailContent.HostAuth();
|
||||
}
|
||||
}
|
||||
return mHostAuthSend;
|
||||
}
|
||||
|
||||
if (mHostAuthSend != null) {
|
||||
mHostAuthSend.setStoreUri(senderUri);
|
||||
public HostAuth getOrCreateHostAuthRecv(Context context) {
|
||||
if (mHostAuthRecv == null) {
|
||||
if (mHostAuthKeyRecv != 0) {
|
||||
mHostAuthRecv = HostAuth.restoreHostAuthWithId(context, mHostAuthKeyRecv);
|
||||
} else {
|
||||
mHostAuthRecv = new EmailContent.HostAuth();
|
||||
}
|
||||
}
|
||||
return mHostAuthRecv;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2569,10 +2550,15 @@ public abstract class EmailContent {
|
|||
@SuppressWarnings("hiding")
|
||||
public static final Uri CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/hostauth");
|
||||
|
||||
public static final int FLAG_SSL = 1;
|
||||
public static final int FLAG_TLS = 2;
|
||||
public static final int FLAG_AUTHENTICATE = 4;
|
||||
public static final int FLAG_TRUST_ALL_CERTIFICATES = 8;
|
||||
public static final int PORT_UNKNOWN = -1;
|
||||
|
||||
public static final int FLAG_NONE = 0x00; // No flags
|
||||
public static final int FLAG_SSL = 0x01; // Use SSL
|
||||
public static final int FLAG_TLS = 0x02; // Use TLS
|
||||
public static final int FLAG_AUTHENTICATE = 0x04; // Use name/password for authentication
|
||||
public static final int FLAG_TRUST_ALL = 0x08; // Trust all certificates
|
||||
// Mask of settings directly configurable by the user
|
||||
public static final int USER_CONFIG_MASK = 0x0b;
|
||||
|
||||
public String mProtocol;
|
||||
public String mAddress;
|
||||
|
@ -2581,6 +2567,7 @@ public abstract class EmailContent {
|
|||
public String mLogin;
|
||||
public String mPassword;
|
||||
public String mDomain;
|
||||
// TODO Remove all vestiges of this
|
||||
public long mAccountKey; // DEPRECATED - Will not be set or stored
|
||||
|
||||
public static final int CONTENT_ID_COLUMN = 0;
|
||||
|
@ -2607,7 +2594,7 @@ public abstract class EmailContent {
|
|||
mBaseUri = CONTENT_URI;
|
||||
|
||||
// other defaults policy)
|
||||
mPort = -1;
|
||||
mPort = PORT_UNKNOWN;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2632,6 +2619,52 @@ public abstract class EmailContent {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the scheme for the specified flags.
|
||||
*/
|
||||
public static String getSchemeString(String protocol, int flags) {
|
||||
String security = "";
|
||||
switch (flags & USER_CONFIG_MASK) {
|
||||
case FLAG_SSL:
|
||||
security = "+ssl+";
|
||||
break;
|
||||
case FLAG_SSL | FLAG_TRUST_ALL:
|
||||
security = "+ssl+trustallcerts";
|
||||
break;
|
||||
case FLAG_TLS:
|
||||
security = "+tls+";
|
||||
break;
|
||||
case FLAG_TLS | FLAG_TRUST_ALL:
|
||||
security = "+tls+trustallcerts";
|
||||
break;
|
||||
}
|
||||
return protocol + security;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the flags for the specified scheme.
|
||||
*/
|
||||
public static int getSchemeFlags(String scheme) {
|
||||
String[] schemeParts = scheme.split("\\+");
|
||||
int flags = HostAuth.FLAG_NONE;
|
||||
if (schemeParts.length >= 2) {
|
||||
String part1 = schemeParts[1];
|
||||
if ("ssl".equals(part1)) {
|
||||
flags |= HostAuth.FLAG_SSL;
|
||||
} else if ("tls".equals(part1)) {
|
||||
flags |= HostAuth.FLAG_TLS;
|
||||
}
|
||||
if (schemeParts.length >= 3) {
|
||||
String part2 = schemeParts[2];
|
||||
if ("trustallcerts".equals(part2)) {
|
||||
flags |= HostAuth.FLAG_TRUST_ALL;
|
||||
}
|
||||
}
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restore(Cursor cursor) {
|
||||
mBaseUri = CONTENT_URI;
|
||||
|
@ -2667,37 +2700,20 @@ public abstract class EmailContent {
|
|||
* @return a string in the form of a Uri, as used by the other parts of the email app
|
||||
*/
|
||||
public String getStoreUri() {
|
||||
String security;
|
||||
switch (mFlags & (FLAG_SSL | FLAG_TLS | FLAG_TRUST_ALL_CERTIFICATES)) {
|
||||
case FLAG_SSL:
|
||||
security = "+ssl+";
|
||||
break;
|
||||
case FLAG_SSL | FLAG_TRUST_ALL_CERTIFICATES:
|
||||
security = "+ssl+trustallcerts";
|
||||
break;
|
||||
case FLAG_TLS:
|
||||
security = "+tls+";
|
||||
break;
|
||||
case FLAG_TLS | FLAG_TRUST_ALL_CERTIFICATES:
|
||||
security = "+tls+trustallcerts";
|
||||
break;
|
||||
default:
|
||||
security = "";
|
||||
break;
|
||||
}
|
||||
String userInfo = null;
|
||||
if ((mFlags & FLAG_AUTHENTICATE) != 0) {
|
||||
String trimUser = (mLogin != null) ? mLogin.trim() : "";
|
||||
String password = (mPassword != null) ? mPassword : "";
|
||||
userInfo = trimUser + ":" + password;
|
||||
}
|
||||
String scheme = getSchemeString(mProtocol, mFlags);
|
||||
String address = (mAddress != null) ? mAddress.trim() : null;
|
||||
String path = (mDomain != null) ? "/" + mDomain : null;
|
||||
|
||||
URI uri;
|
||||
try {
|
||||
uri = new URI(
|
||||
mProtocol + security,
|
||||
scheme,
|
||||
userInfo,
|
||||
address,
|
||||
mPort,
|
||||
|
@ -2711,77 +2727,73 @@ public abstract class EmailContent {
|
|||
}
|
||||
|
||||
/**
|
||||
* For compatibility while converting to provider model, set fields from a "store URI"
|
||||
*
|
||||
* @param uriString a String containing a Uri
|
||||
* Sets the user name and password from URI user info string
|
||||
*/
|
||||
@Deprecated
|
||||
public void setStoreUri(String uriString) {
|
||||
try {
|
||||
URI uri = new URI(uriString);
|
||||
mLogin = null;
|
||||
mPassword = null;
|
||||
mFlags &= ~FLAG_AUTHENTICATE;
|
||||
if (uri.getUserInfo() != null) {
|
||||
String[] userInfoParts = uri.getUserInfo().split(":", 2);
|
||||
mLogin = userInfoParts[0];
|
||||
mFlags |= FLAG_AUTHENTICATE;
|
||||
if (userInfoParts.length > 1) {
|
||||
mPassword = userInfoParts[1];
|
||||
}
|
||||
public void setLogin(String userInfo) {
|
||||
String userName = null;
|
||||
String userPassword = null;
|
||||
if (!TextUtils.isEmpty(userInfo)) {
|
||||
String[] userInfoParts = userInfo.split(":", 2);
|
||||
userName = userInfoParts[0];
|
||||
if (userInfoParts.length > 1) {
|
||||
userPassword = userInfoParts[1];
|
||||
}
|
||||
|
||||
// Set protocol, security, and additional flags based on uri scheme
|
||||
String[] schemeParts = uri.getScheme().split("\\+");
|
||||
mProtocol = (schemeParts.length >= 1) ? schemeParts[0] : null;
|
||||
mFlags &= ~(FLAG_SSL | FLAG_TLS | FLAG_TRUST_ALL_CERTIFICATES);
|
||||
boolean ssl = false;
|
||||
if (schemeParts.length >= 2) {
|
||||
String part1 = schemeParts[1];
|
||||
if ("ssl".equals(part1)) {
|
||||
ssl = true;
|
||||
mFlags |= FLAG_SSL;
|
||||
} else if ("tls".equals(part1)) {
|
||||
mFlags |= FLAG_TLS;
|
||||
}
|
||||
if (schemeParts.length >= 3) {
|
||||
String part2 = schemeParts[2];
|
||||
if ("trustallcerts".equals(part2)) {
|
||||
mFlags |= FLAG_TRUST_ALL_CERTIFICATES;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mAddress = uri.getHost();
|
||||
mPort = uri.getPort();
|
||||
if (mPort == -1) {
|
||||
// infer port# from protocol + security
|
||||
// SSL implies a different port - TLS runs in the "regular" port
|
||||
// TODO: This really shouldn't be here - it should have been set up
|
||||
// in the account setup screens.
|
||||
if ("pop3".equals(mProtocol)) {
|
||||
mPort = ssl ? 995 : 110;
|
||||
} else if ("imap".equals(mProtocol)) {
|
||||
mPort = ssl ? 993 : 143;
|
||||
} else if ("eas".equals(mProtocol)) {
|
||||
mPort = ssl ? 443 : 80;
|
||||
} else if ("smtp".equals(mProtocol)) {
|
||||
mPort = ssl ? 465 : 587;
|
||||
}
|
||||
}
|
||||
|
||||
if (uri.getPath() != null && uri.getPath().length() > 0) {
|
||||
mDomain = uri.getPath().substring(1);
|
||||
}
|
||||
|
||||
|
||||
} catch (URISyntaxException use) {
|
||||
/*
|
||||
* We should always be able to parse our own settings.
|
||||
*/
|
||||
throw new Error(use);
|
||||
}
|
||||
setLogin(userName, userPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the user name and password
|
||||
*/
|
||||
public void setLogin(String userName, String userPassword) {
|
||||
mLogin = userName;
|
||||
mPassword = userPassword;
|
||||
|
||||
if (mLogin == null) {
|
||||
mFlags &= ~FLAG_AUTHENTICATE;
|
||||
} else {
|
||||
mFlags |= FLAG_AUTHENTICATE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the connection values of the auth structure per the given scheme, host and port.
|
||||
*/
|
||||
public void setConnection(String scheme, String host, int port) {
|
||||
String[] schemeParts = scheme.split("\\+");
|
||||
String protocol = schemeParts[0];
|
||||
int flags = getSchemeFlags(scheme);
|
||||
|
||||
setConnection(protocol, host, port, flags);
|
||||
}
|
||||
|
||||
public void setConnection(String protocol, String address, int port, int flags) {
|
||||
// Set protocol, security, and additional flags based on uri scheme
|
||||
mProtocol = protocol;
|
||||
|
||||
mFlags &= ~(FLAG_SSL | FLAG_TLS | FLAG_TRUST_ALL);
|
||||
mFlags |= (flags & USER_CONFIG_MASK);
|
||||
|
||||
mAddress = address;
|
||||
mPort = port;
|
||||
if (mPort == PORT_UNKNOWN) {
|
||||
boolean useSSL = ((mFlags & FLAG_SSL) != 0);
|
||||
// infer port# from protocol + security
|
||||
// SSL implies a different port - TLS runs in the "regular" port
|
||||
// NOTE: Although the port should be setup in the various setup screens, this
|
||||
// block cannot easily be moved because we get process URIs from other sources
|
||||
// (e.g. for tests, provider templates and account restore) that may or may not
|
||||
// have a port specified.
|
||||
if ("pop3".equals(mProtocol)) {
|
||||
mPort = useSSL ? 995 : 110;
|
||||
} else if ("imap".equals(mProtocol)) {
|
||||
mPort = useSSL ? 993 : 143;
|
||||
} else if ("eas".equals(mProtocol)) {
|
||||
mPort = useSSL ? 443 : 80;
|
||||
} else if ("smtp".equals(mProtocol)) {
|
||||
mPort = useSSL ? 465 : 587;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -64,6 +64,8 @@ import java.io.IOException;
|
|||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.CharBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
|
@ -1107,4 +1109,21 @@ public class Utility {
|
|||
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
return i;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legacy URI parser. Used in one of three different scenarios:
|
||||
* 1. Backup / Restore of account
|
||||
* 2. Parsing template from provider.xml
|
||||
* 3. Forcefully creating URI for test
|
||||
*/
|
||||
public static void setHostAuthFromString(HostAuth auth, String uriString)
|
||||
throws URISyntaxException {
|
||||
URI uri = new URI(uriString);
|
||||
String path = uri.getPath();
|
||||
if (path != null && path.length() > 0) {
|
||||
auth.mDomain = path.substring(1);
|
||||
}
|
||||
auth.setLogin(uri.getUserInfo());
|
||||
auth.setConnection(uri.getScheme(), uri.getHost(), uri.getPort());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -242,7 +242,7 @@ public class EasSyncService extends AbstractSyncService {
|
|||
return;
|
||||
}
|
||||
mSsl = (ha.mFlags & HostAuth.FLAG_SSL) != 0;
|
||||
mTrustSsl = (ha.mFlags & HostAuth.FLAG_TRUST_ALL_CERTIFICATES) != 0;
|
||||
mTrustSsl = (ha.mFlags & HostAuth.FLAG_TRUST_ALL) != 0;
|
||||
}
|
||||
|
||||
private EasSyncService(String prefix) {
|
||||
|
@ -853,7 +853,7 @@ public class EasSyncService extends AbstractSyncService {
|
|||
svc.mUserName = ha.mLogin;
|
||||
svc.mPassword = ha.mPassword;
|
||||
svc.mSsl = (ha.mFlags & HostAuth.FLAG_SSL) != 0;
|
||||
svc.mTrustSsl = (ha.mFlags & HostAuth.FLAG_TRUST_ALL_CERTIFICATES) != 0;
|
||||
svc.mTrustSsl = (ha.mFlags & HostAuth.FLAG_TRUST_ALL) != 0;
|
||||
svc.mDeviceId = Device.getDeviceId(context);
|
||||
svc.mAccount = acct;
|
||||
Serializer s = new Serializer();
|
||||
|
|
|
@ -18,6 +18,7 @@ package com.android.email.activity.setup;
|
|||
|
||||
import com.android.email.mail.Store;
|
||||
import com.android.emailcommon.provider.EmailContent.Account;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.content.ContentUris;
|
||||
import android.content.Context;
|
||||
|
@ -28,6 +29,8 @@ import android.preference.PreferenceFragment;
|
|||
import android.test.ActivityInstrumentationTestCase2;
|
||||
import android.test.suitebuilder.annotation.MediumTest;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
/**
|
||||
* Tests of basic UI logic in the Account Settings fragment.
|
||||
*
|
||||
|
@ -129,7 +132,7 @@ public class AccountSettingsXLTests extends ActivityInstrumentationTestCase2<Acc
|
|||
*/
|
||||
private void getActivityAndFields() throws Throwable {
|
||||
final AccountSettingsXL theActivity = getActivity();
|
||||
|
||||
|
||||
runTestOnUiThread(new Runnable() {
|
||||
public void run() {
|
||||
PreferenceFragment f = (PreferenceFragment) theActivity.mCurrentFragment;
|
||||
|
@ -155,13 +158,14 @@ public class AccountSettingsXLTests extends ActivityInstrumentationTestCase2<Acc
|
|||
/**
|
||||
* Create an intent with the Account in it
|
||||
*/
|
||||
private Intent getTestIntent(String name, String storeUri, String senderUri) {
|
||||
private Intent getTestIntent(String name, String storeUri, String senderUri)
|
||||
throws URISyntaxException {
|
||||
mAccount = new Account();
|
||||
mAccount.setSenderName(name);
|
||||
// For EAS, at least, email address is required
|
||||
mAccount.mEmailAddress = "user@server.com";
|
||||
mAccount.setStoreUri(mContext, storeUri);
|
||||
mAccount.setSenderUri(mContext, senderUri);
|
||||
Utility.setHostAuthFromString(mAccount.getOrCreateHostAuthRecv(mContext), storeUri);
|
||||
Utility.setHostAuthFromString(mAccount.getOrCreateHostAuthSend(mContext), senderUri);
|
||||
mAccount.save(mContext);
|
||||
mAccountId = mAccount.mId;
|
||||
|
||||
|
|
|
@ -19,6 +19,8 @@ package com.android.email.activity.setup;
|
|||
import com.android.email.R;
|
||||
import com.android.email.mail.Store;
|
||||
import com.android.emailcommon.provider.EmailContent.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.content.ContentUris;
|
||||
import android.content.Context;
|
||||
|
@ -28,6 +30,7 @@ import android.test.ActivityUnitTestCase;
|
|||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
import android.view.View;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
|
@ -69,7 +72,8 @@ public class AccountSetupAccountTypeTests
|
|||
/**
|
||||
* Test store type limit enforcement
|
||||
*/
|
||||
public void testStoreTypeLimits() {
|
||||
public void testStoreTypeLimits()
|
||||
throws URISyntaxException {
|
||||
createTestAccount("scheme1");
|
||||
createTestAccount("scheme1");
|
||||
createTestAccount("scheme2");
|
||||
|
@ -94,7 +98,8 @@ public class AccountSetupAccountTypeTests
|
|||
/**
|
||||
* Confirm that EAS is presented, when supported.
|
||||
*/
|
||||
public void testEasOffered() {
|
||||
public void testEasOffered()
|
||||
throws URISyntaxException {
|
||||
createTestAccount("scheme1");
|
||||
AccountSetupAccountType activity = startActivity(getTestIntent(), null, null);
|
||||
View exchangeButton = activity.findViewById(R.id.exchange);
|
||||
|
@ -110,9 +115,11 @@ public class AccountSetupAccountTypeTests
|
|||
/**
|
||||
* Create a dummy account with minimal fields
|
||||
*/
|
||||
private Account createTestAccount(String scheme) {
|
||||
private Account createTestAccount(String scheme)
|
||||
throws URISyntaxException {
|
||||
Account account = new Account();
|
||||
account.setStoreUri(mContext, scheme + "://user:pass@server.com:123");
|
||||
HostAuth auth = account.getOrCreateHostAuthRecv(mContext);
|
||||
Utility.setHostAuthFromString(auth, scheme + "://user:pass@server.com:123");
|
||||
account.save(mContext);
|
||||
mAccounts.add(account);
|
||||
SetupData.init(SetupData.FLOW_MODE_NORMAL, account);
|
||||
|
|
|
@ -21,7 +21,9 @@ import com.android.email.provider.ProviderTestUtils;
|
|||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.Account;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
import android.test.UiThreadTest;
|
||||
|
@ -73,7 +75,8 @@ public class AccountSetupExchangeTests extends
|
|||
/**
|
||||
* Test processing with a complete, good URI -> good fields
|
||||
*/
|
||||
public void testGoodUri() {
|
||||
public void testGoodUri()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("eas://user:password@server.com");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
|
@ -86,7 +89,8 @@ public class AccountSetupExchangeTests extends
|
|||
/**
|
||||
* No user is not OK - not enabled
|
||||
*/
|
||||
public void testBadUriNoUser() {
|
||||
public void testBadUriNoUser()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("eas://:password@server.com");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
|
@ -96,7 +100,8 @@ public class AccountSetupExchangeTests extends
|
|||
/**
|
||||
* No password is not OK - not enabled
|
||||
*/
|
||||
public void testBadUriNoPassword() {
|
||||
public void testBadUriNoPassword()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("eas://user@server.com");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
|
@ -187,7 +192,7 @@ public class AccountSetupExchangeTests extends
|
|||
account.mHostAuthRecv = ProviderTestUtils.setupHostAuth(
|
||||
"eas", "hostauth", 1, false, mActivity.getBaseContext());
|
||||
account.mHostAuthRecv.mFlags |= HostAuth.FLAG_SSL;
|
||||
account.mHostAuthRecv.mFlags &= ~HostAuth.FLAG_TRUST_ALL_CERTIFICATES;
|
||||
account.mHostAuthRecv.mFlags &= ~HostAuth.FLAG_TRUST_ALL;
|
||||
mActivity.mFragment.mLoaded = false;
|
||||
boolean loadResult = mActivity.mFragment.loadSettings(account);
|
||||
assertTrue(loadResult);
|
||||
|
@ -197,7 +202,7 @@ public class AccountSetupExchangeTests extends
|
|||
|
||||
// Setup host auth with variants of SSL enabled and check. This also enables the
|
||||
// "trust certificates" checkbox (not checked, but visible now).
|
||||
account.mHostAuthRecv.mFlags |= HostAuth.FLAG_TRUST_ALL_CERTIFICATES;
|
||||
account.mHostAuthRecv.mFlags |= HostAuth.FLAG_TRUST_ALL;
|
||||
mActivity.mFragment.mLoaded = false;
|
||||
loadResult = mActivity.mFragment.loadSettings(account);
|
||||
assertTrue(loadResult);
|
||||
|
@ -232,9 +237,12 @@ public class AccountSetupExchangeTests extends
|
|||
/**
|
||||
* Create an intent with the Account in it
|
||||
*/
|
||||
private Intent getTestIntent(String storeUriString) {
|
||||
private Intent getTestIntent(String storeUriString)
|
||||
throws URISyntaxException {
|
||||
EmailContent.Account account = new EmailContent.Account();
|
||||
account.setStoreUri(getInstrumentation().getTargetContext(), storeUriString);
|
||||
Context context = getInstrumentation().getTargetContext();
|
||||
HostAuth auth = account.getOrCreateHostAuthRecv(context);
|
||||
Utility.setHostAuthFromString(auth, storeUriString);
|
||||
Intent i = new Intent(Intent.ACTION_MAIN);
|
||||
SetupData.init(SetupData.FLOW_MODE_NORMAL, account);
|
||||
SetupData.setAllowAutodiscover(false);
|
||||
|
|
|
@ -18,7 +18,10 @@ package com.android.email.activity.setup;
|
|||
|
||||
import com.android.email.R;
|
||||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
import android.test.UiThreadTest;
|
||||
|
@ -34,14 +37,14 @@ import java.net.URISyntaxException;
|
|||
* runtest -c com.android.email.activity.setup.AccountSetupIncomingTests email
|
||||
*/
|
||||
@MediumTest
|
||||
public class AccountSetupIncomingTests extends
|
||||
public class AccountSetupIncomingTests extends
|
||||
ActivityInstrumentationTestCase2<AccountSetupIncoming> {
|
||||
|
||||
|
||||
private AccountSetupIncoming mActivity;
|
||||
private AccountSetupIncomingFragment mFragment;
|
||||
private EditText mServerView;
|
||||
private EditText mPasswordView;
|
||||
|
||||
|
||||
public AccountSetupIncomingTests() {
|
||||
super(AccountSetupIncoming.class);
|
||||
}
|
||||
|
@ -60,47 +63,51 @@ public class AccountSetupIncomingTests extends
|
|||
Intent i = getTestIntent("imap://user:password@server.com:999");
|
||||
setActivityIntent(i);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test processing with a complete, good URI -> good fields
|
||||
*/
|
||||
public void testGoodUri() {
|
||||
public void testGoodUri()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("imap://user:password@server.com:999");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* No user is not OK - not enabled
|
||||
*/
|
||||
public void testBadUriNoUser() {
|
||||
public void testBadUriNoUser()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("imap://:password@server.com:999");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* No password is not OK - not enabled
|
||||
*/
|
||||
public void testBadUriNoPassword() {
|
||||
public void testBadUriNoPassword()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("imap://user@server.com:999");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* No port is OK - still enabled
|
||||
*/
|
||||
public void testGoodUriNoPort() {
|
||||
public void testGoodUriNoPort()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("imap://user:password@server.com");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test for non-standard but OK server names
|
||||
*/
|
||||
|
@ -108,11 +115,11 @@ public class AccountSetupIncomingTests extends
|
|||
public void testGoodServerVariants() {
|
||||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
|
||||
|
||||
mServerView.setText(" server.com ");
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test for non-empty but non-OK server names
|
||||
*/
|
||||
|
@ -120,10 +127,10 @@ public class AccountSetupIncomingTests extends
|
|||
public void testBadServerVariants() {
|
||||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
|
||||
|
||||
mServerView.setText(" ");
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
|
||||
|
||||
mServerView.setText("serv$er.com");
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
@ -169,7 +176,7 @@ public class AccountSetupIncomingTests extends
|
|||
* TODO: A series of tests to explore the logic around security models & ports
|
||||
* TODO: A series of tests exploring differences between IMAP and POP3
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Get the activity (which causes it to be started, using our intent) and get the UI fields
|
||||
*/
|
||||
|
@ -179,13 +186,16 @@ public class AccountSetupIncomingTests extends
|
|||
mServerView = (EditText) mActivity.findViewById(R.id.account_server);
|
||||
mPasswordView = (EditText) mActivity.findViewById(R.id.account_password);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create an intent with the Account in it
|
||||
*/
|
||||
private Intent getTestIntent(String storeUriString) {
|
||||
private Intent getTestIntent(String storeUriString)
|
||||
throws URISyntaxException {
|
||||
EmailContent.Account account = new EmailContent.Account();
|
||||
account.setStoreUri(getInstrumentation().getTargetContext(), storeUriString);
|
||||
Context context = getInstrumentation().getTargetContext();
|
||||
HostAuth auth = account.getOrCreateHostAuthRecv(context);
|
||||
Utility.setHostAuthFromString(auth, storeUriString);
|
||||
SetupData.init(SetupData.FLOW_MODE_NORMAL, account);
|
||||
return new Intent(Intent.ACTION_MAIN);
|
||||
}
|
||||
|
|
|
@ -19,7 +19,10 @@ package com.android.email.activity.setup;
|
|||
import com.android.email.R;
|
||||
import com.android.email.mail.Store;
|
||||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
import android.test.suitebuilder.annotation.MediumTest;
|
||||
|
@ -28,19 +31,21 @@ import android.widget.CheckBox;
|
|||
import android.widget.Spinner;
|
||||
import android.widget.SpinnerAdapter;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
/**
|
||||
* Tests of basic UI logic in the AccountSetupOptions screen.
|
||||
* You can run this entire test case with:
|
||||
* runtest -c com.android.email.activity.setup.AccountSetupOptionsTests email
|
||||
*/
|
||||
@MediumTest
|
||||
public class AccountSetupOptionsTests
|
||||
public class AccountSetupOptionsTests
|
||||
extends ActivityInstrumentationTestCase2<AccountSetupOptions> {
|
||||
|
||||
private AccountSetupOptions mActivity;
|
||||
private Spinner mCheckFrequencyView;
|
||||
private CheckBox mBackgroundAttachmentsView;
|
||||
|
||||
|
||||
public AccountSetupOptionsTests() {
|
||||
super(AccountSetupOptions.class);
|
||||
}
|
||||
|
@ -48,44 +53,47 @@ public class AccountSetupOptionsTests
|
|||
/**
|
||||
* Test that POP accounts aren't displayed with a push option
|
||||
*/
|
||||
public void testPushOptionPOP() {
|
||||
public void testPushOptionPOP()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("Name", "pop3://user:password@server.com");
|
||||
this.setActivityIntent(i);
|
||||
|
||||
|
||||
getActivityAndFields();
|
||||
|
||||
|
||||
boolean hasPush = frequencySpinnerHasValue(EmailContent.Account.CHECK_INTERVAL_PUSH);
|
||||
assertFalse(hasPush);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test that IMAP accounts aren't displayed with a push option
|
||||
*/
|
||||
public void testPushOptionIMAP() {
|
||||
public void testPushOptionIMAP()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("Name", "imap://user:password@server.com");
|
||||
this.setActivityIntent(i);
|
||||
|
||||
|
||||
getActivityAndFields();
|
||||
|
||||
|
||||
boolean hasPush = frequencySpinnerHasValue(EmailContent.Account.CHECK_INTERVAL_PUSH);
|
||||
assertFalse(hasPush);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test that EAS accounts are displayed with a push option
|
||||
*/
|
||||
public void testPushOptionEAS() {
|
||||
public void testPushOptionEAS()
|
||||
throws URISyntaxException {
|
||||
// This test should only be run if EAS is supported
|
||||
if (Store.StoreInfo.getStoreInfo("eas", this.getInstrumentation().getTargetContext())
|
||||
if (Store.StoreInfo.getStoreInfo("eas", this.getInstrumentation().getTargetContext())
|
||||
== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Intent i = getTestIntent("Name", "eas://user:password@server.com");
|
||||
this.setActivityIntent(i);
|
||||
|
||||
|
||||
getActivityAndFields();
|
||||
|
||||
|
||||
boolean hasPush = frequencySpinnerHasValue(EmailContent.Account.CHECK_INTERVAL_PUSH);
|
||||
assertTrue(hasPush);
|
||||
}
|
||||
|
@ -93,23 +101,26 @@ public class AccountSetupOptionsTests
|
|||
/**
|
||||
* Test that POP3 accounts don't have a "background attachments" checkbox
|
||||
*/
|
||||
public void testBackgroundAttachmentsPop() {
|
||||
public void testBackgroundAttachmentsPop()
|
||||
throws URISyntaxException {
|
||||
checkBackgroundAttachments("pop3://user:password@server.com", false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that IMAP accounts have a "background attachments" checkbox
|
||||
*/
|
||||
public void testBackgroundAttachmentsImap() {
|
||||
public void testBackgroundAttachmentsImap()
|
||||
throws URISyntaxException {
|
||||
checkBackgroundAttachments("imap://user:password@server.com", true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that EAS accounts have a "background attachments" checkbox
|
||||
*/
|
||||
public void testBackgroundAttachmentsEas() {
|
||||
public void testBackgroundAttachmentsEas()
|
||||
throws URISyntaxException {
|
||||
// This test should only be run if EAS is supported
|
||||
if (Store.StoreInfo.getStoreInfo("eas", this.getInstrumentation().getTargetContext())
|
||||
if (Store.StoreInfo.getStoreInfo("eas", this.getInstrumentation().getTargetContext())
|
||||
== null) {
|
||||
return;
|
||||
}
|
||||
|
@ -117,9 +128,10 @@ public class AccountSetupOptionsTests
|
|||
}
|
||||
|
||||
/**
|
||||
* Common code to check that the "background attachments" checkbox is shown/hidden properly
|
||||
* Common code to check that the "background attachments" checkbox is shown/hidden properly
|
||||
*/
|
||||
private void checkBackgroundAttachments(String storeUri, boolean expectVisible) {
|
||||
private void checkBackgroundAttachments(String storeUri, boolean expectVisible)
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("Name", storeUri);
|
||||
this.setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
|
@ -144,7 +156,7 @@ public class AccountSetupOptionsTests
|
|||
mBackgroundAttachmentsView = (CheckBox) mActivity.findViewById(
|
||||
R.id.account_background_attachments);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test the frequency values list for a particular value
|
||||
*/
|
||||
|
@ -159,16 +171,19 @@ public class AccountSetupOptionsTests
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create an intent with the Account in it
|
||||
*/
|
||||
private Intent getTestIntent(String name, String storeUri) {
|
||||
private Intent getTestIntent(String name, String storeUri)
|
||||
throws URISyntaxException {
|
||||
EmailContent.Account account = new EmailContent.Account();
|
||||
account.setSenderName(name);
|
||||
account.setStoreUri(getInstrumentation().getTargetContext(), storeUri);
|
||||
Context context = getInstrumentation().getTargetContext();
|
||||
HostAuth auth = account.getOrCreateHostAuthRecv(context);
|
||||
Utility.setHostAuthFromString(auth, storeUri);
|
||||
SetupData.init(SetupData.FLOW_MODE_NORMAL, account);
|
||||
return new Intent(Intent.ACTION_MAIN);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -18,7 +18,10 @@ package com.android.email.activity.setup;
|
|||
|
||||
import com.android.email.R;
|
||||
import com.android.emailcommon.provider.EmailContent;
|
||||
import com.android.emailcommon.provider.EmailContent.HostAuth;
|
||||
import com.android.emailcommon.utility.Utility;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.test.ActivityInstrumentationTestCase2;
|
||||
import android.test.UiThreadTest;
|
||||
|
@ -34,14 +37,14 @@ import java.net.URISyntaxException;
|
|||
* runtest -c com.android.email.activity.setup.AccountSetupOutgoingTests email
|
||||
*/
|
||||
@MediumTest
|
||||
public class AccountSetupOutgoingTests extends
|
||||
public class AccountSetupOutgoingTests extends
|
||||
ActivityInstrumentationTestCase2<AccountSetupOutgoing> {
|
||||
|
||||
private AccountSetupOutgoing mActivity;
|
||||
private AccountSetupOutgoingFragment mFragment;
|
||||
private EditText mServerView;
|
||||
private EditText mPasswordView;
|
||||
|
||||
|
||||
public AccountSetupOutgoingTests() {
|
||||
super(AccountSetupOutgoing.class);
|
||||
}
|
||||
|
@ -60,7 +63,7 @@ public class AccountSetupOutgoingTests extends
|
|||
Intent i = getTestIntent("smtp://user:password@server.com:999");
|
||||
setActivityIntent(i);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test processing with a complete, good URI -> good fields
|
||||
*/
|
||||
|
@ -68,37 +71,40 @@ public class AccountSetupOutgoingTests extends
|
|||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* No user is not OK - not enabled
|
||||
*/
|
||||
public void testBadUriNoUser() {
|
||||
public void testBadUriNoUser()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("smtp://:password@server.com:999");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* No password is not OK - not enabled
|
||||
*/
|
||||
public void testBadUriNoPassword() {
|
||||
public void testBadUriNoPassword()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("smtp://user@server.com:999");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* No port is OK - still enabled
|
||||
*/
|
||||
public void testGoodUriNoPort() {
|
||||
public void testGoodUriNoPort()
|
||||
throws URISyntaxException {
|
||||
Intent i = getTestIntent("smtp://user:password@server.com");
|
||||
setActivityIntent(i);
|
||||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test for non-standard but OK server names
|
||||
*/
|
||||
|
@ -106,11 +112,11 @@ public class AccountSetupOutgoingTests extends
|
|||
public void testGoodServerVariants() {
|
||||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
|
||||
|
||||
mServerView.setText(" server.com ");
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test for non-empty but non-OK server names
|
||||
*/
|
||||
|
@ -118,10 +124,10 @@ public class AccountSetupOutgoingTests extends
|
|||
public void testBadServerVariants() {
|
||||
getActivityAndFields();
|
||||
assertTrue(mActivity.mNextButtonEnabled);
|
||||
|
||||
|
||||
mServerView.setText(" ");
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
|
||||
|
||||
mServerView.setText("serv$er.com");
|
||||
assertFalse(mActivity.mNextButtonEnabled);
|
||||
}
|
||||
|
@ -166,7 +172,7 @@ public class AccountSetupOutgoingTests extends
|
|||
/**
|
||||
* TODO: A series of tests to explore the logic around security models & ports
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Get the activity (which causes it to be started, using our intent) and get the UI fields
|
||||
*/
|
||||
|
@ -176,13 +182,16 @@ public class AccountSetupOutgoingTests extends
|
|||
mServerView = (EditText) mActivity.findViewById(R.id.account_server);
|
||||
mPasswordView = (EditText) mActivity.findViewById(R.id.account_password);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create an intent with the Account in it
|
||||
*/
|
||||
private Intent getTestIntent(String senderUriString) {
|
||||
private Intent getTestIntent(String senderUriString)
|
||||
throws URISyntaxException {
|
||||
EmailContent.Account account = new EmailContent.Account();
|
||||
account.setSenderUri(this.getInstrumentation().getTargetContext(), senderUriString);
|
||||
Context context = getInstrumentation().getTargetContext();
|
||||
HostAuth auth = account.getOrCreateHostAuthSend(context);
|
||||
Utility.setHostAuthFromString(auth, senderUriString);
|
||||
SetupData.init(SetupData.FLOW_MODE_NORMAL, account);
|
||||
return new Intent(Intent.ACTION_MAIN);
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ import android.test.ProviderTestCase2;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
|
@ -128,8 +129,78 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
|
|||
account1.mHostAuthSend, hostAuth2get);
|
||||
}
|
||||
|
||||
public void testAccountGetHostAuthSend() {
|
||||
Account account = ProviderTestUtils.setupAccount("account-hostauth", false, mMockContext);
|
||||
account.mHostAuthSend = ProviderTestUtils.setupHostAuth("account-hostauth-send", -1, false,
|
||||
mMockContext);
|
||||
account.save(mMockContext);
|
||||
HostAuth authGet;
|
||||
HostAuth authTest;
|
||||
|
||||
authTest = account.mHostAuthSend;
|
||||
assertNotNull(authTest);
|
||||
assertTrue(account.mHostAuthKeySend != 0);
|
||||
|
||||
// HostAuth is not changed
|
||||
authGet = account.getOrCreateHostAuthSend(mMockContext);
|
||||
assertTrue(authGet == authTest); // return the same object
|
||||
|
||||
// New HostAuth; based upon mHostAuthKeyRecv
|
||||
authTest = EmailContent.HostAuth.restoreHostAuthWithId(mMockContext,
|
||||
account.mHostAuthKeySend);
|
||||
account.mHostAuthSend = null;
|
||||
authGet = account.getOrCreateHostAuthSend(mMockContext);
|
||||
assertNotNull(authGet);
|
||||
assertNotNull(account.mHostAuthSend);
|
||||
ProviderTestUtils.assertHostAuthEqual("testAccountGetHostAuthSend-1", authTest, authGet);
|
||||
|
||||
// New HostAuth; completely empty
|
||||
authTest = new EmailContent.HostAuth();
|
||||
account.mHostAuthSend = null;
|
||||
account.mHostAuthKeySend = 0;
|
||||
authGet = account.getOrCreateHostAuthSend(mMockContext);
|
||||
assertNotNull(authGet);
|
||||
assertNotNull(account.mHostAuthSend);
|
||||
ProviderTestUtils.assertHostAuthEqual("testAccountGetHostAuthSendv-2", authTest, authGet);
|
||||
}
|
||||
|
||||
public void testAccountGetHostAuthRecv() {
|
||||
Account account = ProviderTestUtils.setupAccount("account-hostauth", false, mMockContext);
|
||||
account.mHostAuthRecv = ProviderTestUtils.setupHostAuth("account-hostauth-recv", -1, false,
|
||||
mMockContext);
|
||||
account.save(mMockContext);
|
||||
HostAuth authGet;
|
||||
HostAuth authTest;
|
||||
|
||||
authTest = account.mHostAuthRecv;
|
||||
assertNotNull(authTest);
|
||||
assertTrue(account.mHostAuthKeyRecv != 0);
|
||||
|
||||
// HostAuth is not changed
|
||||
authGet = account.getOrCreateHostAuthRecv(mMockContext);
|
||||
assertTrue(authGet == authTest); // return the same object
|
||||
|
||||
// New HostAuth; based upon mHostAuthKeyRecv
|
||||
authTest = EmailContent.HostAuth.restoreHostAuthWithId(mMockContext,
|
||||
account.mHostAuthKeyRecv);
|
||||
account.mHostAuthRecv = null;
|
||||
authGet = account.getOrCreateHostAuthRecv(mMockContext);
|
||||
assertNotNull(authGet);
|
||||
assertNotNull(account.mHostAuthRecv);
|
||||
ProviderTestUtils.assertHostAuthEqual("testAccountGetHostAuthRecv-1", authTest, authGet);
|
||||
|
||||
// New HostAuth; completely empty
|
||||
authTest = new EmailContent.HostAuth();
|
||||
account.mHostAuthRecv = null;
|
||||
account.mHostAuthKeyRecv = 0;
|
||||
authGet = account.getOrCreateHostAuthRecv(mMockContext);
|
||||
assertNotNull(authGet);
|
||||
assertNotNull(account.mHostAuthRecv);
|
||||
ProviderTestUtils.assertHostAuthEqual("testAccountGetHostAuthRecv-2", authTest, authGet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple test of account parceling. The rather tortuous path is to ensure that the
|
||||
* Simple test of account parceling. The rather torturous path is to ensure that the
|
||||
* account is really flattened all the way down to a parcel and back.
|
||||
*/
|
||||
public void testAccountParcel() {
|
||||
|
@ -149,7 +220,7 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
|
|||
|
||||
/**
|
||||
* Test for {@link Account#getShortcutSafeUri()} and
|
||||
* {@link Account#getAccountIdForShortcutSafeUri}.
|
||||
* {@link Account#getAccountIdFromShortcutSafeUri}.
|
||||
*/
|
||||
public void testAccountShortcutSafeUri() {
|
||||
final Account account1 = ProviderTestUtils.setupAccount("account-1", true, mMockContext);
|
||||
|
@ -223,9 +294,6 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
|
|||
/**
|
||||
* Get the value of the unread count in the mailbox of the account.
|
||||
* This can be different from the actual number of unread messages in that mailbox.
|
||||
* @param accountId
|
||||
* @param mailboxId
|
||||
* @return
|
||||
*/
|
||||
private int getUnreadCount(long mailboxId) {
|
||||
String text = null;
|
||||
|
@ -252,24 +320,24 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
|
|||
/**
|
||||
* Test the various combinations of SSL, TLS, and trust-certificates encoded as Uris
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public void testHostAuthSecurityUri() {
|
||||
public void testHostAuthSecurityUri()
|
||||
throws URISyntaxException {
|
||||
HostAuth ha = ProviderTestUtils.setupHostAuth("uri-security", 1, false, mMockContext);
|
||||
|
||||
final int MASK =
|
||||
HostAuth.FLAG_SSL | HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL_CERTIFICATES;
|
||||
HostAuth.FLAG_SSL | HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL;
|
||||
|
||||
// Set various URIs and check the resulting flags
|
||||
ha.setStoreUri("protocol://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "protocol://user:password@server:123");
|
||||
assertEquals(0, ha.mFlags & MASK);
|
||||
ha.setStoreUri("protocol+ssl+://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "protocol+ssl+://user:password@server:123");
|
||||
assertEquals(HostAuth.FLAG_SSL, ha.mFlags & MASK);
|
||||
ha.setStoreUri("protocol+ssl+trustallcerts://user:password@server:123");
|
||||
assertEquals(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL_CERTIFICATES, ha.mFlags & MASK);
|
||||
ha.setStoreUri("protocol+tls+://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "protocol+ssl+trustallcerts://user:password@server:123");
|
||||
assertEquals(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, ha.mFlags & MASK);
|
||||
Utility.setHostAuthFromString(ha, "protocol+tls+://user:password@server:123");
|
||||
assertEquals(HostAuth.FLAG_TLS, ha.mFlags & MASK);
|
||||
ha.setStoreUri("protocol+tls+trustallcerts://user:password@server:123");
|
||||
assertEquals(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL_CERTIFICATES, ha.mFlags & MASK);
|
||||
Utility.setHostAuthFromString(ha, "protocol+tls+trustallcerts://user:password@server:123");
|
||||
assertEquals(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, ha.mFlags & MASK);
|
||||
|
||||
// Now check the retrival method (building URI from flags)
|
||||
ha.mFlags &= ~MASK;
|
||||
|
@ -278,14 +346,14 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
|
|||
ha.mFlags |= HostAuth.FLAG_SSL;
|
||||
uriString = ha.getStoreUri();
|
||||
assertTrue(uriString.startsWith("protocol+ssl+://"));
|
||||
ha.mFlags |= HostAuth.FLAG_TRUST_ALL_CERTIFICATES;
|
||||
ha.mFlags |= HostAuth.FLAG_TRUST_ALL;
|
||||
uriString = ha.getStoreUri();
|
||||
assertTrue(uriString.startsWith("protocol+ssl+trustallcerts://"));
|
||||
ha.mFlags &= ~MASK;
|
||||
ha.mFlags |= HostAuth.FLAG_TLS;
|
||||
uriString = ha.getStoreUri();
|
||||
assertTrue(uriString.startsWith("protocol+tls+://"));
|
||||
ha.mFlags |= HostAuth.FLAG_TRUST_ALL_CERTIFICATES;
|
||||
ha.mFlags |= HostAuth.FLAG_TRUST_ALL;
|
||||
uriString = ha.getStoreUri();
|
||||
assertTrue(uriString.startsWith("protocol+tls+trustallcerts://"));
|
||||
}
|
||||
|
@ -293,89 +361,375 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
|
|||
/**
|
||||
* Test port assignments made from Uris
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public void testHostAuthPortAssignments() {
|
||||
public void testHostAuthPortAssignments()
|
||||
throws URISyntaxException {
|
||||
HostAuth ha = ProviderTestUtils.setupHostAuth("uri-port", 1, false, mMockContext);
|
||||
|
||||
// Set various URIs and check the resulting flags
|
||||
// Hardwired port
|
||||
ha.setStoreUri("imap://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "imap://user:password@server:123");
|
||||
assertEquals(123, ha.mPort);
|
||||
// Auto-assigned ports
|
||||
ha.setStoreUri("imap://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "imap://user:password@server");
|
||||
assertEquals(143, ha.mPort);
|
||||
ha.setStoreUri("imap+ssl://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "imap+ssl://user:password@server");
|
||||
assertEquals(993, ha.mPort);
|
||||
ha.setStoreUri("imap+ssl+trustallcerts://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "imap+ssl+trustallcerts://user:password@server");
|
||||
assertEquals(993, ha.mPort);
|
||||
ha.setStoreUri("imap+tls://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "imap+tls://user:password@server");
|
||||
assertEquals(143, ha.mPort);
|
||||
ha.setStoreUri("imap+tls+trustallcerts://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "imap+tls+trustallcerts://user:password@server");
|
||||
assertEquals(143, ha.mPort);
|
||||
|
||||
// Hardwired port
|
||||
ha.setStoreUri("pop3://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "pop3://user:password@server:123");
|
||||
assertEquals(123, ha.mPort);
|
||||
// Auto-assigned ports
|
||||
ha.setStoreUri("pop3://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "pop3://user:password@server");
|
||||
assertEquals(110, ha.mPort);
|
||||
ha.setStoreUri("pop3+ssl://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "pop3+ssl://user:password@server");
|
||||
assertEquals(995, ha.mPort);
|
||||
ha.setStoreUri("pop3+ssl+trustallcerts://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "pop3+ssl+trustallcerts://user:password@server");
|
||||
assertEquals(995, ha.mPort);
|
||||
ha.setStoreUri("pop3+tls://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "pop3+tls://user:password@server");
|
||||
assertEquals(110, ha.mPort);
|
||||
ha.setStoreUri("pop3+tls+trustallcerts://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "pop3+tls+trustallcerts://user:password@server");
|
||||
assertEquals(110, ha.mPort);
|
||||
|
||||
// Hardwired port
|
||||
ha.setStoreUri("eas://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "eas://user:password@server:123");
|
||||
assertEquals(123, ha.mPort);
|
||||
// Auto-assigned ports
|
||||
ha.setStoreUri("eas://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "eas://user:password@server");
|
||||
assertEquals(80, ha.mPort);
|
||||
ha.setStoreUri("eas+ssl://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "eas+ssl://user:password@server");
|
||||
assertEquals(443, ha.mPort);
|
||||
ha.setStoreUri("eas+ssl+trustallcerts://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "eas+ssl+trustallcerts://user:password@server");
|
||||
assertEquals(443, ha.mPort);
|
||||
|
||||
// Hardwired port
|
||||
ha.setStoreUri("smtp://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "smtp://user:password@server:123");
|
||||
assertEquals(123, ha.mPort);
|
||||
// Auto-assigned ports
|
||||
ha.setStoreUri("smtp://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "smtp://user:password@server");
|
||||
assertEquals(587, ha.mPort);
|
||||
ha.setStoreUri("smtp+ssl://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "smtp+ssl://user:password@server");
|
||||
assertEquals(465, ha.mPort);
|
||||
ha.setStoreUri("smtp+ssl+trustallcerts://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "smtp+ssl+trustallcerts://user:password@server");
|
||||
assertEquals(465, ha.mPort);
|
||||
ha.setStoreUri("smtp+tls://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "smtp+tls://user:password@server");
|
||||
assertEquals(587, ha.mPort);
|
||||
ha.setStoreUri("smtp+tls+trustallcerts://user:password@server");
|
||||
Utility.setHostAuthFromString(ha, "smtp+tls+trustallcerts://user:password@server");
|
||||
assertEquals(587, ha.mPort);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test preservation of username & password in URI
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
public void testHostAuthUri() {
|
||||
public void testHostAuthUri()
|
||||
throws URISyntaxException {
|
||||
HostAuth ha = new HostAuth();
|
||||
ha.setStoreUri("protocol://user:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "protocol://user:password@server:123");
|
||||
String getUri = ha.getStoreUri();
|
||||
assertEquals("protocol://user:password@server:123", getUri);
|
||||
|
||||
// Now put spaces in/around username (they are trimmed)
|
||||
ha.setStoreUri("protocol://%20us%20er%20:password@server:123");
|
||||
Utility.setHostAuthFromString(ha, "protocol://%20us%20er%20:password@server:123");
|
||||
getUri = ha.getStoreUri();
|
||||
assertEquals("protocol://us%20er:password@server:123", getUri);
|
||||
|
||||
// Now put spaces around password (should not be trimmed)
|
||||
ha.setStoreUri("protocol://user:%20pass%20word%20@server:123");
|
||||
Utility.setHostAuthFromString(ha, "protocol://user:%20pass%20word%20@server:123");
|
||||
getUri = ha.getStoreUri();
|
||||
assertEquals("protocol://user:%20pass%20word%20@server:123", getUri);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test user name and password are set correctly
|
||||
*/
|
||||
public void testHostAuthSetLogin() {
|
||||
HostAuth ha = new HostAuth();
|
||||
ha.setLogin("user:password");
|
||||
assertEquals("user", ha.mLogin);
|
||||
assertEquals("password", ha.mPassword);
|
||||
|
||||
// special characters are not removed during insertion
|
||||
ha.setLogin("%20us%20er%20:password");
|
||||
assertEquals("%20us%20er%20", ha.mLogin);
|
||||
assertEquals("password", ha.mPassword);
|
||||
|
||||
// special characters are not removed during insertion
|
||||
ha.setLogin("user:%20pass%20word%20");
|
||||
assertEquals("user", ha.mLogin);
|
||||
assertEquals("%20pass%20word%20", ha.mPassword);
|
||||
|
||||
ha.setLogin("user:");
|
||||
assertEquals("user", ha.mLogin);
|
||||
assertEquals("", ha.mPassword);
|
||||
|
||||
ha.setLogin(":password");
|
||||
assertEquals("", ha.mLogin);
|
||||
assertEquals("password", ha.mPassword);
|
||||
|
||||
ha.setLogin("");
|
||||
assertNull(ha.mLogin);
|
||||
assertNull(ha.mPassword);
|
||||
|
||||
ha.setLogin(null);
|
||||
assertNull(ha.mLogin);
|
||||
assertNull(ha.mPassword);
|
||||
|
||||
ha.setLogin("userpassword");
|
||||
assertEquals("userpassword", ha.mLogin);
|
||||
assertNull(ha.mPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the authentication flag is set correctly when setting user name and password
|
||||
*/
|
||||
public void testHostAuthSetLoginAuthenticate() {
|
||||
HostAuth ha = new HostAuth();
|
||||
|
||||
ha.mFlags = 0x00000000;
|
||||
ha.setLogin("user", "password");
|
||||
assertEquals(HostAuth.FLAG_AUTHENTICATE, ha.mFlags);
|
||||
|
||||
ha.mFlags = 0x00000000;
|
||||
ha.setLogin("user", "");
|
||||
assertEquals(HostAuth.FLAG_AUTHENTICATE, ha.mFlags);
|
||||
|
||||
ha.mFlags = 0x00000000;
|
||||
ha.setLogin("", "password");
|
||||
assertEquals(HostAuth.FLAG_AUTHENTICATE, ha.mFlags);
|
||||
|
||||
ha.mFlags = 0x00000000;
|
||||
ha.setLogin("user", null);
|
||||
assertEquals(HostAuth.FLAG_AUTHENTICATE, ha.mFlags);
|
||||
|
||||
ha.mFlags = 0xffffffff;
|
||||
ha.setLogin(null, "password");
|
||||
assertEquals(~HostAuth.FLAG_AUTHENTICATE, ha.mFlags);
|
||||
|
||||
ha.mFlags = 0xffffffff;
|
||||
ha.setLogin(null, null);
|
||||
assertEquals(~HostAuth.FLAG_AUTHENTICATE, ha.mFlags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test setting the connection using a URI scheme
|
||||
*/
|
||||
public void testHostAuthSetConnectionScheme() {
|
||||
HostAuth ha = new HostAuth();
|
||||
|
||||
// Set URIs for IMAP
|
||||
// Hardwired port
|
||||
ha.setConnection("imap", "server", 123);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(123, ha.mPort);
|
||||
|
||||
// Auto-assigned ports
|
||||
ha.setConnection("imap", "server", -1);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(143, ha.mPort);
|
||||
|
||||
ha.setConnection("imap+ssl", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL, ha.mFlags);
|
||||
assertEquals(993, ha.mPort);
|
||||
|
||||
ha.setConnection("imap+ssl+trustallcerts", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL|HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
assertEquals(993, ha.mPort);
|
||||
|
||||
ha.setConnection("imap+tls", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_TLS, ha.mFlags);
|
||||
assertEquals(143, ha.mPort);
|
||||
|
||||
ha.setConnection("imap+tls+trustallcerts", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_TLS|HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
assertEquals(143, ha.mPort);
|
||||
|
||||
// Set URIs for POP3
|
||||
// Hardwired port
|
||||
ha.setConnection("pop3", "server", 123);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(123, ha.mPort);
|
||||
|
||||
// Auto-assigned ports
|
||||
ha.setConnection("pop3", "server", -1);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(110, ha.mPort);
|
||||
|
||||
ha.setConnection("pop3+ssl", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL, ha.mFlags);
|
||||
assertEquals(995, ha.mPort);
|
||||
|
||||
ha.setConnection("pop3+ssl+trustallcerts", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL|HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
assertEquals(995, ha.mPort);
|
||||
|
||||
ha.setConnection("pop3+tls", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_TLS, ha.mFlags);
|
||||
assertEquals(110, ha.mPort);
|
||||
|
||||
ha.setConnection("pop3+tls+trustallcerts", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_TLS|HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
assertEquals(110, ha.mPort);
|
||||
|
||||
// Set URIs for Exchange
|
||||
// Hardwired port
|
||||
ha.setConnection("eas", "server", 123);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(123, ha.mPort);
|
||||
|
||||
// Auto-assigned ports
|
||||
ha.setConnection("eas", "server", -1);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(80, ha.mPort);
|
||||
|
||||
ha.setConnection("eas+ssl", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL, ha.mFlags);
|
||||
assertEquals(443, ha.mPort);
|
||||
|
||||
ha.setConnection("eas+ssl+trustallcerts", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL|HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
assertEquals(443, ha.mPort);
|
||||
|
||||
// Set URIs for SMTP
|
||||
// Hardwired port
|
||||
ha.setConnection("smtp", "server", 123);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(123, ha.mPort);
|
||||
|
||||
// Auto-assigned ports
|
||||
ha.setConnection("smtp", "server", -1);
|
||||
assertEquals(0, ha.mFlags);
|
||||
assertEquals(587, ha.mPort);
|
||||
|
||||
ha.setConnection("smtp+ssl", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL, ha.mFlags);
|
||||
assertEquals(465, ha.mPort);
|
||||
|
||||
ha.setConnection("smtp+ssl+trustallcerts", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_SSL|HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
assertEquals(465, ha.mPort);
|
||||
|
||||
ha.setConnection("smtp+tls", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_TLS, ha.mFlags);
|
||||
assertEquals(587, ha.mPort);
|
||||
|
||||
ha.setConnection("smtp+tls+trustallcerts", "server", -1);
|
||||
assertEquals(HostAuth.FLAG_TLS|HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
assertEquals(587, ha.mPort);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test setting the connection using a protocol and flags
|
||||
*/
|
||||
public void testHostAuthSetConnectionFlags() {
|
||||
HostAuth ha = new HostAuth();
|
||||
|
||||
// Different port types don't affect flags
|
||||
ha.setConnection("imap", "server", 123, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
ha.setConnection("imap", "server", -1, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
|
||||
// Different protocol types don't affect flags
|
||||
ha.setConnection("pop3", "server", 123, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
ha.setConnection("pop3", "server", -1, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
ha.setConnection("eas", "server", 123, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
ha.setConnection("eas", "server", -1, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
ha.setConnection("smtp", "server", 123, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
ha.setConnection("smtp", "server", -1, 0);
|
||||
assertEquals(0, ha.mFlags);
|
||||
|
||||
// Sets SSL flag
|
||||
ha.setConnection("imap", "server", -1, HostAuth.FLAG_SSL);
|
||||
assertEquals(HostAuth.FLAG_SSL, ha.mFlags);
|
||||
|
||||
// Sets SSL+Trusted flags
|
||||
ha.setConnection("imap", "server", -1, HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL);
|
||||
assertEquals(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
|
||||
// Sets TLS flag
|
||||
ha.setConnection("imap", "server", -1, HostAuth.FLAG_TLS);
|
||||
assertEquals(HostAuth.FLAG_TLS, ha.mFlags);
|
||||
|
||||
// Sets TLS+Trusted flags
|
||||
ha.setConnection("imap", "server", -1, HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL);
|
||||
assertEquals(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, ha.mFlags);
|
||||
|
||||
// Test other defined flags; should not affect mFlags
|
||||
ha.setConnection("imap", "server", -1, HostAuth.FLAG_AUTHENTICATE);
|
||||
assertEquals(0, ha.mFlags);
|
||||
|
||||
// Test every other bit; should not affect mFlags
|
||||
ha.setConnection("imap", "server", -1, 0xfffffff4);
|
||||
assertEquals(0, ha.mFlags);
|
||||
}
|
||||
|
||||
public void testHostAuthGetSchemeString() {
|
||||
String scheme;
|
||||
|
||||
scheme = HostAuth.getSchemeString("foo", 0);
|
||||
assertEquals("foo", scheme);
|
||||
scheme = HostAuth.getSchemeString("foo", HostAuth.FLAG_SSL);
|
||||
assertEquals("foo+ssl+", scheme);
|
||||
scheme = HostAuth.getSchemeString("foo", HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL);
|
||||
assertEquals("foo+ssl+trustallcerts", scheme);
|
||||
scheme = HostAuth.getSchemeString("foo", HostAuth.FLAG_TLS);
|
||||
assertEquals("foo+tls+", scheme);
|
||||
scheme = HostAuth.getSchemeString("foo", HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL);
|
||||
assertEquals("foo+tls+trustallcerts", scheme);
|
||||
// error cases; no security string appended to protocol
|
||||
scheme = HostAuth.getSchemeString("foo", HostAuth.FLAG_TRUST_ALL);
|
||||
assertEquals("foo", scheme);
|
||||
scheme = HostAuth.getSchemeString("foo", HostAuth.FLAG_SSL | HostAuth.FLAG_TLS);
|
||||
assertEquals("foo", scheme);
|
||||
scheme = HostAuth.getSchemeString("foo", HostAuth.FLAG_SSL | HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL);
|
||||
assertEquals("foo", scheme);
|
||||
scheme = HostAuth.getSchemeString("foo", 0xfffffff4);
|
||||
assertEquals("foo", scheme);
|
||||
}
|
||||
|
||||
public void testHostAuthGetSchemeFlags() {
|
||||
int flags;
|
||||
|
||||
flags = HostAuth.getSchemeFlags("");
|
||||
assertEquals(0, flags);
|
||||
flags = HostAuth.getSchemeFlags("+");
|
||||
assertEquals(0, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+");
|
||||
assertEquals(0, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+ssl");
|
||||
assertEquals(HostAuth.FLAG_SSL, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+ssl+");
|
||||
assertEquals(HostAuth.FLAG_SSL, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+ssl+trustallcerts");
|
||||
assertEquals(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+tls+");
|
||||
assertEquals(HostAuth.FLAG_TLS, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+tls+trustallcerts");
|
||||
assertEquals(HostAuth.FLAG_TLS | HostAuth.FLAG_TRUST_ALL, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+bogus");
|
||||
assertEquals(0, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+bogus+trustallcerts");
|
||||
assertEquals(HostAuth.FLAG_TRUST_ALL, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+ssl+bogus");
|
||||
assertEquals(HostAuth.FLAG_SSL, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+ssl+trustallcerts+bogus");
|
||||
assertEquals(HostAuth.FLAG_SSL | HostAuth.FLAG_TRUST_ALL, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+bogus+bogus");
|
||||
assertEquals(0, flags);
|
||||
flags = HostAuth.getSchemeFlags("foo+bogus+bogus+bogus");
|
||||
assertEquals(0, flags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test simple mailbox save/retrieve
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue