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