Search in sources :

Example 16 with AbstractContact

use of com.xabber.android.data.roster.AbstractContact in project xabber-android by redsolution.

the class ContactListPresenter method createContactListWithAccountsAndGroups.

private void createContactListWithAccountsAndGroups(List<IFlexible> items, AccountConfiguration rosterAccount, boolean showEmptyGroups, Comparator<AbstractContact> comparator) {
    AccountWithGroupsVO account = AccountWithGroupsVO.convert(rosterAccount, this);
    boolean firstGroupInAccount = true;
    for (GroupConfiguration rosterConfiguration : rosterAccount.getSortedGroupConfigurations()) {
        if (showEmptyGroups || !rosterConfiguration.isEmpty()) {
            GroupVO group = GroupVO.convert(rosterConfiguration, firstGroupInAccount, this);
            firstGroupInAccount = false;
            rosterConfiguration.sortAbstractContacts(comparator);
            for (AbstractContact contact : rosterConfiguration.getAbstractContacts()) {
                group.addSubItem(SettingsManager.contactsShowMessages() ? ExtContactVO.convert(contact, this) : ContactVO.convert(contact, this));
            }
            account.addSubItem(group);
        }
    }
    items.add(account);
}
Also used : AccountWithGroupsVO(com.xabber.android.presentation.ui.contactlist.viewobjects.AccountWithGroupsVO) GroupConfiguration(com.xabber.android.ui.adapter.contactlist.GroupConfiguration) AbstractContact(com.xabber.android.data.roster.AbstractContact) GroupVO(com.xabber.android.presentation.ui.contactlist.viewobjects.GroupVO)

Example 17 with AbstractContact

use of com.xabber.android.data.roster.AbstractContact in project xabber-android by redsolution.

the class ContactListPresenter method getTwoNextRecentChat.

public ArrayList<IFlexible> getTwoNextRecentChat() {
    Collection<AbstractChat> chats = MessageManager.getInstance().getChatsOfEnabledAccount();
    GroupConfiguration chatsGroup = getChatsGroup(chats, currentChatsState);
    ArrayList<AbstractContact> contacts = (ArrayList<AbstractContact>) chatsGroup.getAbstractContacts();
    ArrayList<IFlexible> items = new ArrayList<>();
    if (contacts != null && contacts.size() >= MAX_RECENT_ITEMS) {
        items.add(ChatVO.convert(contacts.get(MAX_RECENT_ITEMS - 2), this, null));
        if (getAllChatsSize() > MAX_RECENT_ITEMS)
            items.add(ChatWithButtonVO.convert(contacts.get(MAX_RECENT_ITEMS - 1), this));
        else
            items.add(ChatVO.convert(contacts.get(MAX_RECENT_ITEMS - 1), this));
    }
    return items;
}
Also used : AbstractChat(com.xabber.android.data.message.AbstractChat) ArrayList(java.util.ArrayList) IFlexible(eu.davidea.flexibleadapter.items.IFlexible) GroupConfiguration(com.xabber.android.ui.adapter.contactlist.GroupConfiguration) AbstractContact(com.xabber.android.data.roster.AbstractContact)

Example 18 with AbstractContact

use of com.xabber.android.data.roster.AbstractContact in project xabber-android by redsolution.

the class ContactListFragment method onItemContextMenu.

@Override
public void onItemContextMenu(int adapterPosition, ContextMenu menu) {
    IFlexible item = adapter.getItem(adapterPosition);
    if (item != null && item instanceof ContactVO) {
        AccountJid accountJid = ((ContactVO) item).getAccountJid();
        UserJid userJid = ((ContactVO) item).getUserJid();
        AbstractContact abstractContact = RosterManager.getInstance().getAbstractContact(accountJid, userJid);
        ContextMenuHelper.createContactContextMenu(getActivity(), presenter, abstractContact, menu);
        return;
    }
    if (item != null && item instanceof GroupVO) {
        AccountJid accountJid = ((GroupVO) item).getAccountJid();
        ContextMenuHelper.createGroupContextMenu(getActivity(), presenter, accountJid, ((GroupVO) item).getGroupName(), menu);
        return;
    }
}
Also used : AccountJid(com.xabber.android.data.entity.AccountJid) IFlexible(eu.davidea.flexibleadapter.items.IFlexible) ContactVO(com.xabber.android.presentation.ui.contactlist.viewobjects.ContactVO) UserJid(com.xabber.android.data.entity.UserJid) AbstractContact(com.xabber.android.data.roster.AbstractContact) GroupVO(com.xabber.android.presentation.ui.contactlist.viewobjects.GroupVO)

Example 19 with AbstractContact

use of com.xabber.android.data.roster.AbstractContact in project xabber-android by redsolution.

the class ContactListAdapter method onChange.

@Override
public void onChange() {
    synchronized (refreshLock) {
        refreshRequested = false;
        refreshInProgress = true;
        handler.removeCallbacks(this);
    }
    final Collection<RosterContact> allRosterContacts = RosterManager.getInstance().getContacts();
    Map<String, Collection<String>> blockedContacts = new TreeMap<>();
    for (String account : AccountManager.getInstance().getAccounts()) {
        blockedContacts.put(account, BlockingManager.getInstance().getBlockedContacts(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 = SettingsManager.contactsShowActiveChats();
    final boolean stayActiveChats = SettingsManager.contactsStayActiveChats();
    final boolean showAccounts = SettingsManager.contactsShowAccounts();
    final Comparator<AbstractContact> comparator = SettingsManager.contactsOrder();
    final CommonState commonState = AccountManager.getInstance().getCommonState();
    final String selectedAccount = AccountManager.getInstance().getSelectedAccount();
    /**
         * Groups.
         */
    final Map<String, GroupConfiguration> groups;
    /**
         * Contacts.
         */
    final List<AbstractContact> contacts;
    /**
         * List of active chats.
         */
    final GroupConfiguration activeChats;
    /**
         * Whether there is at least one contact.
         */
    boolean hasContacts = false;
    /**
         * Whether there is at least one visible contact.
         */
    boolean hasVisibleContacts = false;
    final Map<String, AccountConfiguration> accounts = new TreeMap<>();
    for (String account : AccountManager.getInstance().getAccounts()) {
        accounts.put(account, null);
    }
    /**
         * List of rooms and active chats grouped by users inside accounts.
         */
    final Map<String, Map<String, AbstractChat>> abstractChats = new TreeMap<>();
    for (AbstractChat abstractChat : MessageManager.getInstance().getChats()) {
        if ((abstractChat instanceof RoomChat || abstractChat.isActive()) && accounts.containsKey(abstractChat.getAccount())) {
            final String account = abstractChat.getAccount();
            Map<String, AbstractChat> users = abstractChats.get(account);
            if (users == null) {
                users = new TreeMap<>();
                abstractChats.put(account, users);
            }
            users.put(abstractChat.getUser(), abstractChat);
        }
    }
    if (filterString == null) {
        // Create arrays.
        if (showAccounts) {
            groups = null;
            contacts = null;
            for (Entry<String, 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<>();
            }
        }
        if (showActiveChats) {
            activeChats = new GroupConfiguration(GroupManager.NO_ACCOUNT, GroupManager.ACTIVE_CHATS, GroupManager.getInstance());
        } else {
            activeChats = null;
        }
        // Build structure.
        for (RosterContact rosterContact : rosterContacts) {
            if (!rosterContact.isEnabled()) {
                continue;
            }
            hasContacts = true;
            final boolean online = rosterContact.getStatusMode().isOnline();
            final String account = rosterContact.getAccount();
            final Map<String, AbstractChat> users = abstractChats.get(account);
            final AbstractChat abstractChat;
            if (users == null) {
                abstractChat = null;
            } else {
                abstractChat = users.remove(rosterContact.getUser());
            }
            if (showActiveChats && abstractChat != null && abstractChat.isActive()) {
                activeChats.setNotEmpty();
                hasVisibleContacts = true;
                if (activeChats.isExpanded()) {
                    activeChats.addAbstractContact(rosterContact);
                }
                activeChats.increment(online);
                if (!stayActiveChats || (!showAccounts && !showGroups)) {
                    continue;
                }
            }
            if (selectedAccount != null && !selectedAccount.equals(account)) {
                continue;
            }
            if (addContact(rosterContact, online, accounts, groups, contacts, showAccounts, showGroups, showOffline)) {
                hasVisibleContacts = true;
            }
        }
        for (Map<String, 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 (showActiveChats && abstractChat.isActive()) {
                    activeChats.setNotEmpty();
                    hasVisibleContacts = true;
                    if (activeChats.isExpanded()) {
                        activeChats.addAbstractContact(abstractContact);
                    }
                    activeChats.increment(false);
                    if (!stayActiveChats || (!showAccounts && !showGroups)) {
                        continue;
                    }
                }
                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;
                addContact(abstractContact, group, online, accounts, groups, contacts, showAccounts, showGroups);
            }
        }
        hasActiveChats = activeChats != null && activeChats.getTotal() > 0;
        // Remove empty groups, sort and apply structure.
        baseEntities.clear();
        if (hasVisibleContacts) {
            if (showActiveChats) {
                if (!activeChats.isEmpty()) {
                    if (showAccounts || showGroups) {
                        baseEntities.add(activeChats);
                    }
                    activeChats.sortAbstractContacts(ComparatorByChat.COMPARATOR_BY_CHAT);
                    baseEntities.addAll(activeChats.getAbstractContacts());
                }
            }
            if (showAccounts) {
                boolean isFirst = baseEntities.isEmpty();
                for (AccountConfiguration rosterAccount : accounts.values()) {
                    if (isFirst) {
                        isFirst = false;
                    } else {
                        baseEntities.add(new AccountTopSeparator(null, null));
                    }
                    baseEntities.add(rosterAccount);
                    if (showGroups) {
                        if (rosterAccount.isExpanded()) {
                            for (GroupConfiguration rosterConfiguration : rosterAccount.getSortedGroupConfigurations()) {
                                if (showEmptyGroups || !rosterConfiguration.isEmpty()) {
                                    baseEntities.add(rosterConfiguration);
                                    rosterConfiguration.sortAbstractContacts(comparator);
                                    baseEntities.addAll(rosterConfiguration.getAbstractContacts());
                                }
                            }
                        }
                    } else {
                        rosterAccount.sortAbstractContacts(comparator);
                        baseEntities.addAll(rosterAccount.getAbstractContacts());
                    }
                    if (rosterAccount.getTotal() > 0 && !rosterAccount.isExpanded()) {
                        baseEntities.add(new AccountBottomSeparator(rosterAccount.getAccount(), null));
                    }
                }
            } else {
                if (showGroups) {
                    for (GroupConfiguration rosterConfiguration : groups.values()) {
                        if (showEmptyGroups || !rosterConfiguration.isEmpty()) {
                            baseEntities.add(rosterConfiguration);
                            rosterConfiguration.sortAbstractContacts(comparator);
                            baseEntities.addAll(rosterConfiguration.getAbstractContacts());
                        }
                    }
                } else {
                    Collections.sort(contacts, comparator);
                    baseEntities.addAll(contacts);
                }
            }
        }
    } else {
        // Search
        final ArrayList<AbstractContact> baseEntities = getSearchResults(rosterContacts, comparator, abstractChats);
        this.baseEntities.clear();
        this.baseEntities.addAll(baseEntities);
        hasVisibleContacts = baseEntities.size() > 0;
    }
    super.onChange();
    listener.onContactListChanged(commonState, hasContacts, hasVisibleContacts, filterString != null);
    synchronized (refreshLock) {
        nextRefresh = new Date(new Date().getTime() + REFRESH_INTERVAL);
        refreshInProgress = false;
        // Just to be sure.
        handler.removeCallbacks(this);
        if (refreshRequested) {
            handler.postDelayed(this, REFRESH_INTERVAL);
        }
    }
}
Also used : CommonState(com.xabber.android.data.account.CommonState) RosterContact(com.xabber.android.data.roster.RosterContact) ArrayList(java.util.ArrayList) RoomChat(com.xabber.android.data.extension.muc.RoomChat) ChatContact(com.xabber.android.data.message.ChatContact) AbstractChat(com.xabber.android.data.message.AbstractChat) TreeMap(java.util.TreeMap) AbstractContact(com.xabber.android.data.roster.AbstractContact) Date(java.util.Date) RoomContact(com.xabber.android.data.extension.muc.RoomContact) Collection(java.util.Collection) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 20 with AbstractContact

use of com.xabber.android.data.roster.AbstractContact in project xabber-android by redsolution.

the class ContactListAdapter method getSearchResults.

private ArrayList<AbstractContact> getSearchResults(Collection<RosterContact> rosterContacts, Comparator<AbstractContact> comparator, Map<String, Map<String, AbstractChat>> abstractChats) {
    final ArrayList<AbstractContact> baseEntities = new ArrayList<>();
    // Build structure.
    for (RosterContact rosterContact : rosterContacts) {
        if (!rosterContact.isEnabled()) {
            continue;
        }
        final String account = rosterContact.getAccount();
        final Map<String, AbstractChat> users = abstractChats.get(account);
        if (users != null) {
            users.remove(rosterContact.getUser());
        }
        if (rosterContact.getName().toLowerCase(locale).contains(filterString)) {
            baseEntities.add(rosterContact);
        }
    }
    for (Map<String, 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) ArrayList(java.util.ArrayList) AbstractContact(com.xabber.android.data.roster.AbstractContact) RoomChat(com.xabber.android.data.extension.muc.RoomChat) ChatContact(com.xabber.android.data.message.ChatContact)

Aggregations

AbstractContact (com.xabber.android.data.roster.AbstractContact)22 AbstractChat (com.xabber.android.data.message.AbstractChat)6 UserJid (com.xabber.android.data.entity.UserJid)5 RoomContact (com.xabber.android.data.extension.muc.RoomContact)5 ArrayList (java.util.ArrayList)5 TextView (android.widget.TextView)4 RoomChat (com.xabber.android.data.extension.muc.RoomChat)4 ChatContact (com.xabber.android.data.message.ChatContact)4 RosterContact (com.xabber.android.data.roster.RosterContact)4 GroupConfiguration (com.xabber.android.ui.adapter.contactlist.GroupConfiguration)4 AccountJid (com.xabber.android.data.entity.AccountJid)3 GroupVO (com.xabber.android.presentation.ui.contactlist.viewobjects.GroupVO)3 IFlexible (eu.davidea.flexibleadapter.items.IFlexible)3 ImageView (android.widget.ImageView)2 CommonState (com.xabber.android.data.account.CommonState)2 Collection (java.util.Collection)2 Map (java.util.Map)2 TreeMap (java.util.TreeMap)2 AdapterContextMenuInfo (android.widget.AdapterView.AdapterContextMenuInfo)1 AccountItem (com.xabber.android.data.account.AccountItem)1