Merge all cases of getting email address from a raw string.
Use the Rfc822Tokenizer in Address.java instead of pattern
matchers.
Change-Id: I7c99e5bbb5ebdc57a480ea112d1c9fc460ed2303
diff --git a/src/com/android/email/compose/ComposeActivity.java b/src/com/android/email/compose/ComposeActivity.java
index 0c7c948..2568435 100644
--- a/src/com/android/email/compose/ComposeActivity.java
+++ b/src/com/android/email/compose/ComposeActivity.java
@@ -479,7 +479,7 @@
private void initReplyRecipients(String account, Cursor refMessage, int action) {
// This is the email address of the current user, i.e. the one composing
// the reply.
- final String accountEmail = Utils.getEmailFromAddressString(account);
+ final String accountEmail = Address.getEmailAddress(account).getAddress();
String fromAddress = refMessage.getString(UIProvider.MESSAGE_FROM_COLUMN);
String[] sentToAddresses = Utils.splitCommaSeparatedString(refMessage
.getString(UIProvider.MESSAGE_TO_COLUMN));
@@ -595,7 +595,8 @@
// it's the To recipient list of the original message.
// OR missing, in which case use the sender of the original message
Set<String> toAddresses = Sets.newHashSet();
- if (Utils.getEmailFromAddressString(senderAddress).equalsIgnoreCase(account)) {
+ Address sender = Address.getEmailAddress(senderAddress);
+ if (sender != null && sender.getAddress().equalsIgnoreCase(account)) {
// The sender address is this account, so reply acts like reply all.
toAddresses.addAll(Arrays.asList(inToAddresses));
} else if (replyToAddresses != null && replyToAddresses.length != 0) {
@@ -603,9 +604,8 @@
} else {
// Check to see if the sender address is one of the user's custom
// from addresses.
- if (senderAddress != null
- && !accountEmail.equalsIgnoreCase(Utils
- .getEmailFromAddressString(senderAddress))) {
+ if (senderAddress != null && sender != null
+ && !accountEmail.equalsIgnoreCase(sender.getAddress())) {
// Replying to the sender of the original message is the most
// common case.
toAddresses.add(senderAddress);
@@ -624,7 +624,7 @@
for (String email : addresses) {
// Do not add this account, or any of the custom froms, to the list
// of recipients.
- final String recipientAddress = Utils.getEmailFromAddressString(email);
+ final String recipientAddress = Address.getEmailAddress(email).getAddress();
if (!account.equalsIgnoreCase(recipientAddress)) {
recipients.add(email.replace("\"\"", ""));
}
diff --git a/src/com/android/email/providers/Address.java b/src/com/android/email/providers/Address.java
index c02d252..aeb2da7 100644
--- a/src/com/android/email/providers/Address.java
+++ b/src/com/android/email/providers/Address.java
@@ -61,9 +61,6 @@
*/
private String mSimplifiedName;
- private static final Matcher sEmailMatcher =
- Pattern.compile("\\\"?([^\"<]*?)\\\"?\\s*<(.*)>").matcher("");
-
// Regex that matches address surrounded by '<>' optionally. '^<?([^>]+)>?$'
private static final Pattern REMOVE_OPTIONAL_BRACKET = Pattern.compile("^<?([^>]+)>?$");
// Regex that matches personal name surrounded by '""' optionally. '^"?([^"]+)"?$'
@@ -117,31 +114,14 @@
return null;
}
String name, address;
- Matcher m = sEmailMatcher.reset(rawAddress);
- if (m.matches()) {
- name = m.group(1);
- address = m.group(2);
- if (name == null) {
- name = "";
- } else {
- name = Html.fromHtml(name.trim()).toString();
- }
- if (address == null) {
- address = "";
- } else {
- address = Html.fromHtml(address).toString();
- }
+ final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(rawAddress);
+ if (tokens.length > 0) {
+ final String tokenizedName = tokens[0].getName();
+ name = tokenizedName != null ? Html.fromHtml(tokenizedName.trim()).toString() : "";
+ address = Html.fromHtml(tokens[0].getAddress()).toString();
} else {
- // Try and tokenize the string
- final Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(rawAddress);
- if (tokens.length > 0) {
- final String tokenizedName = tokens[0].getName();
- name = tokenizedName != null ? Html.fromHtml(tokenizedName.trim()).toString() : "";
- address = Html.fromHtml(tokens[0].getAddress()).toString();
- } else {
- name = "";
- address = rawAddress == null ? "" : Html.fromHtml(rawAddress).toString();
- }
+ name = "";
+ address = rawAddress == null ? "" : Html.fromHtml(rawAddress).toString();
}
return new Address(name, address);
}
diff --git a/src/com/android/email/utils/Utils.java b/src/com/android/email/utils/Utils.java
index 6e72fc1..78d3645 100644
--- a/src/com/android/email/utils/Utils.java
+++ b/src/com/android/email/utils/Utils.java
@@ -527,24 +527,6 @@
: "";
}
- /**
- * Returns the email address in an address string
- * @param addressString such as "bobby" <bob@example.com>
- * @return returns the email address, such as bob@example.com from the example above
- */
- public static String getEmailFromAddressString(String addressString) {
- if (TextUtils.isEmpty(addressString)) {
- return "";
- }
- String result = addressString;
- Matcher match = Patterns.EMAIL_ADDRESS.matcher(addressString);
- if (match.find()) {
- result = addressString.substring(match.start(), match.end());
- }
-
- return result;
- }
-
/**
* Returns comma seperated strings as an array.