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