/* * Copyright (C) 2015 Actor LLC. <https://actor.im> */ package im.actor.core.modules.conductor; import java.util.HashMap; import im.actor.core.entity.Contact; import im.actor.core.entity.Dialog; import im.actor.core.entity.Message; import im.actor.core.entity.Peer; import im.actor.core.entity.SearchEntity; import im.actor.core.modules.AbsModule; import im.actor.core.modules.ModuleContext; import im.actor.runtime.Storage; import im.actor.runtime.mvvm.PlatformDisplayList; public class DisplayLists extends AbsModule { private PlatformDisplayList<Dialog> dialogGlobalList; private PlatformDisplayList<Contact> contactsGlobalList; private HashMap<Peer, PlatformDisplayList<Message>> chatsGlobalLists = new HashMap<>(); private HashMap<Peer, PlatformDisplayList<Message>> chatsDocsGlobalLists = new HashMap<>(); public DisplayLists(ModuleContext context) { super(context); } public PlatformDisplayList<Contact> getContactsSharedList() { im.actor.runtime.Runtime.checkMainThread(); if (contactsGlobalList == null) { contactsGlobalList = buildContactList(true); } return contactsGlobalList; } public PlatformDisplayList<Dialog> getDialogsSharedList() { im.actor.runtime.Runtime.checkMainThread(); if (dialogGlobalList == null) { dialogGlobalList = buildDialogsList(true); } return dialogGlobalList; } public PlatformDisplayList<Message> getMessagesSharedList(Peer peer) { im.actor.runtime.Runtime.checkMainThread(); if (!chatsGlobalLists.containsKey(peer)) { chatsGlobalLists.put(peer, buildChatList(peer, true)); } return chatsGlobalLists.get(peer); } public PlatformDisplayList<Message> getDocsSharedList(Peer peer) { im.actor.runtime.Runtime.checkMainThread(); if (!chatsDocsGlobalLists.containsKey(peer)) { chatsDocsGlobalLists.put(peer, buildChatDocsList(peer, true)); } return chatsDocsGlobalLists.get(peer); } public PlatformDisplayList<Dialog> buildDialogsList(boolean isShared) { im.actor.runtime.Runtime.checkMainThread(); PlatformDisplayList<Dialog> res = Storage.createDisplayList(context().getMessagesModule().getDialogsEngine(), isShared, Dialog.ENTITY_NAME); res.initTop(); return res; } public PlatformDisplayList<Contact> buildContactList(boolean isShared) { im.actor.runtime.Runtime.checkMainThread(); PlatformDisplayList<Contact> res = Storage.createDisplayList(context().getContactsModule().getContacts(), isShared, Contact.ENTITY_NAME); res.initTop(); return res; } public PlatformDisplayList<Message> buildChatList(final Peer peer, boolean isShared) { im.actor.runtime.Runtime.checkMainThread(); PlatformDisplayList<Message> res = Storage.createDisplayList(context().getMessagesModule().getConversationEngine(peer), isShared, Message.ENTITY_NAME); long lastRead = context().getMessagesModule().getConversationVM(peer).getLastReadMessageDate(); if (lastRead != 0) { res.initCenter(lastRead); } else { res.initTop(); } return res; } public PlatformDisplayList<Message> buildChatDocsList(final Peer peer, boolean isShared) { im.actor.runtime.Runtime.checkMainThread(); PlatformDisplayList<Message> res = Storage.createDisplayList(context().getMessagesModule().getConversationDocsEngine(peer), isShared, Message.ENTITY_NAME); res.initTop(); return res; } public PlatformDisplayList<SearchEntity> buildSearchList(boolean isGlobalList) { im.actor.runtime.Runtime.checkMainThread(); PlatformDisplayList<SearchEntity> res = Storage.createDisplayList(context().getSearchModule().getSearchList(), isGlobalList, SearchEntity.ENTITY_NAME); res.initEmpty(); return res; } }