1818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira/** 2818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * Copyright (c) 2012, Google Inc. 3818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * 4818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * Licensed under the Apache License, Version 2.0 (the "License"); 5818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * you may not use this file except in compliance with the License. 6818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * You may obtain a copy of the License at 7818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * 8818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 9818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * 10818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * Unless required by applicable law or agreed to in writing, software 11818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 12818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * See the License for the specific language governing permissions and 14818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira * limitations under the License. 15818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira */ 16818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 17818143e2163648acc0c91f123b84777d65cd70cfMindy Pereirapackage com.android.mail.compose; 18818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport android.content.ContentResolver; 206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport android.content.Context; 216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport android.content.Intent; 22818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.database.Cursor; 231666816f97b7d69124d25f61415b8e258357e4dbMindy Pereiraimport android.database.MatrixCursor; 24818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.net.Uri; 25818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.test.ActivityInstrumentationTestCase2; 2665b06f52e5b6336493388923be88bdd2ded4e1d1mindypimport android.test.suitebuilder.annotation.SmallTest; 271666816f97b7d69124d25f61415b8e258357e4dbMindy Pereiraimport android.text.Html; 28818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.text.TextUtils; 29818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport android.text.util.Rfc822Tokenizer; 30818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.compose.ComposeActivity; 32818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport com.android.mail.providers.Account; 33bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereiraimport com.android.mail.providers.Attachment; 346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.providers.MailAppProvider; 353ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereiraimport com.android.mail.providers.Message; 361883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereiraimport com.android.mail.providers.ReplyFromAccount; 37818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport com.android.mail.providers.UIProvider; 38818143e2163648acc0c91f123b84777d65cd70cfMindy Pereiraimport com.android.mail.utils.AccountUtils; 396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.utils.LogUtils; 40384b8de1a1e18b29fe392151b06ce6fbe07be4bdScott Kennedyimport com.android.mail.utils.MatrixCursorWithCachedColumns; 416d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport com.android.mail.utils.Utils; 42818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 431883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereiraimport org.json.JSONArray; 44bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereiraimport org.json.JSONException; 451883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira 466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport java.lang.Deprecated; 476d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport java.lang.Throwable; 486d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrookimport java.util.Arrays; 491666816f97b7d69124d25f61415b8e258357e4dbMindy Pereiraimport java.util.Date; 50f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereiraimport java.util.HashSet; 511666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 5265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp@SmallTest 53818143e2163648acc0c91f123b84777d65cd70cfMindy Pereirapublic class ComposeActivityTest extends ActivityInstrumentationTestCase2<ComposeActivity> { 546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // TODO: Remove usages of FromAddressSpinner#initialize and ComposeActivity#initReplyRecipients. 556d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // The internal state of the activity instance may have the wrong mReplyFromAccount as 566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // this is set when handling the initial intent. Theses tests should 576d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // instantiate the ComposeActivity with the correct reply all intent 586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // This varible shouldn't be used, as it may not match the state of the ComposeActivity 606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // TODO: remove usage of this variable 616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook @Deprecated 62818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira private Account mAccount; 63818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 642efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook private static final Account[] EMPTY_ACCOUNT_LIST = new Account[0]; 652efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook 66818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira public ComposeActivityTest() { 67818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira super(ComposeActivity.class); 68818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 69818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook private Message getRefMessage(ContentResolver resolver, Uri folderListUri) { 716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Cursor foldersCursor = resolver.query(folderListUri, 72cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira UIProvider.FOLDERS_PROJECTION, null, null, null); 73818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira Uri convUri = null; 74818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira if (foldersCursor != null) { 75818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira foldersCursor.moveToFirst(); 76818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira convUri = Uri.parse(foldersCursor 77818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira .getString(UIProvider.FOLDER_CONVERSATION_LIST_URI_COLUMN)); 789e2d407fdafeb874e640eb84017feaf784309075Scott Kennedy foldersCursor.close(); 79818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Cursor convCursor = resolver.query(convUri, 82818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira UIProvider.CONVERSATION_PROJECTION, null, null, null); 83818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira Uri messagesUri = null; 84818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira if (convCursor != null) { 85818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira convCursor.moveToFirst(); 86818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira messagesUri = Uri.parse(convCursor 87818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira .getString(UIProvider.CONVERSATION_MESSAGE_LIST_URI_COLUMN)); 889e2d407fdafeb874e640eb84017feaf784309075Scott Kennedy convCursor.close(); 89818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 906d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Cursor msgCursor = resolver.query(messagesUri, 92818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira UIProvider.MESSAGE_PROJECTION, null, null, null); 93818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira if (msgCursor != null) { 94818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira msgCursor.moveToFirst(); 95818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 96a831b2f1ba6d3c18d5e54563df8bae1f589c4257Mindy Pereira return new Message(msgCursor); 97818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 98818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 1006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook private Message getRefMessage(ContentResolver resolver) { 1016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook return getRefMessage(resolver, mAccount.folderListUri); 1026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 1036d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 1046d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void setAccount(ComposeActivity activity, String accountName) { 1051666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira // Get a mock account. 1066d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Account account = getAccountForName(activity, accountName); 1076d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook if (account != null) { 1086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook mAccount = account; 1096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.setAccount(mAccount); 1106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 1116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 1126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 1136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook private Account[] getAccounts(Context context) { 1146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook return AccountUtils.getSyncingAccounts(context); 1156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 1166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 1176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook private Account getAccountForName(Context context, String accountName) { 1186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account[] results = getAccounts(context); 1191666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira for (Account account : results) { 1201666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira if (account.name.equals(accountName)) { 1216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook return account; 1221666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 1231666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 1246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook return null; 1251666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 1261666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 12765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp /** 12865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp * Test the cases where: The user's reply-to is one of their custom from's 12965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp * and they are replying all to a message where their custom from was a 13065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp * recipient. TODO: verify web behavior 13165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp */ 1326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testRecipientsRefReplyAllCustomFromReplyTo() throws Throwable { 1336d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 1346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account3@mockuiprovider.com"); 1356d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 13665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp final String customFrom = "CUSTOMaccount3@mockuiprovider.com"; 13765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp refMessage.setFrom("account3@mockuiprovider.com"); 13865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp refMessage.setTo("someotheraccount1@mockuiprovider.com, " 13965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp + "someotheraccount2@mockuiprovider.com, someotheraccount3@mockuiprovider.com, " 14065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp + customFrom); 14165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp refMessage.setReplyTo(customFrom); 1426d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner = new FromAddressSpinner(activity); 14365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom, 14465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp customFrom, customFrom, true, true); 14565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp JSONArray array = new JSONArray(); 14665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp array.put(a.serialize()); 14765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp mAccount.accountFromAddresses = array.toString(); 14865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri, 14965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp mAccount.name, mAccount.name, customFrom, true, false); 1506d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.setCurrentAccount(currentAccount); 1516d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 1526d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL, 1532efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook currentAccount.account, EMPTY_ACCOUNT_LIST, null); 1546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 1558750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 15665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp public void run() { 157ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 15865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] to = activity.getToAddresses(); 15965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] cc = activity.getCcAddresses(); 16065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] bcc = activity.getBccAddresses(); 16165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String toAsString = TextUtils.join(",", to); 16265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(3, to.length); 16365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertFalse(toAsString.contains(customFrom)); 16465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(0, cc.length); 16565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(0, bcc.length); 16665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp } 16765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp }); 16865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp } 16965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp 17065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp /** 17165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp * Test the cases where: The user sent a message to one of 17265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp * their custom froms and just replied to that message 17365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp */ 1746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testRecipientsRefReplyAllOnlyAccount() throws Throwable { 1756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 1766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account3@mockuiprovider.com"); 1776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 17865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp refMessage.setFrom("account3@mockuiprovider.com"); 17965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp refMessage.setTo("account3@mockuiprovider.com"); 18065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp final Account account = mAccount; 1816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner = new FromAddressSpinner(activity); 18265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri, 18365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp mAccount.name, mAccount.name, mAccount.name, true, false); 1846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.setCurrentAccount(currentAccount); 1856d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 1866d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL, 1872efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook currentAccount.account, EMPTY_ACCOUNT_LIST, null); 1886d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 1898750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 19065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp public void run() { 191ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 19265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] to = activity.getToAddresses(); 19365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] cc = activity.getCcAddresses(); 19465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] bcc = activity.getBccAddresses(); 19565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String toAsString = TextUtils.join(",", to); 19665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(1, to.length); 197184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertTrue(toAsString.contains(account.getEmailAddress())); 19865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(0, cc.length); 19965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(0, bcc.length); 20065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp } 20165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp }); 20265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp } 20365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp 20465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp /** 20565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp * Test the cases where: The user sent a message to one of 20665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp * their custom froms and just replied to that message 20765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp */ 2086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testRecipientsRefReplyAllOnlyCustomFrom() throws Throwable { 2096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 2106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account3@mockuiprovider.com"); 2116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 21265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp final String customFrom = "CUSTOMaccount3@mockuiprovider.com"; 21365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp refMessage.setFrom("account3@mockuiprovider.com"); 21465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp refMessage.setTo(customFrom); 2156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner = new FromAddressSpinner(activity); 21665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom, 21765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp customFrom, customFrom, true, true); 21865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp JSONArray array = new JSONArray(); 21965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp array.put(a.serialize()); 22065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp mAccount.accountFromAddresses = array.toString(); 22165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri, 22265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp mAccount.name, mAccount.name, customFrom, true, false); 2236d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.setCurrentAccount(currentAccount); 2246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 2256d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL, 2262efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook currentAccount.account, EMPTY_ACCOUNT_LIST, null); 2276d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 2288750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 22965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp public void run() { 230ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 23165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] to = activity.getToAddresses(); 23265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] cc = activity.getCcAddresses(); 23365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String[] bcc = activity.getBccAddresses(); 23465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp String toAsString = TextUtils.join(",", to); 23565b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(1, to.length); 23665b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertTrue(toAsString.contains(customFrom)); 23765b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(0, cc.length); 23865b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(0, bcc.length); 23965b06f52e5b6336493388923be88bdd2ded4e1d1mindyp } 24065b06f52e5b6336493388923be88bdd2ded4e1d1mindyp }); 24165b06f52e5b6336493388923be88bdd2ded4e1d1mindyp } 24265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp 2436d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReply() throws Throwable { 2446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 2456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 2466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 2478960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String refMessageFromAccount = refMessage.getFrom(); 248818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 2496d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 2508750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 251818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira public void run() { 252ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 253818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] to = activity.getToAddresses(); 254818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] cc = activity.getCcAddresses(); 255818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] bcc = activity.getBccAddresses(); 256818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertTrue(to.length == 1); 257818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(refMessageFromAccount, 258818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 259818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertTrue(cc.length == 0); 260818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertTrue(bcc.length == 0); 261818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 262818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira }); 263818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 264818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 2656d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplyWithReplyTo() throws Throwable { 2666d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 2676d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 2686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 2698960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setReplyTo("replytofromaccount1@mock.com"); 2708960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String refReplyToAccount = refMessage.getReplyTo(); 2711666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 2726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 2738750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 2741666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira public void run() { 275ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 2761666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] to = activity.getToAddresses(); 2771666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] cc = activity.getCcAddresses(); 2781666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] bcc = activity.getBccAddresses(); 2791666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertTrue(to.length == 1); 2801666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertEquals(refReplyToAccount, 2811666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 2821666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertTrue(cc.length == 0); 2831666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertTrue(bcc.length == 0); 2841666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 2851666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira }); 2861666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 2871666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 288fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp /** 289263a0afc4612eff931fe43e9c815665fb49bb617mindyp * Reply to a message you sent yourself to some recipients in the to field. 290263a0afc4612eff931fe43e9c815665fb49bb617mindyp */ 2916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplyToSelf() throws Throwable { 2926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 2936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 2946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 295263a0afc4612eff931fe43e9c815665fb49bb617mindyp refMessage.setFrom("Account Test <account1@mockuiprovider.com>"); 296263a0afc4612eff931fe43e9c815665fb49bb617mindyp refMessage.setTo("test1@gmail.com"); 2976d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 2988750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 299263a0afc4612eff931fe43e9c815665fb49bb617mindyp public void run() { 300ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 301263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] to = activity.getToAddresses(); 302263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] cc = activity.getCcAddresses(); 303263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] bcc = activity.getBccAddresses(); 304263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(to.length == 1); 305263a0afc4612eff931fe43e9c815665fb49bb617mindyp String toAsString = TextUtils.join(",", to); 306263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(toAsString.contains("test1@gmail.com")); 307263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(cc.length == 0); 308263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(bcc.length == 0); 309263a0afc4612eff931fe43e9c815665fb49bb617mindyp } 310263a0afc4612eff931fe43e9c815665fb49bb617mindyp }); 311263a0afc4612eff931fe43e9c815665fb49bb617mindyp } 312263a0afc4612eff931fe43e9c815665fb49bb617mindyp 313263a0afc4612eff931fe43e9c815665fb49bb617mindyp /** 314263a0afc4612eff931fe43e9c815665fb49bb617mindyp * Reply-all to a message you sent. 315263a0afc4612eff931fe43e9c815665fb49bb617mindyp */ 3166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplyAllToSelf() throws Throwable { 3176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 3186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 3196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 320263a0afc4612eff931fe43e9c815665fb49bb617mindyp refMessage.setFrom("Account Test <account1@mockuiprovider.com>"); 321263a0afc4612eff931fe43e9c815665fb49bb617mindyp refMessage.setTo("test1@gmail.com, test2@gmail.com"); 3226d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 3238750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 324263a0afc4612eff931fe43e9c815665fb49bb617mindyp public void run() { 325ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 326263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] to = activity.getToAddresses(); 327263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] cc = activity.getCcAddresses(); 328263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] bcc = activity.getBccAddresses(); 329263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertEquals(to.length, 2); 330263a0afc4612eff931fe43e9c815665fb49bb617mindyp String toAsString = TextUtils.join(",", to); 331263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(toAsString.contains("test1@gmail.com")); 332263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(toAsString.contains("test2@gmail.com")); 333263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(cc.length == 0); 334263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(bcc.length == 0); 335263a0afc4612eff931fe43e9c815665fb49bb617mindyp } 336263a0afc4612eff931fe43e9c815665fb49bb617mindyp }); 337263a0afc4612eff931fe43e9c815665fb49bb617mindyp } 338263a0afc4612eff931fe43e9c815665fb49bb617mindyp 339263a0afc4612eff931fe43e9c815665fb49bb617mindyp /** 340263a0afc4612eff931fe43e9c815665fb49bb617mindyp * Reply-all to a message you sent with some to and some CC recips. 341263a0afc4612eff931fe43e9c815665fb49bb617mindyp */ 3426d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplyAllToSelfWithCc() throws Throwable { 3436d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 3446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 3456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 346263a0afc4612eff931fe43e9c815665fb49bb617mindyp refMessage.setFrom("Account Test <account1@mockuiprovider.com>"); 347263a0afc4612eff931fe43e9c815665fb49bb617mindyp refMessage.setTo("test1@gmail.com, test2@gmail.com"); 348263a0afc4612eff931fe43e9c815665fb49bb617mindyp refMessage.setCc("testcc@gmail.com"); 3496d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 3508750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 351263a0afc4612eff931fe43e9c815665fb49bb617mindyp public void run() { 352ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 353263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] to = activity.getToAddresses(); 354263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] cc = activity.getCcAddresses(); 355263a0afc4612eff931fe43e9c815665fb49bb617mindyp String[] bcc = activity.getBccAddresses(); 356263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertEquals(to.length, 2); 357263a0afc4612eff931fe43e9c815665fb49bb617mindyp String toAsString = TextUtils.join(",", to); 358263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(toAsString.contains("test1@gmail.com")); 359263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(toAsString.contains("test2@gmail.com")); 360263a0afc4612eff931fe43e9c815665fb49bb617mindyp String ccAsString = TextUtils.join(",", cc); 361263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(ccAsString.contains("testcc@gmail.com")); 362263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(cc.length == 1); 363263a0afc4612eff931fe43e9c815665fb49bb617mindyp assertTrue(bcc.length == 0); 364263a0afc4612eff931fe43e9c815665fb49bb617mindyp } 365263a0afc4612eff931fe43e9c815665fb49bb617mindyp }); 366263a0afc4612eff931fe43e9c815665fb49bb617mindyp } 367263a0afc4612eff931fe43e9c815665fb49bb617mindyp 3686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplyAll() throws Throwable { 3696d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 3706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 3716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 3728960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String[] refMessageTo = TextUtils.split(refMessage.getTo(), ","); 3738960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String refMessageFromAccount = refMessage.getFrom(); 374818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 3756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 3768750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 377818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira public void run() { 378ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 379818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] to = activity.getToAddresses(); 380818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] cc = activity.getCcAddresses(); 381818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] bcc = activity.getBccAddresses(); 382818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertTrue(to.length == 1); 383818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(refMessageFromAccount, 384818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 385818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(cc.length, refMessageTo.length); 386818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertTrue(bcc.length == 0); 387818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 388818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira }); 389818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 390818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 3916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplyAllWithReplyTo() throws Throwable { 3926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 3936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 3946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 3958960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setReplyTo("replytofromaccount1@mock.com"); 3968960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String[] refMessageTo = TextUtils.split(refMessage.getTo(), ","); 3978960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String refReplyToAccount = refMessage.getReplyTo(); 3981666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 3996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 4008750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 4011666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira public void run() { 402ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 4031666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] to = activity.getToAddresses(); 4041666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] cc = activity.getCcAddresses(); 4051666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] bcc = activity.getBccAddresses(); 4061666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertTrue(to.length == 1); 4071666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertEquals(refReplyToAccount, Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 4081666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertEquals(cc.length, refMessageTo.length); 4091666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertTrue(bcc.length == 0); 4101666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 4111666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira }); 4121666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 4131666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 414384b8de1a1e18b29fe392151b06ce6fbe07be4bdScott Kennedy private static Message getRefMessageWithCc(long messageId, boolean hasAttachments) { 415384b8de1a1e18b29fe392151b06ce6fbe07be4bdScott Kennedy MatrixCursor cursor = new MatrixCursorWithCachedColumns(UIProvider.MESSAGE_PROJECTION); 4161666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira final String messageUri = "content://xxx/message/" + messageId; 4171666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira Object[] messageValues = new Object[UIProvider.MESSAGE_PROJECTION.length]; 4181666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_ID_COLUMN] = Long.valueOf(messageId); 4191666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_URI_COLUMN] = messageUri; 4201666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_SUBJECT_COLUMN] = "Message subject"; 4211666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_SNIPPET_COLUMN] = "SNIPPET"; 4221666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String html = "<html><body><b><i>This is some html!!!</i></b></body></html>"; 4231666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_BODY_HTML_COLUMN] = html; 4241666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_BODY_TEXT_COLUMN] = Html.fromHtml(html); 4253ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira messageValues[UIProvider.MESSAGE_HAS_ATTACHMENTS_COLUMN] = hasAttachments ? 1 : 0; 4261666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_DATE_RECEIVED_MS_COLUMN] = new Date().getTime(); 4271666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_ATTACHMENT_LIST_URI_COLUMN] = messageUri 4281666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira + "/getAttachments"; 4291666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_TO_COLUMN] = "account1@mock.com, account2@mock.com"; 4301666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_FROM_COLUMN] = "fromaccount1@mock.com"; 4311666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira messageValues[UIProvider.MESSAGE_CC_COLUMN] = "accountcc1@mock.com, accountcc2@mock.com"; 4321666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira cursor.addRow(messageValues); 4331666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira cursor.moveToFirst(); 434a831b2f1ba6d3c18d5e54563df8bae1f589c4257Mindy Pereira return new Message(cursor); 4351666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 4361666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 4376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplyAllWithCc() throws Throwable { 4386d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 4396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 4403ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira final Message refMessage = getRefMessageWithCc(0, false); 4418960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String[] refMessageTo = TextUtils.split(refMessage.getTo(), ","); 4428960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String[] refMessageCc = TextUtils.split(refMessage.getCc(), ","); 4438960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy final String refMessageFromAccount = refMessage.getFrom(); 4441666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 4456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 4468750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 4471666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira public void run() { 448ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 4491666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] to = activity.getToAddresses(); 4501666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] cc = activity.getCcAddresses(); 4511666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira String[] bcc = activity.getBccAddresses(); 4521666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertTrue(to.length == 1); 4536d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(refMessageFromAccount, 4546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 4551666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertEquals(cc.length, refMessageTo.length + refMessageCc.length); 456f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira HashSet<String> ccMap = new HashSet<String>(); 457f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira for (String recip : cc) { 458f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira ccMap.add(Rfc822Tokenizer.tokenize(recip.trim())[0].getAddress()); 459f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira } 460f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira for (String toRecip : refMessageTo) { 461f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira assertTrue(ccMap.contains(toRecip.trim())); 462f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira } 463f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira for (String ccRecip : refMessageCc) { 464f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira assertTrue(ccMap.contains(ccRecip.trim())); 465f2b71bb326eca61fc54d21a3968f845fd36b1705Mindy Pereira } 4661666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira assertTrue(bcc.length == 0); 4671666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 4681666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira }); 4691666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira } 4701666816f97b7d69124d25f61415b8e258357e4dbMindy Pereira 4716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testForward() throws Throwable { 4726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 4736d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 4746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 475818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 4766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 4778750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 478818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira public void run() { 479ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.FORWARD); 480818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] to = activity.getToAddresses(); 481818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] cc = activity.getCcAddresses(); 482818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] bcc = activity.getBccAddresses(); 483818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(to.length, 0); 484818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(cc.length, 0); 485818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(bcc.length, 0); 486818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 487818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira }); 488818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 489818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 4906d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testCompose() throws Throwable { 4916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 4926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 4936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 494818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira 4956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 4968750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 497818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira public void run() { 498ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.COMPOSE); 499818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] to = activity.getToAddresses(); 500818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] cc = activity.getCcAddresses(); 501818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira String[] bcc = activity.getBccAddresses(); 502818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(to.length, 0); 503818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(cc.length, 0); 504818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira assertEquals(bcc.length, 0); 505818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 506818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira }); 507818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira } 5081883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira 5091883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira /** 5101883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira * Test the cases where: The user is replying to a message they sent 5111883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira */ 5126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testRecipientsRefMessageReplyToSelf() throws Throwable { 5136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 5146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 5156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 5168960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setFrom("account0@mockuiprovider.com"); 5178960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setTo("someotheraccount@mockuiprovider.com"); 5181883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira 5196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 5208750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 5211883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira public void run() { 522ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 5231883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira String[] to = activity.getToAddresses(); 5241883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira String[] cc = activity.getCcAddresses(); 5251883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira String[] bcc = activity.getBccAddresses(); 5261883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira assertEquals(to.length, 1); 5278960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(to[0].contains(refMessage.getTo())); 5281883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira assertEquals(cc.length, 0); 5291883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira assertEquals(bcc.length, 0); 5301883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira } 5311883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira }); 5321883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira } 5331883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira 5341883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira /** 5351883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira * Test the cases where: 5361883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira * The user is replying to a message sent from one of their custom froms 5371883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira */ 5386d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testRecipientsRefMessageReplyToCustomFrom() throws Throwable { 5396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 5406d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 5416d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 5428960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setFrom("CUSTOMaccount1@mockuiprovider.com"); 5438960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setTo("someotheraccount@mockuiprovider.com"); 5446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner = new FromAddressSpinner(activity); 5458960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, refMessage.getFrom(), 5468960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.getFrom(), refMessage.getFrom(), true, true); 5471883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira JSONArray array = new JSONArray(); 5481883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira array.put(a.serialize()); 5491883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira mAccount.accountFromAddresses = array.toString(); 5501883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri, 5511883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira mAccount.name, mAccount.name, mAccount.name, true, false); 5526d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.setCurrentAccount(currentAccount); 5536d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.initialize(ComposeActivity.REPLY, currentAccount.account, 5542efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook EMPTY_ACCOUNT_LIST, null); 5551883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira 5566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 5578750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 5581883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira public void run() { 559ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 5601883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira String[] to = activity.getToAddresses(); 5611883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira String[] cc = activity.getCcAddresses(); 5621883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira String[] bcc = activity.getBccAddresses(); 5631883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira assertEquals(to.length, 1); 5648960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(to[0].contains(refMessage.getTo())); 5651883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira assertEquals(cc.length, 0); 5661883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira assertEquals(bcc.length, 0); 5671883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira } 5681883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira }); 5691883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira } 570b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira 571cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira /** 572cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira * Test the cases where: 573cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira * The user is replying to a message sent from one of their custom froms 574cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira */ 5756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testRecipientsRefMessageReplyAllCustomFrom() throws Throwable { 5766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 5776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 5786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 579fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp final String customFrom = "CUSTOMaccount1@mockuiprovider.com"; 5808960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setFrom("senderaccount@mockuiprovider.com"); 5818960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setTo("someotheraccount@mockuiprovider.com, " 58265b06f52e5b6336493388923be88bdd2ded4e1d1mindyp + "someotheraccount2@mockuiprovider.com, someotheraccount4@mockuiprovider.com, " 5838960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy + customFrom); 5846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner = new FromAddressSpinner(activity); 585cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom, 586fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp customFrom, customFrom, true, true); 587cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira JSONArray array = new JSONArray(); 588cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira array.put(a.serialize()); 589cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira mAccount.accountFromAddresses = array.toString(); 590cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri, 591cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira mAccount.name, mAccount.name, mAccount.name, true, false); 5926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.setCurrentAccount(currentAccount); 5936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL, 5942efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook currentAccount.account, EMPTY_ACCOUNT_LIST, null); 5956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 5968750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 597cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira public void run() { 598ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 599cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira String[] to = activity.getToAddresses(); 600cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira String[] cc = activity.getCcAddresses(); 601cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira String[] bcc = activity.getBccAddresses(); 602cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira String toAsString = TextUtils.join(",", to); 603cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira String ccAsString = TextUtils.join(",", cc); 604cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira String bccAsString = TextUtils.join(",", bcc); 605cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira assertEquals(to.length, 1); 606cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira assertFalse(toAsString.contains(customFrom)); 607cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira assertFalse(ccAsString.contains(customFrom)); 608cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira assertFalse(bccAsString.contains(customFrom)); 609cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira } 610cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira }); 611cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira } 612cecc54a913a665af3556f3fcc11cfae4d54cb3beMindy Pereira 613fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp /** 614fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp * Test the cases where: 615fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp * The user is replying to a message sent from one of their custom froms 616fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp */ 6176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testRecipientsRefMessageReplyAllCustomFromThisAccount() throws Throwable { 6186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 6196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account1@mockuiprovider.com"); 6206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 621fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp final String customFrom = "CUSTOMaccount1@mockuiprovider.com"; 6228960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setFrom("account1@mockuiprovider.com"); 6238960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setTo("someotheraccount@mockuiprovider.com, " 62465b06f52e5b6336493388923be88bdd2ded4e1d1mindyp + "someotheraccount2@mockuiprovider.com, someotheraccount4@mockuiprovider.com, " 6258960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy + customFrom); 6266d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner = new FromAddressSpinner(activity); 627fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp ReplyFromAccount a = new ReplyFromAccount(mAccount, mAccount.uri, customFrom, 628fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp customFrom, customFrom, true, true); 629fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp JSONArray array = new JSONArray(); 630fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp array.put(a.serialize()); 631fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp mAccount.accountFromAddresses = array.toString(); 632fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp ReplyFromAccount currentAccount = new ReplyFromAccount(mAccount, mAccount.uri, 633fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp mAccount.name, mAccount.name, mAccount.name, true, false); 6346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.setCurrentAccount(currentAccount); 6356d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook activity.mFromSpinner.initialize(ComposeActivity.REPLY_ALL, 6362efacc5297c5a2f575a8c98181f4dcd51ed79f9ePaul Westbrook currentAccount.account, EMPTY_ACCOUNT_LIST, null); 6376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 6388750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 639fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp public void run() { 640ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY_ALL); 641fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp String[] to = activity.getToAddresses(); 642fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp String[] cc = activity.getCcAddresses(); 643fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp String[] bcc = activity.getBccAddresses(); 644fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp String toAsString = TextUtils.join(",", to); 645fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp String ccAsString = TextUtils.join(",", cc); 646fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp String bccAsString = TextUtils.join(",", bcc); 647fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp // Should have the same count as the original message. 648fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp assertEquals(to.length, 3); 649fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp assertFalse(toAsString.contains(customFrom)); 650fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp assertFalse(ccAsString.contains(customFrom)); 651fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp assertFalse(bccAsString.contains(customFrom)); 652fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp } 653fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp }); 654fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp } 655fe8557b7a3aca8c41d85edbc9a094d96aacb08e5mindyp 6566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Test replying to a message in the first account in the list, and verify that 6576d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // the Compose Activity's from account for the reply is correct 6586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplySendingAccount0() throws Throwable { 6596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Context context = getInstrumentation().getContext(); 6606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Get the test account 6616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Account currentAccount = getAccountForName(context, "account0@mockuiprovider.com"); 6626d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 6636d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Get the message to be replied to 6646d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = 6656d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook getRefMessage(context.getContentResolver(), currentAccount.folderListUri); 6666d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 6676d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Create the reply intent 6686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Intent replyIntent = 6696d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook ComposeActivity.updateActionIntent(currentAccount, refMessage.uri, 6706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook ComposeActivity.REPLY, new Intent()); 6716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 6726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setActivityIntent(replyIntent); 6736d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 6746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 6756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final String refMessageFromAccount = refMessage.getFrom(); 6766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 6776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 6786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook @Override 6796d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void run() { 6806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] to = activity.getToAddresses(); 6816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] cc = activity.getCcAddresses(); 6826d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] bcc = activity.getBccAddresses(); 6836d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account fromAccount = activity.getFromAccount(); 6846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(1, to.length); 6856d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(refMessageFromAccount, 6866d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 6876d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, cc.length); 6886d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, bcc.length); 689184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals("account0@mockuiprovider.com", fromAccount.getEmailAddress()); 6906d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 6916d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook }); 6926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 6936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 6946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Test replying to a message in the third account in the list, and verify that 6956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // the Compose Activity's from account for the reply is correct 6966d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testReplySendingAccount1() throws Throwable { 6976d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Context context = getInstrumentation().getContext(); 6986d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Get the test account 6996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Account currentAccount = getAccountForName(context, "account2@mockuiprovider.com"); 7006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Get the message to be replied to 7026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = 7036d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook getRefMessage(context.getContentResolver(), currentAccount.folderListUri); 7046d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7056d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Create the reply intent 7066d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Intent replyIntent = 7076d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook ComposeActivity.updateActionIntent(currentAccount, refMessage.uri, 7086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook ComposeActivity.REPLY, new Intent()); 7096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setActivityIntent(replyIntent); 7116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 7136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account fromAccount = activity.getFromAccount(); 7146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final String refMessageFromAccount = refMessage.getFrom(); 7166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 7186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook @Override 7196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void run() { 7206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] to = activity.getToAddresses(); 7216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] cc = activity.getCcAddresses(); 7226d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] bcc = activity.getBccAddresses(); 7236d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account fromAccount = activity.getFromAccount(); 7246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(1, to.length); 7256d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(refMessageFromAccount, 7266d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 7276d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, cc.length); 7286d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, bcc.length); 729184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals("account2@mockuiprovider.com", fromAccount.getEmailAddress()); 7306d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 7316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook }); 7326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 7336d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 734184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler // Test a mailto VIEW Intent, with an account specified in JSON format 735184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler public void testMailToAccountJSON() throws Throwable { 7366d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Context context = getInstrumentation().getContext(); 7376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Get the test account 7386d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Account currentAccount = getAccountForName(context, "account2@mockuiprovider.com"); 7396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7406d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Create the mailto intent 7416d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Intent mailtoIntent = 7426d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:test@localhost.com")); 743184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler mailtoIntent.putExtra(Utils.EXTRA_ACCOUNT, currentAccount.serialize()); 7446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setActivityIntent(mailtoIntent); 7466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7476d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 7486d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account fromAccount = activity.getFromAccount(); 7496d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 7506d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 7516d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook @Override 7526d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void run() { 7536d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] to = activity.getToAddresses(); 7546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] cc = activity.getCcAddresses(); 7556d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] bcc = activity.getBccAddresses(); 7566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account fromAccount = activity.getFromAccount(); 7576d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals( 1, to.length); 7586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals("test@localhost.com", 7596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 7606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, cc.length); 7616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, bcc.length); 762184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals("account2@mockuiprovider.com", fromAccount.getEmailAddress()); 763184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler } 764184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler }); 765184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler } 766184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler 767184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler // Test a COMPOSE Intent, with an account specified in parcel format 768184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler public void testMailToAccount() throws Throwable { 769184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler final Context context = getInstrumentation().getContext(); 770184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler // Get the test account 771184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler final Account currentAccount = getAccountForName(context, "account2@mockuiprovider.com"); 772184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler 773184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler // Create the mailto intent 774184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler Intent intent = new Intent(context, ComposeActivity.class); 775184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler intent.putExtra(ComposeActivity.EXTRA_FROM_EMAIL_TASK, true); 776184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler intent.putExtra(ComposeActivity.EXTRA_ACTION, ComposeActivity.COMPOSE); 777184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler intent.putExtra(Utils.EXTRA_ACCOUNT, currentAccount); 778184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler intent.putExtra(ComposeActivity.EXTRA_TO, "test@localhost.com"); 779184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler 780184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler setActivityIntent(intent); 781184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler 782184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler final ComposeActivity activity = getActivity(); 783184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler Account fromAccount = activity.getFromAccount(); 784184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler 785184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler runTestOnUiThread(new Runnable() { 786184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler @Override 787184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler public void run() { 788184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler String[] to = activity.getToAddresses(); 789184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler String[] cc = activity.getCcAddresses(); 790184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler String[] bcc = activity.getBccAddresses(); 791184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler Account fromAccount = activity.getFromAccount(); 792184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals( 1, to.length); 793184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals("test@localhost.com", 794184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 795184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals(0, cc.length); 796184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals(0, bcc.length); 797184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals("account2@mockuiprovider.com", fromAccount.getEmailAddress()); 7986d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 7996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook }); 8006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 8016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 8026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Test a mailto VIEW Intent, with no account specified. The fromAccount should default to the 8036d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // last sent account. 8046d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testMailToAccountWithLastSentAccount() throws Throwable { 8056d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Context context = getInstrumentation().getContext(); 8066d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 8076d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Set the last sent account to account0 8086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Account lastSentAccount = getAccountForName(context, "account1@mockuiprovider.com"); 8096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook MailAppProvider appProvider = MailAppProvider.getInstance(); 8106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook appProvider.setLastSentFromAccount(lastSentAccount.uri.toString()); 8116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 8126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook // Create the mailto intent 8136d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Intent mailtoIntent = 8146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook new Intent(Intent.ACTION_VIEW, Uri.parse("mailto:test@localhost.com")); 8156d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 8166d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setActivityIntent(mailtoIntent); 8176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 8186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 8196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account fromAccount = activity.getFromAccount(); 8206d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 8216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 8226d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook @Override 8236d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void run() { 8246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] to = activity.getToAddresses(); 8256d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] cc = activity.getCcAddresses(); 8266d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook String[] bcc = activity.getBccAddresses(); 8276d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Account fromAccount = activity.getFromAccount(); 8286d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals( 1, to.length); 8296d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals("test@localhost.com", 8306d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook Rfc822Tokenizer.tokenize(to[0])[0].getAddress()); 8316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, cc.length); 8326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook assertEquals(0, bcc.length); 833184ec73e169fa7c54e7f3c9459191dbe1702f3b4Tony Mantler assertEquals("account1@mockuiprovider.com", fromAccount.getEmailAddress()); 8346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 8356d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook }); 8366d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook } 8376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook 8389e2d407fdafeb874e640eb84017feaf784309075Scott Kennedy private static String createAttachmentsJson() { 839bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira Attachment attachment1 = new Attachment(); 840bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira attachment1.contentUri = Uri.parse("www.google.com"); 8418750066b10f80e2a8080016973b3296d76d18266Mark Wei attachment1.setContentType("img/jpeg"); 8428750066b10f80e2a8080016973b3296d76d18266Mark Wei attachment1.setName("attachment1"); 843bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira Attachment attachment2 = new Attachment(); 844bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira attachment2.contentUri = Uri.parse("www.google.com"); 8458750066b10f80e2a8080016973b3296d76d18266Mark Wei attachment2.setContentType("img/jpeg"); 8468750066b10f80e2a8080016973b3296d76d18266Mark Wei attachment2.setName("attachment2"); 847bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira JSONArray attachments = new JSONArray(); 848bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira try { 849bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira attachments.put(attachment1.toJSON()); 850bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira attachments.put(attachment2.toJSON()); 851bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira } catch (JSONException e) { 852bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertTrue(false); 853bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira } 854bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira return attachments.toString(); 855bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira } 856bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira 857b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira // First test: switch reply to reply all to fwd, 1 to recipient, 1 cc recipient. 8586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testChangeModes0() throws Throwable { 8596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 8606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 8616d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 8628960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setFrom("fromaccount@mockuiprovider.com"); 8638960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setTo("account0@mockuiprovider.com"); 8648960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setCc("ccaccount@mockuiprovider.com"); 8656d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 8668750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 867b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira public void run() { 868b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.mRefMessage = refMessage; 869ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 870b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] to = activity.getToAddresses(); 871b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] cc = activity.getCcAddresses(); 872b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] bcc = activity.getBccAddresses(); 87365b06f52e5b6336493388923be88bdd2ded4e1d1mindyp assertEquals(1, to.length); 8748960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(to[0].contains(refMessage.getFrom())); 875b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(cc.length, 0); 876b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(bcc.length, 0); 877b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL); 878b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getToAddresses().length, 1); 8798960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(activity.getToAddresses()[0].contains(refMessage.getFrom())); 880b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getCcAddresses().length, 1); 8818960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(activity.getCcAddresses()[0].contains(refMessage.getCc())); 882b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getBccAddresses().length, 0); 883b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.onNavigationItemSelected(2, ComposeActivity.FORWARD); 884bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getToAddresses().length, 0); 885bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getCcAddresses().length, 0); 886bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getBccAddresses().length, 0); 887b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira } 888b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira }); 889b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira } 890b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira 891bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira // Switch reply to reply all to fwd, 2 to recipients, 1 cc recipient. 8926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testChangeModes1() throws Throwable { 8936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 8946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 8956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 8968960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setFrom("fromaccount@mockuiprovider.com"); 8978960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setTo("account0@mockuiprovider.com, toaccount0@mockuiprovider.com"); 8988960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setCc("ccaccount@mockuiprovider.com"); 8996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 9008750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 901b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira public void run() { 902b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.mRefMessage = refMessage; 903ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 904b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] to = activity.getToAddresses(); 905b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] cc = activity.getCcAddresses(); 906b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] bcc = activity.getBccAddresses(); 907b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(to.length, 1); 9088960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(to[0].contains(refMessage.getFrom())); 909b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(cc.length, 0); 910b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(bcc.length, 0); 911b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL); 912b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getToAddresses().length, 1); 9138960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(activity.getToAddresses()[0].contains(refMessage.getFrom())); 914b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getCcAddresses().length, 2); 9158960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(activity.getCcAddresses()[0].contains(refMessage.getCc()) 9168960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy || activity.getCcAddresses()[1].contains(refMessage.getCc())); 917b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertTrue(activity.getCcAddresses()[0].contains("toaccount0@mockuiprovider.com") 918b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira || activity.getCcAddresses()[1] 9196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook .contains("toaccount0@mockuiprovider.com")); 920b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getBccAddresses().length, 0); 921b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.onNavigationItemSelected(2, ComposeActivity.FORWARD); 922bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getToAddresses().length, 0); 923bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getCcAddresses().length, 0); 924bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getBccAddresses().length, 0); 925b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira } 926b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira }); 927b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira } 928b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira 929bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira // Switch reply to reply all to fwd, 2 to recipients, 2 cc recipients. 9306d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testChangeModes2() throws Throwable { 9316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 9326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 9336d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 9348960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setFrom("fromaccount@mockuiprovider.com"); 9358960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setTo("account0@mockuiprovider.com, toaccount0@mockuiprovider.com"); 9368960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy refMessage.setCc("ccaccount@mockuiprovider.com, ccaccount2@mockuiprovider.com"); 9376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 9388750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 939b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira public void run() { 940b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.mRefMessage = refMessage; 941ff8553f20964f4c31b0c503a9e1daff6ae08a9c7Scott Kennedy activity.initReplyRecipients(refMessage, ComposeActivity.REPLY); 942b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] to = activity.getToAddresses(); 943b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] cc = activity.getCcAddresses(); 944b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira String[] bcc = activity.getBccAddresses(); 945b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(to.length, 1); 9468960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(to[0].contains(refMessage.getFrom())); 947b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(cc.length, 0); 948b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(bcc.length, 0); 949b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL); 950b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getToAddresses().length, 1); 9518960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy assertTrue(activity.getToAddresses()[0].contains(refMessage.getFrom())); 952b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getCcAddresses().length, 3); 953b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertTrue(activity.getCcAddresses()[0].contains("ccaccount@mockuiprovider.com") 954b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira || activity.getCcAddresses()[1].contains("ccaccount@mockuiprovider.com") 955b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira || activity.getCcAddresses()[2].contains("ccaccount@mockuiprovider.com")); 956b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertTrue(activity.getCcAddresses()[0].contains("ccaccount2@mockuiprovider.com") 957b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira || activity.getCcAddresses()[1].contains("ccaccount2@mockuiprovider.com") 958b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira || activity.getCcAddresses()[2].contains("ccaccount2@mockuiprovider.com")); 959b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertTrue(activity.getCcAddresses()[0].contains("toaccount0@mockuiprovider.com") 960bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira || activity.getCcAddresses()[1].contains("toaccount0@mockuiprovider.com") 961bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira || activity.getCcAddresses()[2].contains("toaccount0@mockuiprovider.com")); 962b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertTrue(activity.getCcAddresses()[0].contains("toaccount0@mockuiprovider.com") 963b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira || activity.getCcAddresses()[1] 9646d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook .contains("toaccount0@mockuiprovider.com") 965b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira || activity.getCcAddresses()[2] 9666d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook .contains("toaccount0@mockuiprovider.com")); 967b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira assertEquals(activity.getBccAddresses().length, 0); 968b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira activity.onNavigationItemSelected(2, ComposeActivity.FORWARD); 969bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getToAddresses().length, 0); 970bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getCcAddresses().length, 0); 971bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getBccAddresses().length, 0); 972bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira } 973bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira }); 974bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira } 975bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira 976bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira // Switch reply to reply all to fwd, 2 attachments. 9776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook public void testChangeModes3() throws Throwable { 9786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final ComposeActivity activity = getActivity(); 9796d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook setAccount(activity, "account0@mockuiprovider.com"); 9806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook final Message refMessage = getRefMessage(activity.getContentResolver()); 981bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira refMessage.hasAttachments = true; 982bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira refMessage.attachmentsJson = createAttachmentsJson(); 9836d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook runTestOnUiThread(new Runnable() { 9848750066b10f80e2a8080016973b3296d76d18266Mark Wei @Override 985bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira public void run() { 986bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira activity.mRefMessage = refMessage; 987bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira activity.initAttachments(refMessage); 988bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getAttachments().size(), 2); 989bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira activity.onNavigationItemSelected(1, ComposeActivity.REPLY); 990bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getAttachments().size(), 0); 991bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira activity.onNavigationItemSelected(1, ComposeActivity.REPLY_ALL); 992bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getAttachments().size(), 0); 993bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira activity.onNavigationItemSelected(2, ComposeActivity.FORWARD); 994bddd6f39f34aa15fed2e757f7d3e4163272ca02cMindy Pereira assertEquals(activity.getAttachments().size(), 2); 995b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira } 996b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira }); 997b3112a2bf7b805695259e412b0e2bc0e0e73e9d6Mindy Pereira } 998818143e2163648acc0c91f123b84777d65cd70cfMindy Pereira} 999