package it.slyce.messaging.utils; import java.util.List; import it.slyce.messaging.message.messageItem.MessageItem; import it.slyce.messaging.message.messageItem.MessageItemType; public class MessageUtils { public static void markMessageItemAtIndexIfFirstOrLastFromSource(int i, List<MessageItem> messageItems) { if (i < 0 || i >= messageItems.size()) { return; } MessageItem messageItem = messageItems.get(i); messageItem.setIsFirstConsecutiveMessageFromSource(false); messageItem.setIsLastConsecutiveMessageFromSource(false); if (previousMessageIsNotFromSameSource(i, messageItems)) { messageItem.setIsFirstConsecutiveMessageFromSource(true); } if (isTheLastConsecutiveMessageFromSource(i, messageItems)) { messageItem.setIsLastConsecutiveMessageFromSource(true); } } private static boolean previousMessageIsNotFromSameSource(int i, List<MessageItem> messageItems) { return i == 0 || previousMessageIsSpinner(i, messageItems) || previousMessageIsFromAnotherSender(i, messageItems); } private static boolean previousMessageIsFromAnotherSender(int i, List<MessageItem> messageItems) { return messageItems.get(i - 1).getMessageSource() != messageItems.get(i).getMessageSource(); } private static boolean previousMessageIsSpinner(int i, List<MessageItem> messageItems) { return isSpinnerMessage(i - 1, messageItems); } private static boolean isTheLastConsecutiveMessageFromSource(int i, List<MessageItem> messageItems) { if (isSpinnerMessage(i, messageItems)) { return false; } return i == messageItems.size() - 1 || nextMessageHasDifferentSource(i, messageItems) || messageItems.get(i).getMessage() == null || messageItems.get(i + 1).getMessage() == null || nextMessageWasAtLeastAnHourAfterThisOne(i, messageItems); } private static boolean nextMessageWasAtLeastAnHourAfterThisOne(int i, List<MessageItem> messageItems) { return messageItems.get(i + 1).getMessage().getDate() - messageItems.get(i).getMessage().getDate() > 1000 * 60 * 60; // one hour } private static boolean nextMessageHasDifferentSource(int i, List<MessageItem> messageItems) { return messageItems.get(i).getMessageSource() != messageItems.get(i + 1).getMessageSource(); } private static boolean isSpinnerMessage(int i, List<MessageItem> messageItems) { return messageItems.get(i).getMessageItemType() == MessageItemType.SPINNER; } }