1/** 2 * Copyright (c) 2012, Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.mail.providers; 18 19import android.content.ContentValues; 20import android.text.TextUtils; 21 22import com.android.mail.providers.UIProvider.DraftType; 23import com.android.mail.providers.UIProvider.MessageColumns; 24 25import java.util.List; 26 27/** 28 * A helper class for creating or updating messages. Use the putXxx methods to 29 * provide initial or new values for the message. Then save or send the message. 30 * To save or send an existing message without making other changes to it simply 31 * provide an empty ContentValues. 32 */ 33public class MessageModification { 34 /** 35 * Sets the message's subject. Only valid for drafts. 36 * @param values the ContentValues that will be used to create or update the 37 * message 38 * @param subject the new subject 39 */ 40 public static void putSubject(ContentValues values, String subject) { 41 values.put(MessageColumns.SUBJECT, subject); 42 } 43 44 /** 45 * Sets the message's to address. Only valid for drafts. 46 * @param values the ContentValues that will be used to create or update the 47 * message 48 * @param toAddresses the new to addresses 49 */ 50 public static void putToAddresses(ContentValues values, String[] toAddresses) { 51 values.put(MessageColumns.TO, TextUtils.join(UIProvider.EMAIL_SEPARATOR, toAddresses)); 52 } 53 54 /** 55 * Sets the message's cc address. Only valid for drafts. 56 * @param values the ContentValues that will be used to create or update the 57 * message 58 * @param ccAddresses the new cc addresses 59 */ 60 public static void putCcAddresses(ContentValues values, String[] ccAddresses) { 61 values.put(MessageColumns.CC, TextUtils.join(UIProvider.EMAIL_SEPARATOR, ccAddresses)); 62 } 63 64 /** 65 * Sets the message's bcc address. Only valid for drafts. 66 * @param values the ContentValues that will be used to create or update the 67 * message 68 * @param bccAddresses the new bcc addresses 69 */ 70 public static void putBccAddresses(ContentValues values, String[] bccAddresses) { 71 values.put(MessageColumns.BCC, TextUtils.join(UIProvider.EMAIL_SEPARATOR, bccAddresses)); 72 } 73 74 /** 75 * Sets the custom from address for a message, we only set this if its different than the 76 * default adress for the account. 77 * 78 * @param values the ContentValues that will be used to create or update the message 79 * @param customFromAddress from address 80 */ 81 public static void putCustomFromAddress(ContentValues values, String customFromAddress) { 82 values.put(MessageColumns.CUSTOM_FROM_ADDRESS, customFromAddress); 83 } 84 85 /** 86 * Saves a flag indicating the message is forwarded. Only valid for drafts 87 * not yet sent to / retrieved from server. 88 * @param values the ContentValues that will be used to create or update the 89 * message 90 * @param forward true if the message is forwarded 91 */ 92 public static void putForward(ContentValues values, boolean forward) { 93 values.put(MessageColumns.DRAFT_TYPE, DraftType.FORWARD); 94 } 95 96 /** 97 * Saves an include quoted text flag. Only valid for drafts not yet sent to 98 * / retrieved from server. 99 * @param values the ContentValues that will be used to create or update the 100 * message 101 * @param includeQuotedText the include quoted text flag 102 */ 103 public static void putAppendRefMessageContent(ContentValues values, boolean includeQuotedText) { 104 values.put(MessageColumns.APPEND_REF_MESSAGE_CONTENT, includeQuotedText ? 1 : 0); 105 } 106 107 /** 108 * Saves a new body for the message. Only valid for drafts. 109 * @param values the ContentValues that will be used to create or update the 110 * message 111 * @param body the new body of the message 112 */ 113 public static void putBody(ContentValues values, String body) { 114 values.put(MessageColumns.BODY_TEXT, body); 115 } 116 117 /** 118 * Saves a new body for the message. Only valid for drafts. 119 * @param values the ContentValues that will be used to create or update the 120 * message 121 * @param body the new body of the message 122 */ 123 public static void putBodyHtml(ContentValues values, String body) { 124 values.put(MessageColumns.BODY_HTML, body); 125 } 126 127 /** 128 * Saves the type of the conversation. 129 * 130 * @param values the ContentValues that will be used to create or update the message 131 * @param draftType 132 */ 133 public static void putDraftType(ContentValues values, int draftType) { 134 values.put(MessageColumns.DRAFT_TYPE, draftType); 135 } 136 137 /** 138 * Saves the ref message id for the conversation. It will be a uri. 139 * 140 * @param values the ContentValues that will be used to create or update the message 141 * @param uri of the reference message 142 */ 143 public static void putRefMessageId(ContentValues values, String uri) { 144 values.put(MessageColumns.REF_MESSAGE_ID, uri); 145 } 146 147 /** 148 * Saves a quoted text starting position. Only valid for drafts not yet sent to / 149 * retrieved from server. 150 * 151 * @param values the ContentValues that will be used to create or update the message 152 * @param quoteStartPos the starting position for quoted text 153 */ 154 public static void putQuoteStartPos(ContentValues values, int quoteStartPos) { 155 values.put(MessageColumns.QUOTE_START_POS, quoteStartPos); 156 } 157 158 public static void putAttachments(ContentValues values, List<Attachment> attachments) { 159 values.put(MessageColumns.ATTACHMENTS, Attachment.toJSONArray(attachments)); 160 } 161} 162