/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.emailcommon.utility; import com.android.emailcommon.internet.MimeHeader; import com.android.emailcommon.internet.MimeUtility; import com.android.emailcommon.mail.MessagingException; import com.android.emailcommon.mail.Part; import android.text.TextUtils; import java.util.ArrayList; public class ConversionUtilities { /** * Helper function to append text to a StringBuffer, creating it if necessary. * Optimization: The majority of the time we are *not* appending - we should have a path * that deals with single strings. */ private static StringBuffer appendTextPart(StringBuffer sb, String newText) { if (newText == null) { return sb; } else if (sb == null) { sb = new StringBuffer(newText); } else { if (sb.length() > 0) { sb.append('\n'); } sb.append(newText); } return sb; } /** * Plain-Old-Data class to return parsed body data from * {@link ConversionUtilities#parseBodyFields} */ public static class BodyFieldData { public String textContent; public String htmlContent; public String snippet; public boolean isQuotedReply; public boolean isQuotedForward; } /** * Parse body text (plain and/or HTML) from MimeMessage to {@link BodyFieldData}. */ public static BodyFieldData parseBodyFields(ArrayList viewables) throws MessagingException { final BodyFieldData data = new BodyFieldData(); StringBuffer sbHtml = null; StringBuffer sbText = null; for (Part viewable : viewables) { String text = MimeUtility.getTextFromPart(viewable); // Deploy text as marked by the various tags boolean isHtml = "text/html".equalsIgnoreCase(viewable.getMimeType()); // Most of the time, just process regular body parts if (isHtml) { sbHtml = appendTextPart(sbHtml, text); } else { sbText = appendTextPart(sbText, text); } } // write the combined data to the body part if (!TextUtils.isEmpty(sbText)) { String text = sbText.toString(); data.textContent = text; data.snippet = TextUtilities.makeSnippetFromPlainText(text); } if (!TextUtils.isEmpty(sbHtml)) { String text = sbHtml.toString(); data.htmlContent = text; if (data.snippet == null) { data.snippet = TextUtilities.makeSnippetFromHtmlText(text); } } return data; } }