Search in sources :

Example 1 with RoomChat

use of com.xabber.android.data.extension.muc.RoomChat in project xabber-android by redsolution.

the class RosterManager method getBestContact.

/**
     * Gets {@link RoomContact}, {@link RosterContact}, {@link ChatContact} or
     * creates new {@link ChatContact}.
     *
     * @param account
     * @param user
     * @return
     */
public AbstractContact getBestContact(String account, String user) {
    AbstractChat abstractChat = MessageManager.getInstance().getChat(account, user);
    if (abstractChat != null && abstractChat instanceof RoomChat) {
        return new RoomContact((RoomChat) abstractChat);
    }
    RosterContact rosterContact = getRosterContact(account, user);
    if (rosterContact != null) {
        return rosterContact;
    }
    if (abstractChat != null) {
        return new ChatContact(abstractChat);
    }
    return new ChatContact(account, user);
}
Also used : RoomContact(com.xabber.android.data.extension.muc.RoomContact) AbstractChat(com.xabber.android.data.message.AbstractChat) RoomChat(com.xabber.android.data.extension.muc.RoomChat) ChatContact(com.xabber.android.data.message.ChatContact)

Example 2 with RoomChat

use of com.xabber.android.data.extension.muc.RoomChat in project xabber-android by redsolution.

the class RosterManager method getBestContact.

/**
 * Gets {@link RoomContact}, {@link RosterContact}, {@link ChatContact} or
 * creates new {@link ChatContact}.
 *
 * @param account
 * @param user
 * @return
 */
public AbstractContact getBestContact(AccountJid account, UserJid user) {
    AbstractChat abstractChat = MessageManager.getInstance().getChat(account, user);
    if (abstractChat != null && abstractChat instanceof RoomChat) {
        return new RoomContact((RoomChat) abstractChat);
    }
    RosterContact rosterContact = getRosterContact(account, user);
    if (rosterContact != null) {
        return rosterContact;
    }
    if (abstractChat != null) {
        return new ChatContact(abstractChat);
    }
    return new ChatContact(account, user);
}
Also used : RoomContact(com.xabber.android.data.extension.muc.RoomContact) AbstractChat(com.xabber.android.data.message.AbstractChat) RoomChat(com.xabber.android.data.extension.muc.RoomChat) ChatContact(com.xabber.android.data.message.ChatContact)

Example 3 with RoomChat

use of com.xabber.android.data.extension.muc.RoomChat in project xabber-android by redsolution.

the class ContactListPresenter method buildStructure.

/**
 * Do not call directly. Only from Structure Builder
 */
void buildStructure() {
    // listener.hidePlaceholder();
    List<IFlexible> items = new ArrayList<>();
    final Collection<RosterContact> allRosterContacts = RosterManager.getInstance().getAllContacts();
    Map<AccountJid, Collection<UserJid>> blockedContacts = new TreeMap<>();
    for (AccountJid account : AccountManager.getInstance().getEnabledAccounts()) {
        blockedContacts.put(account, BlockingManager.getInstance().getCachedBlockedContacts(account));
    }
    final Collection<RosterContact> rosterContacts = new ArrayList<>();
    for (RosterContact contact : allRosterContacts) {
        if (blockedContacts.containsKey(contact.getAccount())) {
            if (!blockedContacts.get(contact.getAccount()).contains(contact.getUser())) {
                rosterContacts.add(contact);
            }
        }
    }
    final boolean showOffline = SettingsManager.contactsShowOffline();
    final boolean showGroups = SettingsManager.contactsShowGroups();
    final boolean showEmptyGroups = SettingsManager.contactsShowEmptyGroups();
    final boolean showActiveChats = false;
    final boolean stayActiveChats = true;
    final boolean showAccounts = SettingsManager.contactsShowAccounts();
    final Comparator<AbstractContact> comparator = SettingsManager.contactsOrder();
    final CommonState commonState = AccountManager.getInstance().getCommonState();
    final AccountJid selectedAccount = AccountManager.getInstance().getSelectedAccount();
    /**
     * Groups.
     */
    final Map<String, GroupConfiguration> groups;
    /**
     * Contacts.
     */
    final List<AbstractContact> contacts;
    /**
     * Chat list on top of contact list.
     */
    final GroupConfiguration chatsGroup;
    /**
     * Whether there is at least one contact.
     */
    boolean hasContacts = false;
    /**
     * Whether there is at least one visible contact.
     */
    boolean hasVisibleContacts = false;
    final Map<AccountJid, AccountConfiguration> accounts = new TreeMap<>();
    for (AccountJid account : AccountManager.getInstance().getEnabledAccounts()) {
        accounts.put(account, null);
    }
    /**
     * List of rooms and active chats grouped by users inside accounts.
     */
    final Map<AccountJid, Map<UserJid, AbstractChat>> abstractChats = new TreeMap<>();
    for (AbstractChat abstractChat : MessageManager.getInstance().getChats()) {
        if ((abstractChat instanceof RoomChat || abstractChat.isActive()) && accounts.containsKey(abstractChat.getAccount())) {
            final AccountJid account = abstractChat.getAccount();
            Map<UserJid, AbstractChat> users = abstractChats.get(account);
            if (users == null) {
                users = new TreeMap<>();
                abstractChats.put(account, users);
            }
            users.put(abstractChat.getUser(), abstractChat);
        }
    }
    if (filterString == null || filterString.isEmpty()) {
        // Create arrays.
        if (showAccounts) {
            groups = null;
            contacts = null;
            for (Map.Entry<AccountJid, AccountConfiguration> entry : accounts.entrySet()) {
                entry.setValue(new AccountConfiguration(entry.getKey(), GroupManager.IS_ACCOUNT, GroupManager.getInstance()));
            }
        } else {
            if (showGroups) {
                groups = new TreeMap<>();
                contacts = null;
            } else {
                groups = null;
                contacts = new ArrayList<>();
            }
        }
        // chats on top
        Collection<AbstractChat> chats = MessageManager.getInstance().getChatsOfEnabledAccount();
        chatsGroup = getChatsGroup(chats, currentChatsState);
        // Build structure.
        for (RosterContact rosterContact : rosterContacts) {
            if (!rosterContact.isEnabled()) {
                continue;
            }
            hasContacts = true;
            final boolean online = rosterContact.getStatusMode().isOnline();
            final AccountJid account = rosterContact.getAccount();
            final Map<UserJid, AbstractChat> users = abstractChats.get(account);
            final AbstractChat abstractChat;
            if (users == null) {
                abstractChat = null;
            } else {
                abstractChat = users.remove(rosterContact.getUser());
            }
            if (selectedAccount != null && !selectedAccount.equals(account)) {
                continue;
            }
            if (ContactListGroupUtils.addContact(rosterContact, online, accounts, groups, contacts, showAccounts, showGroups, showOffline)) {
                hasVisibleContacts = true;
            }
        }
        for (Map<UserJid, AbstractChat> users : abstractChats.values()) for (AbstractChat abstractChat : users.values()) {
            final AbstractContact abstractContact;
            if (abstractChat instanceof RoomChat) {
                abstractContact = new RoomContact((RoomChat) abstractChat);
            } else {
                abstractContact = new ChatContact(abstractChat);
            }
            if (selectedAccount != null && !selectedAccount.equals(abstractChat.getAccount())) {
                continue;
            }
            final String group;
            final boolean online;
            if (abstractChat instanceof RoomChat) {
                group = GroupManager.IS_ROOM;
                online = abstractContact.getStatusMode().isOnline();
            } else if (MUCManager.getInstance().isMucPrivateChat(abstractChat.getAccount(), abstractChat.getUser())) {
                group = GroupManager.IS_ROOM;
                online = abstractContact.getStatusMode().isOnline();
            } else {
                group = GroupManager.NO_GROUP;
                online = false;
            }
            hasVisibleContacts = true;
            ContactListGroupUtils.addContact(abstractContact, group, online, accounts, groups, contacts, showAccounts, showGroups);
        }
        // BUILD STRUCTURE //
        // Remove empty groups, sort and apply structure.
        items.clear();
        items.add(new ToolbarVO(context, this));
        if (hasVisibleContacts) {
            if (currentChatsState == ChatListState.recent) {
                // add recent chats
                int i = 0;
                for (AbstractContact contact : chatsGroup.getAbstractContacts()) {
                    if (i == MAX_RECENT_ITEMS - 1) {
                        if (getAllChatsSize() > MAX_RECENT_ITEMS)
                            items.add(ChatWithButtonVO.convert(contact, this));
                        else
                            items.add(ChatVO.convert(contact, this, null));
                    } else
                        items.add(ChatVO.convert(contact, this, null));
                    i++;
                }
                if (showAccounts) {
                    // boolean isFirst = items.isEmpty();
                    for (AccountConfiguration rosterAccount : accounts.values()) {
                        if (rosterAccount.getTotal() != 0) {
                            if (showGroups) {
                                createContactListWithAccountsAndGroups(items, rosterAccount, showEmptyGroups, comparator);
                            } else {
                                createContactListWithAccounts(items, rosterAccount, comparator);
                            }
                        } else {
                            AccountWithButtonsVO account = AccountWithButtonsVO.convert(rosterAccount, this);
                            ButtonVO button = ButtonVO.convert(rosterAccount, context.getString(R.string.contact_add), ButtonVO.ACTION_ADD_CONTACT);
                            account.addSubItem(button);
                            items.add(account);
                        }
                    }
                } else {
                    if (showGroups) {
                        createContactListWithGroups(items, showEmptyGroups, groups, comparator);
                    } else {
                        createContactList(items, contacts, comparator);
                    }
                }
            } else
                items.addAll(ChatVO.convert(chatsGroup.getAbstractContacts(), this, null));
        }
    } else {
        // Search
        final ArrayList<AbstractContact> baseEntities = getSearchResults(rosterContacts, comparator, abstractChats);
        items.clear();
        items.add(new CategoryVO(context.getString(R.string.category_title_contacts)));
        items.addAll(SettingsManager.contactsShowMessages() ? ExtContactVO.convert(baseEntities, this) : ContactVO.convert(baseEntities, this));
        hasVisibleContacts = baseEntities.size() > 0;
    }
    if (view != null)
        view.onContactListChanged(commonState, hasContacts, hasVisibleContacts, filterString != null);
    if (view != null) {
        if (items.size() == 1 && (filterString == null || filterString.isEmpty())) {
            if (currentChatsState == ChatListState.unread)
                view.showPlaceholder(context.getString(R.string.placeholder_no_unread));
            if (currentChatsState == ChatListState.archived)
                view.showPlaceholder(context.getString(R.string.placeholder_no_archived));
        } else
            view.hidePlaceholder();
        view.updateItems(items);
    }
}
Also used : CommonState(com.xabber.android.data.account.CommonState) RosterContact(com.xabber.android.data.roster.RosterContact) ChatWithButtonVO(com.xabber.android.presentation.ui.contactlist.viewobjects.ChatWithButtonVO) ButtonVO(com.xabber.android.presentation.ui.contactlist.viewobjects.ButtonVO) ArrayList(java.util.ArrayList) RoomChat(com.xabber.android.data.extension.muc.RoomChat) CategoryVO(com.xabber.android.presentation.ui.contactlist.viewobjects.CategoryVO) AccountJid(com.xabber.android.data.entity.AccountJid) ToolbarVO(com.xabber.android.presentation.ui.contactlist.viewobjects.ToolbarVO) ChatContact(com.xabber.android.data.message.ChatContact) AbstractChat(com.xabber.android.data.message.AbstractChat) IFlexible(eu.davidea.flexibleadapter.items.IFlexible) UserJid(com.xabber.android.data.entity.UserJid) GroupConfiguration(com.xabber.android.ui.adapter.contactlist.GroupConfiguration) TreeMap(java.util.TreeMap) AbstractContact(com.xabber.android.data.roster.AbstractContact) RoomContact(com.xabber.android.data.extension.muc.RoomContact) Collection(java.util.Collection) AccountConfiguration(com.xabber.android.ui.adapter.contactlist.AccountConfiguration) AccountWithButtonsVO(com.xabber.android.presentation.ui.contactlist.viewobjects.AccountWithButtonsVO) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 4 with RoomChat

use of com.xabber.android.data.extension.muc.RoomChat in project xabber-android by redsolution.

the class ContactListPresenter method getSearchResults.

private ArrayList<AbstractContact> getSearchResults(Collection<RosterContact> rosterContacts, Comparator<AbstractContact> comparator, Map<AccountJid, Map<UserJid, AbstractChat>> abstractChats) {
    final ArrayList<AbstractContact> baseEntities = new ArrayList<>();
    // Build structure.
    for (RosterContact rosterContact : rosterContacts) {
        if (!rosterContact.isEnabled()) {
            continue;
        }
        final AccountJid account = rosterContact.getAccount();
        final Map<UserJid, AbstractChat> users = abstractChats.get(account);
        if (users != null) {
            users.remove(rosterContact.getUser());
        }
        if (rosterContact.getName().toLowerCase(locale).contains(filterString)) {
            baseEntities.add(rosterContact);
        }
    }
    for (Map<UserJid, AbstractChat> users : abstractChats.values()) {
        for (AbstractChat abstractChat : users.values()) {
            final AbstractContact abstractContact;
            if (abstractChat instanceof RoomChat) {
                abstractContact = new RoomContact((RoomChat) abstractChat);
            } else {
                abstractContact = new ChatContact(abstractChat);
            }
            if (abstractContact.getName().toLowerCase(locale).contains(filterString)) {
                baseEntities.add(abstractContact);
            }
        }
    }
    Collections.sort(baseEntities, comparator);
    return baseEntities;
}
Also used : RoomContact(com.xabber.android.data.extension.muc.RoomContact) RosterContact(com.xabber.android.data.roster.RosterContact) AbstractChat(com.xabber.android.data.message.AbstractChat) AccountJid(com.xabber.android.data.entity.AccountJid) ArrayList(java.util.ArrayList) UserJid(com.xabber.android.data.entity.UserJid) AbstractContact(com.xabber.android.data.roster.AbstractContact) RoomChat(com.xabber.android.data.extension.muc.RoomChat) ChatContact(com.xabber.android.data.message.ChatContact)

Example 5 with RoomChat

use of com.xabber.android.data.extension.muc.RoomChat in project xabber-android by redsolution.

the class ChatActivity method setUpMUCInfoMenu.

private void setUpMUCInfoMenu(Menu menu, AbstractChat abstractChat) {
    RoomState chatState = ((RoomChat) abstractChat).getState();
    if (chatState == RoomState.unavailable)
        menu.findItem(R.id.action_join_conference).setVisible(true);
    else {
        menu.findItem(R.id.action_invite_to_chat).setVisible(true);
        if (chatState != RoomState.error) {
            menu.findItem(R.id.action_leave_conference).setVisible(true);
        }
    }
    menu.findItem(R.id.action_remove_contact).setVisible(false);
    menu.findItem(R.id.action_delete_conference).setVisible(true);
    menu.findItem(R.id.action_send_contact).setVisible(false);
    menu.findItem(R.id.action_edit_alias).setVisible(false);
    menu.findItem(R.id.action_edit_groups).setVisible(false);
    menu.findItem(R.id.action_block_contact).setVisible(false);
}
Also used : RoomChat(com.xabber.android.data.extension.muc.RoomChat) RoomState(com.xabber.android.data.extension.muc.RoomState)

Aggregations

RoomChat (com.xabber.android.data.extension.muc.RoomChat)16 AbstractChat (com.xabber.android.data.message.AbstractChat)10 RoomContact (com.xabber.android.data.extension.muc.RoomContact)6 ChatContact (com.xabber.android.data.message.ChatContact)6 ArrayList (java.util.ArrayList)5 RoomState (com.xabber.android.data.extension.muc.RoomState)4 AbstractContact (com.xabber.android.data.roster.AbstractContact)4 RosterContact (com.xabber.android.data.roster.RosterContact)4 AccountJid (com.xabber.android.data.entity.AccountJid)3 UserJid (com.xabber.android.data.entity.UserJid)3 NetworkException (com.xabber.android.data.NetworkException)2 CommonState (com.xabber.android.data.account.CommonState)2 RegularChat (com.xabber.android.data.message.RegularChat)2 BufferedWriter (java.io.BufferedWriter)2 File (java.io.File)2 FileWriter (java.io.FileWriter)2 IOException (java.io.IOException)2 Collection (java.util.Collection)2 Date (java.util.Date)2 Map (java.util.Map)2