Message.java revision d5b369b324a22d28b63def902eefaf6591edf004
13ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira/**
23ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * Copyright (c) 2012, Google Inc.
33ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira *
43ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
53ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * you may not use this file except in compliance with the License.
63ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * You may obtain a copy of the License at
73ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira *
83ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira *     http://www.apache.org/licenses/LICENSE-2.0
93ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira *
103ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * Unless required by applicable law or agreed to in writing, software
113ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
123ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * See the License for the specific language governing permissions and
143ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira * limitations under the License.
153ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira */
163ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
173ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereirapackage com.android.mail.providers;
183ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
193233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huangimport android.content.AsyncQueryHandler;
203233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huangimport android.content.ContentValues;
213ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereiraimport android.database.Cursor;
22cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereiraimport android.net.Uri;
233ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereiraimport android.os.Parcel;
243ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereiraimport android.os.Parcelable;
25e623a0f6e3caa9cafec913cf826e946628833517Andy Huangimport android.provider.BaseColumns;
26cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereiraimport android.text.TextUtils;
273ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
287bdc3750454efe59617b7df945eadd7e59bee954Andy Huangimport com.android.mail.browse.MessageCursor;
2926846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blankimport com.android.mail.providers.UIProvider.MessageColumns;
30bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrookimport com.android.mail.ui.AbstractActivityController;
31bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrookimport com.android.mail.ui.ConversationListCallbacks;
3226846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blankimport com.android.mail.utils.Utils;
3326846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blank
349ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huangimport java.util.Collections;
355a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huangimport java.util.List;
365a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang
373ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
383ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereirapublic class Message implements Parcelable {
39e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
40e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see BaseColumns#_ID
41e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
423ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public long id;
43e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
44e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#SERVER_ID
45e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
463ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public long serverId;
47e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
48e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#URI
49e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
50cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira    public Uri uri;
51e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
52e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#CONVERSATION_ID
53e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
5426846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blank    public String conversationUri;
55e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
56e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#SUBJECT
57e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
583ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String subject;
59e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
60e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#SNIPPET
61e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
623ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String snippet;
63e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
64e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#FROM
65e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
663ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String from;
67e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
68e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#TO
69e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
703ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String to;
71e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
72e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#CC
73e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
743ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String cc;
75e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
76e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#BCC
77e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
783ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String bcc;
79e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
80e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#REPLY_TO
81e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
823ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String replyTo;
83e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
84e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#DATE_RECEIVED_MS
85e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
863ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public long dateReceivedMs;
87e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
88e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#BODY_HTML
89e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
903ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String bodyHtml;
91e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
92e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#BODY_TEXT
93e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
943ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String bodyText;
95e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
96e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#EMBEDS_EXTERNAL_RESOURCES
97e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
983ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public boolean embedsExternalResources;
99e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
100e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#REF_MESSAGE_ID
101e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1023ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String refMessageId;
103e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
104e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#DRAFT_TYPE
105e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1063ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public int draftType;
107e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
108e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#APPEND_REF_MESSAGE_CONTENT
109e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1103ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public boolean appendRefMessageContent;
111e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
112e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#HAS_ATTACHMENTS
113e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1143ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public boolean hasAttachments;
115e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
116e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#ATTACHMENT_LIST_URI
117e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
118cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira    public Uri attachmentListUri;
119e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
120e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#MESSAGE_FLAGS
121e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1223ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public long messageFlags;
123e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
124e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#SAVE_MESSAGE_URI
125e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1267ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira    public String saveUri;
127e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
128e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#SEND_MESSAGE_URI
129e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1307ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira    public String sendUri;
131e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
132e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#ALWAYS_SHOW_IMAGES
133e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
134104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook    public boolean alwaysShowImages;
135e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
136e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#READ
137e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
138d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang    public boolean read;
139e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
140e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#STARRED
141e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
142d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang    public boolean starred;
143e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
144e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#QUOTE_START_POS
145e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1464dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira    public int quotedTextOffset;
147e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
148e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#ATTACHMENTS
149e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1505a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    public String attachmentsJson;
151e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
152e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#MESSAGE_ACCOUNT_URI
153e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
15462de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira    public Uri accountUri;
155e623a0f6e3caa9cafec913cf826e946628833517Andy Huang    /**
156e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     * @see UIProvider.MessageColumns#EVENT_INTENT_URI
157e623a0f6e3caa9cafec913cf826e946628833517Andy Huang     */
1583842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank    public Uri eventIntentUri;
159d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    /**
160d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     * @see UIProvider.MessageColumns#SPAM_WARNING_STRING
161d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     */
1623b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein    public String spamWarningString;
163d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    /**
164d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     * @see UIProvider.MessageColumns#SPAM_WARNING_LEVEL
165d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     */
1663b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein    public int spamWarningLevel;
167d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    /**
168d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     * @see UIProvider.MessageColumns#SPAM_WARNING_LINK_TYPE
169d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     */
1703b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein    public int spamLinkType;
171d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    /**
172d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     * @see UIProvider.MessageColumns#VIA_DOMAIN
173d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein     */
174d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    public String viaDomain;
1755a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang
176d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    private transient String[] mFromAddresses = null;
1775a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    private transient String[] mToAddresses = null;
1785a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    private transient String[] mCcAddresses = null;
1795a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    private transient String[] mBccAddresses = null;
1805a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    private transient String[] mReplyToAddresses = null;
1813ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
1825a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    private transient List<Attachment> mAttachments = null;
183bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook
184bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook    // While viewing a list of messages, points to the cursor that contains it
185bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook    private transient MessageCursor mOwningCursor = null;
186bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook    private transient ConversationListCallbacks mListController = null;
187bec5115726f24733a0a1577caaf05fb6e9ef9c6fMarc Blank
1883ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    @Override
1893ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public int describeContents() {
1903ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        return 0;
1913ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    }
1923ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
1933ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    @Override
1943233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    public boolean equals(Object o) {
1953233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        if (o == null || !(o instanceof Message)) {
1963233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang            return false;
1973233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        }
1983233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        final Uri otherUri = ((Message) o).uri;
1993233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        if (uri == null) {
2003233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang            return (otherUri == null);
2013233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        }
2023233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        return uri.equals(otherUri);
2033233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    }
2043233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang
2053233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    @Override
2063233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    public int hashCode() {
2073233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        return uri == null ? 0 : uri.hashCode();
2083233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    }
2093233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang
2103233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    @Override
2113ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public void writeToParcel(Parcel dest, int flags) {
2123ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeLong(id);
2133ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeLong(serverId);
214cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        dest.writeParcelable(uri, 0);
21526846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blank        dest.writeString(conversationUri);
2163ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(subject);
2173ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(snippet);
2183ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(from);
2193ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(to);
2203ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(cc);
2213ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(bcc);
2223ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(replyTo);
2233ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeLong(dateReceivedMs);
2243ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(bodyHtml);
2253ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(bodyText);
2263ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeInt(embedsExternalResources ? 1 : 0);
2273ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeString(refMessageId);
2283ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeInt(draftType);
2293ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeInt(appendRefMessageContent ? 1 : 0);
2303ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeInt(hasAttachments ? 1 : 0);
231cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        dest.writeParcelable(attachmentListUri, 0);
2323ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dest.writeLong(messageFlags);
2337ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira        dest.writeString(saveUri);
2347ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira        dest.writeString(sendUri);
235104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook        dest.writeInt(alwaysShowImages ? 1 : 0);
2364dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira        dest.writeInt(quotedTextOffset);
2372421dc8d6d0b4c727ab7ab0e5ce730f415089e86Mindy Pereira        dest.writeString(attachmentsJson);
23862de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira        dest.writeParcelable(accountUri, 0);
2393842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank        dest.writeParcelable(eventIntentUri, 0);
2403b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein        dest.writeString(spamWarningString);
2413b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein        dest.writeInt(spamWarningLevel);
2423b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein        dest.writeInt(spamLinkType);
243d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein        dest.writeString(viaDomain);
2443ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    }
2453ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
2463ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    private Message(Parcel in) {
2473ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        id = in.readLong();
2483ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        serverId = in.readLong();
249cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        uri = in.readParcelable(null);
25026846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blank        conversationUri = in.readString();
2513ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        subject = in.readString();
2523ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        snippet = in.readString();
2533ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        from = in.readString();
2543ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        to = in.readString();
2553ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        cc = in.readString();
2563ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        bcc = in.readString();
2573ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        replyTo = in.readString();
2583ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        dateReceivedMs = in.readLong();
2593ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        bodyHtml = in.readString();
2603ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        bodyText = in.readString();
2613ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        embedsExternalResources = in.readInt() != 0;
2623ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        refMessageId = in.readString();
2633ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        draftType = in.readInt();
2643ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        appendRefMessageContent = in.readInt() != 0;
2653ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        hasAttachments = in.readInt() != 0;
266cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira        attachmentListUri = in.readParcelable(null);
2673ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        messageFlags = in.readLong();
2687ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira        saveUri = in.readString();
2697ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira        sendUri = in.readString();
270104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook        alwaysShowImages = in.readInt() != 0;
2714dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira        quotedTextOffset = in.readInt();
2722421dc8d6d0b4c727ab7ab0e5ce730f415089e86Mindy Pereira        attachmentsJson = in.readString();
27362de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira        accountUri = in.readParcelable(null);
2743842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank        eventIntentUri = in.readParcelable(null);
2753b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein        spamWarningString = in.readString();
2763b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein        spamWarningLevel = in.readInt();
2773b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein        spamLinkType = in.readInt();
278d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein        viaDomain = in.readString();
279104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook    }
280104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook
281104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook    public Message() {
282104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook
2833ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    }
2843ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
2853ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    @Override
2863ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public String toString() {
2873ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        return "[message id=" + id + "]";
2883ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    }
2893ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
2903ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public static final Creator<Message> CREATOR = new Creator<Message>() {
2913ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
2923ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        @Override
2933ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        public Message createFromParcel(Parcel source) {
2943ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            return new Message(source);
2953ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        }
2963ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
2973ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        @Override
2983ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        public Message[] newArray(int size) {
2993ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            return new Message[size];
3003ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        }
3013ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
3023ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    };
3033ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira
304bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook    public Message(MessageCursor cursor, ConversationListCallbacks listController) {
305bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook        this(cursor);
306bec5115726f24733a0a1577caaf05fb6e9ef9c6fMarc Blank        // Only set message cursor if appropriate
307bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook        mOwningCursor = cursor;
308bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook        mListController = listController;
309bec5115726f24733a0a1577caaf05fb6e9ef9c6fMarc Blank    }
310bec5115726f24733a0a1577caaf05fb6e9ef9c6fMarc Blank
311a831b2f1ba6d3c18d5e54563df8bae1f589c4257Mindy Pereira    public Message(Cursor cursor) {
3123ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        if (cursor != null) {
3133ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            id = cursor.getLong(UIProvider.MESSAGE_ID_COLUMN);
3143ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            serverId = cursor.getLong(UIProvider.MESSAGE_SERVER_ID_COLUMN);
315cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira            String message = cursor.getString(UIProvider.MESSAGE_URI_COLUMN);
316cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira            uri = !TextUtils.isEmpty(message) ? Uri.parse(message) : null;
31726846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blank            conversationUri = cursor.getString(UIProvider.MESSAGE_CONVERSATION_URI_COLUMN);
3183ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            subject = cursor.getString(UIProvider.MESSAGE_SUBJECT_COLUMN);
3193ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            snippet = cursor.getString(UIProvider.MESSAGE_SNIPPET_COLUMN);
3203ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            from = cursor.getString(UIProvider.MESSAGE_FROM_COLUMN);
3213ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            to = cursor.getString(UIProvider.MESSAGE_TO_COLUMN);
3223ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            cc = cursor.getString(UIProvider.MESSAGE_CC_COLUMN);
3233ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            bcc = cursor.getString(UIProvider.MESSAGE_BCC_COLUMN);
3243ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            replyTo = cursor.getString(UIProvider.MESSAGE_REPLY_TO_COLUMN);
3253ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            dateReceivedMs = cursor.getLong(UIProvider.MESSAGE_DATE_RECEIVED_MS_COLUMN);
3263ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            bodyHtml = cursor.getString(UIProvider.MESSAGE_BODY_HTML_COLUMN);
3273ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            bodyText = cursor.getString(UIProvider.MESSAGE_BODY_TEXT_COLUMN);
3283ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            embedsExternalResources = cursor
3293ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira                    .getInt(UIProvider.MESSAGE_EMBEDS_EXTERNAL_RESOURCES_COLUMN) != 0;
3303ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            refMessageId = cursor.getString(UIProvider.MESSAGE_REF_MESSAGE_ID_COLUMN);
3313ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            draftType = cursor.getInt(UIProvider.MESSAGE_DRAFT_TYPE_COLUMN);
3323ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            appendRefMessageContent = cursor
3333ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira                    .getInt(UIProvider.MESSAGE_APPEND_REF_MESSAGE_CONTENT_COLUMN) != 0;
3343ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            hasAttachments = cursor.getInt(UIProvider.MESSAGE_HAS_ATTACHMENTS_COLUMN) != 0;
3357bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira            final String attachmentsUri = cursor
3367bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira                    .getString(UIProvider.MESSAGE_ATTACHMENT_LIST_URI_COLUMN);
3377bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira            attachmentListUri = hasAttachments && !TextUtils.isEmpty(attachmentsUri) ? Uri
3387bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira                    .parse(attachmentsUri) : null;
3393ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira            messageFlags = cursor.getLong(UIProvider.MESSAGE_FLAGS_COLUMN);
3407ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira            saveUri = cursor
3417ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira                    .getString(UIProvider.MESSAGE_SAVE_URI_COLUMN);
3427ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira            sendUri = cursor
3437ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira                    .getString(UIProvider.MESSAGE_SEND_URI_COLUMN);
344d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang            alwaysShowImages = cursor.getInt(UIProvider.MESSAGE_ALWAYS_SHOW_IMAGES_COLUMN) != 0;
345d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang            read = cursor.getInt(UIProvider.MESSAGE_READ_COLUMN) != 0;
346d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang            starred = cursor.getInt(UIProvider.MESSAGE_STARRED_COLUMN) != 0;
3474dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira            quotedTextOffset = cursor.getInt(UIProvider.QUOTED_TEXT_OFFSET_COLUMN);
3485a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang            attachmentsJson = cursor.getString(UIProvider.MESSAGE_ATTACHMENTS_COLUMN);
34962de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira            String accountUriString = cursor.getString(UIProvider.MESSAGE_ACCOUNT_URI_COLUMN);
35062de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira            accountUri = !TextUtils.isEmpty(accountUriString) ? Uri.parse(accountUriString) : null;
3513842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank            eventIntentUri =
3523842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank                    Utils.getValidUri(cursor.getString(UIProvider.MESSAGE_EVENT_INTENT_COLUMN));
3533b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein            spamWarningString =
3543b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein                    cursor.getString(UIProvider.MESSAGE_SPAM_WARNING_STRING_ID_COLUMN);
3553b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein            spamWarningLevel = cursor.getInt(UIProvider.MESSAGE_SPAM_WARNING_LEVEL_COLUMN);
3563b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein            spamLinkType = cursor.getInt(UIProvider.MESSAGE_SPAM_WARNING_LINK_TYPE_COLUMN);
357d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein            viaDomain = cursor.getString(UIProvider.MESSAGE_VIA_DOMAIN_COLUMN);
3583ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira        }
3593ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    }
3600a22047bb6c54d8f1ce980762f75908e35b08c3dAndy Huang
361a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang    public boolean isFlaggedReplied() {
362a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang        return (messageFlags & UIProvider.MessageFlags.REPLIED) ==
363a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang                UIProvider.MessageFlags.REPLIED;
364a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang    }
365a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang
366a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang    public boolean isFlaggedForwarded() {
367a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang        return (messageFlags & UIProvider.MessageFlags.FORWARDED) ==
368a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang                UIProvider.MessageFlags.FORWARDED;
369a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang    }
370a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang
371a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang    public boolean isFlaggedCalendarInvite() {
372a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang        return (messageFlags & UIProvider.MessageFlags.CALENDAR_INVITE) ==
373a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang                UIProvider.MessageFlags.CALENDAR_INVITE;
374a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang    }
375a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang
376d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    public synchronized String[] getFromAddresses() {
377d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein        if (mFromAddresses == null) {
378d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein            mFromAddresses = Utils.splitCommaSeparatedString(from);
379d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein        }
380d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein        return mFromAddresses;
381d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein    }
382d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein
383bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    public synchronized String[] getToAddresses() {
384bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        if (mToAddresses == null) {
385bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook            mToAddresses = Utils.splitCommaSeparatedString(to);
386bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        }
387bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        return mToAddresses;
388bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    }
389bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook
390bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    public synchronized String[] getCcAddresses() {
391bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        if (mCcAddresses == null) {
392bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook            mCcAddresses = Utils.splitCommaSeparatedString(cc);
393bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        }
394bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        return mCcAddresses;
395bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    }
396bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook
397bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    public synchronized String[] getBccAddresses() {
398bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        if (mBccAddresses == null) {
399bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook            mBccAddresses = Utils.splitCommaSeparatedString(bcc);
400bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        }
401bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        return mBccAddresses;
402bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    }
403bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook
404bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    public synchronized String[] getReplyToAddresses() {
405bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        if (mReplyToAddresses == null) {
406bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook            mReplyToAddresses = Utils.splitCommaSeparatedString(replyTo);
407bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        }
408bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook        return mReplyToAddresses;
409bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook    }
4103233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang
4115a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    public synchronized List<Attachment> getAttachments() {
4129ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang        if (mAttachments == null) {
4139ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang            if (attachmentsJson != null) {
4149ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang                mAttachments = Attachment.fromJSONArray(attachmentsJson);
4159ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang            } else {
4169ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang                mAttachments = Collections.emptyList();
4179ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang            }
4185a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang        }
4195a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang        return mAttachments;
4205a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang    }
4215a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang
4223233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    /**
4233233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * Returns whether a "Show Pictures" button should initially appear for this message. If the
4243233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * button is shown, the message must also block all non-local images in the body. Inversely, if
4253233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * the button is not shown, the message must show all images within (or else the user would be
4263233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * stuck with no images and no way to reveal them).
4273233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     *
4283233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * @return true if a "Show Pictures" button should appear.
4293233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     */
4303233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    public boolean shouldShowImagePrompt() {
4313233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        return embedsExternalResources && !alwaysShowImages;
4323233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    }
4333233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang
4343233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    /**
4353233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * Helper method to command a provider to mark all messages from this sender with the
4363233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * {@link MessageColumns#ALWAYS_SHOW_IMAGES} flag set.
4373233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     *
4383233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * @param handler a caller-provided handler to run the query on
4393233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * @param token (optional) token to identify the command to the handler
4403233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     * @param cookie (optional) cookie to pass to the handler
4413233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang     */
4423233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    public void markAlwaysShowImages(AsyncQueryHandler handler, int token, Object cookie) {
4433233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        final ContentValues values = new ContentValues(1);
4443233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        values.put(UIProvider.MessageColumns.ALWAYS_SHOW_IMAGES, 1);
4453233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang
4463233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang        handler.startUpdate(token, cookie, uri, values, null, null);
4473233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang    }
4483233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang
449d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang    /**
450d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang     * Helper method to command a provider to star/unstar this message.
451d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang     *
452d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang     * @param starred whether to star or unstar the message
453d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang     * @param handler a caller-provided handler to run the query on
454d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang     * @param token (optional) token to identify the command to the handler
455d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang     * @param cookie (optional) cookie to pass to the handler
456d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang     */
457d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang    public void star(boolean starred, AsyncQueryHandler handler, int token, Object cookie) {
458bec5115726f24733a0a1577caaf05fb6e9ef9c6fMarc Blank        this.starred = starred;
459bec5115726f24733a0a1577caaf05fb6e9ef9c6fMarc Blank        // If we're unstarring, we need to find out if the conversation is still starred
460bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook        if (mListController != null) {
461bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook            boolean conversationStarred = starred;
462bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook                if (!starred) {
463bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook                    conversationStarred = mOwningCursor.isConversationStarred();
464bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook                }
465bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook                // Update the conversation cursor so that changes are reflected simultaneously
466bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook                mListController.sendConversationUriStarred(
467bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook                        AbstractActivityController.TAG_CONVERSATION_LIST, conversationUri,
468bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrook                        conversationStarred, true /*local*/);
469bec5115726f24733a0a1577caaf05fb6e9ef9c6fMarc Blank        }
470d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang        final ContentValues values = new ContentValues(1);
471d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang        values.put(UIProvider.MessageColumns.STARRED, starred ? 1 : 0);
472d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang
473d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang        handler.startUpdate(token, cookie, uri, values, null, null);
474d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang    }
475d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang
4763ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira}
477