182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook/**
282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * Copyright (c) 2011, Google Inc.
382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook *
482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * Licensed under the Apache License, Version 2.0 (the "License");
582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * you may not use this file except in compliance with the License.
682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * You may obtain a copy of the License at
782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook *
882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook *     http://www.apache.org/licenses/LICENSE-2.0
982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook *
1082ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * Unless required by applicable law or agreed to in writing, software
1182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * distributed under the License is distributed on an "AS IS" BASIS,
1282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * See the License for the specific language governing permissions and
1482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook * limitations under the License.
1582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook */
1682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
1730e2c24b056542f3b1b438aeb798305d1226d0c8Andy Huangpackage com.android.mail.providers.protos.mock;
1882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
1982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport android.content.ContentProvider;
2082ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport android.content.ContentValues;
2182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport android.database.Cursor;
2282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport android.database.MatrixCursor;
2382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport android.net.Uri;
2482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport android.provider.BaseColumns;
2546ce0b13c33d1ade0e4537e780b41fea5e2a6be9Mindy Pereiraimport android.text.Html;
2682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
27571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereiraimport com.android.mail.providers.ConversationInfo;
28cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereiraimport com.android.mail.providers.Folder;
29b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedyimport com.android.mail.providers.FolderList;
303b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieuximport com.android.mail.providers.ParticipantInfo;
3192551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport com.android.mail.providers.ReplyFromAccount;
32f323c046034b4658a80438575d8e9f01d92e57e6Alice Yangimport com.android.mail.providers.Settings;
339ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.android.mail.providers.UIProvider.AccountCapabilities;
349ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.android.mail.providers.UIProvider.AccountColumns;
35b1f573c59ec20f9149443e1e0cc8b64ff3a07feaPaul Westbrookimport com.android.mail.providers.UIProvider.AccountColumns.SettingsColumns;
369ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.android.mail.providers.UIProvider.AttachmentColumns;
379ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.android.mail.providers.UIProvider.ConversationColumns;
38db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrookimport com.android.mail.providers.UIProvider.ConversationCursorCommand;
399ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.android.mail.providers.UIProvider.FolderCapabilities;
409ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.android.mail.providers.UIProvider.FolderColumns;
419ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.android.mail.providers.UIProvider.MessageColumns;
42aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrookimport com.google.common.annotations.VisibleForTesting;
4382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport com.google.common.collect.ImmutableList;
449ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.google.common.collect.Lists;
459ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blankimport com.google.common.collect.Maps;
4682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
4792551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport org.json.JSONArray;
4892551d057965689f1952faeb06763f0762bc717fMindy Pereira
4992551d057965689f1952faeb06763f0762bc717fMindy Pereiraimport java.util.ArrayList;
5027a0cf01582a7a1902a300ff32dd0d60f8f544f0Mindy Pereiraimport java.util.Date;
5182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport java.util.List;
5282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport java.util.Map;
5382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookimport java.util.Set;
5482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
5582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrookpublic final class MockUiProvider extends ContentProvider {
5682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
5782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    public static final String AUTHORITY = "com.android.mail.mockprovider";
5882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static final int NUM_ACCOUNTS = 5;
606d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
6182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
6272a9d380a0effb191c4ef8e32899ea62ebf52f55Paul Westbrook    private static final Uri MOCK_ACCOUNTS_URI = Uri.parse("content://" + AUTHORITY + "/accounts");
6372a9d380a0effb191c4ef8e32899ea62ebf52f55Paul Westbrook
6482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    // A map of query result for uris
65db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook    // TODO(pwestbro) read this map from an external file
6677177b171c483d485bdbff0178564394e8f57d0fPaul Westbrook    private static Map<String, List<Map<String, Object>>> MOCK_QUERY_RESULTS = Maps.newHashMap();
6782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static void initializeAccount(int accountId,
696d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            Map<String, List<Map<String, Object>>> resultMap) {
706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> inboxfolderDetailsMap =
716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createFolderDetailsMap(0, accountId, "zero", true, 0, 2);
726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(inboxfolderDetailsMap.get(FolderColumns.URI).toString(),
736d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                ImmutableList.of(inboxfolderDetailsMap));
746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> accountDetailsMap = createAccountDetailsMap(accountId,
766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                (String)inboxfolderDetailsMap.get(FolderColumns.URI));
776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(((Uri) accountDetailsMap.get(AccountColumns.URI)).toString(),
786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                ImmutableList.of(accountDetailsMap));
796d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> secondFolderDetailsMap =
816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createFolderDetailsMap(2, accountId, "two", 2, 2);
826d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(secondFolderDetailsMap.get(FolderColumns.URI).toString(),
836d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                ImmutableList.of(secondFolderDetailsMap));
846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
856d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(
866d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                inboxfolderDetailsMap.get(FolderColumns.CHILD_FOLDERS_LIST_URI).toString(),
876d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                ImmutableList.of(createFolderDetailsMap(10, accountId, "zeroChild0", 0, 0),
886d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        createFolderDetailsMap(11, accountId, "zeroChild1", 0, 0)));
896d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
906d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final ArrayList<Map<String, Object>> conversations = new ArrayList<Map<String, Object>>();
9119a95a9366d50e8e21a9e786305ad216a2349675mindyp        for (int i = 0; i < 100; i++) {
926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            final String name = "zeroConv"+i;
936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            conversations.add(createConversationDetailsMap(accountId, name.hashCode(),
946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                    name, 1, 5, i % 2));
9519a95a9366d50e8e21a9e786305ad216a2349675mindyp        }
966d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(inboxfolderDetailsMap.get(FolderColumns.CONVERSATION_LIST_URI).toString(),
9719a95a9366d50e8e21a9e786305ad216a2349675mindyp                conversations);
98a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira
996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> message0 =
1006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createMessageDetailsMap(accountId, "zeroConv0".hashCode(), "zeroConv0", 1, false);
1016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(message0.get(MessageColumns.URI).toString(), ImmutableList.of(message0));
1026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(conversations.get(0).get(ConversationColumns.MESSAGE_LIST_URI).toString(),
103a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira                ImmutableList.of(message0));
1046d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(message0.get(MessageColumns.ATTACHMENT_LIST_URI).toString(),
105f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira                ImmutableList.of(createAttachmentDetailsMap(0, "zero")));
1066d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> message1 =
1076d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createMessageDetailsMap(accountId, "zeroConv1".hashCode(), "zeroConv1", 1, false);
1086d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(message1.get(MessageColumns.URI).toString(), ImmutableList.of(message1));
1096d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> message1a =
1106d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createMessageDetailsMap(accountId, "zeroConv1a".hashCode(), "zeroConv1a", 2, false);
1116d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(message1a.get(MessageColumns.URI).toString(), ImmutableList.of(message1a));
1126d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(conversations.get(1).get(ConversationColumns.MESSAGE_LIST_URI).toString(),
1136349a043bce28ec999d72635222ae0eb576eb9cdMindy Pereira                ImmutableList.of(message1, message1a));
1146d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(message1.get(MessageColumns.ATTACHMENT_LIST_URI).toString(),
115f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira                ImmutableList.of(createAttachmentDetailsMap(1, "one")));
116a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira
1176d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> folderDetailsMap1 =
1186d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createFolderDetailsMap(1, accountId,  "one", 0, 0);
1196d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(folderDetailsMap1.get(FolderColumns.URI).toString(),
1206349a043bce28ec999d72635222ae0eb576eb9cdMindy Pereira                ImmutableList.of(folderDetailsMap1));
1216d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1226d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // We currently have two configurations for accounts
1236d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        if (accountId % 2 == 0) {
1246d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            resultMap.put(accountDetailsMap.get(AccountColumns.FOLDER_LIST_URI).toString(),
1256d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                    ImmutableList.of(inboxfolderDetailsMap, folderDetailsMap1));
1266d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        } else {
1276d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            resultMap.put(secondFolderDetailsMap.get(FolderColumns.URI).toString(),
1286d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                    ImmutableList.of(secondFolderDetailsMap));
1296d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            final Map<String, Object> folderDetailsMap3 =
1306d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                    createFolderDetailsMap(3, accountId, "three", 0, 0);
1316d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            resultMap.put(folderDetailsMap3.get(FolderColumns.URI).toString(),
1326d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                    ImmutableList.of(folderDetailsMap3));
1336d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1346d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            resultMap.put(accountDetailsMap.get(AccountColumns.FOLDER_LIST_URI).toString(),
1356d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                    ImmutableList.of(secondFolderDetailsMap, folderDetailsMap3));
1366d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        }
1376d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1386d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> conv3 =
1396d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createConversationDetailsMap(accountId, "zeroConv3".hashCode(), "zeroConv3",
1406d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        0, 1, 0);
1416d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(conv3.get(ConversationColumns.URI).toString(),
1423263fa9bc22e6c99543bce1dc07310e964cd2a57Mindy Pereira                ImmutableList.of(conv3));
1436d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> conv4 =
1446d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createConversationDetailsMap(accountId, "zeroConv4".hashCode(), "zeroConv4",
1456d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                        0, 1, 0);
1466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(conv4.get(ConversationColumns.URI).toString(),
14758ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira                ImmutableList.of(conv4));
1486d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(secondFolderDetailsMap.get(FolderColumns.CONVERSATION_LIST_URI).toString(),
14958ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira                ImmutableList.of(conv3, conv4));
15078c623edaefb8969f31df7251f0ff0335e041f3bMindy Pereira
1516d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> message2 =
1526d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createMessageDetailsMap(accountId, "zeroConv3".hashCode(), "zeroConv3", 0, true);
1536d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(message2.get(MessageColumns.URI).toString(), ImmutableList.of(message2));
1546d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(conv3.get(ConversationColumns.MESSAGE_LIST_URI).toString(),
15578c623edaefb8969f31df7251f0ff0335e041f3bMindy Pereira                ImmutableList.of(message2));
1566d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final Map<String, Object> message3 =
1576d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook                createMessageDetailsMap(accountId, "zeroConv4".hashCode(), "zeroConv4", 0, true);
1586d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(message3.get(MessageColumns.URI).toString(), ImmutableList.of(message3));
1596d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        resultMap.put(conv4.get(ConversationColumns.MESSAGE_LIST_URI).toString(),
16078c623edaefb8969f31df7251f0ff0335e041f3bMindy Pereira                ImmutableList.of(message3));
16178c623edaefb8969f31df7251f0ff0335e041f3bMindy Pereira
1626d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        // Add the account to the list of accounts
1636d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        List<Map<String, Object>> accountList = resultMap.get(getAccountsUri().toString());
1646d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        if (accountList == null) {
1656d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            accountList = Lists.newArrayList();
1666d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            resultMap.put(getAccountsUri().toString(), accountList);
1676d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        }
1686d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        accountList.add(accountDetailsMap);
1696d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
1706d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1716d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    public static void initializeMockProvider() {
1726d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        MOCK_QUERY_RESULTS = Maps.newHashMap();
1736d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
1746d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        for (int accountId = 0; accountId < NUM_ACCOUNTS; accountId++) {
1756d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            initializeAccount(accountId, MOCK_QUERY_RESULTS);
1766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        }
17782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
17882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
1796d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static Map<String, Object> createConversationDetailsMap(int accountId,
1806d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            int conversationId, String subject, int hasAttachments, int messageCount,
1816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            int draftCount) {
1826d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final String conversationUri = getMockConversationUri(accountId, conversationId);
183a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        Map<String, Object> conversationMap = Maps.newHashMap();
184a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        conversationMap.put(BaseColumns._ID, Long.valueOf(conversationId));
1856349a043bce28ec999d72635222ae0eb576eb9cdMindy Pereira        conversationMap.put(ConversationColumns.URI, conversationUri);
186a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        conversationMap.put(ConversationColumns.MESSAGE_LIST_URI, conversationUri + "/getMessages");
187fa7ef6e5023ed9bc1f2d9f3eea427afe5b78eb2aMindy Pereira        conversationMap.put(ConversationColumns.SUBJECT, "Conversation " + subject);
18827a0cf01582a7a1902a300ff32dd0d60f8f544f0Mindy Pereira        conversationMap.put(ConversationColumns.SNIPPET, "snippet");
1894db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira        conversationMap.put(ConversationColumns.SENDER_INFO,
190259e52238941db08b518154215c579fd2f57ea86Mindy Pereira                "account1@mock.com, account2@mock.com");
19127a0cf01582a7a1902a300ff32dd0d60f8f544f0Mindy Pereira        conversationMap.put(ConversationColumns.DATE_RECEIVED_MS, new Date().getTime());
192fa7ef6e5023ed9bc1f2d9f3eea427afe5b78eb2aMindy Pereira        conversationMap.put(ConversationColumns.HAS_ATTACHMENTS, hasAttachments);
1934db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira        conversationMap.put(ConversationColumns.NUM_MESSAGES, 1);
1944db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira        conversationMap.put(ConversationColumns.NUM_DRAFTS, 1);
1954db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira        conversationMap.put(ConversationColumns.SENDING_STATE, 1);
196c8a994227b9c686d88ee05840544162711a85712Marc Blank        conversationMap.put(ConversationColumns.READ, 0);
197d5edd2d02649dffb40065fdb6a16acf91552b800Scott Kennedy        conversationMap.put(ConversationColumns.SEEN, 0);
198c8a994227b9c686d88ee05840544162711a85712Marc Blank        conversationMap.put(ConversationColumns.STARRED, 0);
19958ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira        conversationMap.put(ConversationColumns.CONVERSATION_INFO,
20058ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira                generateConversationInfo(messageCount, draftCount));
201b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy        final List<Folder> folders = new ArrayList<Folder>(3);
202b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy        for (int i = 0; i < 3; i++) {
203b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy            final Folder folder = Folder.newUnsafeInstance();
204b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy            folder.name = "folder" + i;
205cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira            switch (i) {
206cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                case 0:
207b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy                    folder.bgColor = "#fff000";
208cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                    break;
209cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                case 1:
210b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy                    folder.bgColor = "#0000FF";
211cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                    break;
212cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                case 2:
213b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy                    folder.bgColor = "#FFFF00";
214cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                    break;
215cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                default:
216b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy                    folder.bgColor = null;
217cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira                    break;
218cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira            }
219cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira
220b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy            folders.add(folder);
221cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira        }
222b10212ef23a4e2317fc43c62dff9ad177b5bcf2cScott Kennedy        final FolderList folderList = FolderList.copyOf(folders);
223db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        conversationMap.put(
224db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook                MockRespondMatrixCursor.MOCK_RESPOND_PREFIX +
225db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook                        ConversationCursorCommand.COMMAND_GET_RAW_FOLDERS, folderList);
226a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        return conversationMap;
227a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira    }
228a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira
229351ad4e87e0b0b98df9ca88266a8a63541dc5a81Andy Huang    private static byte[] generateConversationInfo(int messageCount, int draftCount) {
23058ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira        ConversationInfo info = new ConversationInfo(messageCount, draftCount, "first",
231c3efca18f09904f4ce39395169559c5d82bd3d06Mindy Pereira                "firstUnread", "last");
23258ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira        for (int i = 0; i < messageCount; i++) {
23358ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira            if (i % 2 == 0) {
2343b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux                info.addParticipant(new ParticipantInfo(i + "Test", "testsender@test.com", -1,
2353b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux                        false));
23658ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira            } else if (i % 3 == 0) {
2373b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux                info.addParticipant(new ParticipantInfo(i + "sender@test.com", "sender@test.com",
2383b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux                        -1, false));
23958ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira            } else {
2403b59b333ad0693f74f9a8cfb24a468a8acbaca8cJames Lemieux                info.addParticipant(new ParticipantInfo(" .. ", null, -1, false));
24158ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira            }
24258ef69ad99623fd8795a95227aa718d3d6177c5aMindy Pereira        }
243351ad4e87e0b0b98df9ca88266a8a63541dc5a81Andy Huang        return info.toBlob();
244571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira    }
245571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira
2466d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static Map<String, Object> createMessageDetailsMap(int accountId, int messageId,
2476d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            String subject, int hasAttachments, boolean addReplyTo) {
2486d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final String accountUri = getMockAccountUri(accountId);
2496d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final String messageUri = getMockMessageUri(accountId, messageId);
250a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        Map<String, Object> messageMap = Maps.newHashMap();
251a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        messageMap.put(BaseColumns._ID, Long.valueOf(messageId));
2526349a043bce28ec999d72635222ae0eb576eb9cdMindy Pereira        messageMap.put(MessageColumns.URI, messageUri);
253a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        messageMap.put(MessageColumns.SUBJECT, "Message " + subject);
2546349a043bce28ec999d72635222ae0eb576eb9cdMindy Pereira        messageMap.put(MessageColumns.SNIPPET, "SNIPPET");
25546ce0b13c33d1ade0e4537e780b41fea5e2a6be9Mindy Pereira        String html = "<html><body><b><i>This is some html!!!</i></b></body></html>";
25646ce0b13c33d1ade0e4537e780b41fea5e2a6be9Mindy Pereira        messageMap.put(MessageColumns.BODY_HTML, html);
25746ce0b13c33d1ade0e4537e780b41fea5e2a6be9Mindy Pereira        messageMap.put(MessageColumns.BODY_TEXT, Html.fromHtml(html));
258fa7ef6e5023ed9bc1f2d9f3eea427afe5b78eb2aMindy Pereira        messageMap.put(MessageColumns.HAS_ATTACHMENTS, hasAttachments);
259732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang        messageMap.put(MessageColumns.DATE_RECEIVED_MS, new Date().getTime());
260f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira        messageMap.put(MessageColumns.ATTACHMENT_LIST_URI, messageUri + "/getAttachments");
2614a27ea93a9eb05558f97a05a5342afb10f3d92ddMindy Pereira        messageMap.put(MessageColumns.TO, "account1@mock.com, account2@mock.com");
262a26b54e3a858de409be3746e65591bb8a0d6ea9aMindy Pereira        messageMap.put(MessageColumns.FROM, "fromaccount1@mock.com");
2636d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        messageMap.put(MessageColumns.MESSAGE_ACCOUNT_URI, accountUri);
264a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira        return messageMap;
265a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira    }
266a1406077e7bfecd81c4c2bed0d21dedef3b6e168Mindy Pereira
267f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira    private static Map<String, Object> createAttachmentDetailsMap(int attachmentId, String name) {
268f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira        Map<String, Object> attachmentMap = Maps.newHashMap();
269f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira        attachmentMap.put(BaseColumns._ID, Long.valueOf(attachmentId));
270f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira        attachmentMap.put(AttachmentColumns.NAME, "Attachment " + name);
2717a07fb4955e34250225287212b07d1b6f12bf671Mindy Pereira        attachmentMap.put(AttachmentColumns.URI,
2727a07fb4955e34250225287212b07d1b6f12bf671Mindy Pereira                "attachmentUri/" + attachmentMap.get(AttachmentColumns.NAME));
273f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira        return attachmentMap;
274f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira    }
275f30cc097db54007eac8d722aadf290540a139b0eMindy Pereira
2766d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static Map<String, Object> createFolderDetailsMap(int folderId, int accountId,
2776d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            String name, int unread, int total) {
2786d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        return createFolderDetailsMap(folderId, accountId, name, false, unread, total);
279750cc737974ada080cafe6aa1bf496bc8b2e3063Mindy Pereira    }
280750cc737974ada080cafe6aa1bf496bc8b2e3063Mindy Pereira
2816d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static Map<String, Object> createFolderDetailsMap(int folderId, int accountId,
2826d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook            String name, boolean hasChildren, int unread, int total) {
2836d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        final String folderUri = getMockAccountFolderUri(accountId, folderId);
2846d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
2853a565bfee87ea7b56c02f66e8139a3b7a0fdf718Mindy Pereira        Map<String, Object> folderMap = Maps.newHashMap();
286bc2370402e8ed6862da46c2bc9b39be3d934952fTony Mantler        folderMap.put(BaseColumns._ID, folderId);
2876349a043bce28ec999d72635222ae0eb576eb9cdMindy Pereira        folderMap.put(FolderColumns.URI, folderUri);
2883a565bfee87ea7b56c02f66e8139a3b7a0fdf718Mindy Pereira        folderMap.put(FolderColumns.NAME, "Folder " + name);
289bc2370402e8ed6862da46c2bc9b39be3d934952fTony Mantler        folderMap.put(FolderColumns.HAS_CHILDREN, hasChildren ? 1 : 0);
2903a565bfee87ea7b56c02f66e8139a3b7a0fdf718Mindy Pereira        folderMap.put(FolderColumns.CONVERSATION_LIST_URI, folderUri + "/getConversations");
291750cc737974ada080cafe6aa1bf496bc8b2e3063Mindy Pereira        folderMap.put(FolderColumns.CHILD_FOLDERS_LIST_URI, folderUri + "/getChildFolders");
292bc2370402e8ed6862da46c2bc9b39be3d934952fTony Mantler        folderMap.put(FolderColumns.CAPABILITIES, FolderCapabilities.CAN_ACCEPT_MOVED_MESSAGES);
29380445dec1014d21ffd61591caa7b99f29b2806b3Mindy Pereira        folderMap.put(FolderColumns.UNREAD_COUNT, unread);
29480445dec1014d21ffd61591caa7b99f29b2806b3Mindy Pereira        folderMap.put(FolderColumns.TOTAL_COUNT, total);
2959ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blank        folderMap.put(FolderColumns.SYNC_STATUS, 0);
2969ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blank        folderMap.put(FolderColumns.LAST_SYNC_RESULT, 0);
2973a565bfee87ea7b56c02f66e8139a3b7a0fdf718Mindy Pereira        return folderMap;
2983a565bfee87ea7b56c02f66e8139a3b7a0fdf718Mindy Pereira    }
2993a565bfee87ea7b56c02f66e8139a3b7a0fdf718Mindy Pereira
300aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook    // Temporarily made this public to allow the Gmail accounts to use the mock ui provider uris
301db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook    public static Map<String, Object> createAccountDetailsMap(int accountId,String defaultInbox) {
302aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook        final String accountUri = getMockAccountUri(accountId);
30382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        Map<String, Object> accountMap = Maps.newHashMap();
30482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        accountMap.put(BaseColumns._ID, Long.valueOf(accountId));
3055fc441a23f8827bb562bd01e41a0bd19cf0e2baeMindy Pereira        accountMap.put(AccountColumns.NAME, "account" + accountId + "@mockuiprovider.com");
306db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.TYPE, "com.android.mail.providers.protos.mock");
3073e16687b074895bc6cc63a1ed93abf7033586fd2Tony Mantler        accountMap.put(AccountColumns.ACCOUNT_MANAGER_NAME,
3083e16687b074895bc6cc63a1ed93abf7033586fd2Tony Mantler                "account" + accountId + "@mockuiprovider.com");
309468671839fc23e268ca5801d40bd973ddd515522Ray Chen        accountMap.put(AccountColumns.ACCOUNT_ID,
310468671839fc23e268ca5801d40bd973ddd515522Ray Chen                "account" + accountId + "@mockuiprovider.com");
31182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        accountMap.put(AccountColumns.PROVIDER_VERSION, Long.valueOf(1));
312cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        accountMap.put(AccountColumns.URI, Uri.parse(accountUri));
31382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        accountMap.put(AccountColumns.CAPABILITIES,
314db8f2f9ad5dcb1d52c399520129d89b1ca38f423Paul Westbrook                Integer.valueOf(
31582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.SYNCABLE_FOLDERS |
31682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.REPORT_SPAM |
31782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.ARCHIVE |
31882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.MUTE |
31982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.SERVER_SEARCH |
32082ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.FOLDER_SERVER_SEARCH |
321ccf9a34bcdcfdb884799ea3f3ecbd425970f26fcJames Lemieux                        AccountCapabilities.SERVER_SANITIZED_HTML |
32282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.DRAFT_SYNCHRONIZATION |
32382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.MULTIPLE_FROM_ADDRESSES |
32482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.SMART_REPLY |
32582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                        AccountCapabilities.LOCAL_SEARCH |
326d92e9f3d45cfedd3ebfedcf0805283007053e091Mindy Pereira                        AccountCapabilities.THREADED_CONVERSATIONS |
327d92e9f3d45cfedd3ebfedcf0805283007053e091Mindy Pereira                        AccountCapabilities.MULTIPLE_FOLDERS_PER_CONV));
32892551d057965689f1952faeb06763f0762bc717fMindy Pereira        JSONArray replyFroms = new JSONArray();
32992551d057965689f1952faeb06763f0762bc717fMindy Pereira        ArrayList<ReplyFromAccount> list = new ArrayList<ReplyFromAccount>();
33092551d057965689f1952faeb06763f0762bc717fMindy Pereira        list.add(new ReplyFromAccount(null, Uri.parse(accountUri), "customAddress1@custom.com",
331cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira                "customAddress2@custom.com", "Custom1", false, true));
33292551d057965689f1952faeb06763f0762bc717fMindy Pereira        list.add(new ReplyFromAccount(null, Uri.parse(accountUri), "customAddress2@custom.com",
333cd970ddaba4e212b668588db2104dc46ad3ad793Mindy Pereira                "customAddress2@custom.com", "Custom2", false, true));
33492551d057965689f1952faeb06763f0762bc717fMindy Pereira        for (ReplyFromAccount a : list) {
33592551d057965689f1952faeb06763f0762bc717fMindy Pereira            replyFroms.put(a.serialize());
33692551d057965689f1952faeb06763f0762bc717fMindy Pereira        }
33792551d057965689f1952faeb06763f0762bc717fMindy Pereira        accountMap.put(AccountColumns.ACCOUNT_FROM_ADDRESSES, replyFroms.toString());
338cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        accountMap.put(AccountColumns.FOLDER_LIST_URI, Uri.parse(accountUri + "/folders"));
339db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.FULL_FOLDER_LIST_URI, Uri.parse(accountUri + "/folders"));
340009f1b55b555638fd7276f8b996243a5d4ba7681Tony Mantler        accountMap.put(AccountColumns.ALL_FOLDER_LIST_URI, Uri.parse(accountUri + "/folders"));
341cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        accountMap.put(AccountColumns.SEARCH_URI, Uri.parse(accountUri + "/search"));
342cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        accountMap.put(AccountColumns.EXPUNGE_MESSAGE_URI,
343cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira                Uri.parse(accountUri + "/expungeMessage"));
344cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        accountMap.put(AccountColumns.UNDO_URI, Uri.parse(accountUri + "/undo"));
345571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira        accountMap.put(AccountColumns.SETTINGS_INTENT_URI, Uri.EMPTY);
346571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira        accountMap.put(AccountColumns.HELP_INTENT_URI, Uri.EMPTY);
347db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.SEND_FEEDBACK_INTENT_URI, Uri.EMPTY);
348db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.REAUTHENTICATION_INTENT_URI, Uri.EMPTY);
3499ace18a77e1c61700291f6116bb8162c8fce1fadMarc Blank        accountMap.put(AccountColumns.SYNC_STATUS, 0);
350cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        accountMap.put(AccountColumns.COMPOSE_URI, Uri.parse(accountUri + "/compose"));
35127e85f244604c8de53b76b135e0dd6f2bf3cad96Vikram Aggarwal        accountMap.put(AccountColumns.RECENT_FOLDER_LIST_URI,
35227e85f244604c8de53b76b135e0dd6f2bf3cad96Vikram Aggarwal                Uri.parse(accountUri + "/recentFolderListUri"));
35392551d057965689f1952faeb06763f0762bc717fMindy Pereira        accountMap.put(AccountColumns.MIME_TYPE, "account/mock");
3541883b346928322a9f045bc5b7426ddcd6af9beb3Mindy Pereira        accountMap.put(AccountColumns.COLOR, 0);
355571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira        accountMap.put(AccountColumns.RECENT_FOLDER_LIST_URI, Uri.EMPTY);
356db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.DEFAULT_RECENT_FOLDER_LIST_URI, Uri.EMPTY);
357db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.MANUAL_SYNC_URI, Uri.EMPTY);
358db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.VIEW_INTENT_PROXY_URI, Uri.EMPTY);
359db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.ACCOUNT_COOKIE_QUERY_URI, Uri.EMPTY);
360db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.UPDATE_SETTINGS_URI, Uri.EMPTY);
361db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(AccountColumns.ENABLE_MESSAGE_TRANSFORMS, 1);
362db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook
363db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook
364db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        // Add settings columns
365db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.SIGNATURE, "");
366db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.AUTO_ADVANCE, 1);
367db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.SNAP_HEADERS, 1);
368db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.REPLY_BEHAVIOR, 1);
369db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.CONV_LIST_ICON, 1);
370db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.CONFIRM_DELETE, 1);
371db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.CONFIRM_ARCHIVE, 1);
372db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.CONFIRM_SEND, 1);
373571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira        accountMap.put(SettingsColumns.DEFAULT_INBOX, defaultInbox);
374db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.DEFAULT_INBOX_NAME, "Inbox");
375db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.FORCE_REPLY_FROM_DEFAULT, 1);
376db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.MAX_ATTACHMENT_SIZE, 25 * 1024 * 1024);
377db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.SWIPE, 1);
37817646055214b9ab3abc2553379bf046ca3e53fb2Andrew Sapperstein        accountMap.put(SettingsColumns.IMPORTANCE_MARKERS_ENABLED, 1);
37917646055214b9ab3abc2553379bf046ca3e53fb2Andrew Sapperstein        accountMap.put(SettingsColumns.SHOW_CHEVRONS_ENABLED, 0);
380db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.SETUP_INTENT_URI, Uri.EMPTY);
381db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.CONVERSATION_VIEW_MODE, 1);
382db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.VEILED_ADDRESS_PATTERN, null);
383db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        accountMap.put(SettingsColumns.MOVE_TO_INBOX, Uri.EMPTY);
384f323c046034b4658a80438575d8e9f01d92e57e6Alice Yang        accountMap.put(SettingsColumns.SHOW_IMAGES, Settings.ShowImages.ASK_FIRST);
38582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        return accountMap;
38682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
38782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
388aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook    public static String getMockAccountUri(int accountId) {
389aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook        return "content://" + AUTHORITY + "/account/" + accountId;
390aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook    }
391aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook
3926d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static String getMockAccountFolderUri(int accountId, int folderId) {
3936d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        return getMockAccountUri(accountId) + "/folder/" + folderId;
3946d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
3956d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
3966d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static String getMockConversationUri(int accountId, int conversationId) {
3976d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        return getMockAccountUri(accountId) + "/conversation/" + conversationId;
3986d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
3996d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
4006d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    private static String getMockMessageUri(int accountId, int messageId) {
4016d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook        return getMockAccountUri(accountId) + "/message/" + messageId;
4026d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook    }
4036d2442ba4417717b2a19714b0ac28c7265872ba3Paul Westbrook
40482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    @Override
40582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    public boolean onCreate() {
40645402ff1f55eb83fc9add99f83649a259b5c51a2Paul Westbrook        MockUiProvider.initializeMockProvider();
40782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        return true;
40882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
40982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
41082ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    @Override
41182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    public Cursor query(Uri url, String[] projection, String selection, String[] selectionArgs,
41282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            String sortOrder) {
41382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
414db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        final List<Map<String, Object>> queryResults = MOCK_QUERY_RESULTS.get(url.toString());
41582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
41682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        if (queryResults != null && queryResults.size() > 0) {
41782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            // Get the projection.  If there are rows in the result set, pick the first item to
41882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            // generate the projection
41982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            // TODO (pwestbro): handle the case where we want to return an empty result.\
4205de96f9ce56156e34f3ba1e19d75a188240eb174Mindy Pereira            if (projection == null) {
4215de96f9ce56156e34f3ba1e19d75a188240eb174Mindy Pereira                Set<String> keys = queryResults.get(0).keySet();
4225de96f9ce56156e34f3ba1e19d75a188240eb174Mindy Pereira                projection = keys.toArray(new String[keys.size()]);
4235de96f9ce56156e34f3ba1e19d75a188240eb174Mindy Pereira            }
424db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook            final MatrixCursor matrixCursor =
425db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook                    new MockRespondMatrixCursor(projection, queryResults.size(), queryResults);
42682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
42782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            for (Map<String, Object> queryResult : queryResults) {
42882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                MatrixCursor.RowBuilder rowBuilder = matrixCursor.newRow();
42982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
430fa7ef6e5023ed9bc1f2d9f3eea427afe5b78eb2aMindy Pereira                for (String key : projection) {
43182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                    rowBuilder.add(queryResult.get(key));
43282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook                }
43382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            }
43482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            return matrixCursor;
43582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        }
43682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
43782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        return null;
43882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
43982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
44082ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    @Override
44182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    public Uri insert(Uri url, ContentValues values) {
44282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        return url;
44382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
44482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
44582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    @Override
44682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    public int update(Uri url, ContentValues values, String selection,
44782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook            String[] selectionArgs) {
44882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        return 0;
44982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
45082ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
45182ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    @Override
45282ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    public int delete(Uri url, String selection, String[] selectionArgs) {
45382ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        return 0;
45482ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
45582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
45682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    @Override
45782ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    public String getType(Uri uri) {
45882ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook        return null;
45982ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook    }
46082ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
461aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook    @VisibleForTesting
462aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook    static Uri getAccountsUri() {
463db5356a92ebc593e9eb564aaadad8dac8cd83554Paul Westbrook        return MOCK_ACCOUNTS_URI;
464aa3e7a53861d62b8ca3858c83d6cb07ae4617cf9Paul Westbrook    }
46582ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook}
46682ea6da7fe2bbb76b2c2caf06a9d0ee07e456363Paul Westbrook
467