package org.gsm.rcsApp.RCS; import java.util.ArrayList; import java.util.HashMap; public class ContactStateManager { HashMap<String, ContactState> contactStateCache=null; // HashMap<String, ChatMessage> consolidatedMessageCache=null; private static HashMap<String, ChatMessage> consolidatedMessageSentCache=new HashMap<String, ChatMessage>(); private static HashMap<String, ChatMessage> messageIdResolutionCache=new HashMap<String, ChatMessage>(); private static HashMap<String, Boolean> haveSentMessageTo=new HashMap<String, Boolean>(); public ContactStateManager() { contactStateCache=new HashMap<String, ContactState>(); } public void clearCache() { if (contactStateCache!=null) contactStateCache.clear(); } public static void reset() { consolidatedMessageSentCache.clear(); messageIdResolutionCache.clear(); haveSentMessageTo.clear(); } public ContactState getOrCreateContactState(String contactUri) { ContactState entry=null; if (!contactStateCache.containsKey(contactUri)) { entry=new ContactState(contactUri); contactStateCache.put(contactUri, entry); } else { entry=contactStateCache.get(contactUri); } return entry; } public void setChatVisible(String contactUri, boolean visibility) { ContactState entry=contactStateCache.get(contactUri); if (entry!=null) { entry.setChatIsVisible(visibility); } } public ArrayList<ChatMessage> getMessageBuffer(String contactUri) { getOrCreateContactState(contactUri); ContactState entry=contactStateCache.get(contactUri); return entry.getMessageBuffer(); } // public HashMap<String,ChatMessage> getSentMessages(String contactUri) { // getOrCreateContactState(contactUri); // ContactState entry=contactStateCache.get(contactUri); // return entry.getSentMessages(); // } // // public HashMap<String,ChatMessage> getMessageMap(String contactUri) { // getOrCreateContactState(contactUri); // ContactState entry=contactStateCache.get(contactUri); // return entry.getMessageMap(); // } public void storeMessage(String contactUri, ChatMessage message, String toUser) { getOrCreateContactState(contactUri); ContactState entry=contactStateCache.get(contactUri); entry.storeMessage(message); } public void storeMessage(String contactUri, ChatMessage message, boolean newMessage, String toUser) { getOrCreateContactState(contactUri); ContactState entry=contactStateCache.get(contactUri); entry.storeMessage(message); entry.setNewMessage(newMessage); } public static ChatMessage getMessageForId(String messageId) { return messageId!=null?consolidatedMessageSentCache.get(messageId):null; } public static void updateStatusFor(String messageId, String string) { ChatMessage message=messageId!=null?consolidatedMessageSentCache.get(messageId):null; if (message!=null) { message.setStatus(string); } } public static void registerOutgoingMessage(ChatMessage message) { System.out.println("Registering "+message.getMessageInternalId()+" = "+message); messageIdResolutionCache.put(message.getMessageInternalId(), message); haveSentMessageTo.put(message.getContactUri(), Boolean.TRUE); } public static boolean haveSentMessageTo(String contactUri) { boolean haveSent=false; if (haveSentMessageTo.containsKey(contactUri)) haveSent=haveSentMessageTo.get(contactUri).booleanValue(); return haveSent; } public static void setMessageIdForSentMessage(String messageInternalId, String messageId, String resourceURL) { System.out.println("Setting messageId to "+messageId+" for "+messageInternalId); if (messageInternalId!=null) { ChatMessage message=messageIdResolutionCache.get(messageInternalId); System.out.println("Retrieved "+messageInternalId+" = "+message); if (message!=null) { message.setMessageId(messageId); message.setResourceURL(resourceURL); messageIdResolutionCache.remove(messageId); consolidatedMessageSentCache.put(messageId, message); } } } public void updateComposingIndicator(String contactUri, String state) { getOrCreateContactState(contactUri); ContactState entry=contactStateCache.get(contactUri); if (entry!=null) entry.setComposingIndicator(state); } }