/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.messagingservice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
/**
* A simple class that denotes unread conversations and messages. In a real world application,
* this would be replaced by a content provider that actually gets the unread messages to be
* shown to the user.
*/
public class Conversations {
/**
* Set of strings used as messages by the sample.
*/
private static final String[] MESSAGES = new String[]{
"Are you at home?",
"Can you give me a call?",
"Hey yt?",
"Don't forget to get some milk on your way back home",
"Is that project done?",
"Did you finish the Messaging app yet?"
};
/**
* Senders of the said messages.
*/
private static final String[] PARTICIPANTS = new String[]{
"John Smith",
"Robert Lawrence",
"James Smith",
"Jane Doe"
};
static class Conversation {
private final int conversationId;
private final String participantName;
/**
* A given conversation can have a single or multiple messages.
* Note that the messages are sorted from *newest* to *oldest*
*/
private final List<String> messages;
private final long timestamp;
public Conversation(int conversationId, String participantName,
List<String> messages) {
this.conversationId = conversationId;
this.participantName = participantName;
this.messages = messages == null ? Collections.<String>emptyList() : messages;
this.timestamp = System.currentTimeMillis();
}
public int getConversationId() {
return conversationId;
}
public String getParticipantName() {
return participantName;
}
public List<String> getMessages() {
return messages;
}
public long getTimestamp() {
return timestamp;
}
public String toString() {
return "[Conversation: conversationId=" + conversationId +
", participantName=" + participantName +
", messages=" + messages +
", timestamp=" + timestamp + "]";
}
}
private Conversations() {
}
public static Conversation[] getUnreadConversations(int howManyConversations,
int messagesPerConversation) {
Conversation[] conversations = new Conversation[howManyConversations];
for (int i = 0; i < howManyConversations; i++) {
conversations[i] = new Conversation(
ThreadLocalRandom.current().nextInt(),
name(), makeMessages(messagesPerConversation));
}
return conversations;
}
private static List<String> makeMessages(int messagesPerConversation) {
int maxLen = MESSAGES.length;
List<String> messages = new ArrayList<>(messagesPerConversation);
for (int i = 0; i < messagesPerConversation; i++) {
messages.add(MESSAGES[ThreadLocalRandom.current().nextInt(0, maxLen)]);
}
return messages;
}
private static String name() {
return PARTICIPANTS[ThreadLocalRandom.current().nextInt(0, PARTICIPANTS.length)];
}
}