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