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.database.Cursor; 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.net.Uri; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.provider.BaseColumns; 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.text.TextUtils; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper.ConversationColumns; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper.MessageColumns; 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns; 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.DatabaseWrapper; 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.datamodel.action.DeleteConversationAction; 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Assert; 312a50ffe57c45c99bbc8ab92fd07383582be9f836Tony Makimport com.android.messaging.util.ContactUtil; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.android.messaging.util.Dates; 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport com.google.common.base.Joiner; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.ArrayList; 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.List; 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Class wrapping the conversation list view used to display each item in conversation list 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class ConversationListItemData { 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mConversationId; 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mName; 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mIcon; 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mIsRead; 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private long mTimestamp; 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mSnippetText; 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private Uri mPreviewUri; 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mPreviewContentType; 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private long mParticipantContactId; 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mParticipantLookupKey; 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mOtherParticipantNormalizedDestination; 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mSelfId; 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private int mParticipantCount; 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mNotificationEnabled; 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mNotificationSoundUri; 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mNotificationVibrate; 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mIncludeEmailAddress; 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private int mMessageStatus; 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private int mMessageRawTelephonyStatus; 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mShowDraft; 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private Uri mDraftPreviewUri; 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mDraftPreviewContentType; 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mDraftSnippetText; 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private boolean mIsArchived; 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mSubject; 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mDraftSubject; 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mSnippetSenderFirstName; 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private String mSnippetSenderDisplayDestination; 707ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak private boolean mIsEnterprise; 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public ConversationListItemData() { 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void bind(final Cursor cursor) { 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd bind(cursor, false); 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void bind(final Cursor cursor, final boolean ignoreDraft) { 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mConversationId = cursor.getString(INDEX_ID); 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mName = cursor.getString(INDEX_CONVERSATION_NAME); 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mIcon = cursor.getString(INDEX_CONVERSATION_ICON); 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSnippetText = cursor.getString(INDEX_SNIPPET_TEXT); 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mTimestamp = cursor.getLong(INDEX_SORT_TIMESTAMP); 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mIsRead = cursor.getInt(INDEX_READ) == 1; 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String previewUriString = cursor.getString(INDEX_PREVIEW_URI); 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mPreviewUri = TextUtils.isEmpty(previewUriString) ? null : Uri.parse(previewUriString); 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mPreviewContentType = cursor.getString(INDEX_PREVIEW_CONTENT_TYPE); 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mParticipantContactId = cursor.getLong(INDEX_PARTICIPANT_CONTACT_ID); 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mParticipantLookupKey = cursor.getString(INDEX_PARTICIPANT_LOOKUP_KEY); 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mOtherParticipantNormalizedDestination = cursor.getString( 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION); 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSelfId = cursor.getString(INDEX_SELF_ID); 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mParticipantCount = cursor.getInt(INDEX_PARTICIPANT_COUNT); 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mNotificationEnabled = cursor.getInt(INDEX_NOTIFICATION_ENABLED) == 1; 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mNotificationSoundUri = cursor.getString(INDEX_NOTIFICATION_SOUND_URI); 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mNotificationVibrate = cursor.getInt(INDEX_NOTIFICATION_VIBRATION) == 1; 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mIncludeEmailAddress = cursor.getInt(INDEX_INCLUDE_EMAIL_ADDRESS) == 1; 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageStatus = cursor.getInt(INDEX_MESSAGE_STATUS); 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageRawTelephonyStatus = cursor.getInt(INDEX_MESSAGE_RAW_TELEPHONY_STATUS); 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!ignoreDraft) { 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mShowDraft = cursor.getInt(INDEX_SHOW_DRAFT) == 1; 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String draftPreviewUriString = cursor.getString(INDEX_DRAFT_PREVIEW_URI); 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftPreviewUri = TextUtils.isEmpty(draftPreviewUriString) ? 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd null : Uri.parse(draftPreviewUriString); 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftPreviewContentType = cursor.getString(INDEX_DRAFT_PREVIEW_CONTENT_TYPE); 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftSnippetText = cursor.getString(INDEX_DRAFT_SNIPPET_TEXT); 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftSubject = cursor.getString(INDEX_DRAFT_SUBJECT_TEXT); 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mShowDraft = false; 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftPreviewUri = null; 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftPreviewContentType = null; 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftSnippetText = null; 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mDraftSubject = null; 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mIsArchived = cursor.getInt(INDEX_ARCHIVE_STATUS) == 1; 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSubject = cursor.getString(INDEX_SUBJECT_TEXT); 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSnippetSenderFirstName = cursor.getString(INDEX_SNIPPET_SENDER_FIRST_NAME); 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mSnippetSenderDisplayDestination = 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursor.getString(INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION); 1227ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak mIsEnterprise = cursor.getInt(INDEX_IS_ENTERPRISE) == 1; 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getConversationId() { 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mConversationId; 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getName() { 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mName; 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getIcon() { 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mIcon; 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getIsRead() { 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mIsRead; 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getFormattedTimestamp() { 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return Dates.getConversationTimeString(mTimestamp).toString(); 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public long getTimestamp() { 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mTimestamp; 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 148d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getSnippetText() { 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mSnippetText; 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Uri getPreviewUri() { 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mPreviewUri; 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getPreviewContentType() { 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mPreviewContentType; 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 1612a50ffe57c45c99bbc8ab92fd07383582be9f836Tony Mak /** 1627ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak * @see ConversationColumns#PARTICIPANT_CONTACT_ID 1637ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak * @return the contact id of the participant if it is a 1:1 conversation, -1 for group. 1647ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak */ 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public long getParticipantContactId() { 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mParticipantContactId; 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 1692a50ffe57c45c99bbc8ab92fd07383582be9f836Tony Mak /** 1707ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak * @see ConversationColumns#IS_ENTERPRISE 1717ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak * @return whether the conversation is enterprise. 1722a50ffe57c45c99bbc8ab92fd07383582be9f836Tony Mak */ 1737ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak public boolean isEnterprise() { 1747ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak return mIsEnterprise; 1752a50ffe57c45c99bbc8ab92fd07383582be9f836Tony Mak } 1762a50ffe57c45c99bbc8ab92fd07383582be9f836Tony Mak 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getParticipantLookupKey() { 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mParticipantLookupKey; 179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getOtherParticipantNormalizedDestination() { 182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mOtherParticipantNormalizedDestination; 183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getSelfId() { 186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mSelfId; 187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getParticipantCount() { 190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mParticipantCount; 191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getIsGroup() { 194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Participant count excludes self 195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return (mParticipantCount > 1); 196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getIncludeEmailAddress() { 199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mIncludeEmailAddress; 200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getNotificationEnabled() { 203d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mNotificationEnabled; 204d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 205d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 206d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getNotificationSoundUri() { 207d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mNotificationSoundUri; 208d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 209d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 210d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getNotifiationVibrate() { 211d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mNotificationVibrate; 212d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 213d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 214d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final boolean getIsFailedStatus() { 215d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return (mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED || 216d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER || 217d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageStatus == MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED || 218d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageStatus == MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE); 219d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 220d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 221d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public final boolean getIsSendRequested() { 222d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return (mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND || 223d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY || 224d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_SENDING || 225d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_RESENDING); 226d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 227d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 228d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getIsMessageTypeOutgoing() { 229d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return !MessageData.getIsIncoming(mMessageStatus); 230d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 231d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 232d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getMessageRawTelephonyStatus() { 233d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mMessageRawTelephonyStatus; 234d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 235d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 236d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getMessageStatus() { 237d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mMessageStatus; 238d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 239d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 240d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getShowDraft() { 241d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mShowDraft; 242d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 243d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 244d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDraftSnippetText() { 245d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDraftSnippetText; 246d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 247d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 248d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Uri getDraftPreviewUri() { 249d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDraftPreviewUri; 250d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 251d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 252d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDraftPreviewContentType() { 253d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDraftPreviewContentType; 254d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 255d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 256d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public boolean getIsArchived() { 257d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mIsArchived; 258d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 259d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 260d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getSubject() { 261d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mSubject; 262d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 263d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 264d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getDraftSubject() { 265d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mDraftSubject; 266d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 267d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 268d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getSnippetSenderName() { 269d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (!TextUtils.isEmpty(mSnippetSenderFirstName)) { 270d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mSnippetSenderFirstName; 271d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 272d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mSnippetSenderDisplayDestination; 273d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 274d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 275d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void deleteConversation() { 276d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd DeleteConversationAction.deleteConversation(mConversationId, mTimestamp); 277d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 278d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 279d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 280d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Get the name of the view for this data item 281d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 282d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String getConversationListView() { 283d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return CONVERSATION_LIST_VIEW; 284d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 285d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 286d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String getConversationListViewSql() { 287d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return CONVERSATION_LIST_VIEW_SQL; 288d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 289d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 290d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String CONVERSATION_LIST_VIEW = "conversation_list_view"; 291d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 292d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String CONVERSATION_LIST_VIEW_PROJECTION = 293d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns._ID 294d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns._ID + ", " 295d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NAME 296d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.NAME + ", " 297d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.CURRENT_SELF_ID 298d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.CURRENT_SELF_ID + ", " 299d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.ARCHIVE_STATUS 300d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.ARCHIVE_STATUS + ", " 301d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.READ 302d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.READ + ", " 303d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.ICON 304d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.ICON + ", " 305d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_CONTACT_ID 306d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.PARTICIPANT_CONTACT_ID + ", " 307d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_LOOKUP_KEY 308d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.PARTICIPANT_LOOKUP_KEY + ", " 309d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' 310d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION 311d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + ", " 312d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SORT_TIMESTAMP 313d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.SORT_TIMESTAMP + ", " 314d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SHOW_DRAFT 315d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.SHOW_DRAFT + ", " 316d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_SNIPPET_TEXT 317d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.DRAFT_SNIPPET_TEXT + ", " 318d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_PREVIEW_URI 319d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.DRAFT_PREVIEW_URI + ", " 320d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_SUBJECT_TEXT 321d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.DRAFT_SUBJECT_TEXT + ", " 322d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' 323d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE 324d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.DRAFT_PREVIEW_CONTENT_TYPE + ", " 325d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PREVIEW_URI 326d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.PREVIEW_URI + ", " 327d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PREVIEW_CONTENT_TYPE 328d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.PREVIEW_CONTENT_TYPE + ", " 329d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_COUNT 330d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.PARTICIPANT_COUNT + ", " 331d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_ENABLED 332d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.NOTIFICATION_ENABLED + ", " 333d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_SOUND_URI 334d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.NOTIFICATION_SOUND_URI + ", " 335d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_VIBRATION 336d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.NOTIFICATION_VIBRATION + ", " 337d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + 338d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationColumns.INCLUDE_EMAIL_ADDRESS 339d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS + ", " 340d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.STATUS 341d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.MESSAGE_STATUS + ", " 342d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RAW_TELEPHONY_STATUS 343d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.MESSAGE_RAW_TELEPHONY_STATUS + ", " 344d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID 345d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.MESSAGE_ID + ", " 346d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FIRST_NAME 347d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME + ", " 348d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION 3497ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak + " as " + ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION + ", " 3507ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.IS_ENTERPRISE 3517ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak + " as " + ConversationListViewColumns.IS_ENTERPRISE; 352d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 353d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String JOIN_PARTICIPANTS = 354d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd " LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE + " ON (" 355d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SENDER_PARTICIPANT_ID 356d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + '=' + DatabaseHelper.PARTICIPANTS_TABLE + '.' + DatabaseHelper.ParticipantColumns._ID 357d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + ") "; 358d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 359d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // View that makes latest message read flag available with rest of conversation data. 360d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String CONVERSATION_LIST_VIEW_SQL = "CREATE VIEW " + 361d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd CONVERSATION_LIST_VIEW + " AS SELECT " 362d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + CONVERSATION_LIST_VIEW_PROJECTION + ", " 363d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Snippet not part of the base projection shared with search view 364d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SNIPPET_TEXT 365d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.SNIPPET_TEXT + ", " 366d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SUBJECT_TEXT 367d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " as " + ConversationListViewColumns.SUBJECT_TEXT + " " 368d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE 369d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + " LEFT JOIN " + DatabaseHelper.MESSAGES_TABLE + " ON (" 370d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.LATEST_MESSAGE_ID 371d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + '=' + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID + ") " 372d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + JOIN_PARTICIPANTS 373d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + "ORDER BY " + DatabaseHelper.CONVERSATIONS_TABLE + '.' 374d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd + ConversationColumns.SORT_TIMESTAMP + " DESC"; 375d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 376d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static class ConversationListViewColumns implements BaseColumns { 377d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String _ID = ConversationColumns._ID; 378d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String NAME = ConversationColumns.NAME; 379d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String ARCHIVE_STATUS = ConversationColumns.ARCHIVE_STATUS; 380d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String READ = MessageColumns.READ; 381d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String SORT_TIMESTAMP = ConversationColumns.SORT_TIMESTAMP; 382d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String PREVIEW_URI = ConversationColumns.PREVIEW_URI; 383d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String PREVIEW_CONTENT_TYPE = ConversationColumns.PREVIEW_CONTENT_TYPE; 384d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String SNIPPET_TEXT = ConversationColumns.SNIPPET_TEXT; 385d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String SUBJECT_TEXT = ConversationColumns.SUBJECT_TEXT; 386d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String ICON = ConversationColumns.ICON; 387d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String SHOW_DRAFT = ConversationColumns.SHOW_DRAFT; 388d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String DRAFT_SUBJECT_TEXT = ConversationColumns.DRAFT_SUBJECT_TEXT; 389d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String DRAFT_PREVIEW_URI = ConversationColumns.DRAFT_PREVIEW_URI; 390d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String DRAFT_PREVIEW_CONTENT_TYPE = 391d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE; 392d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String DRAFT_SNIPPET_TEXT = ConversationColumns.DRAFT_SNIPPET_TEXT; 393d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String PARTICIPANT_CONTACT_ID = ConversationColumns.PARTICIPANT_CONTACT_ID; 394d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String PARTICIPANT_LOOKUP_KEY = ConversationColumns.PARTICIPANT_LOOKUP_KEY; 395d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String OTHER_PARTICIPANT_NORMALIZED_DESTINATION = 396d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION; 397d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String CURRENT_SELF_ID = ConversationColumns.CURRENT_SELF_ID; 398d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String PARTICIPANT_COUNT = ConversationColumns.PARTICIPANT_COUNT; 399d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String NOTIFICATION_ENABLED = ConversationColumns.NOTIFICATION_ENABLED; 400d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String NOTIFICATION_SOUND_URI = ConversationColumns.NOTIFICATION_SOUND_URI; 401d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String NOTIFICATION_VIBRATION = ConversationColumns.NOTIFICATION_VIBRATION; 402d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String INCLUDE_EMAIL_ADDRESS = 403d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationColumns.INCLUDE_EMAIL_ADDRESS; 404d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String MESSAGE_STATUS = MessageColumns.STATUS; 405d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String MESSAGE_RAW_TELEPHONY_STATUS = MessageColumns.RAW_TELEPHONY_STATUS; 406d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String MESSAGE_ID = "message_id"; 407d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String SNIPPET_SENDER_FIRST_NAME = "snippet_sender_first_name"; 408d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd static final String SNIPPET_SENDER_DISPLAY_DESTINATION = 409d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "snippet_sender_display_destination"; 4107ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak static final String IS_ENTERPRISE = ConversationColumns.IS_ENTERPRISE; 411d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 412d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 413d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static final String[] PROJECTION = { 414d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns._ID, 415d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.NAME, 416d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.ICON, 417d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SNIPPET_TEXT, 418d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SORT_TIMESTAMP, 419d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.READ, 420d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.PREVIEW_URI, 421d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.PREVIEW_CONTENT_TYPE, 422d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.PARTICIPANT_CONTACT_ID, 423d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.PARTICIPANT_LOOKUP_KEY, 424d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION, 425d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.PARTICIPANT_COUNT, 426d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.CURRENT_SELF_ID, 427d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.NOTIFICATION_ENABLED, 428d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.NOTIFICATION_SOUND_URI, 429d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.NOTIFICATION_VIBRATION, 430d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS, 431d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.MESSAGE_STATUS, 432d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SHOW_DRAFT, 433d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.DRAFT_PREVIEW_URI, 434d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.DRAFT_PREVIEW_CONTENT_TYPE, 435d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.DRAFT_SNIPPET_TEXT, 436d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.ARCHIVE_STATUS, 437d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.MESSAGE_ID, 438d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SUBJECT_TEXT, 439d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.DRAFT_SUBJECT_TEXT, 440d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.MESSAGE_RAW_TELEPHONY_STATUS, 441d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME, 442d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION, 4437ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak ConversationListViewColumns.IS_ENTERPRISE, 444d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd }; 445d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 446d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_ID = 0; 447d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_CONVERSATION_NAME = 1; 448d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_CONVERSATION_ICON = 2; 449d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_SNIPPET_TEXT = 3; 450d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_SORT_TIMESTAMP = 4; 451d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_READ = 5; 452d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_PREVIEW_URI = 6; 453d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_PREVIEW_CONTENT_TYPE = 7; 454d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_PARTICIPANT_CONTACT_ID = 8; 455d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_PARTICIPANT_LOOKUP_KEY = 9; 456d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION = 10; 457d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_PARTICIPANT_COUNT = 11; 458d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_SELF_ID = 12; 459d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_NOTIFICATION_ENABLED = 13; 460d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_NOTIFICATION_SOUND_URI = 14; 461d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_NOTIFICATION_VIBRATION = 15; 462d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_INCLUDE_EMAIL_ADDRESS = 16; 463d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_MESSAGE_STATUS = 17; 464d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_SHOW_DRAFT = 18; 465d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_DRAFT_PREVIEW_URI = 19; 466d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_DRAFT_PREVIEW_CONTENT_TYPE = 20; 467d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_DRAFT_SNIPPET_TEXT = 21; 468d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_ARCHIVE_STATUS = 22; 469d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_MESSAGE_ID = 23; 470d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_SUBJECT_TEXT = 24; 471d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_DRAFT_SUBJECT_TEXT = 25; 472d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_MESSAGE_RAW_TELEPHONY_STATUS = 26; 473d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_SNIPPET_SENDER_FIRST_NAME = 27; 474d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final int INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION = 28; 4757ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak private static final int INDEX_IS_ENTERPRISE = 29; 476d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 477d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String DIVIDER_TEXT = ", "; 478d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 4797ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak public static boolean hasAnyEnterpriseContact( 4807ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak final List<ParticipantData> participants) { 4817ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak for (final ParticipantData participant : participants) { 4827ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak if (ContactUtil.isEnterpriseContactId(participant.getContactId())) { 4837ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak return true; 4847ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak } 4857ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak } 4867ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak return false; 4877ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak } 4887ad7ac27f12be44659f2f0ff112a7f8433ebb1b5Tony Mak 489d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 490d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Get a conversation from the local DB based on the conversation id. 491d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 492d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param dbWrapper The database 493d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param conversationId The conversation Id to read 494d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return The existing conversation or null 495d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 496d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static ConversationListItemData getExistingConversation(final DatabaseWrapper dbWrapper, 497d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final String conversationId) { 498d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationListItemData conversation = null; 499d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 500d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Look for an existing conversation in the db with this conversation id 501d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Cursor cursor = null; 502d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 503d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // TODO: Should we be able to read a row from just the conversation table? 504d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursor = dbWrapper.query(getConversationListView(), 505d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd PROJECTION, 506d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ConversationColumns._ID + "=?", 507d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd new String[] { conversationId }, 508d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd null, null, null); 509d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Assert.inRange(cursor.getCount(), 0, 1); 510d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (cursor.moveToFirst()) { 511d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd conversation = new ConversationListItemData(); 512d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd conversation.bind(cursor); 513d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 514d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } finally { 515d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (cursor != null) { 516d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd cursor.close(); 517d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 518d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 519d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 520d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return conversation; 521d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 522d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 523d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static String generateConversationName(final List<ParticipantData> 524d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd participants) { 525d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (participants.size() == 1) { 526d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Prefer full name over first name for 1:1 conversation 527d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return participants.get(0).getDisplayName(true); 528d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 529d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 530d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final ArrayList<String> participantNames = new ArrayList<String>(); 531d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (final ParticipantData participant : participants) { 532d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Prefer first name over full name for group conversation 533d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd participantNames.add(participant.getDisplayName(false)); 534d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 535d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 536d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd final Joiner joiner = Joiner.on(DIVIDER_TEXT).skipNulls(); 537d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return joiner.join(participantNames); 538d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 539d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 540d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 541