1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2015 The Android Open Source Project 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage com.android.messaging.datamodel.data; 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.content.ContentValues; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.database.sqlite.SQLiteDatabase; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.net.Uri; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.BaseColumns; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.ContactsContract.CommonDataKinds.Phone; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.ContactsContract.Contacts; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.MediaStore.Images.Media; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.BugleDatabaseOperations; 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper.ConversationColumns; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper.MessageColumns; 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper.PartColumns; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns; 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.FakeCursor; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ConversationListItemData.ConversationListViewColumns; 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.data.ConversationMessageData.ConversationMessageViewColumns; 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert; 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.ContactUtil; 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.ContentType; 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.Arrays; 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * A factory for fake objects that can be useful for multiple tests. 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class TestDataFactory { 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final static String[] sConversationListCursorColumns = new String[] { 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns._ID, 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.NAME, 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.ICON, 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SNIPPET_TEXT, 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.PREVIEW_URI, 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SORT_TIMESTAMP, 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.READ, 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.PREVIEW_CONTENT_TYPE, 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.MESSAGE_STATUS, 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final static String[] sContactCursorColumns = new String[] { 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.CONTACT_ID, 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.DISPLAY_NAME_PRIMARY, 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.PHOTO_THUMBNAIL_URI, 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.NUMBER, 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.TYPE, 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.LABEL, 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.LOOKUP_KEY, 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone._ID, 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.SORT_KEY_PRIMARY, 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final static String[] sFrequentContactCursorColumns = new String[] { 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Contacts._ID, 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Contacts.DISPLAY_NAME, 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Contacts.PHOTO_URI, 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Phone.LOOKUP_KEY, 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final static String[] sConversationMessageCursorColumns = new String[] { 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns._ID, 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.CONVERSATION_ID, 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTICIPANT_ID, 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.SENT_TIMESTAMP, 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.RECEIVED_TIMESTAMP, 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.STATUS, 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.SENDER_FULL_NAME, 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.SENDER_PROFILE_PHOTO_URI, 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_IDS, 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_CONTENT_TYPES, 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_CONTENT_URIS, 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_WIDTHS, 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_HEIGHTS, 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_TEXTS, 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_COUNT 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private final static String[] sGalleryCursorColumns = new String[] { 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Media._ID, 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Media.DATA, 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Media.WIDTH, 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Media.HEIGHT, 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Media.MIME_TYPE 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getConversationListCursor() { 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), "name1", "content://icon1", 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "snippetText1", "content://snippetUri1", Long.valueOf(10), 1, 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ContentType.IMAGE_JPEG, MessageData.BUGLE_STATUS_INCOMING_COMPLETE}, 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(2), "name2", "content://icon2", 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "snippetText2", "content://snippetUri2", Long.valueOf(20) + 24*60*60*1000, 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 0, ContentType.IMAGE_JPEG, MessageData.BUGLE_STATUS_INCOMING_COMPLETE}, 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(3), "name3", "content://icon3", 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "snippetText3", "content://snippetUri3", Long.valueOf(30) + 2*24*60*60*1000, 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 0, ContentType.IMAGE_JPEG, MessageData.BUGLE_STATUS_OUTGOING_COMPLETE} 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(ConversationListItemData.PROJECTION, sConversationListCursorColumns, 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursorData); 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int CONVERSATION_LIST_CURSOR_READ_MESSAGE_INDEX = 0; 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int CONVERSATION_LIST_CURSOR_UNREAD_MESSAGE_INDEX = 1; 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getEmptyConversationListCursor() { 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(ConversationListItemData.PROJECTION, sConversationListCursorColumns, 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[][] {}); 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getConversationMessageCursor() { 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(0), Long.valueOf(1), Long.valueOf(1), 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Long.valueOf(10), Long.valueOf(10), 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd MessageData.BUGLE_STATUS_INCOMING_COMPLETE, "Alice", null, 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "0", "text/plain", "''", -1, -1, "msg0", 1}, 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), Long.valueOf(1), Long.valueOf(2), 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Long.valueOf(20), Long.valueOf(20), 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd MessageData.BUGLE_STATUS_OUTGOING_COMPLETE, "Bob", null, 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "1", "text/plain", "''", -1, -1, "msg1", 1}, 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(2), Long.valueOf(1), Long.valueOf(1), 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Long.valueOf(30), Long.valueOf(30), 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd MessageData.BUGLE_STATUS_OUTGOING_COMPLETE, "Alice", null, 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "2", "contentType3", "'content://fakeUri3'", "0", "0", "msg1", 1}, 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(3), Long.valueOf(1), Long.valueOf(1), 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Long.valueOf(40), Long.valueOf(40), 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd MessageData.BUGLE_STATUS_OUTGOING_COMPLETE, "Alice", null, 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "3|4", "'contentType4'|'text/plain'", "'content://fakeUri4'|''", "0|-1", "0|-1", "''|'msg3'", 2}, 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor( 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageData.getProjection(), 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sConversationMessageCursorColumns, 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursorData); 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static String getMessageText(final FakeCursor messageCursor, final int row) { 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String allPartsText = messageCursor.getAt(ConversationMessageViewColumns.PARTS_TEXTS, row) 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd .toString(); 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int partsCount = (Integer) messageCursor.getAt( 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns.PARTS_COUNT, row); 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String messageId = messageCursor.getAt( 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationMessageViewColumns._ID, row).toString(); 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final List<MessagePartData> parts = ConversationMessageData.makeParts( 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageCursor.getAt(ConversationMessageViewColumns.PARTS_IDS, row).toString(), 161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageCursor.getAt(ConversationMessageViewColumns.PARTS_CONTENT_TYPES, row).toString(), 162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageCursor.getAt(ConversationMessageViewColumns.PARTS_CONTENT_URIS, row).toString(), 163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageCursor.getAt(ConversationMessageViewColumns.PARTS_WIDTHS, row).toString(), 164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageCursor.getAt(ConversationMessageViewColumns.PARTS_HEIGHTS, row).toString(), 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageCursor.getAt(ConversationMessageViewColumns.PARTS_TEXTS, row).toString(), 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd partsCount, 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageId); 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final MessagePartData part : parts) { 170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (part.isText()) { 171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return part.getText(); 172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Indexes where to find consecutive and non consecutive messages from same participant 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // (respect to index - 1). 179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int MESSAGE_WITH_SAME_PARTICIPANT_AS_PREVIOUS = 3; 180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int MESSAGE_WITH_DIFFERENT_PARTICIPANT_AS_PREVIOUS = 2; 181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getConversationParticipantsCursor() { 183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String[] sConversationParticipantsCursorColumns = new String[] { 184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantColumns._ID, 185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantColumns.SUB_ID, 186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantColumns.NORMALIZED_DESTINATION, 187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantColumns.SEND_DESTINATION, 188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantColumns.FULL_NAME, 189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantColumns.FIRST_NAME, 190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ParticipantColumns.PROFILE_PHOTO_URI, 191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { 1, ParticipantData.OTHER_THAN_SELF_SUB_ID, "+15554567890", 195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "(555)456-7890", "alice in wonderland", "alice", "alice.png" }, 196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { 2, ParticipantData.OTHER_THAN_SELF_SUB_ID, "+15551011121", 197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "(555)101-1121", "bob the baker", "bob", "bob.png"}, 198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { 3, ParticipantData.OTHER_THAN_SELF_SUB_ID, "+15551314152", 199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "(555)131-4152", "charles in charge", "charles", "charles.png" }, 200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(ParticipantData.ParticipantsQuery.PROJECTION, 203d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sConversationParticipantsCursorColumns, cursorData); 204d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 205d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 206d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int CONTACT_LIST_CURSOR_FIRST_LEVEL_CONTACT_INDEX = 0; 207d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int CONTACT_LIST_CURSOR_SECOND_LEVEL_CONTACT_INDEX = 2; 208d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 209d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 210d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Returns a cursor for the all contacts list consumable by ContactPickerFragment. 211d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 212d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getAllContactListCursor() { 213d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 214d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(0), "John Smith", "content://uri1", 215d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1234", Phone.TYPE_HOME, "", "0", Long.valueOf(0), 0 }, 216d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2", 217d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1235", Phone.TYPE_MOBILE, "", "1", Long.valueOf(1), 1 }, 218d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2", 219d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1238", Phone.TYPE_HOME, "", "1", Long.valueOf(2), 2 }, 220d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(2), "Anna Kinney", "content://uri3", 221d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1236", Phone.TYPE_MAIN, "", "3", Long.valueOf(3), 3 }, 222d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(3), "Mike Jones", "content://uri3", 223d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1236", Phone.TYPE_MAIN, "", "5", Long.valueOf(4), 4 }, 224d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 225d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(ContactUtil.PhoneQuery.PROJECTION, sContactCursorColumns, 226d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursorData); 227d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 228d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 229d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 230d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Returns a cursor for the frequent contacts list consumable by ContactPickerFragment. 231d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Note: make it so that this cursor is the generated result of getStrequentContactsCursor() 232d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * and getAllContactListCursor(), i.e., expand the entries in getStrequentContactsCursor() 233d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * with the details from getAllContactListCursor() 234d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 235d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getFrequentContactListCursor() { 236d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 237d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(2), "Anna Kinney", "content://uri3", 238d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1236", Phone.TYPE_MAIN, "", "3", Long.valueOf(3), 0 }, 239d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2", 240d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1235", Phone.TYPE_MOBILE, "", "1", Long.valueOf(1), 1}, 241d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2", 242d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1238", Phone.TYPE_HOME, "", "1", Long.valueOf(2), 2 }, 243d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(0), "John Smith", "content://uri1", 244d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "425-555-1234", Phone.TYPE_HOME, "", "0", Long.valueOf(0), 3 }, 245d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 246d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(ContactUtil.PhoneQuery.PROJECTION, sContactCursorColumns, 247d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursorData); 248d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 249d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 250d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 251d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Returns a strequent (starred + frequent) cursor (like the one produced by android contact 252d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * provider's CONTENT_STREQUENT_URI query) that's consumable by FrequentContactsCursorBuilder. 253d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 254d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getStrequentContactsCursor() { 255d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 256d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(0), "Anna Kinney", "content://uri1", "3" }, 257d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), "Sun Woo Kong", "content://uri2", "1" }, 258d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(2), "John Smith", "content://uri3", "0" }, 259d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Email-only entry that shouldn't be included in the result. 260d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(3), "Email Contact", "content://uri4", "100" }, 261d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 262d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(ContactUtil.FrequentContactQuery.PROJECTION, 263d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sFrequentContactCursorColumns, cursorData); 264d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 265d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 266d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int SMS_MMS_THREAD_ID_CURSOR_VALUE = 123456789; 267d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 268d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getSmsMmsThreadIdCursor() { 269d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String[] ID_PROJECTION = { BaseColumns._ID }; 270d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 271d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(SMS_MMS_THREAD_ID_CURSOR_VALUE) }, 272d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 273d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(ID_PROJECTION, ID_PROJECTION, cursorData); 274d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 275d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 276d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static FakeCursor getGalleryGridCursor() { 277d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Object[][] cursorData = new Object[][] { 278d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(0), "/sdcard/image1", 100, 100, "image/jpeg" }, 279d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(1), "/sdcard/image2", 200, 200, "image/png" }, 280d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new Object[] { Long.valueOf(2), "/sdcard/image3", 300, 300, "image/jpeg" }, 281d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 282d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new FakeCursor(GalleryGridItemData.IMAGE_PROJECTION, sGalleryCursorColumns, 283d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursorData); 284d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 285d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 286d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final int NUM_TEST_CONVERSATIONS = 10; 287d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 288d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 289d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Create test data in our db. 290d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 291d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Ideally this will create more realistic data with more variety. 292d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 293d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static void createTestData(final SQLiteDatabase db) { 294d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd BugleDatabaseOperations.clearParticipantIdCache(); 295d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 296d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Timestamp for 1 day ago 297d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final long yesterday = System.currentTimeMillis() - (24 * 60 * 60 * 1000); 298d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 299d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ContentValues conversationValues = new ContentValues(); 300d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (int i = 1; i <= NUM_TEST_CONVERSATIONS; i++) { 301d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd conversationValues.put(ConversationColumns.NAME, "Conversation " + i); 302d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final long conversationId = db.insert(DatabaseHelper.CONVERSATIONS_TABLE, null, 303d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd conversationValues); 304d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 305d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ContentValues messageValues = new ContentValues(); 306d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (int m = 1; m <= 25; m++) { 307d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Move forward ten minutes per conversation, 1 minute per message. 308d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final long messageTime = yesterday + (i * 10 * 60 * 1000) + (m * 60 * 1000); 309d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageValues.put(MessageColumns.RECEIVED_TIMESTAMP, messageTime); 310d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageValues.put(MessageColumns.CONVERSATION_ID, conversationId); 311d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd messageValues.put(MessageColumns.SENDER_PARTICIPANT_ID, 312d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Math.abs(("" + messageTime).hashCode()) % 2); 313d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final long messageId = db.insert(DatabaseHelper.MESSAGES_TABLE, null, messageValues); 314d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 315d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Create a text part for this message 316d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ContentValues partValues = new ContentValues(); 317d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd partValues.put(PartColumns.MESSAGE_ID, messageId); 318d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd partValues.put(PartColumns.CONVERSATION_ID, conversationId); 319d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd partValues.put(PartColumns.TEXT, "Conversation: " + conversationId + 320d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd " Message: " + m); 321d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd db.insert(DatabaseHelper.PARTS_TABLE, null, partValues); 322d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 323d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Update the snippet for this conversation to the latest message inserted 324d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd conversationValues.clear(); 325d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd conversationValues.put(ConversationColumns.LATEST_MESSAGE_ID, messageId); 326d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final int updatedCount = db.update(DatabaseHelper.CONVERSATIONS_TABLE, 327d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd conversationValues, 328d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "_id=?", new String[]{String.valueOf(conversationId)}); 329d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.isTrue(updatedCount == 1); 330d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 331d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 332d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 333d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 334d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static List<MessagePartData> getTestDraftAttachments() { 335d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final MessagePartData[] retParts = new MessagePartData[] { 336d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new MessagePartData(ContentType.IMAGE_JPEG, Uri.parse("content://image"), 337d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 100, 100), 338d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new MessagePartData(ContentType.VIDEO_3GPP, Uri.parse("content://video"), 339d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 100, 100), 340d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new MessagePartData(ContentType.TEXT_VCARD, Uri.parse("content://vcard"), 341d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 0, 0), 342d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new MessagePartData(ContentType.AUDIO_3GPP, Uri.parse("content://audio"), 343d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 0, 0) 344d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 345d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return Arrays.asList(retParts); 346d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 347d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 348