1010import android .support .v4 .view .ViewCompat ;
1111import android .support .v7 .app .AppCompatDelegate ;
1212import android .support .v7 .widget .RecyclerView ;
13- import android .util .Log ;
1413import android .text .format .DateUtils ;
14+ import android .util .Log ;
1515import android .util .TypedValue ;
1616import android .view .LayoutInflater ;
1717import android .view .View ;
1818import android .view .ViewGroup ;
1919
20- import com .zulip .android .models .Person ;
21- import com .zulip .android .models .Stream ;
22- import com .zulip .android .networking .AsyncPointerUpdate ;
23-
2420import com .squareup .picasso .Picasso ;
25- import com .zulip .android .util .OnItemClickListener ;
2621import com .zulip .android .R ;
2722import com .zulip .android .ZulipApp ;
2823import com .zulip .android .filters .NarrowFilterPM ;
2924import com .zulip .android .filters .NarrowFilterStream ;
3025import com .zulip .android .filters .NarrowListener ;
3126import com .zulip .android .models .Message ;
3227import com .zulip .android .models .MessageType ;
28+ import com .zulip .android .models .Person ;
29+ import com .zulip .android .models .Stream ;
30+ import com .zulip .android .networking .AsyncPointerUpdate ;
31+ import com .zulip .android .util .OnItemClickListener ;
3332import com .zulip .android .util .ZLog ;
3433import com .zulip .android .viewholders .LoadingHolder ;
3534import com .zulip .android .viewholders .MessageHeaderParent ;
@@ -204,8 +203,10 @@ private int[] getHeaderAndNextIndex(String id) {
204203
205204 private void setupLists (List <Message > messageList ) {
206205 int headerParents = 0 ;
206+ StringBuilder stringBuilder = new StringBuilder ();
207207 for (int i = 0 ; i < messageList .size () - 1 ; i ++) {
208- headerParents = (addMessage (messageList .get (i ), i + headerParents )) ? headerParents + 1 : headerParents ;
208+ Message message = messageList .get (i );
209+ headerParents = (addOldMessage (message , i + headerParents , stringBuilder )) ? headerParents + 1 : headerParents ;
209210 }
210211 setFooterShowing (false );
211212 setHeaderShowing (false );
@@ -234,11 +235,8 @@ else if (getItem(position) instanceof Integer && (Integer) getItem(position) ==
234235 * @param messageAndHeadersCount Count of the (messages + messageHeaderParent) added in the loop from where this function is being called
235236 * @return returns true if a new messageHeaderParent is created for this message so as to increment the count by where this function is being called.
236237 */
237- public boolean addMessage (Message message , int messageAndHeadersCount ) {
238-
239- int [] index = getHeaderAndNextIndex (message .getIdForHolder ());
240-
241- if (index [0 ] < 0 ) { //No messageParent for this one
238+ public boolean addOldMessage (Message message , int messageAndHeadersCount , StringBuilder lastHolderId ) {
239+ if (!lastHolderId .toString ().equals (message .getIdForHolder ()) || lastHolderId .toString ().equals ("" )) {
242240 MessageHeaderParent messageHeaderParent = new MessageHeaderParent ((message .getStream () == null ) ? null : message .getStream ().getName (), message .getSubject (), message .getIdForHolder ());
243241 messageHeaderParent .setMessageType (message .getType ());
244242 messageHeaderParent .setDisplayRecipent (message .getDisplayRecipient (zulipApp ));
@@ -250,11 +248,12 @@ public boolean addMessage(Message message, int messageAndHeadersCount) {
250248 notifyItemInserted (messageAndHeadersCount + 1 );
251249 items .add (messageAndHeadersCount + 2 , message );
252250 notifyItemInserted (messageAndHeadersCount + 2 );
251+ lastHolderId .setLength (0 );
252+ lastHolderId .append (messageHeaderParent .getId ());
253253 return true ;
254254 } else {
255- int nextHeader = (index [1 ] != -1 ) ? index [1 ] : getItemCount (false );
256- items .add (nextHeader , message );
257- notifyItemInserted (nextHeader );
255+ items .add (messageAndHeadersCount + 1 , message );
256+ notifyItemInserted (messageAndHeadersCount + 1 );
258257 return false ;
259258 }
260259 }
0 commit comments