package it.slyce.messaging.utils.asyncTasks; import android.content.Context; import android.os.AsyncTask; import java.util.List; import it.slyce.messaging.message.Message; import it.slyce.messaging.message.messageItem.MessageItem; import it.slyce.messaging.message.messageItem.MessageRecyclerAdapter; import it.slyce.messaging.utils.MessageUtils; import it.slyce.messaging.utils.Refresher; public class ReplaceMessagesTask extends AsyncTask { private List<Message> mMessages; private List<MessageItem> mMessageItems; private MessageRecyclerAdapter mRecyclerAdapter; private Context context; private Refresher mRefresher; private int upTo; public ReplaceMessagesTask(List<Message> messages, List<MessageItem> messageitems, MessageRecyclerAdapter mRecyclerAdapter, Context context, Refresher refresher, int upTo) { this.mMessages = messages; this.mRecyclerAdapter = mRecyclerAdapter; this.upTo = upTo; this.mRefresher = refresher; this.mMessageItems = messageitems; this.context = context; } @Override protected void onPreExecute() { super.onPreExecute(); mRefresher.setIsRefreshing(true); } @Override protected Object doInBackground(Object[] objects) { for (int i = mMessageItems.size() - 1; i >= 0; i--) { mMessageItems.remove(i); } for (Message message : mMessages) { if (context == null) return null; mMessageItems.add(message.toMessageItem(context)); // this call is why we need the AsyncTask } for (int i = 0; i < mMessageItems.size(); i++) { MessageUtils.markMessageItemAtIndexIfFirstOrLastFromSource(i, mMessageItems); } return null; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); if (o != null) { return; } if (upTo >= 0 && upTo < mMessageItems.size()) { mRecyclerAdapter.notifyItemRangeInserted(0, upTo); mRecyclerAdapter.notifyItemChanged(upTo); } else { mRecyclerAdapter.notifyDataSetChanged(); } mRefresher.setIsRefreshing(false); } }