SendersView.java revision 571de2212f311cc4a514ffa74e7585a2df1fb907
18eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira/* 28eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * Copyright (C) 2012 Google Inc. 38eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * Licensed to The Android Open Source Project. 48eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * 58eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * Licensed under the Apache License, Version 2.0 (the "License"); 68eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * you may not use this file except in compliance with the License. 78eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * You may obtain a copy of the License at 88eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * 98eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * http://www.apache.org/licenses/LICENSE-2.0 108eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * 118eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * Unless required by applicable law or agreed to in writing, software 128eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * distributed under the License is distributed on an "AS IS" BASIS, 138eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * See the License for the specific language governing permissions and 158eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira * limitations under the License. 168eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira */ 178eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 188eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereirapackage com.android.mail.browse; 198eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 208eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.content.Context; 21b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereiraimport android.content.res.Resources; 228eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.graphics.Typeface; 23b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereiraimport android.text.SpannableStringBuilder; 248eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.text.TextUtils; 258eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.text.style.CharacterStyle; 26b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereiraimport android.text.style.ForegroundColorSpan; 278eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.text.style.StyleSpan; 288eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.text.util.Rfc822Token; 298eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.text.util.Rfc822Tokenizer; 308eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.util.AttributeSet; 318eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport android.widget.TextView; 328eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 33b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereiraimport com.android.mail.R; 348eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport com.android.mail.providers.Address; 358eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereiraimport com.android.mail.providers.Conversation; 36571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereiraimport com.android.mail.providers.ConversationInfo; 37571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereiraimport com.android.mail.providers.MessageInfo; 38b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereiraimport com.android.mail.utils.Utils; 39b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira 40b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereiraimport java.util.regex.Pattern; 418eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 428eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereirapublic class SendersView extends TextView { 43b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira public static final int DEFAULT_FORMATTING = 0; 44b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira public static final int MERGED_FORMATTING = 1; 45b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira public static String SENDERS_VERSION_SEPARATOR = "^**^"; 468eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira CharacterStyle sNormalTextStyle = new StyleSpan(Typeface.NORMAL); 47a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira public static Pattern SENDERS_VERSION_SEPARATOR_PATTERN = Pattern.compile("\\^\\*\\*\\^"); 48b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira private int mFormatVersion = -1; 49b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira private ForegroundColorSpan sLightTextStyle; 50b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira private int DRAFT_TEXT_COLOR; 51b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira private int LIGHT_TEXT_COLOR; 528eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 538eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira public SendersView(Context context) { 548eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira this(context, null); 558eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 568eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 578eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira public SendersView(Context context, AttributeSet attrs) { 588eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira this(context, attrs, -1); 598eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 608eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 618eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira public SendersView(Context context, AttributeSet attrs, int defStyle) { 628eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira super(context, attrs, defStyle); 63b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira Resources res = context.getResources(); 64b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira LIGHT_TEXT_COLOR = res.getColor(R.color.light_text_color); 65b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira DRAFT_TEXT_COLOR = res.getColor(R.color.drafts); 66b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira sLightTextStyle = new ForegroundColorSpan(LIGHT_TEXT_COLOR); 678eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 688eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 698eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira public Typeface getTypeface(boolean isUnread) { 70b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira return mFormatVersion == DEFAULT_FORMATTING ? isUnread ? Typeface.DEFAULT_BOLD 71b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira : Typeface.DEFAULT : Typeface.DEFAULT; 728eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 738eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 74b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira public void formatSenders(ConversationItemViewModel header, boolean isUnread, int mode) { 75648df3f0b0ebcd3c4adf907d70ff0938e5dfc78fMindy Pereira if (TextUtils.isEmpty(header.conversation.senders) 76648df3f0b0ebcd3c4adf907d70ff0938e5dfc78fMindy Pereira && header.conversation.conversationInfo == null) { 778eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira return; 788eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 79b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira Conversation conversation = header.conversation; 80648df3f0b0ebcd3c4adf907d70ff0938e5dfc78fMindy Pereira String sendersInfo = conversation.conversationInfo != null ? 81648df3f0b0ebcd3c4adf907d70ff0938e5dfc78fMindy Pereira conversation.conversationInfo.sendersInfo : header.conversation.senders; 82571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira if (!TextUtils.isEmpty(sendersInfo)) { 83571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira SendersInfo info = new SendersInfo(sendersInfo); 84571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira mFormatVersion = info.version; 85571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira switch (mFormatVersion) { 86571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira case MERGED_FORMATTING: 87571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira formatMerged(header, info.text, isUnread, mode); 88571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira break; 89571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira case DEFAULT_FORMATTING: 90571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira default: 91571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira formatDefault(header, info.text); 92571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira break; 93571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } 94571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } else { 95571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira // We have the properly formatted conversationinfo. Parse and display! 96571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira format(header, conversation.conversationInfo); 97571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } 98571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } 99571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira 100571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira private void format(ConversationItemViewModel header, ConversationInfo conversationInfo) { 101571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira String[] senders = new String[conversationInfo.messageCount]; 102571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira for (int i = 0; i < senders.length; i++) { 103571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira senders[i] = parseSender(conversationInfo.messageInfos.get(i).sender); 104b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 105571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira generateSenderFragments(header, senders); 106571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } 107571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira 108571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira private String parseSender(String sender) { 109571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira Rfc822Token[] senderTokens = Rfc822Tokenizer.tokenize(sender); 110571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira String name; 111571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira if (senderTokens != null && senderTokens.length > 0) { 112571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira name = senderTokens[0].getName(); 113571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira if (TextUtils.isEmpty(name)) { 114571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira name = senderTokens[0].getAddress(); 115571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } 116571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira return name; 117571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } 118571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira return ""; 1198eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 1208eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira 121b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira private void formatDefault(ConversationItemViewModel header, String sendersString) { 1228eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira String[] senders = TextUtils.split(sendersString, Address.ADDRESS_DELIMETER); 1238eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira String[] namesOnly = new String[senders.length]; 1248eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira Rfc822Token[] senderTokens; 1258eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira String display; 1268eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira for (int i = 0; i < senders.length; i++) { 1278eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira senderTokens = Rfc822Tokenizer.tokenize(senders[i]); 1288eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira if (senderTokens != null && senderTokens.length > 0) { 1298eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira display = senderTokens[0].getName(); 1308eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira if (TextUtils.isEmpty(display)) { 1318eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira display = senderTokens[0].getAddress(); 1328eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 1338eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira namesOnly[i] = display; 1348eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 1358eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 136571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira generateSenderFragments(header, namesOnly); 137571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira } 138571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira 139571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira private void generateSenderFragments(ConversationItemViewModel header, String[] names) { 140571de2212f311cc4a514ffa74e7585a2df1fb907Mindy Pereira header.sendersText = TextUtils.join(Address.ADDRESS_DELIMETER + " ", names); 141b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.addSenderFragment(0, header.sendersText.length(), sNormalTextStyle, true); 142b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 143b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira 144b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira private void formatMerged(ConversationItemViewModel header, String sendersString, 145b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira boolean isUnread, int mode) { 146b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira SpannableStringBuilder sendersBuilder = new SpannableStringBuilder(); 147b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira SpannableStringBuilder statusBuilder = new SpannableStringBuilder(); 148b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira Utils.getStyledSenderSnippet(getContext(), sendersString, sendersBuilder, 149b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira statusBuilder, ConversationItemViewCoordinates.getSubjectLength(getContext(), mode, 150b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.folderDisplayer.hasVisibleFolders(), 151b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.conversation.hasAttachments), false, false, header.hasDraftMessage); 152b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.sendersText = sendersBuilder.toString(); 153b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira 154b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira CharacterStyle[] spans = sendersBuilder.getSpans(0, sendersBuilder.length(), 155b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira CharacterStyle.class); 156b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.clearSenderFragments(); 157b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira int lastPosition = 0; 158b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira CharacterStyle style = sNormalTextStyle; 159b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira if (spans != null) { 160b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira for (CharacterStyle span : spans) { 161b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira style = span; 162b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira int start = sendersBuilder.getSpanStart(style); 163b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira int end = sendersBuilder.getSpanEnd(style); 164b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira if (start > lastPosition) { 165b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.addSenderFragment(lastPosition, start, sNormalTextStyle, false); 166b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 167b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // From instructions won't be updated until the next sync. So we 168b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // have to override the text style here to be consistent with 169b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // the background color. 170b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira if (isUnread) { 171b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.addSenderFragment(start, end, style, false); 172b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } else { 173b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.addSenderFragment(start, end, sNormalTextStyle, false); 174b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 175b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira lastPosition = end; 176b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 177b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 178b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira if (lastPosition < sendersBuilder.length()) { 179b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira style = sLightTextStyle; 180b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.addSenderFragment(lastPosition, sendersBuilder.length(), style, true); 181b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 182b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira if (statusBuilder.length() > 0) { 183b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira if (header.sendersText.length() > 0) { 184b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.sendersText = header.sendersText.concat(", "); 185b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira 186b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // Extend the last fragment to include the comma. 187b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira int lastIndex = header.senderFragments.size() - 1; 188b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira int start = header.senderFragments.get(lastIndex).start; 189b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira int end = header.senderFragments.get(lastIndex).end + 2; 190b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira style = header.senderFragments.get(lastIndex).style; 191b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira 192b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // The new fragment is only fixed if the previous fragment 193b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // is fixed. 194b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira boolean isFixed = header.senderFragments.get(lastIndex).isFixed; 195b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira 196b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // Remove the old fragment. 197b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.senderFragments.remove(lastIndex); 198b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira 199b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira // Add new fragment. 200b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.addSenderFragment(start, end, style, isFixed); 201b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 202b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira int pos = header.sendersText.length(); 203b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.sendersText = header.sendersText.concat(statusBuilder.toString()); 204b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira header.addSenderFragment(pos, header.sendersText.length(), new ForegroundColorSpan( 205b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira DRAFT_TEXT_COLOR), true); 206b9c036b36542924894f141e3ecd81381a12e94a9Mindy Pereira } 2078eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira } 208a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira 209a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira public static class SendersInfo { 210a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira public int version; 211a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira public String text; 212a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira 213a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira public SendersInfo(String toParse) { 214a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira if (TextUtils.isEmpty(toParse)) { 215a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira version = 0; 216a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira text = ""; 217a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira } else { 218a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira String[] splits = TextUtils.split(toParse, SENDERS_VERSION_SEPARATOR_PATTERN); 219a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira if (splits == null || splits.length < 2) { 220a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira version = SendersView.DEFAULT_FORMATTING; 221a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira text = toParse; 222a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira } else { 223a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira version = Integer.parseInt(splits[0]); 224a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira text = splits[1]; 225a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira } 226a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira } 227a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira } 228a1512b60eb12f732ac249fe7fcdc4fec756ed147Mindy Pereira } 2298eb43be8074acb4e09da1385225fbb41c97b1bd5Mindy Pereira} 230