13469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project/*
23469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
33469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *
43469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
53469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * you may not use this file except in compliance with the License.
63469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * You may obtain a copy of the License at
73469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *
83469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
93469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *
103469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
113469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
123469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * See the License for the specific language governing permissions and
143469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * limitations under the License.
153469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project */
163469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
172193962ca2b3157e79f731736afa2a0c972e778aMarc Blankpackage com.android.emailcommon.mail;
183469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
192193962ca2b3157e79f731736afa2a0c972e778aMarc Blankimport com.android.emailcommon.internet.MimeBodyPart;
202193962ca2b3157e79f731736afa2a0c972e778aMarc Blankimport com.android.emailcommon.internet.MimeHeader;
212193962ca2b3157e79f731736afa2a0c972e778aMarc Blankimport com.android.emailcommon.internet.MimeMessage;
222193962ca2b3157e79f731736afa2a0c972e778aMarc Blankimport com.android.emailcommon.internet.MimeMultipart;
232193962ca2b3157e79f731736afa2a0c972e778aMarc Blankimport com.android.emailcommon.internet.TextBody;
24f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account;
258a574694606f0e5d781334d0d426fc379c51f3edMarc Blankimport com.android.emailcommon.utility.AttachmentUtilities;
263469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
273469902379242c723b871d1dcb09b02d0998d538The Android Open Source Projectimport android.net.Uri;
283469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
293469902379242c723b871d1dcb09b02d0998d538The Android Open Source Projectimport java.util.ArrayList;
303469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
313469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project/**
323469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Utility class makes it easier for developer to build mail message objects.
333469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * <p>
343469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Typical usage of these helper functions and builder objects are as follows.
353469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * <p>
363469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * <pre>
373469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * String text2 = new TextBuilder("<html>").text("<head></head>")
383469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *     .text("<body>").cidImg("contetid@domain").text("</body>").build("</html");
393469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * String text2 = new TextBuilder("<html>").text("<head></head>")
403469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *     .text("<body>").uriImg(contentUri).text("</body>").build("</html");
413469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * Message msg = new MessageBuilder()
423469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *     .setBody(new MultipartBuilder("multipart/mixed")
433469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *         .addBodyPart(MessageTestUtils.imagePart("image/jpeg", null, 30, store))
443469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *         .addBodyPart(MessageTestUtils.imagePart("application/pdf", cid1, aid1, store))
453469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *         .addBodyPart(new MultipartBuilder("multipart/related")
463469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *             .addBodyPart(MessageTestUtils.textPart("text/html", text2 + text1))
473469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *             .addBodyPart(MessageTestUtils.imagePart("image/jpg", cid1, aid1, store))
483469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *             .addBodyPart(MessageTestUtils.imagePart("image/gif", cid2, aid2, store))
493469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *             .buildBodyPart())
503469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *         .addBodyPart(MessageTestUtils.imagePart("application/pdf", cid2, aid2, store))
513469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *         .build())
523469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project *     .build();
533469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project * </pre>
543469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project */
553469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
563469902379242c723b871d1dcb09b02d0998d538The Android Open Source Projectpublic class MessageTestUtils {
573469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
583469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
593469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Generate AttachmentProvider content URI from attachment ID and Account.
603469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
613469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @param attachmentId attachment id
623469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @param account Account object
633469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @return AttachmentProvider content URI
643469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
65f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blank    public static Uri contentUri(long attachmentId, Account account) {
668a574694606f0e5d781334d0d426fc379c51f3edMarc Blank        return AttachmentUtilities.getAttachmentUri(account.mId, attachmentId);
673469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
683469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
693469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
703469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Create simple MimeBodyPart.
713469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
723469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @param mimeType MIME type of body part
733469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @param contentId content-id header value (optional - null for no header)
743469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @return MimeBodyPart object which body is null.
753469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @throws MessagingException
763469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
773469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public static BodyPart bodyPart(String mimeType, String contentId) throws MessagingException {
783469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        final MimeBodyPart bp = new MimeBodyPart(null, mimeType);
793469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        if (contentId != null) {
803469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            bp.setHeader(MimeHeader.HEADER_CONTENT_ID, contentId);
813469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
823469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        return bp;
833469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
843469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
853469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
863469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Create MimeBodyPart with TextBody.
873469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
883469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @param mimeType MIME type of text
893469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @param text body text string
903469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @return MimeBodyPart object whose body is TextBody
913469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * @throws MessagingException
923469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
933469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public static BodyPart textPart(String mimeType, String text) throws MessagingException {
943469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        final TextBody textBody = new TextBody(text);
953469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        final MimeBodyPart textPart = new MimeBodyPart(textBody);
963469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        textPart.setHeader(MimeHeader.HEADER_CONTENT_TYPE, mimeType);
973469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        return textPart;
983469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
993469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1003469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
1013469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Builder class for Multipart.
1023469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
1033469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * This builder object accepts any number of BodyParts and then can produce
1043469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Multipart or BodyPart which contains accepted BodyParts. Usually combined with other
1053469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * builder object and helper method.
1063469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
1073469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public static class MultipartBuilder {
1083469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        private final String mContentType;
1093469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        private final ArrayList<BodyPart> mParts = new ArrayList<BodyPart>();
1103469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1113469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1123469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Create builder object with MIME type and dummy boundary string.
1133469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         *
1143469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param mimeType MIME type of this Multipart
1153469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1163469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public MultipartBuilder(String mimeType) {
1173469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            this(mimeType, "this_is_boundary");
1183469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
1193469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1203469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1213469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Create builder object with MIME type and boundary string.
1223469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         *
1233469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param mimeType MIME type of this Multipart
1243469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param boundary boundary string
1253469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1263469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public MultipartBuilder(String mimeType, String boundary) {
1273469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            mContentType = mimeType + "; boundary=" + boundary;
1283469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
1293469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1303469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1313469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Modifier method to add BodyPart to intended Multipart.
1323469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         *
1333469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param bodyPart BodyPart to be added
1343469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return builder object itself
1353469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1363469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public MultipartBuilder addBodyPart(final BodyPart bodyPart) {
1373469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            mParts.add(bodyPart);
1383469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return this;
1393469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
1403469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1413469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1423469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Build method to create Multipart.
1433469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         *
1443469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return intended Multipart object
1453469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @throws MessagingException
1463469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1473469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public Multipart build() throws MessagingException {
1483469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            final MimeMultipart mp = new MimeMultipart(mContentType);
1493469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            for (BodyPart p : mParts) {
1503469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project                mp.addBodyPart(p);
1513469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            }
1523469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return mp;
1533469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
1543469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1553469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1563469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Build method to create BodyPart that contains this "Multipart"
1573469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return BodyPart whose body is intended Multipart.
1583469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @throws MessagingException
1593469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1603469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public BodyPart buildBodyPart() throws MessagingException {
1613469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            final BodyPart bp = new MimeBodyPart();
1623469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            bp.setBody(this.build());
1633469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return bp;
1643469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
1653469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
1663469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1673469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
1683469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Builder class for Message
1693469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     *
1703469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * This builder object accepts Body and then can produce Message object.
1713469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Usually combined with other builder object and helper method.
1723469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
1733469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public static class MessageBuilder {
1743469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        private Body mBody;
1753469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1763469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1773469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Create Builder object.
1783469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1793469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public MessageBuilder() {
1803469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
1813469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1823469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1833469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Modifier method to set Body.
1843469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         *
1853469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param body Body of intended Message
1863469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return builder object itself
1873469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1883469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public MessageBuilder setBody(final Body body) {
1893469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            mBody = body;
1903469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return this;
1913469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
1923469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
1933469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
1943469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Build method to create Message.
1953469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         *
1963469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return intended Message object
1973469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @throws MessagingException
1983469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
1993469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public Message build() throws MessagingException {
2003469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            final MimeMessage msg = new MimeMessage();
2013469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            if (mBody == null) {
2023469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project                throw new MessagingException("body is not specified");
2033469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            }
2043469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            msg.setBody(mBody);
2053469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return msg;
2063469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
2073469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
2083469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2093469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    /**
2103469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Builder class for simple HTML String.
2113469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * This builder object accepts some type of object or and string and then create String object.
2123469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     * Usually combined with other builder object and helper method.
2133469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project     */
2143469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    public static class TextBuilder {
2153469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        final StringBuilder mBuilder = new StringBuilder();
2163469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2173469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
2183469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Create builder with preamble string
2193469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param preamble
2203469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
2213469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public TextBuilder(String preamble) {
2223469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            mBuilder.append(preamble);
2233469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
2243469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2253469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
2263469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Modifier method to add img tag that has cid: src attribute.
2273469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param contentId content id string
2283469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return builder object itself
2293469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
2303469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public TextBuilder addCidImg(String contentId) {
2313469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return addTag("img", "SRC", "cid:" + contentId);
2323469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
2333469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2343469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
2353469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Modifier method to add img tag that has content:// src attribute.
2363469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param contentUri content uri object
2373469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return builder object itself
2383469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
2393469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public TextBuilder addUidImg(Uri contentUri) {
2403469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return addTag("img", "src", contentUri.toString());
2413469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
2423469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2433469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
2443469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Modifier method to add tag with specified attribute and value.
2453469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         *
2463469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param tag tag name
2473469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param attribute attribute name
2483469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param value attribute value
2493469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return builder object itself
2503469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
2513469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public TextBuilder addTag(String tag, String attribute, String value) {
2523469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return addText(String.format("<%s %s=\"%s\">", tag, attribute, value));
2533469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
2543469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2553469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
2563469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Modifier method to add simple string.
2573469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param text string to add
2583469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return builder object itself
2593469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
2603469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public TextBuilder addText(String text) {
2613469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            mBuilder.append(text);
2623469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return this;
2633469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
2643469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2653469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        /**
2663469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * Build method to create intended String
2673469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @param epilogue string to add to the end
2683469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         * @return intended String
2693469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project         */
2703469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        public String build(String epilogue) {
2713469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            mBuilder.append(epilogue);
2723469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project            return mBuilder.toString();
2733469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project        }
2743469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project    }
2753469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project
2763469902379242c723b871d1dcb09b02d0998d538The Android Open Source Project}
277