• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2012, Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.mail.providers;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 import com.google.common.base.Objects;
23 
24 import java.util.ArrayList;
25 
26 public class ConversationInfo implements Parcelable {
27 
28     final public ArrayList<MessageInfo> messageInfos;
29     public int messageCount;
30     public int draftCount;
31     public String firstSnippet;
32     public String firstUnreadSnippet;
33     public String lastSnippet;
34 
ConversationInfo()35     public ConversationInfo() {
36         messageInfos = new ArrayList<MessageInfo>();
37     }
38 
39     /**
40      * Alternate constructor that allows clients to specify the intended number of messages to
41      * reduce garbage from resizing.
42      */
ConversationInfo(int count)43     public ConversationInfo(int count) {
44         messageInfos = new ArrayList<MessageInfo>(count);
45     }
46 
ConversationInfo(int count, int draft, String first, String firstUnread, String last)47     public ConversationInfo(int count, int draft, String first, String firstUnread, String last) {
48         messageInfos = new ArrayList<MessageInfo>(count);
49         set(count, draft, first, firstUnread, last);
50     }
51 
ConversationInfo(Parcel in)52     private ConversationInfo(Parcel in) {
53         messageCount = in.readInt();
54         draftCount = in.readInt();
55         firstSnippet = in.readString();
56         firstUnreadSnippet = in.readString();
57         lastSnippet = in.readString();
58         messageInfos = in.createTypedArrayList(MessageInfo.CREATOR);
59     }
60 
61     @Override
describeContents()62     public int describeContents() {
63         return 0;
64     }
65 
66     @Override
writeToParcel(Parcel dest, int flags)67     public void writeToParcel(Parcel dest, int flags) {
68         dest.writeInt(messageCount);
69         dest.writeInt(draftCount);
70         dest.writeString(firstSnippet);
71         dest.writeString(firstUnreadSnippet);
72         dest.writeString(lastSnippet);
73         dest.writeTypedList(messageInfos);
74     }
75 
fromBlob(byte[] blob)76     public static ConversationInfo fromBlob(byte[] blob) {
77         if (blob == null) {
78             return null;
79         }
80         final Parcel p = Parcel.obtain();
81         p.unmarshall(blob, 0, blob.length);
82         p.setDataPosition(0);
83         final ConversationInfo result = CREATOR.createFromParcel(p);
84         p.recycle();
85         return result;
86     }
87 
toBlob()88     public byte[] toBlob() {
89         final Parcel p = Parcel.obtain();
90         writeToParcel(p, 0);
91         final byte[] result = p.marshall();
92         p.recycle();
93         return result;
94     }
95 
set(int count, int draft, String first, String firstUnread, String last)96     public void set(int count, int draft, String first, String firstUnread, String last) {
97         messageInfos.clear();
98         messageCount = count;
99         draftCount = draft;
100         firstSnippet = first;
101         firstUnreadSnippet = firstUnread;
102         lastSnippet = last;
103     }
104 
reset()105     public void reset() {
106         messageInfos.clear();
107         messageCount = 0;
108         draftCount = 0;
109         firstSnippet = null;
110         firstUnreadSnippet = null;
111         lastSnippet = null;
112     }
113 
addMessage(MessageInfo info)114     public void addMessage(MessageInfo info) {
115         messageInfos.add(info);
116     }
117 
markRead(boolean read)118     public boolean markRead(boolean read) {
119         boolean changed = false;
120         for (MessageInfo msg : messageInfos) {
121             changed |= msg.markRead(read);
122         }
123         if (read) {
124             firstSnippet = lastSnippet;
125         } else {
126             firstSnippet = firstUnreadSnippet;
127         }
128         return changed;
129     }
130 
131     @Override
hashCode()132     public int hashCode() {
133         return Objects.hashCode(messageCount, draftCount, messageInfos, firstSnippet,
134                 lastSnippet, firstUnreadSnippet);
135     }
136 
137     public static final Creator<ConversationInfo> CREATOR = new Creator<ConversationInfo>() {
138 
139         @Override
140         public ConversationInfo createFromParcel(Parcel source) {
141             return new ConversationInfo(source);
142         }
143 
144         @Override
145         public ConversationInfo[] newArray(int size) {
146             return new ConversationInfo[size];
147         }
148 
149     };
150 
151     @Override
toString()152     public String toString() {
153         StringBuilder builder = new StringBuilder();
154         builder.append("[ConversationInfo object: messageCount = ");
155         builder.append(messageCount);
156         builder.append(", draftCount = ");
157         builder.append(draftCount);
158         builder.append(", firstSnippet= ");
159         builder.append(firstSnippet);
160         builder.append(", firstUnreadSnippet = ");
161         builder.append(firstUnreadSnippet);
162         builder.append(", messageInfos = ");
163         builder.append(messageInfos.toString());
164         builder.append("]");
165         return builder.toString();
166     }
167 }
168