From 0a2a346c8f40ad256eef840338a75a3bdfbe8251 Mon Sep 17 00:00:00 2001 From: Andy Huang Date: Fri, 20 Dec 2013 15:56:13 -0800 Subject: fix internal fancy mailtos Mailto: links that included anything other than a "to" address weren't handled correctly when a user clicked on one from within a message body. Pass the entire 'mailto' URL to ComposeActivity to ensure our normal mailto parsing code kicks in. Bug: 12137171 Change-Id: I0352ecc80b7c9cfadeb605f8e0b2a694387c9b03 --- proguard.flags | 2 + src/com/android/mail/compose/ComposeActivity.java | 18 +++++++++ src/com/android/mail/utils/Utils.java | 2 +- .../android/mail/compose/ComposeActivityTest.java | 47 +++++++++++++++++++--- 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/proguard.flags b/proguard.flags index 270a08476..a80abcb97 100644 --- a/proguard.flags +++ b/proguard.flags @@ -10,6 +10,8 @@ -keepclasseswithmembers class com.android.mail.compose.ComposeActivity { *** registerTestSendOrSaveCallback(...); + *** getSubject(...); + *** getBodyHtml(...); } -keepclasseswithmembers class com.android.mail.providers.protos.mock.MockUiProvider { diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java index 720ab35e9..ce8aa048b 100644 --- a/src/com/android/mail/compose/ComposeActivity.java +++ b/src/com/android/mail/compose/ComposeActivity.java @@ -428,6 +428,14 @@ public class ComposeActivity extends Activity implements OnClickListener, OnNavi launcher.startActivity(intent); } + public static void composeMailto(Context launcher, Account account, Uri mailto) { + final Intent intent = new Intent(Intent.ACTION_VIEW, mailto, launcher, + ComposeActivity.class); + intent.putExtra(EXTRA_FROM_EMAIL_TASK, true); + intent.putExtra(Utils.EXTRA_ACCOUNT, account); + launcher.startActivity(intent); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -1159,6 +1167,11 @@ public class ComposeActivity extends Activity implements OnClickListener, OnNavi return mBodyView; } + @VisibleForTesting + public String getBodyHtml() { + return Html.toHtml(removeComposingSpans(mBodyView.getText())); + } + @VisibleForTesting public Account getFromAccount() { return mReplyFromAccount != null && mReplyFromAccount.account != null ? @@ -2720,6 +2733,11 @@ public class ComposeActivity extends Activity implements OnClickListener, OnNavi return TextUtils.getTrimmedLength(mSubject.getText()) == 0; } + @VisibleForTesting + public String getSubject() { + return mSubject.getText().toString(); + } + /* package */ static int sendOrSaveInternal(Context context, ReplyFromAccount replyFromAccount, Message message, final Message refMessage, Spanned body, final CharSequence quotedText, diff --git a/src/com/android/mail/utils/Utils.java b/src/com/android/mail/utils/Utils.java index 532af6b4e..956920b28 100644 --- a/src/com/android/mail/utils/Utils.java +++ b/src/com/android/mail/utils/Utils.java @@ -1354,7 +1354,7 @@ public class Utils { final Account account) { final String scheme = normalizeUri(uri).getScheme(); if (TextUtils.equals(MAILTO_SCHEME, scheme)) { - ComposeActivity.composeToAddress(context, account, uri.getSchemeSpecificPart()); + ComposeActivity.composeMailto(context, account, uri); return true; } return false; diff --git a/tests/src/com/android/mail/compose/ComposeActivityTest.java b/tests/src/com/android/mail/compose/ComposeActivityTest.java index 6f9734103..d2cc308df 100644 --- a/tests/src/com/android/mail/compose/ComposeActivityTest.java +++ b/tests/src/com/android/mail/compose/ComposeActivityTest.java @@ -28,7 +28,6 @@ import android.text.Html; import android.text.TextUtils; import android.text.util.Rfc822Tokenizer; -import com.android.mail.compose.ComposeActivity; import com.android.mail.providers.Account; import com.android.mail.providers.Attachment; import com.android.mail.providers.MailAppProvider; @@ -43,9 +42,8 @@ import com.android.mail.utils.Utils; import org.json.JSONArray; import org.json.JSONException; -import java.lang.Deprecated; -import java.lang.Throwable; -import java.util.Arrays; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.Date; import java.util.HashSet; @@ -98,7 +96,8 @@ public class ComposeActivityTest extends ActivityInstrumentationTestCase2