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    /**
7592551d057965689f1952faeb06763f0762bc717fMindy Pereira     * Sets the custom from address for a message, we only set this if its different than the
7692551d057965689f1952faeb06763f0762bc717fMindy Pereira     * default adress for the account.
7792551d057965689f1952faeb06763f0762bc717fMindy Pereira     *
7892551d057965689f1952faeb06763f0762bc717fMindy Pereira     * @param values the ContentValues that will be used to create or update the message
7992551d057965689f1952faeb06763f0762bc717fMindy Pereira     * @param customFromAddress from address
8092551d057965689f1952faeb06763f0762bc717fMindy Pereira     */
8192551d057965689f1952faeb06763f0762bc717fMindy Pereira     public static void putCustomFromAddress(ContentValues values, String customFromAddress) {
8292551d057965689f1952faeb06763f0762bc717fMindy Pereira        values.put(MessageColumns.CUSTOM_FROM_ADDRESS, customFromAddress);
8392551d057965689f1952faeb06763f0762bc717fMindy Pereira     }
8492551d057965689f1952faeb06763f0762bc717fMindy Pereira
8592551d057965689f1952faeb06763f0762bc717fMindy Pereira    /**
8682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Saves a flag indicating the message is forwarded. Only valid for drafts
8782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * not yet sent to / retrieved from server.
8882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
8982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
9082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param forward true if the message is forwarded
9182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
9282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putForward(ContentValues values, boolean forward) {
9382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira        values.put(MessageColumns.DRAFT_TYPE, DraftType.FORWARD);
9482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
9582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
9682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
9782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Saves an include quoted text flag. Only valid for drafts not yet sent to
9882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * / retrieved from server.
9982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
10082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
10182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param includeQuotedText the include quoted text flag
10282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
1033ce64e7ceb6246130342385d91550bcf33b31cc8Mindy Pereira    public static void putAppendRefMessageContent(ContentValues values, boolean includeQuotedText) {
10454a5aabee0dca5b52047d23651cca038357c49fdMindy Pereira        values.put(MessageColumns.APPEND_REF_MESSAGE_CONTENT, includeQuotedText ? 1 : 0);
10582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
10682cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira
10782cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    /**
10882cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * Saves a new body for the message. Only valid for drafts.
10982cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param values the ContentValues that will be used to create or update the
11082cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     *            message
11182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     * @param body the new body of the message
11282cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira     */
11382cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    public static void putBody(ContentValues values, String body) {
11482cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira        values.put(MessageColumns.BODY_TEXT, body);
11582cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira    }
11629ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira
11729ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira    /**
11829ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     * Saves a new body for the message. Only valid for drafts.
11929ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     * @param values the ContentValues that will be used to create or update the
12029ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     *            message
12129ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     * @param body the new body of the message
12229ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira     */
12329ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira    public static void putBodyHtml(ContentValues values, String body) {
12429ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira        values.put(MessageColumns.BODY_HTML, body);
12529ef1b89b158281ffb693dd5f2c5291a894109fcMindy Pereira    }
126f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira
127e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira    /**
12812575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * Saves the type of the conversation.
12912575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     *
13012575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param values the ContentValues that will be used to create or update the message
13112575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param draftType
13212575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     */
13312575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    public static void putDraftType(ContentValues values, int draftType) {
13412575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira        values.put(MessageColumns.DRAFT_TYPE, draftType);
13512575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    }
13612575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira
13712575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    /**
13812575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * Saves the ref message id for the conversation. It will be a uri.
13912575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     *
14012575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param values the ContentValues that will be used to create or update the message
14112575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     * @param uri of the reference message
14212575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira     */
14312575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    public static void putRefMessageId(ContentValues values, String uri) {
14412575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira        values.put(MessageColumns.REF_MESSAGE_ID, uri);
14512575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    }
14612575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira
14712575866e5526e45eaf773c6c98c93c3a06fe156Mindy Pereira    /**
148e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * Saves a quoted text starting position. Only valid for drafts not yet sent to /
149e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * retrieved from server.
150e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     *
151e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * @param values the ContentValues that will be used to create or update the message
152e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     * @param quoteStartPos the starting position for quoted text
153e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira     */
154af38093f677e697fe642d037eafaca8ebf183101Andy Huang    public static void putQuoteStartPos(ContentValues values, int quoteStartPos) {
155e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira        values.put(MessageColumns.QUOTE_START_POS, quoteStartPos);
156e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira    }
157e8caf1279a1c6ae720215405f678172a5cbf68d7Mindy Pereira
158f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    public static void putAttachments(ContentValues values, List<Attachment> attachments) {
159bbe74aee04f669990e888095b0d6858dc1e17ce1Mark Wei        values.put(MessageColumns.ATTACHMENTS,  Attachment.toJSONArray(attachments));
160f944e9655562e321aff52fe5f437e1d2fa2950a9Mindy Pereira    }
16182cc5665cb18801022cd60cd52abcd16a50debdcMindy Pereira}
162