diff --git a/telephony/java/com/android/internal/telephony/SmsMessageBase.java b/telephony/java/com/android/internal/telephony/SmsMessageBase.java index d36d95b0f6e5b..e396f0c3dc89b 100644 --- a/telephony/java/com/android/internal/telephony/SmsMessageBase.java +++ b/telephony/java/com/android/internal/telephony/SmsMessageBase.java @@ -18,13 +18,16 @@ package com.android.internal.telephony; import android.annotation.UnsupportedAppUsage; import android.os.Build; -import android.provider.Telephony; import android.telephony.SmsMessage; +import android.text.TextUtils; +import android.util.Patterns; import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import java.text.BreakIterator; import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * Base class declaring the specific methods and members for SmsMessage. @@ -32,6 +35,10 @@ import java.util.Arrays; */ public abstract class SmsMessageBase { + // Copied from Telephony.Mms.NAME_ADDR_EMAIL_PATTERN + public static final Pattern NAME_ADDR_EMAIL_PATTERN = + Pattern.compile("\\s*(\"[^\"]*\"|[^<>\"]+)\\s*<([^<>]+)>\\s*"); + @UnsupportedAppUsage public SmsMessageBase() { } @@ -356,6 +363,31 @@ public abstract class SmsMessageBase { } } + private static String extractAddrSpec(String messageHeader) { + Matcher match = NAME_ADDR_EMAIL_PATTERN.matcher(messageHeader); + + if (match.matches()) { + return match.group(2); + } + return messageHeader; + } + + /** + * Returns true if the message header string indicates that the message is from a email address. + * + * @param messageHeader message header + * @return {@code true} if it's a message from an email address, {@code false} otherwise. + */ + public static boolean isEmailAddress(String messageHeader) { + if (TextUtils.isEmpty(messageHeader)) { + return false; + } + + String s = extractAddrSpec(messageHeader); + Matcher match = Patterns.EMAIL_ADDRESS.matcher(s); + return match.matches(); + } + /** * Try to parse this message as an email gateway message * There are two ways specified in TS 23.040 Section 3.8 : @@ -376,11 +408,11 @@ public abstract class SmsMessageBase { * -or- * 2. [x@y][ ]/[body] */ - String[] parts = mMessageBody.split("( /)|( )", 2); - if (parts.length < 2) return; - mEmailFrom = parts[0]; - mEmailBody = parts[1]; - mIsEmail = Telephony.Mms.isEmailAddress(mEmailFrom); + String[] parts = mMessageBody.split("( /)|( )", 2); + if (parts.length < 2) return; + mEmailFrom = parts[0]; + mEmailBody = parts[1]; + mIsEmail = isEmailAddress(mEmailFrom); } /**