diff options
author | Mike Dodd <mdodd@google.com> | 2015-08-11 11:16:59 -0700 |
---|---|---|
committer | Mike Dodd <mdodd@google.com> | 2015-08-12 12:47:26 -0700 |
commit | d3b009ae55651f1e60950342468e3c37fdeb0796 (patch) | |
tree | bc4b489af52d0e2521e21167d2ad76a47256f348 /src/com/android/messaging/datamodel/data/ConversationListItemData.java | |
parent | ef8c7abbcfc9c770385d6609a4b4bc70240ebdc4 (diff) | |
download | android_packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.tar.gz android_packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.tar.bz2 android_packages_apps_Messaging-d3b009ae55651f1e60950342468e3c37fdeb0796.zip |
Initial checkin of AOSP Messaging app.
b/23110861
Change-Id: I11db999bd10656801e618f78ab2b2ef74136fff1
Diffstat (limited to 'src/com/android/messaging/datamodel/data/ConversationListItemData.java')
-rw-r--r-- | src/com/android/messaging/datamodel/data/ConversationListItemData.java | 510 |
1 files changed, 510 insertions, 0 deletions
diff --git a/src/com/android/messaging/datamodel/data/ConversationListItemData.java b/src/com/android/messaging/datamodel/data/ConversationListItemData.java new file mode 100644 index 0000000..b2e6e1c --- /dev/null +++ b/src/com/android/messaging/datamodel/data/ConversationListItemData.java @@ -0,0 +1,510 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.messaging.datamodel.data; + +import android.database.Cursor; +import android.net.Uri; +import android.provider.BaseColumns; +import android.text.TextUtils; + +import com.android.messaging.datamodel.DatabaseHelper; +import com.android.messaging.datamodel.DatabaseHelper.ConversationColumns; +import com.android.messaging.datamodel.DatabaseHelper.MessageColumns; +import com.android.messaging.datamodel.DatabaseHelper.ParticipantColumns; +import com.android.messaging.datamodel.DatabaseWrapper; +import com.android.messaging.datamodel.action.DeleteConversationAction; +import com.android.messaging.util.Assert; +import com.android.messaging.util.Dates; +import com.google.common.base.Joiner; + +import java.util.ArrayList; +import java.util.List; + +/** + * Class wrapping the conversation list view used to display each item in conversation list + */ +public class ConversationListItemData { + private String mConversationId; + private String mName; + private String mIcon; + private boolean mIsRead; + private long mTimestamp; + private String mSnippetText; + private Uri mPreviewUri; + private String mPreviewContentType; + private long mParticipantContactId; + private String mParticipantLookupKey; + private String mOtherParticipantNormalizedDestination; + private String mSelfId; + private int mParticipantCount; + private boolean mNotificationEnabled; + private String mNotificationSoundUri; + private boolean mNotificationVibrate; + private boolean mIncludeEmailAddress; + private int mMessageStatus; + private int mMessageRawTelephonyStatus; + private boolean mShowDraft; + private Uri mDraftPreviewUri; + private String mDraftPreviewContentType; + private String mDraftSnippetText; + private boolean mIsArchived; + private String mSubject; + private String mDraftSubject; + private String mSnippetSenderFirstName; + private String mSnippetSenderDisplayDestination; + + public ConversationListItemData() { + } + + public void bind(final Cursor cursor) { + bind(cursor, false); + } + + public void bind(final Cursor cursor, final boolean ignoreDraft) { + mConversationId = cursor.getString(INDEX_ID); + mName = cursor.getString(INDEX_CONVERSATION_NAME); + mIcon = cursor.getString(INDEX_CONVERSATION_ICON); + mSnippetText = cursor.getString(INDEX_SNIPPET_TEXT); + mTimestamp = cursor.getLong(INDEX_SORT_TIMESTAMP); + mIsRead = cursor.getInt(INDEX_READ) == 1; + final String previewUriString = cursor.getString(INDEX_PREVIEW_URI); + mPreviewUri = TextUtils.isEmpty(previewUriString) ? null : Uri.parse(previewUriString); + mPreviewContentType = cursor.getString(INDEX_PREVIEW_CONTENT_TYPE); + mParticipantContactId = cursor.getLong(INDEX_PARTICIPANT_CONTACT_ID); + mParticipantLookupKey = cursor.getString(INDEX_PARTICIPANT_LOOKUP_KEY); + mOtherParticipantNormalizedDestination = cursor.getString( + INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION); + mSelfId = cursor.getString(INDEX_SELF_ID); + mParticipantCount = cursor.getInt(INDEX_PARTICIPANT_COUNT); + mNotificationEnabled = cursor.getInt(INDEX_NOTIFICATION_ENABLED) == 1; + mNotificationSoundUri = cursor.getString(INDEX_NOTIFICATION_SOUND_URI); + mNotificationVibrate = cursor.getInt(INDEX_NOTIFICATION_VIBRATION) == 1; + mIncludeEmailAddress = cursor.getInt(INDEX_INCLUDE_EMAIL_ADDRESS) == 1; + mMessageStatus = cursor.getInt(INDEX_MESSAGE_STATUS); + mMessageRawTelephonyStatus = cursor.getInt(INDEX_MESSAGE_RAW_TELEPHONY_STATUS); + if (!ignoreDraft) { + mShowDraft = cursor.getInt(INDEX_SHOW_DRAFT) == 1; + final String draftPreviewUriString = cursor.getString(INDEX_DRAFT_PREVIEW_URI); + mDraftPreviewUri = TextUtils.isEmpty(draftPreviewUriString) ? + null : Uri.parse(draftPreviewUriString); + mDraftPreviewContentType = cursor.getString(INDEX_DRAFT_PREVIEW_CONTENT_TYPE); + mDraftSnippetText = cursor.getString(INDEX_DRAFT_SNIPPET_TEXT); + mDraftSubject = cursor.getString(INDEX_DRAFT_SUBJECT_TEXT); + } else { + mShowDraft = false; + mDraftPreviewUri = null; + mDraftPreviewContentType = null; + mDraftSnippetText = null; + mDraftSubject = null; + } + + mIsArchived = cursor.getInt(INDEX_ARCHIVE_STATUS) == 1; + mSubject = cursor.getString(INDEX_SUBJECT_TEXT); + mSnippetSenderFirstName = cursor.getString(INDEX_SNIPPET_SENDER_FIRST_NAME); + mSnippetSenderDisplayDestination = + cursor.getString(INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION); + } + + public String getConversationId() { + return mConversationId; + } + + public String getName() { + return mName; + } + + public String getIcon() { + return mIcon; + } + + public boolean getIsRead() { + return mIsRead; + } + + public String getFormattedTimestamp() { + return Dates.getConversationTimeString(mTimestamp).toString(); + } + + public long getTimestamp() { + return mTimestamp; + } + + public String getSnippetText() { + return mSnippetText; + } + + public Uri getPreviewUri() { + return mPreviewUri; + } + + public String getPreviewContentType() { + return mPreviewContentType; + } + + public long getParticipantContactId() { + return mParticipantContactId; + } + + public String getParticipantLookupKey() { + return mParticipantLookupKey; + } + + public String getOtherParticipantNormalizedDestination() { + return mOtherParticipantNormalizedDestination; + } + + public String getSelfId() { + return mSelfId; + } + + public int getParticipantCount() { + return mParticipantCount; + } + + public boolean getIsGroup() { + // Participant count excludes self + return (mParticipantCount > 1); + } + + public boolean getIncludeEmailAddress() { + return mIncludeEmailAddress; + } + + public boolean getNotificationEnabled() { + return mNotificationEnabled; + } + + public String getNotificationSoundUri() { + return mNotificationSoundUri; + } + + public boolean getNotifiationVibrate() { + return mNotificationVibrate; + } + + public final boolean getIsFailedStatus() { + return (mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED || + mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_FAILED_EMERGENCY_NUMBER || + mMessageStatus == MessageData.BUGLE_STATUS_INCOMING_DOWNLOAD_FAILED || + mMessageStatus == MessageData.BUGLE_STATUS_INCOMING_EXPIRED_OR_NOT_AVAILABLE); + } + + public final boolean getIsSendRequested() { + return (mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND || + mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_AWAITING_RETRY || + mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_SENDING || + mMessageStatus == MessageData.BUGLE_STATUS_OUTGOING_RESENDING); + } + + public boolean getIsMessageTypeOutgoing() { + return !MessageData.getIsIncoming(mMessageStatus); + } + + public int getMessageRawTelephonyStatus() { + return mMessageRawTelephonyStatus; + } + + public int getMessageStatus() { + return mMessageStatus; + } + + public boolean getShowDraft() { + return mShowDraft; + } + + public String getDraftSnippetText() { + return mDraftSnippetText; + } + + public Uri getDraftPreviewUri() { + return mDraftPreviewUri; + } + + public String getDraftPreviewContentType() { + return mDraftPreviewContentType; + } + + public boolean getIsArchived() { + return mIsArchived; + } + + public String getSubject() { + return mSubject; + } + + public String getDraftSubject() { + return mDraftSubject; + } + + public String getSnippetSenderName() { + if (!TextUtils.isEmpty(mSnippetSenderFirstName)) { + return mSnippetSenderFirstName; + } + return mSnippetSenderDisplayDestination; + } + + public void deleteConversation() { + DeleteConversationAction.deleteConversation(mConversationId, mTimestamp); + } + + /** + * Get the name of the view for this data item + */ + public static final String getConversationListView() { + return CONVERSATION_LIST_VIEW; + } + + public static final String getConversationListViewSql() { + return CONVERSATION_LIST_VIEW_SQL; + } + + private static final String CONVERSATION_LIST_VIEW = "conversation_list_view"; + + private static final String CONVERSATION_LIST_VIEW_PROJECTION = + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns._ID + + " as " + ConversationListViewColumns._ID + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NAME + + " as " + ConversationListViewColumns.NAME + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.CURRENT_SELF_ID + + " as " + ConversationListViewColumns.CURRENT_SELF_ID + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.ARCHIVE_STATUS + + " as " + ConversationListViewColumns.ARCHIVE_STATUS + ", " + + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.READ + + " as " + ConversationListViewColumns.READ + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.ICON + + " as " + ConversationListViewColumns.ICON + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_CONTACT_ID + + " as " + ConversationListViewColumns.PARTICIPANT_CONTACT_ID + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_LOOKUP_KEY + + " as " + ConversationListViewColumns.PARTICIPANT_LOOKUP_KEY + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + + ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + + " as " + ConversationListViewColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SORT_TIMESTAMP + + " as " + ConversationListViewColumns.SORT_TIMESTAMP + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SHOW_DRAFT + + " as " + ConversationListViewColumns.SHOW_DRAFT + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_SNIPPET_TEXT + + " as " + ConversationListViewColumns.DRAFT_SNIPPET_TEXT + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_PREVIEW_URI + + " as " + ConversationListViewColumns.DRAFT_PREVIEW_URI + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.DRAFT_SUBJECT_TEXT + + " as " + ConversationListViewColumns.DRAFT_SUBJECT_TEXT + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + + ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE + + " as " + ConversationListViewColumns.DRAFT_PREVIEW_CONTENT_TYPE + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PREVIEW_URI + + " as " + ConversationListViewColumns.PREVIEW_URI + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PREVIEW_CONTENT_TYPE + + " as " + ConversationListViewColumns.PREVIEW_CONTENT_TYPE + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.PARTICIPANT_COUNT + + " as " + ConversationListViewColumns.PARTICIPANT_COUNT + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_ENABLED + + " as " + ConversationListViewColumns.NOTIFICATION_ENABLED + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_SOUND_URI + + " as " + ConversationListViewColumns.NOTIFICATION_SOUND_URI + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.NOTIFICATION_VIBRATION + + " as " + ConversationListViewColumns.NOTIFICATION_VIBRATION + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + + ConversationColumns.INCLUDE_EMAIL_ADDRESS + + " as " + ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS + ", " + + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.STATUS + + " as " + ConversationListViewColumns.MESSAGE_STATUS + ", " + + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.RAW_TELEPHONY_STATUS + + " as " + ConversationListViewColumns.MESSAGE_RAW_TELEPHONY_STATUS + ", " + + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID + + " as " + ConversationListViewColumns.MESSAGE_ID + ", " + + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.FIRST_NAME + + " as " + ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME + ", " + + DatabaseHelper.PARTICIPANTS_TABLE + '.' + ParticipantColumns.DISPLAY_DESTINATION + + " as " + ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION; + + private static final String JOIN_PARTICIPANTS = + " LEFT JOIN " + DatabaseHelper.PARTICIPANTS_TABLE + " ON (" + + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns.SENDER_PARTICIPANT_ID + + '=' + DatabaseHelper.PARTICIPANTS_TABLE + '.' + DatabaseHelper.ParticipantColumns._ID + + ") "; + + // View that makes latest message read flag available with rest of conversation data. + private static final String CONVERSATION_LIST_VIEW_SQL = "CREATE VIEW " + + CONVERSATION_LIST_VIEW + " AS SELECT " + + CONVERSATION_LIST_VIEW_PROJECTION + ", " + // Snippet not part of the base projection shared with search view + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SNIPPET_TEXT + + " as " + ConversationListViewColumns.SNIPPET_TEXT + ", " + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.SUBJECT_TEXT + + " as " + ConversationListViewColumns.SUBJECT_TEXT + " " + + " FROM " + DatabaseHelper.CONVERSATIONS_TABLE + + " LEFT JOIN " + DatabaseHelper.MESSAGES_TABLE + " ON (" + + DatabaseHelper.CONVERSATIONS_TABLE + '.' + ConversationColumns.LATEST_MESSAGE_ID + + '=' + DatabaseHelper.MESSAGES_TABLE + '.' + MessageColumns._ID + ") " + + JOIN_PARTICIPANTS + + "ORDER BY " + DatabaseHelper.CONVERSATIONS_TABLE + '.' + + ConversationColumns.SORT_TIMESTAMP + " DESC"; + + public static class ConversationListViewColumns implements BaseColumns { + public static final String _ID = ConversationColumns._ID; + static final String NAME = ConversationColumns.NAME; + static final String ARCHIVE_STATUS = ConversationColumns.ARCHIVE_STATUS; + static final String READ = MessageColumns.READ; + static final String SORT_TIMESTAMP = ConversationColumns.SORT_TIMESTAMP; + static final String PREVIEW_URI = ConversationColumns.PREVIEW_URI; + static final String PREVIEW_CONTENT_TYPE = ConversationColumns.PREVIEW_CONTENT_TYPE; + static final String SNIPPET_TEXT = ConversationColumns.SNIPPET_TEXT; + static final String SUBJECT_TEXT = ConversationColumns.SUBJECT_TEXT; + static final String ICON = ConversationColumns.ICON; + static final String SHOW_DRAFT = ConversationColumns.SHOW_DRAFT; + static final String DRAFT_SUBJECT_TEXT = ConversationColumns.DRAFT_SUBJECT_TEXT; + static final String DRAFT_PREVIEW_URI = ConversationColumns.DRAFT_PREVIEW_URI; + static final String DRAFT_PREVIEW_CONTENT_TYPE = + ConversationColumns.DRAFT_PREVIEW_CONTENT_TYPE; + static final String DRAFT_SNIPPET_TEXT = ConversationColumns.DRAFT_SNIPPET_TEXT; + static final String PARTICIPANT_CONTACT_ID = ConversationColumns.PARTICIPANT_CONTACT_ID; + static final String PARTICIPANT_LOOKUP_KEY = ConversationColumns.PARTICIPANT_LOOKUP_KEY; + static final String OTHER_PARTICIPANT_NORMALIZED_DESTINATION = + ConversationColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION; + static final String CURRENT_SELF_ID = ConversationColumns.CURRENT_SELF_ID; + static final String PARTICIPANT_COUNT = ConversationColumns.PARTICIPANT_COUNT; + static final String NOTIFICATION_ENABLED = ConversationColumns.NOTIFICATION_ENABLED; + static final String NOTIFICATION_SOUND_URI = ConversationColumns.NOTIFICATION_SOUND_URI; + static final String NOTIFICATION_VIBRATION = ConversationColumns.NOTIFICATION_VIBRATION; + static final String INCLUDE_EMAIL_ADDRESS = + ConversationColumns.INCLUDE_EMAIL_ADDRESS; + static final String MESSAGE_STATUS = MessageColumns.STATUS; + static final String MESSAGE_RAW_TELEPHONY_STATUS = MessageColumns.RAW_TELEPHONY_STATUS; + static final String MESSAGE_ID = "message_id"; + static final String SNIPPET_SENDER_FIRST_NAME = "snippet_sender_first_name"; + static final String SNIPPET_SENDER_DISPLAY_DESTINATION = + "snippet_sender_display_destination"; + } + + public static final String[] PROJECTION = { + ConversationListViewColumns._ID, + ConversationListViewColumns.NAME, + ConversationListViewColumns.ICON, + ConversationListViewColumns.SNIPPET_TEXT, + ConversationListViewColumns.SORT_TIMESTAMP, + ConversationListViewColumns.READ, + ConversationListViewColumns.PREVIEW_URI, + ConversationListViewColumns.PREVIEW_CONTENT_TYPE, + ConversationListViewColumns.PARTICIPANT_CONTACT_ID, + ConversationListViewColumns.PARTICIPANT_LOOKUP_KEY, + ConversationListViewColumns.OTHER_PARTICIPANT_NORMALIZED_DESTINATION, + ConversationListViewColumns.PARTICIPANT_COUNT, + ConversationListViewColumns.CURRENT_SELF_ID, + ConversationListViewColumns.NOTIFICATION_ENABLED, + ConversationListViewColumns.NOTIFICATION_SOUND_URI, + ConversationListViewColumns.NOTIFICATION_VIBRATION, + ConversationListViewColumns.INCLUDE_EMAIL_ADDRESS, + ConversationListViewColumns.MESSAGE_STATUS, + ConversationListViewColumns.SHOW_DRAFT, + ConversationListViewColumns.DRAFT_PREVIEW_URI, + ConversationListViewColumns.DRAFT_PREVIEW_CONTENT_TYPE, + ConversationListViewColumns.DRAFT_SNIPPET_TEXT, + ConversationListViewColumns.ARCHIVE_STATUS, + ConversationListViewColumns.MESSAGE_ID, + ConversationListViewColumns.SUBJECT_TEXT, + ConversationListViewColumns.DRAFT_SUBJECT_TEXT, + ConversationListViewColumns.MESSAGE_RAW_TELEPHONY_STATUS, + ConversationListViewColumns.SNIPPET_SENDER_FIRST_NAME, + ConversationListViewColumns.SNIPPET_SENDER_DISPLAY_DESTINATION, + }; + + private static final int INDEX_ID = 0; + private static final int INDEX_CONVERSATION_NAME = 1; + private static final int INDEX_CONVERSATION_ICON = 2; + private static final int INDEX_SNIPPET_TEXT = 3; + private static final int INDEX_SORT_TIMESTAMP = 4; + private static final int INDEX_READ = 5; + private static final int INDEX_PREVIEW_URI = 6; + private static final int INDEX_PREVIEW_CONTENT_TYPE = 7; + private static final int INDEX_PARTICIPANT_CONTACT_ID = 8; + private static final int INDEX_PARTICIPANT_LOOKUP_KEY = 9; + private static final int INDEX_OTHER_PARTICIPANT_NORMALIZED_DESTINATION = 10; + private static final int INDEX_PARTICIPANT_COUNT = 11; + private static final int INDEX_SELF_ID = 12; + private static final int INDEX_NOTIFICATION_ENABLED = 13; + private static final int INDEX_NOTIFICATION_SOUND_URI = 14; + private static final int INDEX_NOTIFICATION_VIBRATION = 15; + private static final int INDEX_INCLUDE_EMAIL_ADDRESS = 16; + private static final int INDEX_MESSAGE_STATUS = 17; + private static final int INDEX_SHOW_DRAFT = 18; + private static final int INDEX_DRAFT_PREVIEW_URI = 19; + private static final int INDEX_DRAFT_PREVIEW_CONTENT_TYPE = 20; + private static final int INDEX_DRAFT_SNIPPET_TEXT = 21; + private static final int INDEX_ARCHIVE_STATUS = 22; + private static final int INDEX_MESSAGE_ID = 23; + private static final int INDEX_SUBJECT_TEXT = 24; + private static final int INDEX_DRAFT_SUBJECT_TEXT = 25; + private static final int INDEX_MESSAGE_RAW_TELEPHONY_STATUS = 26; + private static final int INDEX_SNIPPET_SENDER_FIRST_NAME = 27; + private static final int INDEX_SNIPPET_SENDER_DISPLAY_DESTINATION = 28; + + private static final String DIVIDER_TEXT = ", "; + + /** + * Get a conversation from the local DB based on the conversation id. + * + * @param dbWrapper The database + * @param conversationId The conversation Id to read + * @return The existing conversation or null + */ + public static ConversationListItemData getExistingConversation(final DatabaseWrapper dbWrapper, + final String conversationId) { + ConversationListItemData conversation = null; + + // Look for an existing conversation in the db with this conversation id + Cursor cursor = null; + try { + // TODO: Should we be able to read a row from just the conversation table? + cursor = dbWrapper.query(getConversationListView(), + PROJECTION, + ConversationColumns._ID + "=?", + new String[] { conversationId }, + null, null, null); + Assert.inRange(cursor.getCount(), 0, 1); + if (cursor.moveToFirst()) { + conversation = new ConversationListItemData(); + conversation.bind(cursor); + } + } finally { + if (cursor != null) { + cursor.close(); + } + } + + return conversation; + } + + public static String generateConversationName(final List<ParticipantData> + participants) { + if (participants.size() == 1) { + // Prefer full name over first name for 1:1 conversation + return participants.get(0).getDisplayName(true); + } + + final ArrayList<String> participantNames = new ArrayList<String>(); + for (final ParticipantData participant : participants) { + // Prefer first name over full name for group conversation + participantNames.add(participant.getDisplayName(false)); + } + + final Joiner joiner = Joiner.on(DIVIDER_TEXT).skipNulls(); + return joiner.join(participantNames); + } + +} |