MessageModification.java revision 048b5c892e098d79335a5eb68fa3a1ec1b7b5a85
182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira/**
282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * Copyright (c) 2012, Google Inc.
382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira *
482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * Licensed under the Apache License, Version 2.0 (the "License");
582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * you may not use this file except in compliance with the License.
682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * You may obtain a copy of the License at
782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira *
882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira *     http://www.apache.org/licenses/LICENSE-2.0
982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira *
1082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * Unless required by applicable law or agreed to in writing, software
1182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * distributed under the License is distributed on an "AS IS" BASIS,
1282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * See the License for the specific language governing permissions and
1482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * limitations under the License.
1582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira */
1682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
1782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereirapackage com.android.mail.providers;
1882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
1982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereiraimport android.content.ContentValues;
2082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereiraimport android.text.TextUtils;
2182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
2282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereiraimport com.android.mail.providers.UIProvider.DraftType;
2382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereiraimport com.android.mail.providers.UIProvider.MessageColumns;
2482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
25f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereiraimport java.util.List;
26f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
2782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira/**
2882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * A helper class for creating or updating messages. Use the putXxx methods to
2982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * provide initial or new values for the message. Then save or send the message.
3082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira * To save or send an existing message without making other changes to it simply
3129ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira * provide an empty ContentValues.
3282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira */
3382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereirapublic class MessageModification {
3482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
3582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Sets the message's subject. Only valid for drafts.
3682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
3782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
3882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param subject the new subject
3982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
4082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putSubject(ContentValues values, String subject) {
4182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira        values.put(MessageColumns.SUBJECT, subject);
4282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
4382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
4482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
4582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Sets the message's to address. Only valid for drafts.
4682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
4782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
4882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param toAddresses the new to addresses
4982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
5082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putToAddresses(ContentValues values, String[] toAddresses) {
51048b5c892e098d79335a5eb68fa3a1ec1b7b5a85Mindy Pereira        values.put(MessageColumns.TO, TextUtils.join(UIProvider.EMAIL_SEPARATOR, toAddresses));
5282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
5382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
5482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
5582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Sets the message's cc address. Only valid for drafts.
5682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
5782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
5882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param ccAddresses the new cc addresses
5982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
6082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putCcAddresses(ContentValues values, String[] ccAddresses) {
61048b5c892e098d79335a5eb68fa3a1ec1b7b5a85Mindy Pereira        values.put(MessageColumns.CC, TextUtils.join(UIProvider.EMAIL_SEPARATOR, ccAddresses));
6282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
6382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
6482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
6582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Sets the message's bcc address. Only valid for drafts.
6682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
6782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
6882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param bccAddresses the new bcc addresses
6982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
7082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putBccAddresses(ContentValues values, String[] bccAddresses) {
71048b5c892e098d79335a5eb68fa3a1ec1b7b5a85Mindy Pereira        values.put(MessageColumns.BCC, TextUtils.join(UIProvider.EMAIL_SEPARATOR, bccAddresses));
7282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
7382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
7482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
7582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Saves a flag indicating the message is forwarded. Only valid for drafts
7682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * not yet sent to / retrieved from server.
7782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
7882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
7982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param forward true if the message is forwarded
8082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
8182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putForward(ContentValues values, boolean forward) {
8282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira        values.put(MessageColumns.DRAFT_TYPE, DraftType.FORWARD);
8382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
8482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
8582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
8682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Saves an include quoted text flag. Only valid for drafts not yet sent to
8782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * / retrieved from server.
8882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
8982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
9082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param includeQuotedText the include quoted text flag
9182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
923ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public static void putAppendRefMessageContent(ContentValues values, boolean includeQuotedText) {
9354a5aabee0dca5b52047d23651cca038357c49fdMindy Pereira        values.put(MessageColumns.APPEND_REF_MESSAGE_CONTENT, includeQuotedText ? 1 : 0);
9482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
9582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
9682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
9782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Saves a new body for the message. Only valid for drafts.
9882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
9982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
10082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param body the new body of the message
10182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
10282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putBody(ContentValues values, String body) {
10382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira        values.put(MessageColumns.BODY_TEXT, body);
10482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
10529ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira
10629ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira    /**
10729ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     * Saves a new body for the message. Only valid for drafts.
10829ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     * @param values the ContentValues that will be used to create or update the
10929ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     *            message
11029ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     * @param body the new body of the message
11129ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     */
11229ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira    public static void putBodyHtml(ContentValues values, String body) {
11329ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira        values.put(MessageColumns.BODY_HTML, body);
11429ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira    }
115f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
116e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira    /**
11712575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * Saves the type of the conversation.
11812575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     *
11912575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param values the ContentValues that will be used to create or update the message
12012575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param draftType
12112575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     */
12212575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    public static void putDraftType(ContentValues values, int draftType) {
12312575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira        values.put(MessageColumns.DRAFT_TYPE, draftType);
12412575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    }
12512575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira
12612575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    /**
12712575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * Saves the ref message id for the conversation. It will be a uri.
12812575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     *
12912575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param values the ContentValues that will be used to create or update the message
13012575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param uri of the reference message
13112575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     */
13212575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    public static void putRefMessageId(ContentValues values, String uri) {
13312575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira        values.put(MessageColumns.REF_MESSAGE_ID, uri);
13412575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    }
13512575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira
13612575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    /**
137e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * Saves a quoted text starting position. Only valid for drafts not yet sent to /
138e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * retrieved from server.
139e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     *
140e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * @param values the ContentValues that will be used to create or update the message
141e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * @param quoteStartPos the starting position for quoted text
142e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     */
143e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira    public static void putQuoteStartPos(ContentValues values, long quoteStartPos) {
144e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira        values.put(MessageColumns.QUOTE_START_POS, quoteStartPos);
145e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira    }
146e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira
147f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public static void putAttachments(ContentValues values, List<Attachment> attachments) {
148f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        values.put(
149f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira                MessageColumns.JOINED_ATTACHMENT_INFOS, joinedAttachmentsString(attachments));
150f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    }
151f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
152f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    /**
153f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira     * The string produced here is parsed by Gmail.MessageCursor#getAttachmentInfos.
154f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira     */
155f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public static String joinedAttachmentsString(List<Attachment> attachments) {
156f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        StringBuilder attachmentsSb = new StringBuilder();
157f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        for (Attachment attachment : attachments) {
158f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            if (attachmentsSb.length() != 0) {
159f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira                attachmentsSb.append(UIProvider.MESSAGE_ATTACHMENT_INFO_SEPARATOR);
160f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            }
161f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira            attachmentsSb.append(attachment.toJoinedString());
162f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        }
163f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira        return attachmentsSb.toString();
164f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    }
16582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira}
166