Message.java revision 8960f0af431bc164003e09b3c8981aab808d9ec1
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; 26014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huangimport android.text.Html; 27014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huangimport android.text.SpannedString; 28cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereiraimport android.text.TextUtils; 295ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindypimport android.text.util.Rfc822Token; 305ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindypimport android.text.util.Rfc822Tokenizer; 313ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 3226846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blankimport com.android.mail.providers.UIProvider.MessageColumns; 3326846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blankimport com.android.mail.utils.Utils; 34cd5c5eeae167885ffa2959c200233fea2f39c5f7Andy Huangimport com.google.common.base.Objects; 3526846d859a4714ff90ea02dba251a54cac1f1e9fMarc Blank 369ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huangimport java.util.Collections; 375a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huangimport java.util.List; 3841dca185f7683b36bdafd9520c0648c897a95834Paul Westbrookimport java.util.regex.Pattern; 395a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang 403ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 413ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereirapublic class Message implements Parcelable { 42e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 4341dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook * Regex pattern used to look for any inline images in message bodies, including Gmail-hosted 4441dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook * relative-URL images, Gmail emoticons, and any external inline images (although we usually 4541dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook * count on the server to detect external images). 4641dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook */ 4741dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook private static Pattern INLINE_IMAGE_PATTERN = Pattern.compile("<img\\s+[^>]*src=", 4841dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); 4941dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook 5041dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook /** 51e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see BaseColumns#_ID 52e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 533ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public long id; 54e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 55e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#SERVER_ID 56e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 57d47877e3860ea4249eddb3f6efefbc6cd39f2320Andy Huang public String serverId; 58e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 59e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#URI 60e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 61cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira public Uri uri; 62e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 63e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#CONVERSATION_ID 64e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 65daa06aba887e8e3748453f45ae52c1e571fe9f2eAndy Huang public Uri conversationUri; 66e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 67e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#SUBJECT 68e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 693ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public String subject; 70e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 71e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#SNIPPET 72e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 733ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public String snippet; 74e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 75e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#FROM 76e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 778960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy private String mFrom; 78e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 79e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#TO 80e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 818960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy private String mTo; 82e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 83e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#CC 84e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 858960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy private String mCc; 86e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 87e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#BCC 88e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 898960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy private String mBcc; 90e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 91e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#REPLY_TO 92e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 938960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy private String mReplyTo; 94e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 95e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#DATE_RECEIVED_MS 96e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 973ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public long dateReceivedMs; 98e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 99e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#BODY_HTML 100e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1013ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public String bodyHtml; 102e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 103e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#BODY_TEXT 104e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1053ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public String bodyText; 106e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 107e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#EMBEDS_EXTERNAL_RESOURCES 108e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1093ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public boolean embedsExternalResources; 110e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 111e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#REF_MESSAGE_ID 112e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1133ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public String refMessageId; 114e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 115e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#DRAFT_TYPE 116e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1173ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public int draftType; 118e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 119e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#APPEND_REF_MESSAGE_CONTENT 120e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1213ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public boolean appendRefMessageContent; 122e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 123e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#HAS_ATTACHMENTS 124e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1253ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public boolean hasAttachments; 126e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 127e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#ATTACHMENT_LIST_URI 128e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 129cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira public Uri attachmentListUri; 130e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 131e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#MESSAGE_FLAGS 132e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1333ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public long messageFlags; 134e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 135e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#SAVE_MESSAGE_URI 136e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 13772e2ea860f66f496537e37ebc0ddd2c670d4c651Paul Westbrook @Deprecated 1387ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira public String saveUri; 139e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 140e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#SEND_MESSAGE_URI 141e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 14272e2ea860f66f496537e37ebc0ddd2c670d4c651Paul Westbrook @Deprecated 1437ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira public String sendUri; 144e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 145e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#ALWAYS_SHOW_IMAGES 146e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 147104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook public boolean alwaysShowImages; 148e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 149e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#READ 150e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 151d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang public boolean read; 152e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 153e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#STARRED 154e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 155d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang public boolean starred; 156e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 157e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#QUOTE_START_POS 158e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1594dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira public int quotedTextOffset; 160e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 161e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#ATTACHMENTS 1626766b6e5468d2f1935587b3bc1f8e65be94cd6fbAndy Huang *<p> 1636766b6e5468d2f1935587b3bc1f8e65be94cd6fbAndy Huang * N.B. this value is NOT immutable and may change during conversation view render. 164e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1655a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang public String attachmentsJson; 166e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 167e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#MESSAGE_ACCOUNT_URI 168e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 16962de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira public Uri accountUri; 170e623a0f6e3caa9cafec913cf826e946628833517Andy Huang /** 171e623a0f6e3caa9cafec913cf826e946628833517Andy Huang * @see UIProvider.MessageColumns#EVENT_INTENT_URI 172e623a0f6e3caa9cafec913cf826e946628833517Andy Huang */ 1733842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank public Uri eventIntentUri; 174d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein /** 175d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein * @see UIProvider.MessageColumns#SPAM_WARNING_STRING 176d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein */ 1773b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein public String spamWarningString; 178d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein /** 179d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein * @see UIProvider.MessageColumns#SPAM_WARNING_LEVEL 180d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein */ 1813b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein public int spamWarningLevel; 182d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein /** 183d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein * @see UIProvider.MessageColumns#SPAM_WARNING_LINK_TYPE 184d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein */ 1853b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein public int spamLinkType; 186d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein /** 187d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein * @see UIProvider.MessageColumns#VIA_DOMAIN 188d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein */ 189d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein public String viaDomain; 19047aa9c991b33c722a6ba1946fc02e0aba17bc1c9Andy Huang /** 19147aa9c991b33c722a6ba1946fc02e0aba17bc1c9Andy Huang * @see UIProvider.MessageColumns#IS_SENDING 19247aa9c991b33c722a6ba1946fc02e0aba17bc1c9Andy Huang */ 19347aa9c991b33c722a6ba1946fc02e0aba17bc1c9Andy Huang public boolean isSending; 1945a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang 195d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein private transient String[] mFromAddresses = null; 1965a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang private transient String[] mToAddresses = null; 1975a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang private transient String[] mCcAddresses = null; 1985a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang private transient String[] mBccAddresses = null; 1995a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang private transient String[] mReplyToAddresses = null; 2003ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 2015a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang private transient List<Attachment> mAttachments = null; 202845f87e34179bcbb2862c09572576ab775be472dmindyp 2033ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira @Override 2043ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public int describeContents() { 2053ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira return 0; 2063ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 2073ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 2083ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira @Override 2093233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang public boolean equals(Object o) { 210cd5c5eeae167885ffa2959c200233fea2f39c5f7Andy Huang return this == o || (o != null && o instanceof Message 211cd5c5eeae167885ffa2959c200233fea2f39c5f7Andy Huang && Objects.equal(uri, ((Message) o).uri)); 2123233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang } 2133233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang 2143233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang @Override 2153233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang public int hashCode() { 2163233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang return uri == null ? 0 : uri.hashCode(); 2173233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang } 2183233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang 2193233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang @Override 2203ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public void writeToParcel(Parcel dest, int flags) { 2213ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeLong(id); 222d47877e3860ea4249eddb3f6efefbc6cd39f2320Andy Huang dest.writeString(serverId); 223cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira dest.writeParcelable(uri, 0); 224daa06aba887e8e3748453f45ae52c1e571fe9f2eAndy Huang dest.writeParcelable(conversationUri, 0); 2253ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeString(subject); 2263ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeString(snippet); 2278960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy dest.writeString(mFrom); 2288960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy dest.writeString(mTo); 2298960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy dest.writeString(mCc); 2308960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy dest.writeString(mBcc); 2318960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy dest.writeString(mReplyTo); 2323ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeLong(dateReceivedMs); 2333ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeString(bodyHtml); 2343ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeString(bodyText); 2353ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeInt(embedsExternalResources ? 1 : 0); 2363ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeString(refMessageId); 2373ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeInt(draftType); 2383ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeInt(appendRefMessageContent ? 1 : 0); 2393ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeInt(hasAttachments ? 1 : 0); 240cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira dest.writeParcelable(attachmentListUri, 0); 2413ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dest.writeLong(messageFlags); 2427ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira dest.writeString(saveUri); 2437ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira dest.writeString(sendUri); 244104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook dest.writeInt(alwaysShowImages ? 1 : 0); 2454dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira dest.writeInt(quotedTextOffset); 2462421dc8d6d0b4c727ab7ab0e5ce730f415089e86Mindy Pereira dest.writeString(attachmentsJson); 24762de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira dest.writeParcelable(accountUri, 0); 2483842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank dest.writeParcelable(eventIntentUri, 0); 2493b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein dest.writeString(spamWarningString); 2503b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein dest.writeInt(spamWarningLevel); 2513b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein dest.writeInt(spamLinkType); 252d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein dest.writeString(viaDomain); 25347aa9c991b33c722a6ba1946fc02e0aba17bc1c9Andy Huang dest.writeInt(isSending ? 1 : 0); 2543ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 2553ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 2563ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira private Message(Parcel in) { 2573ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira id = in.readLong(); 258d47877e3860ea4249eddb3f6efefbc6cd39f2320Andy Huang serverId = in.readString(); 259cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira uri = in.readParcelable(null); 260daa06aba887e8e3748453f45ae52c1e571fe9f2eAndy Huang conversationUri = in.readParcelable(null); 2613ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira subject = in.readString(); 2623ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira snippet = in.readString(); 2638960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mFrom = in.readString(); 2648960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mTo = in.readString(); 2658960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mCc = in.readString(); 2668960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mBcc = in.readString(); 2678960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mReplyTo = in.readString(); 2683ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dateReceivedMs = in.readLong(); 2693ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira bodyHtml = in.readString(); 2703ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira bodyText = in.readString(); 2713ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira embedsExternalResources = in.readInt() != 0; 2723ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira refMessageId = in.readString(); 2733ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira draftType = in.readInt(); 2743ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira appendRefMessageContent = in.readInt() != 0; 2753ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira hasAttachments = in.readInt() != 0; 276cfb7f33ff8ef9dc60b9143af32de64c7a3d71f36Mindy Pereira attachmentListUri = in.readParcelable(null); 2773ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira messageFlags = in.readLong(); 2787ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira saveUri = in.readString(); 2797ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira sendUri = in.readString(); 280104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook alwaysShowImages = in.readInt() != 0; 2814dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira quotedTextOffset = in.readInt(); 2822421dc8d6d0b4c727ab7ab0e5ce730f415089e86Mindy Pereira attachmentsJson = in.readString(); 28362de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira accountUri = in.readParcelable(null); 2843842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank eventIntentUri = in.readParcelable(null); 2853b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein spamWarningString = in.readString(); 2863b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein spamWarningLevel = in.readInt(); 2873b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein spamLinkType = in.readInt(); 288d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein viaDomain = in.readString(); 28947aa9c991b33c722a6ba1946fc02e0aba17bc1c9Andy Huang isSending = in.readInt() != 0; 290104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook } 291104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook 292104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook public Message() { 293104f729c284f9b7b31a251350252f8ae31d09f86Paul Westbrook 2943ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 2953ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 2963ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira @Override 2973ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public String toString() { 2983ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira return "[message id=" + id + "]"; 2993ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 3003ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 3013ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public static final Creator<Message> CREATOR = new Creator<Message>() { 3023ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 3033ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira @Override 3043ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public Message createFromParcel(Parcel source) { 3053ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira return new Message(source); 3063ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 3073ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 3083ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira @Override 3093ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira public Message[] newArray(int size) { 3103ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira return new Message[size]; 3113ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 3123ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 3133ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira }; 3143ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira 315a831b2f1ba6d3c18d5e54563df8bae1f589c4257Mindy Pereira public Message(Cursor cursor) { 3163ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira if (cursor != null) { 3173ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira id = cursor.getLong(UIProvider.MESSAGE_ID_COLUMN); 318d47877e3860ea4249eddb3f6efefbc6cd39f2320Andy Huang serverId = cursor.getString(UIProvider.MESSAGE_SERVER_ID_COLUMN); 319daa06aba887e8e3748453f45ae52c1e571fe9f2eAndy Huang final String messageUriStr = cursor.getString(UIProvider.MESSAGE_URI_COLUMN); 320daa06aba887e8e3748453f45ae52c1e571fe9f2eAndy Huang uri = !TextUtils.isEmpty(messageUriStr) ? Uri.parse(messageUriStr) : null; 321daa06aba887e8e3748453f45ae52c1e571fe9f2eAndy Huang final String convUriStr = cursor.getString(UIProvider.MESSAGE_CONVERSATION_URI_COLUMN); 322daa06aba887e8e3748453f45ae52c1e571fe9f2eAndy Huang conversationUri = !TextUtils.isEmpty(convUriStr) ? Uri.parse(convUriStr) : null; 3233ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira subject = cursor.getString(UIProvider.MESSAGE_SUBJECT_COLUMN); 3243ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira snippet = cursor.getString(UIProvider.MESSAGE_SNIPPET_COLUMN); 3258960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mFrom = cursor.getString(UIProvider.MESSAGE_FROM_COLUMN); 3268960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mTo = cursor.getString(UIProvider.MESSAGE_TO_COLUMN); 3278960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mCc = cursor.getString(UIProvider.MESSAGE_CC_COLUMN); 3288960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mBcc = cursor.getString(UIProvider.MESSAGE_BCC_COLUMN); 3298960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mReplyTo = cursor.getString(UIProvider.MESSAGE_REPLY_TO_COLUMN); 3303ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira dateReceivedMs = cursor.getLong(UIProvider.MESSAGE_DATE_RECEIVED_MS_COLUMN); 3313ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira bodyHtml = cursor.getString(UIProvider.MESSAGE_BODY_HTML_COLUMN); 3323ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira bodyText = cursor.getString(UIProvider.MESSAGE_BODY_TEXT_COLUMN); 3333ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira embedsExternalResources = cursor 3343ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira .getInt(UIProvider.MESSAGE_EMBEDS_EXTERNAL_RESOURCES_COLUMN) != 0; 3353ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira refMessageId = cursor.getString(UIProvider.MESSAGE_REF_MESSAGE_ID_COLUMN); 3363ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira draftType = cursor.getInt(UIProvider.MESSAGE_DRAFT_TYPE_COLUMN); 3373ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira appendRefMessageContent = cursor 3383ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira .getInt(UIProvider.MESSAGE_APPEND_REF_MESSAGE_CONTENT_COLUMN) != 0; 3393ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira hasAttachments = cursor.getInt(UIProvider.MESSAGE_HAS_ATTACHMENTS_COLUMN) != 0; 3407bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira final String attachmentsUri = cursor 3417bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira .getString(UIProvider.MESSAGE_ATTACHMENT_LIST_URI_COLUMN); 3427bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira attachmentListUri = hasAttachments && !TextUtils.isEmpty(attachmentsUri) ? Uri 3437bb27253d9eb377d13da55b67b0babd047eca367Mindy Pereira .parse(attachmentsUri) : null; 3443ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira messageFlags = cursor.getLong(UIProvider.MESSAGE_FLAGS_COLUMN); 3457ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira saveUri = cursor 3467ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira .getString(UIProvider.MESSAGE_SAVE_URI_COLUMN); 3477ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira sendUri = cursor 3487ed1c1122c5677344a1ce176be2c03972fed26f5Mindy Pereira .getString(UIProvider.MESSAGE_SEND_URI_COLUMN); 349d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang alwaysShowImages = cursor.getInt(UIProvider.MESSAGE_ALWAYS_SHOW_IMAGES_COLUMN) != 0; 350d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang read = cursor.getInt(UIProvider.MESSAGE_READ_COLUMN) != 0; 351d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang starred = cursor.getInt(UIProvider.MESSAGE_STARRED_COLUMN) != 0; 3524dbbf9f91da20d89b13d412038c0b19b91983f8cMindy Pereira quotedTextOffset = cursor.getInt(UIProvider.QUOTED_TEXT_OFFSET_COLUMN); 3535a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang attachmentsJson = cursor.getString(UIProvider.MESSAGE_ATTACHMENTS_COLUMN); 35462de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira String accountUriString = cursor.getString(UIProvider.MESSAGE_ACCOUNT_URI_COLUMN); 35562de1b104635b09e7f00b0941268ba1fa5460ddbMindy Pereira accountUri = !TextUtils.isEmpty(accountUriString) ? Uri.parse(accountUriString) : null; 3563842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank eventIntentUri = 3573842af9e8ba90ebf5b75dc5018bbfdfb2e044f99Marc Blank Utils.getValidUri(cursor.getString(UIProvider.MESSAGE_EVENT_INTENT_COLUMN)); 3583b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein spamWarningString = 3593b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein cursor.getString(UIProvider.MESSAGE_SPAM_WARNING_STRING_ID_COLUMN); 3603b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein spamWarningLevel = cursor.getInt(UIProvider.MESSAGE_SPAM_WARNING_LEVEL_COLUMN); 3613b08c51ec46794b3c22c8649eb86bf77c72e0d9aAndrew Sapperstein spamLinkType = cursor.getInt(UIProvider.MESSAGE_SPAM_WARNING_LINK_TYPE_COLUMN); 362d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein viaDomain = cursor.getString(UIProvider.MESSAGE_VIA_DOMAIN_COLUMN); 36347aa9c991b33c722a6ba1946fc02e0aba17bc1c9Andy Huang isSending = cursor.getInt(UIProvider.MESSAGE_IS_SENDING_COLUMN) != 0; 3643ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 3653ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira } 3660a22047bb6c54d8f1ce980762f75908e35b08c3dAndy Huang 367a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang public boolean isFlaggedReplied() { 368a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang return (messageFlags & UIProvider.MessageFlags.REPLIED) == 369a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang UIProvider.MessageFlags.REPLIED; 370a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang } 371a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang 372a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang public boolean isFlaggedForwarded() { 373a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang return (messageFlags & UIProvider.MessageFlags.FORWARDED) == 374a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang UIProvider.MessageFlags.FORWARDED; 375a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang } 376a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang 377a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang public boolean isFlaggedCalendarInvite() { 378a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang return (messageFlags & UIProvider.MessageFlags.CALENDAR_INVITE) == 379a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang UIProvider.MessageFlags.CALENDAR_INVITE; 380a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang } 381a71f1f3368f26b6627512298f64484611fd6b0e8Andy Huang 3828960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public String getFrom() { 3838960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy return mFrom; 3848960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 3858960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 3868960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public synchronized void setFrom(final String from) { 3878960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mFrom = from; 3888960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mFromAddresses = null; 3898960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 3908960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 3918960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public String getTo() { 3928960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy return mTo; 3938960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 3948960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 3958960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public synchronized void setTo(final String to) { 3968960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mTo = to; 3978960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mToAddresses = null; 3988960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 3998960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 4008960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public String getCc() { 4018960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy return mCc; 4028960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 4038960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 4048960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public synchronized void setCc(final String cc) { 4058960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mCc = cc; 4068960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mCcAddresses = null; 4078960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 4088960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 4098960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public String getBcc() { 4108960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy return mBcc; 4118960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 4128960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 4138960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public synchronized void setBcc(final String bcc) { 4148960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mBcc = bcc; 4158960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mBccAddresses = null; 4168960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 4178960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 4188960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public String getReplyTo() { 4198960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy return mReplyTo; 4208960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 4218960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 4228960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy public synchronized void setReplyTo(final String replyTo) { 4238960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mReplyTo = replyTo; 4248960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mReplyToAddresses = null; 4258960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy } 4268960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy 427d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein public synchronized String[] getFromAddresses() { 428d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein if (mFromAddresses == null) { 4298960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mFromAddresses = tokenizeAddresses(mFrom); 430d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein } 431d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein return mFromAddresses; 432d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein } 433d5b369b324a22d28b63def902eefaf6591edf004Andrew Sapperstein 434bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook public synchronized String[] getToAddresses() { 435bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook if (mToAddresses == null) { 4368960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mToAddresses = tokenizeAddresses(mTo); 437bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 438bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook return mToAddresses; 439bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 440bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook 441bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook public synchronized String[] getCcAddresses() { 442bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook if (mCcAddresses == null) { 4438960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mCcAddresses = tokenizeAddresses(mCc); 444bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 445bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook return mCcAddresses; 446bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 447bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook 448bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook public synchronized String[] getBccAddresses() { 449bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook if (mBccAddresses == null) { 4508960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mBccAddresses = tokenizeAddresses(mBcc); 451bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 452bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook return mBccAddresses; 453bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 454bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook 455bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook public synchronized String[] getReplyToAddresses() { 456bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook if (mReplyToAddresses == null) { 4578960f0af431bc164003e09b3c8981aab808d9ec1Scott Kennedy mReplyToAddresses = tokenizeAddresses(mReplyTo); 458bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 459bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook return mReplyToAddresses; 460bb87b7fa57f25fc9cee1f572dd253f33f58f81daPaul Westbrook } 4613233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang 462233f562368e4e3af9ca86b16d1b0a151df6157eaPaul Westbrook public static String[] tokenizeAddresses(String addresses) { 4635ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp if (TextUtils.isEmpty(addresses)) { 4645ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp return new String[0]; 4655ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp } 466845f87e34179bcbb2862c09572576ab775be472dmindyp Rfc822Token[] tokens = Rfc822Tokenizer.tokenize(addresses); 4675ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp String[] strings = new String[tokens.length]; 4685ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp for (int i = 0; i < tokens.length;i++) { 4695ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp strings[i] = tokens[i].toString(); 4705ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp } 4715ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp return strings; 4725ed6311d6beb968e83585a43d7cdf5909e0a2cf6mindyp } 4736766b6e5468d2f1935587b3bc1f8e65be94cd6fbAndy Huang 4746766b6e5468d2f1935587b3bc1f8e65be94cd6fbAndy Huang public List<Attachment> getAttachments() { 4759ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang if (mAttachments == null) { 4769ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang if (attachmentsJson != null) { 4779ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang mAttachments = Attachment.fromJSONArray(attachmentsJson); 4789ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang } else { 4799ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang mAttachments = Collections.emptyList(); 4809ab47b16e0189d219c16e2eddfbd66c741c01229Andy Huang } 4815a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang } 4825a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang return mAttachments; 4835a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang } 4845a9290731bf565538a9cf91892346c7a6f4da0ecAndy Huang 4853233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang /** 4863233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * Returns whether a "Show Pictures" button should initially appear for this message. If the 4873233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * button is shown, the message must also block all non-local images in the body. Inversely, if 4883233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * the button is not shown, the message must show all images within (or else the user would be 4893233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * stuck with no images and no way to reveal them). 4903233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * 4913233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * @return true if a "Show Pictures" button should appear. 4923233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang */ 4933233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang public boolean shouldShowImagePrompt() { 49441dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook return !alwaysShowImages && embedsExternalResources(); 49541dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook } 49641dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook 49741dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook private boolean embedsExternalResources() { 49841dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook return embedsExternalResources || 49941dca185f7683b36bdafd9520c0648c897a95834Paul Westbrook (!TextUtils.isEmpty(bodyHtml) && INLINE_IMAGE_PATTERN.matcher(bodyHtml).find()); 5003233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang } 5013233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang 5023233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang /** 5033233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * Helper method to command a provider to mark all messages from this sender with the 5043233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * {@link MessageColumns#ALWAYS_SHOW_IMAGES} flag set. 5053233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * 5063233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * @param handler a caller-provided handler to run the query on 5073233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * @param token (optional) token to identify the command to the handler 5083233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang * @param cookie (optional) cookie to pass to the handler 5093233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang */ 5103233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang public void markAlwaysShowImages(AsyncQueryHandler handler, int token, Object cookie) { 511839ada22ea84251dde3305003d2f8fc5bf14914eAndy Huang alwaysShowImages = true; 5123233bff8ae08a56543c9f5abf1bc6ab38f0574ceAndy Huang 513d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang final ContentValues values = new ContentValues(1); 514839ada22ea84251dde3305003d2f8fc5bf14914eAndy Huang values.put(UIProvider.MessageColumns.ALWAYS_SHOW_IMAGES, 1); 515d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang 516d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang handler.startUpdate(token, cookie, uri, values, null, null); 517d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang } 518d8e249ee7abb0e1ad24e17e4e299736d4a150936Andy Huang 519014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang public String getBodyAsHtml() { 520014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang String body = ""; 521014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang if (!TextUtils.isEmpty(bodyHtml)) { 522014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang body = bodyHtml; 523014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang } else if (!TextUtils.isEmpty(bodyText)) { 524014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang body = Html.toHtml(new SpannedString(bodyText)); 525014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang } 526014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang return body; 527014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang } 528014ea4c15d147794789b9c5bf4e243fa08781ad9Andy Huang 5293ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira} 530