package com.badoo.chateau.example.ui.chat.messages; import android.support.annotation.NonNull; import com.badoo.chateau.example.data.model.ExampleMessage; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.ListIterator; import java.util.concurrent.TimeUnit; public class TimeStampPreProcessor implements ItemPreProcessor { final Calendar mCalendar; public TimeStampPreProcessor() { this(Calendar.getInstance()); } TimeStampPreProcessor(Calendar calendar) { mCalendar = calendar; } @Override public List<ExampleMessage> doProcess(@NonNull List<ExampleMessage> input) { List<ExampleMessage> output = new ArrayList<>(); ExampleMessage latestTimestamp = null; for (final ExampleMessage message : input) { if (latestTimestamp == null || !belongToCurrentDay(latestTimestamp.getTimestamp(), message.getTimestamp())) { latestTimestamp = ExampleMessage.createTimestamp(startOfDay(message.getTimestamp())); output.add(latestTimestamp); } output.add(message); } return output; } private boolean belongToCurrentDay(long startOfDay, long timestamp) { return timestamp < startOfDay + TimeUnit.DAYS.toMillis(1); } private long startOfDay(long timestamp) { mCalendar.setTimeInMillis(timestamp); mCalendar.set(Calendar.HOUR_OF_DAY, 0); mCalendar.set(Calendar.MINUTE, 0); mCalendar.set(Calendar.SECOND, 0); mCalendar.set(Calendar.MILLISECOND, 0); return mCalendar.getTimeInMillis(); } }