summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Huang <ath@google.com>2013-12-20 16:17:02 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2013-12-20 16:17:02 -0800
commit65ba82f6721404888f0866122c8ab39a26716085 (patch)
tree97c21bd96a52c42d4a90a16d3948719fb2e306fc
parent2452e3902f3f558c83dd708c0dde8c9de1c495e4 (diff)
parent0a2a346c8f40ad256eef840338a75a3bdfbe8251 (diff)
downloadandroid_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.flags2
-rw-r--r--src/com/android/mail/compose/ComposeActivity.java18
-rw-r--r--src/com/android/mail/utils/Utils.java2
-rw-r--r--tests/src/com/android/mail/compose/ComposeActivityTest.java47
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();