1*90c8c64dSAndroid Build Coastguard Worker /*
2*90c8c64dSAndroid Build Coastguard Worker  * Copyright (C) 2014 The Android Open Source Project
3*90c8c64dSAndroid Build Coastguard Worker  *
4*90c8c64dSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*90c8c64dSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*90c8c64dSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*90c8c64dSAndroid Build Coastguard Worker  *
8*90c8c64dSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*90c8c64dSAndroid Build Coastguard Worker  *
10*90c8c64dSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*90c8c64dSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*90c8c64dSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*90c8c64dSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*90c8c64dSAndroid Build Coastguard Worker  * limitations under the License.
15*90c8c64dSAndroid Build Coastguard Worker  */
16*90c8c64dSAndroid Build Coastguard Worker 
17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.messagingservice;
18*90c8c64dSAndroid Build Coastguard Worker 
19*90c8c64dSAndroid Build Coastguard Worker import java.util.ArrayList;
20*90c8c64dSAndroid Build Coastguard Worker import java.util.Collections;
21*90c8c64dSAndroid Build Coastguard Worker import java.util.List;
22*90c8c64dSAndroid Build Coastguard Worker import java.util.concurrent.ThreadLocalRandom;
23*90c8c64dSAndroid Build Coastguard Worker 
24*90c8c64dSAndroid Build Coastguard Worker /**
25*90c8c64dSAndroid Build Coastguard Worker  * A simple class that denotes unread conversations and messages. In a real world application,
26*90c8c64dSAndroid Build Coastguard Worker  * this would be replaced by a content provider that actually gets the unread messages to be
27*90c8c64dSAndroid Build Coastguard Worker  * shown to the user.
28*90c8c64dSAndroid Build Coastguard Worker  */
29*90c8c64dSAndroid Build Coastguard Worker public class Conversations {
30*90c8c64dSAndroid Build Coastguard Worker 
31*90c8c64dSAndroid Build Coastguard Worker     /**
32*90c8c64dSAndroid Build Coastguard Worker      * Set of strings used as messages by the sample.
33*90c8c64dSAndroid Build Coastguard Worker      */
34*90c8c64dSAndroid Build Coastguard Worker     private static final String[] MESSAGES = new String[]{
35*90c8c64dSAndroid Build Coastguard Worker             "Are you at home?",
36*90c8c64dSAndroid Build Coastguard Worker             "Can you give me a call?",
37*90c8c64dSAndroid Build Coastguard Worker             "Hey yt?",
38*90c8c64dSAndroid Build Coastguard Worker             "Don't forget to get some milk on your way back home",
39*90c8c64dSAndroid Build Coastguard Worker             "Is that project done?",
40*90c8c64dSAndroid Build Coastguard Worker             "Did you finish the Messaging app yet?"
41*90c8c64dSAndroid Build Coastguard Worker     };
42*90c8c64dSAndroid Build Coastguard Worker 
43*90c8c64dSAndroid Build Coastguard Worker     /**
44*90c8c64dSAndroid Build Coastguard Worker      * Senders of the said messages.
45*90c8c64dSAndroid Build Coastguard Worker      */
46*90c8c64dSAndroid Build Coastguard Worker     private static final String[] PARTICIPANTS = new String[]{
47*90c8c64dSAndroid Build Coastguard Worker             "John Smith",
48*90c8c64dSAndroid Build Coastguard Worker             "Robert Lawrence",
49*90c8c64dSAndroid Build Coastguard Worker             "James Smith",
50*90c8c64dSAndroid Build Coastguard Worker             "Jane Doe"
51*90c8c64dSAndroid Build Coastguard Worker     };
52*90c8c64dSAndroid Build Coastguard Worker 
53*90c8c64dSAndroid Build Coastguard Worker     static class Conversation {
54*90c8c64dSAndroid Build Coastguard Worker 
55*90c8c64dSAndroid Build Coastguard Worker         private final int conversationId;
56*90c8c64dSAndroid Build Coastguard Worker 
57*90c8c64dSAndroid Build Coastguard Worker         private final String participantName;
58*90c8c64dSAndroid Build Coastguard Worker 
59*90c8c64dSAndroid Build Coastguard Worker         /**
60*90c8c64dSAndroid Build Coastguard Worker          * A given conversation can have a single or multiple messages.
61*90c8c64dSAndroid Build Coastguard Worker          * Note that the messages are sorted from *newest* to *oldest*
62*90c8c64dSAndroid Build Coastguard Worker          */
63*90c8c64dSAndroid Build Coastguard Worker         private final List<String> messages;
64*90c8c64dSAndroid Build Coastguard Worker 
65*90c8c64dSAndroid Build Coastguard Worker         private final long timestamp;
66*90c8c64dSAndroid Build Coastguard Worker 
Conversation(int conversationId, String participantName, List<String> messages)67*90c8c64dSAndroid Build Coastguard Worker         public Conversation(int conversationId, String participantName,
68*90c8c64dSAndroid Build Coastguard Worker                             List<String> messages) {
69*90c8c64dSAndroid Build Coastguard Worker             this.conversationId = conversationId;
70*90c8c64dSAndroid Build Coastguard Worker             this.participantName = participantName;
71*90c8c64dSAndroid Build Coastguard Worker             this.messages = messages == null ? Collections.<String>emptyList() : messages;
72*90c8c64dSAndroid Build Coastguard Worker             this.timestamp = System.currentTimeMillis();
73*90c8c64dSAndroid Build Coastguard Worker         }
74*90c8c64dSAndroid Build Coastguard Worker 
getConversationId()75*90c8c64dSAndroid Build Coastguard Worker         public int getConversationId() {
76*90c8c64dSAndroid Build Coastguard Worker             return conversationId;
77*90c8c64dSAndroid Build Coastguard Worker         }
78*90c8c64dSAndroid Build Coastguard Worker 
getParticipantName()79*90c8c64dSAndroid Build Coastguard Worker         public String getParticipantName() {
80*90c8c64dSAndroid Build Coastguard Worker             return participantName;
81*90c8c64dSAndroid Build Coastguard Worker         }
82*90c8c64dSAndroid Build Coastguard Worker 
getMessages()83*90c8c64dSAndroid Build Coastguard Worker         public List<String> getMessages() {
84*90c8c64dSAndroid Build Coastguard Worker             return messages;
85*90c8c64dSAndroid Build Coastguard Worker         }
86*90c8c64dSAndroid Build Coastguard Worker 
getTimestamp()87*90c8c64dSAndroid Build Coastguard Worker         public long getTimestamp() {
88*90c8c64dSAndroid Build Coastguard Worker             return timestamp;
89*90c8c64dSAndroid Build Coastguard Worker         }
90*90c8c64dSAndroid Build Coastguard Worker 
toString()91*90c8c64dSAndroid Build Coastguard Worker         public String toString() {
92*90c8c64dSAndroid Build Coastguard Worker             return "[Conversation: conversationId=" + conversationId +
93*90c8c64dSAndroid Build Coastguard Worker                     ", participantName=" + participantName +
94*90c8c64dSAndroid Build Coastguard Worker                     ", messages=" + messages +
95*90c8c64dSAndroid Build Coastguard Worker                     ", timestamp=" + timestamp + "]";
96*90c8c64dSAndroid Build Coastguard Worker         }
97*90c8c64dSAndroid Build Coastguard Worker     }
98*90c8c64dSAndroid Build Coastguard Worker 
Conversations()99*90c8c64dSAndroid Build Coastguard Worker     private Conversations() {
100*90c8c64dSAndroid Build Coastguard Worker     }
101*90c8c64dSAndroid Build Coastguard Worker 
getUnreadConversations(int howManyConversations, int messagesPerConversation)102*90c8c64dSAndroid Build Coastguard Worker     public static Conversation[] getUnreadConversations(int howManyConversations,
103*90c8c64dSAndroid Build Coastguard Worker                                                         int messagesPerConversation) {
104*90c8c64dSAndroid Build Coastguard Worker         Conversation[] conversations = new Conversation[howManyConversations];
105*90c8c64dSAndroid Build Coastguard Worker         for (int i = 0; i < howManyConversations; i++) {
106*90c8c64dSAndroid Build Coastguard Worker             conversations[i] = new Conversation(
107*90c8c64dSAndroid Build Coastguard Worker                     ThreadLocalRandom.current().nextInt(),
108*90c8c64dSAndroid Build Coastguard Worker                     name(), makeMessages(messagesPerConversation));
109*90c8c64dSAndroid Build Coastguard Worker         }
110*90c8c64dSAndroid Build Coastguard Worker         return conversations;
111*90c8c64dSAndroid Build Coastguard Worker     }
112*90c8c64dSAndroid Build Coastguard Worker 
makeMessages(int messagesPerConversation)113*90c8c64dSAndroid Build Coastguard Worker     private static List<String> makeMessages(int messagesPerConversation) {
114*90c8c64dSAndroid Build Coastguard Worker         int maxLen = MESSAGES.length;
115*90c8c64dSAndroid Build Coastguard Worker         List<String> messages = new ArrayList<>(messagesPerConversation);
116*90c8c64dSAndroid Build Coastguard Worker         for (int i = 0; i < messagesPerConversation; i++) {
117*90c8c64dSAndroid Build Coastguard Worker             messages.add(MESSAGES[ThreadLocalRandom.current().nextInt(0, maxLen)]);
118*90c8c64dSAndroid Build Coastguard Worker         }
119*90c8c64dSAndroid Build Coastguard Worker         return messages;
120*90c8c64dSAndroid Build Coastguard Worker     }
121*90c8c64dSAndroid Build Coastguard Worker 
name()122*90c8c64dSAndroid Build Coastguard Worker     private static String name() {
123*90c8c64dSAndroid Build Coastguard Worker         return PARTICIPANTS[ThreadLocalRandom.current().nextInt(0, PARTICIPANTS.length)];
124*90c8c64dSAndroid Build Coastguard Worker     }
125*90c8c64dSAndroid Build Coastguard Worker }
126