Conversation.java revision d503df4f0c31bbf842c6a1d3cba18df8c074bf67
1732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang/** 2732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * Copyright (c) 2012, Google Inc. 3732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * 4732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * Licensed under the Apache License, Version 2.0 (the "License"); 5732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * you may not use this file except in compliance with the License. 6732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * You may obtain a copy of the License at 7732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * 8732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * http://www.apache.org/licenses/LICENSE-2.0 9732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * 10732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * Unless required by applicable law or agreed to in writing, software 11732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * distributed under the License is distributed on an "AS IS" BASIS, 12732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * See the License for the specific language governing permissions and 14732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang * limitations under the License. 15732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang */ 16732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 17732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huangpackage com.android.mail.providers; 18732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 19440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwalimport com.google.common.collect.ImmutableList; 20440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal 21732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huangimport android.database.Cursor; 22732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huangimport android.net.Uri; 23732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huangimport android.os.Parcel; 24732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huangimport android.os.Parcelable; 255c765b9c5dd8a9a9421260ba8b46d06073391c73Mindy Pereiraimport android.text.TextUtils; 26732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 27440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwalimport java.util.Collection; 28440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwalimport java.util.Collections; 29440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal 30732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huangpublic class Conversation implements Parcelable { 31f892f0a57d5c24b09fdc805f0fe2007ecd0d0e91Marc Blank public static final int NO_POSITION = -1; 32732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 33732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public long id; 34c43bc0a606e41144a780c4f873b5450e0ede0c91Marc Blank public Uri uri; 35732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public String subject; 36732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public long dateMs; 37732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public String snippet; 38732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public boolean hasAttachments; 39cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira public Uri messageListUri; 404db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira public String senders; 414db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira public int numMessages; 424db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira public int numDrafts; 434db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira public int sendingState; 444db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira public int priority; 45c8a994227b9c686d88ee05840544162711a85712Marc Blank public boolean read; 46c8a994227b9c686d88ee05840544162711a85712Marc Blank public boolean starred; 47ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank public String folderList; 48cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira public String rawFolders; 4922657529437c160dec072115c5982409306c1313Mindy Pereira public int convFlags; 5022657529437c160dec072115c5982409306c1313Mindy Pereira public int personalLevel; 51863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira public boolean spam; 52863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira public boolean muted; 5392939fc7b40a56e17fb0d2fde987133ca1614e29Marc Blank public int color; 5422657529437c160dec072115c5982409306c1313Mindy Pereira 55ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank // Used within the UI to indicate the adapter position of this conversation 56f892f0a57d5c24b09fdc805f0fe2007ecd0d0e91Marc Blank public transient int position; 57ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank // Used within the UI to indicate that a Conversation should be removed from the 58ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank // ConversationCursor when executing an update, e.g. the the Conversation is no longer 59ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank // in the ConversationList for the current folder, that is it's now in some other folder(s) 60ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank public transient boolean localDeleteOnUpdate; 61732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 62e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank // Constituents of convFlags below 63e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank // Flag indicating that the item has been deleted, but will continue being shown in the list 64e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank // Delete/Archive of a mostly-dead item will NOT propagate the delete/archive, but WILL remove 65e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank // the item from the cursor 66e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank public static final int FLAG_MOSTLY_DEAD = 1 << 0; 67e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank 68440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal /** An immutable, empty conversation list */ 69440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal public static final Collection<Conversation> EMPTY = Collections.emptyList(); 70440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal 71732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang @Override 72732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public int describeContents() { 73732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang return 0; 74732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 75732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 76732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang @Override 77732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public void writeToParcel(Parcel dest, int flags) { 78732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang dest.writeLong(id); 79c43bc0a606e41144a780c4f873b5450e0ede0c91Marc Blank dest.writeParcelable(uri, flags); 80732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang dest.writeString(subject); 81732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang dest.writeLong(dateMs); 82732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang dest.writeString(snippet); 83732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang dest.writeByte(hasAttachments ? (byte) 1 : 0); 84cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira dest.writeParcelable(messageListUri, 0); 854db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira dest.writeString(senders); 864db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira dest.writeInt(numMessages); 874db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira dest.writeInt(numDrafts); 884db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira dest.writeInt(sendingState); 894db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira dest.writeInt(priority); 90c8a994227b9c686d88ee05840544162711a85712Marc Blank dest.writeByte(read ? (byte) 1 : 0); 91c8a994227b9c686d88ee05840544162711a85712Marc Blank dest.writeByte(starred ? (byte) 1 : 0); 92ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank dest.writeString(folderList); 93cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira dest.writeString(rawFolders); 9422657529437c160dec072115c5982409306c1313Mindy Pereira dest.writeInt(convFlags); 9522657529437c160dec072115c5982409306c1313Mindy Pereira dest.writeInt(personalLevel); 96863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira dest.writeInt(spam ? 1 : 0); 97863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira dest.writeInt(muted ? 1 : 0); 9892939fc7b40a56e17fb0d2fde987133ca1614e29Marc Blank dest.writeInt(color); 99732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 100732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 101732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang private Conversation(Parcel in) { 102732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang id = in.readLong(); 103c43bc0a606e41144a780c4f873b5450e0ede0c91Marc Blank uri = in.readParcelable(null); 104732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang subject = in.readString(); 105732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang dateMs = in.readLong(); 106732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang snippet = in.readString(); 107732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang hasAttachments = (in.readByte() != 0); 108cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira messageListUri = in.readParcelable(null); 1094db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira senders = in.readString(); 1104db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira numMessages = in.readInt(); 1114db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira numDrafts = in.readInt(); 1124db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira sendingState = in.readInt(); 1134db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira priority = in.readInt(); 114c8a994227b9c686d88ee05840544162711a85712Marc Blank read = (in.readByte() != 0); 115c8a994227b9c686d88ee05840544162711a85712Marc Blank starred = (in.readByte() != 0); 116ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank folderList = in.readString(); 117cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira rawFolders = in.readString(); 11822657529437c160dec072115c5982409306c1313Mindy Pereira convFlags = in.readInt(); 11922657529437c160dec072115c5982409306c1313Mindy Pereira personalLevel = in.readInt(); 120863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira spam = in.readInt() != 0; 121863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira muted = in.readInt() != 0; 12292939fc7b40a56e17fb0d2fde987133ca1614e29Marc Blank color = in.readInt(); 123f892f0a57d5c24b09fdc805f0fe2007ecd0d0e91Marc Blank position = NO_POSITION; 124ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank localDeleteOnUpdate = false; 125732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 126732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 127732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang @Override 128732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public String toString() { 129732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang return "[conversation id=" + id + "]"; 130732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 131732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 132732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public static final Creator<Conversation> CREATOR = new Creator<Conversation>() { 133732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 134732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang @Override 135732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public Conversation createFromParcel(Parcel source) { 136732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang return new Conversation(source); 137732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 138732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 139732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang @Override 140732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang public Conversation[] newArray(int size) { 141732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang return new Conversation[size]; 142732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 143732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 144732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang }; 145732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 146acf6039a23382f18c35f6b487d90d53cb67b5858Mindy Pereira public static final Uri MOVE_CONVERSATIONS_URI = Uri.parse("content://moveconversations"); 147acf6039a23382f18c35f6b487d90d53cb67b5858Mindy Pereira 148a831b2f1ba6d3c18d5e54563df8bae1f589c4257Mindy Pereira public Conversation(Cursor cursor) { 149732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang if (cursor != null) { 150732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang id = cursor.getLong(UIProvider.CONVERSATION_ID_COLUMN); 151c43bc0a606e41144a780c4f873b5450e0ede0c91Marc Blank uri = Uri.parse(cursor.getString(UIProvider.CONVERSATION_URI_COLUMN)); 152732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang dateMs = cursor.getLong(UIProvider.CONVERSATION_DATE_RECEIVED_MS_COLUMN); 153732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang subject = cursor.getString(UIProvider.CONVERSATION_SUBJECT_COLUMN); 154374863eeb0ee37f1ca7d57840e6f02aaa052e284Marc Blank // Don't allow null subject 155374863eeb0ee37f1ca7d57840e6f02aaa052e284Marc Blank if (subject == null) { 156374863eeb0ee37f1ca7d57840e6f02aaa052e284Marc Blank subject = ""; 157374863eeb0ee37f1ca7d57840e6f02aaa052e284Marc Blank } 158732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang snippet = cursor.getString(UIProvider.CONVERSATION_SNIPPET_COLUMN); 15987d535fe423d782c3a0343c649330d309976f655Mindy Pereira hasAttachments = cursor.getInt(UIProvider.CONVERSATION_HAS_ATTACHMENTS_COLUMN) != 0; 1605c765b9c5dd8a9a9421260ba8b46d06073391c73Mindy Pereira String messageList = cursor 1615c765b9c5dd8a9a9421260ba8b46d06073391c73Mindy Pereira .getString(UIProvider.CONVERSATION_MESSAGE_LIST_URI_COLUMN); 1625c765b9c5dd8a9a9421260ba8b46d06073391c73Mindy Pereira messageListUri = !TextUtils.isEmpty(messageList) ? Uri.parse(messageList) : null; 1634db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira senders = cursor.getString(UIProvider.CONVERSATION_SENDER_INFO_COLUMN); 1644db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira numMessages = cursor.getInt(UIProvider.CONVERSATION_NUM_MESSAGES_COLUMN); 1654db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira numDrafts = cursor.getInt(UIProvider.CONVERSATION_NUM_DRAFTS_COLUMN); 1664db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira sendingState = cursor.getInt(UIProvider.CONVERSATION_SENDING_STATE_COLUMN); 1674db59c58c0af9f44d95a12dbe21322bed58cc518Mindy Pereira priority = cursor.getInt(UIProvider.CONVERSATION_PRIORITY_COLUMN); 16887d535fe423d782c3a0343c649330d309976f655Mindy Pereira read = cursor.getInt(UIProvider.CONVERSATION_READ_COLUMN) != 0; 16987d535fe423d782c3a0343c649330d309976f655Mindy Pereira starred = cursor.getInt(UIProvider.CONVERSATION_STARRED_COLUMN) != 0; 170ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank folderList = cursor.getString(UIProvider.CONVERSATION_FOLDER_LIST_COLUMN); 171cc8211df898ba9dac17a766b89f28d6e6f0afef0Mindy Pereira rawFolders = cursor.getString(UIProvider.CONVERSATION_RAW_FOLDERS_COLUMN); 17222657529437c160dec072115c5982409306c1313Mindy Pereira convFlags = cursor.getInt(UIProvider.CONVERSATION_FLAGS_COLUMN); 17322657529437c160dec072115c5982409306c1313Mindy Pereira personalLevel = cursor.getInt(UIProvider.CONVERSATION_PERSONAL_LEVEL_COLUMN); 174863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira spam = cursor.getInt(UIProvider.CONVERSATION_IS_SPAM_COLUMN) != 0; 175863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira muted = cursor.getInt(UIProvider.CONVERSATION_MUTED_COLUMN) != 0; 17692939fc7b40a56e17fb0d2fde987133ca1614e29Marc Blank color = cursor.getInt(UIProvider.CONVERSATION_COLOR_COLUMN); 177f892f0a57d5c24b09fdc805f0fe2007ecd0d0e91Marc Blank position = NO_POSITION; 178ce53818e1e185a845bd2f7f601c20e7085b40725Marc Blank localDeleteOnUpdate = false; 179732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 180732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang } 181732600e38891db139bae02dc91dd0c5b0987e8e9Andy Huang 182bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook public Conversation() { 183ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook } 184ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook 185863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira public static Conversation create(long id, Uri uri, String subject, long dateMs, 186863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira String snippet, boolean hasAttachment, Uri messageListUri, String senders, 187863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira int numMessages, int numDrafts, int sendingState, int priority, boolean read, 188863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira boolean starred, String folderList, String rawFolders, int convFlags, 189863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira int personalLevel, boolean spam, boolean muted) { 190ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook 191ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook final Conversation conversation = new Conversation(); 192ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook 193ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.id = id; 194ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.uri = uri; 195ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.subject = subject; 196ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.dateMs = dateMs; 197ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.snippet = snippet; 198ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.hasAttachments = hasAttachment; 199ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.messageListUri = messageListUri; 200ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.senders = senders; 201ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.numMessages = numMessages; 202ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.numDrafts = numDrafts; 203ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.sendingState = sendingState; 204ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.priority = priority; 205ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.read = read; 206ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.starred = starred; 207ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.folderList = folderList; 208ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.rawFolders = rawFolders; 209ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.convFlags = convFlags; 210ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook conversation.personalLevel = personalLevel; 211863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira conversation.spam = spam; 212863e44160d9175023d30e7e225ecb69ad3892eecMindy Pereira conversation.muted = muted; 21392939fc7b40a56e17fb0d2fde987133ca1614e29Marc Blank conversation.color = 0; 214ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook return conversation; 215ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook } 216ff5c757ed2bcf7004a70b0675382ef894196558dPaul Westbrook 217e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank @Override 218e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank public boolean equals(Object o) { 2193c9bcef43b4f103697034abbf2eab99111e8d987Marc Blank if (o instanceof Conversation) { 2203c9bcef43b4f103697034abbf2eab99111e8d987Marc Blank Conversation conv = (Conversation)o; 2213c9bcef43b4f103697034abbf2eab99111e8d987Marc Blank return conv.uri.equals(uri); 2223c9bcef43b4f103697034abbf2eab99111e8d987Marc Blank } 2233c9bcef43b4f103697034abbf2eab99111e8d987Marc Blank return false; 224e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank } 225e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank 226e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank @Override 227e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank public int hashCode() { 228e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank return uri.hashCode(); 229e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank } 230e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank 2317f0a962513503cb01aec093b14c1b48dfae08f12Mindy Pereira /** 2327f0a962513503cb01aec093b14c1b48dfae08f12Mindy Pereira * Get if this conversation is marked as high priority. 2337f0a962513503cb01aec093b14c1b48dfae08f12Mindy Pereira */ 2347f0a962513503cb01aec093b14c1b48dfae08f12Mindy Pereira public boolean isImportant() { 23522657529437c160dec072115c5982409306c1313Mindy Pereira return priority == UIProvider.ConversationPriority.IMPORTANT; 2367f0a962513503cb01aec093b14c1b48dfae08f12Mindy Pereira } 2377f0a962513503cb01aec093b14c1b48dfae08f12Mindy Pereira 238e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank /** 239e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank * Get if this conversation is mostly dead 240e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank */ 241e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank public boolean isMostlyDead() { 242e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank return (convFlags & FLAG_MOSTLY_DEAD) != 0; 243e1d1b07cdb0026097eb80f6c2912a16353aacec1Marc Blank } 244440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal 245440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal /** 246d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal * Returns true if the URI of the conversation specified as the needle was found in the 247d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal * collection of conversations specified as the haystack. False otherwise. This method is safe 248d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal * to call with nullarguments. 249d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal * @param haystack 250d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal * @param needle 251d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal * @return true if the needle was found in the haystack, false otherwise. 252d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal */ 253d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal public final static boolean contains(Collection<Conversation> haystack, Conversation needle) { 254d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal // If the haystack is empty, it cannot contain anything. 255d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal if (haystack == null || haystack.size() <= 0) { 256d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal return false; 257d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal } 258d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal // The null folder exists everywhere. 259d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal if (needle == null) { 260d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal return true; 261d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal } 262d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal final Uri toFind = needle.uri; 263d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal for (final Conversation c : haystack) { 264d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal if (toFind.equals(c.uri)) { 265d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal return true; 266d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal } 267d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal } 268d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal return false; 269d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal } 270d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal 271d503df4f0c31bbf842c6a1d3cba18df8c074bf67Vikram Aggarwal /** 272440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal * Returns a collection of a single conversation. This method always returns a valid collection 273440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal * even if the input conversation is null. 274440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal * @param in a conversation, possibly null. 275440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal * @return a collection of the conversation. 276440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal */ 277440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal public static Collection<Conversation> listOf(Conversation in) { 278440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal final Collection<Conversation> target = (in == null) ? EMPTY : ImmutableList.of(in); 279440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal return target; 280440fe79194314b25ef5829702494735ce2f1e2e8Vikram Aggarwal } 2811b9efd9beb715927e0db7b138ddbb2925bc2c06fMarc Blank}