diff options
author | Andy Huang <ath@google.com> | 2013-12-20 16:17:02 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-12-20 16:17:02 -0800 |
commit | 65ba82f6721404888f0866122c8ab39a26716085 (patch) | |
tree | 97c21bd96a52c42d4a90a16d3948719fb2e306fc | |
parent | 2452e3902f3f558c83dd708c0dde8c9de1c495e4 (diff) | |
parent | 0a2a346c8f40ad256eef840338a75a3bdfbe8251 (diff) | |
download | android_packages_apps_UnifiedEmail-65ba82f6721404888f0866122c8ab39a26716085.tar.gz android_packages_apps_UnifiedEmail-65ba82f6721404888f0866122c8ab39a26716085.tar.bz2 android_packages_apps_UnifiedEmail-65ba82f6721404888f0866122c8ab39a26716085.zip |
am 0a2a346c: fix internal fancy mailtos
* commit '0a2a346c8f40ad256eef840338a75a3bdfbe8251':
fix internal fancy mailtos
-rw-r--r-- | proguard.flags | 2 | ||||
-rw-r--r-- | src/com/android/mail/compose/ComposeActivity.java | 18 | ||||
-rw-r--r-- | src/com/android/mail/utils/Utils.java | 2 | ||||
-rw-r--r-- | tests/src/com/android/mail/compose/ComposeActivityTest.java | 47 |
4 files changed, 63 insertions, 6 deletions
diff --git a/proguard.flags b/proguard.flags index dfcb3444b..2d4cfcf91 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 2945f29cd..d5ad1ce56 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); @@ -1160,6 +1168,11 @@ public class ComposeActivity extends Activity implements OnClickListener, OnNavi } @VisibleForTesting + public String getBodyHtml() { + return Html.toHtml(removeComposingSpans(mBodyView.getText())); + } + + @VisibleForTesting public Account getFromAccount() { return mReplyFromAccount != null && mReplyFromAccount.account != null ? mReplyFromAccount.account : mAccount; @@ -2725,6 +2738,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 eef11979b..755914db2 100644 --- a/src/com/android/mail/utils/Utils.java +++ b/src/com/android/mail/utils/Utils.java @@ -1028,7 +1028,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<Compos private Message getRefMessage(ContentResolver resolver) { - return getRefMessage(resolver, mAccount.folderListUri); + final Account account = getActivity().getFromAccount(); + return getRefMessage(resolver, account.folderListUri); } public void setAccount(ComposeActivity activity, String accountName) { @@ -731,6 +730,44 @@ public class ComposeActivityTest extends ActivityInstrumentationTestCase2<Compos }); } + private static String encodeMailtoParam(String s) throws UnsupportedEncodingException { + return URLEncoder.encode(s, "UTF-8").replace("+", "%20"); + } + + public void testMailto() throws Throwable { + final String to = "foo@bar.com"; + final String cc = "baz@baf.com"; + final String subject = "hello world"; + final String body = "Dear foo,\nGoodbye.\n--me"; + + final String mailto = String.format("mailto:%s?cc=%s&subject=%s&body=%s", + encodeMailtoParam(to), encodeMailtoParam(cc), encodeMailtoParam(subject), + encodeMailtoParam(body)); + + final Intent mailtoIntent = new Intent(Intent.ACTION_VIEW, + Uri.parse(mailto)); + setActivityIntent(mailtoIntent); + + final ComposeActivity activity = getActivity(); + + runTestOnUiThread(new Runnable() { + @Override + public void run() { + final String resultTo[] = activity.getToAddresses(); + assertEquals(1, resultTo.length); + assertEquals(to, Rfc822Tokenizer.tokenize(resultTo[0])[0].getAddress()); + + final String resultCc[] = activity.getCcAddresses(); + assertEquals(1, resultCc.length); + assertEquals(cc, Rfc822Tokenizer.tokenize(resultCc[0])[0].getAddress()); + + assertEquals(subject, activity.getSubject()); +// the result is HTML-wrapped in a way that's not trivial to test, so disabled for now +// assertEquals(body, activity.getBodyHtml()); + } + }); + } + // Test a mailto VIEW Intent, with an account specified in JSON format public void testMailToAccountJSON() throws Throwable { final Context context = getInstrumentation().getContext(); |