⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contactlistmanageradapter.java

📁 Android平台上即时通讯聊天工具源代码。 支持手机聊天。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            values.put(Im.Contacts.SUBSCRIPTION_TYPE, subscriptionType);            values.put(Im.Contacts.SUBSCRIPTION_STATUS, subscriptionStatus);            uri = mResolver.insert(mContactUrl, values);        }        cursor.close();        return uri;    }    void updateContact(String username, ContentValues values) {        String selection = Im.Contacts.USERNAME + "=?";        String[] selectionArgs = { username };        mResolver.update(mContactUrl, values, selection, selectionArgs);    }    void updatePresenceContent(Contact[] contacts) {        ArrayList<String> usernames = new ArrayList<String>();        ArrayList<String> statusArray = new ArrayList<String>();        ArrayList<String> customStatusArray = new ArrayList<String>();        ArrayList<String> clientTypeArray = new ArrayList<String>();        for(Contact c : contacts) {            String username = c.getAddress().getFullName();            Presence p = c.getPresence();            int status = getContactStatus(p);            String customStatus = p.getStatusText();            int clientType = translateClientType(p);            usernames.add(username);            statusArray.add(String.valueOf(status));            customStatusArray.add(customStatus);            clientTypeArray.add(String.valueOf(clientType));        }        ContentValues values = new ContentValues();        values.put(Im.Contacts.ACCOUNT, mAccountId);        values.putStringArrayList(Im.Contacts.USERNAME, usernames);        values.putStringArrayList(Im.Presence.PRESENCE_STATUS, statusArray);        values.putStringArrayList(Im.Presence.PRESENCE_CUSTOM_STATUS, customStatusArray);        values.putStringArrayList(Im.Presence.CONTENT_TYPE, clientTypeArray);        mResolver.update(Im.Presence.BULK_CONTENT_URI, values, null, null);    }    void updateAvatarsContent(Contact[] contacts) {        ArrayList<ContentValues> avatars = new ArrayList<ContentValues>();        ArrayList<String> usernames = new ArrayList<String>();        for (Contact contact : contacts) {            byte[] avatarData = contact.getPresence().getAvatarData();            if (avatarData == null) {                continue;            }            String username = contact.getAddress().getFullName();            ContentValues values = new ContentValues(2);            values.put(Im.Avatars.CONTACT, username);            values.put(Im.Avatars.DATA, avatarData);            avatars.add(values);            usernames.add(username);        }        if (avatars.size() > 0) {            // ImProvider will replace the avatar content if it already exist.            mResolver.bulkInsert(mAvatarUrl, avatars.toArray(                    new ContentValues[avatars.size()]));            // notify avatar changed            Intent i = new Intent(ImServiceConstants.ACTION_AVATAR_CHANGED);            i.putExtra(ImServiceConstants.EXTRA_INTENT_FROM_ADDRESS, usernames);            i.putExtra(ImServiceConstants.EXTRA_INTENT_PROVIDER_ID, mProviderId);            i.putExtra(ImServiceConstants.EXTRA_INTENT_ACCOUNT_ID, mAccountId);            mContext.sendBroadcast(i);        }    }    ContactListAdapter removeContactListFromDataBase(String name) {        ContactListAdapter listAdapter = getContactListAdapter(name);        if (listAdapter == null) {            return null;        }        long id = listAdapter.getDataBaseId();        // delete contacts of this list first        mResolver.delete(mContactUrl,            Im.Contacts.CONTACTLIST + "=?", new String[]{Long.toString(id)});        mResolver.delete(ContentUris.withAppendedId(Im.ContactList.CONTENT_URI, id), null, null);        synchronized (mContactLists) {            return mContactLists.remove(listAdapter.getAddress());        }    }    void addContactListContent(ContactList list) {        String selection = Im.ContactList.NAME + "=? AND "                + Im.ContactList.PROVIDER + "=? AND "                + Im.ContactList.ACCOUNT + "=?";        String[] selectionArgs = { list.getName(),                Long.toString(mProviderId),                Long.toString(mAccountId) };        Cursor cursor = mResolver.query(Im.ContactList.CONTENT_URI,                                        CONTACT_LIST_ID_PROJECTION,                                        selection,                                        selectionArgs,                                        null); // no sort order        long listId = 0;        Uri uri = null;        try {            if (cursor.moveToFirst()) {                listId = cursor.getLong(0);                uri = ContentUris.withAppendedId(Im.ContactList.CONTENT_URI, listId);                //Log.d(TAG,"Found and removing ContactList with name "+list.getName());            }        } finally {            cursor.close();        }        if (uri != null) {            // remove existing ContactList and Contacts of that list for replacement by the newly            // downloaded list            mResolver.delete(mContactUrl, Im.Contacts.CONTACTLIST + "=?",                    new String[]{Long.toString(listId)});            mResolver.delete(uri, selection, selectionArgs);        }        ContentValues contactListValues = new ContentValues(3);        contactListValues.put(Im.ContactList.NAME, list.getName());        contactListValues.put(Im.ContactList.PROVIDER, mProviderId);        contactListValues.put(Im.ContactList.ACCOUNT, mAccountId);        //Log.d(TAG, "Adding ContactList name="+list.getName());        mValidatedContactLists.add(list.getName());        uri = mResolver.insert(Im.ContactList.CONTENT_URI, contactListValues);        listId = ContentUris.parseId(uri);        synchronized (mContactLists) {            mContactLists.put(list.getAddress(),                    new ContactListAdapter(list, listId));        }        Collection<Contact> contacts = list.getContacts();        if (contacts == null || contacts.size() == 0) {            return;        }        Iterator<Contact> iter = contacts.iterator();        while(iter.hasNext()) {            Contact c = iter.next();            String address = c.getAddress().getFullName();            if(isTemporary(address)) {                moveTemporaryContactToList(address, listId);                iter.remove();            }            mValidatedContacts.add(address);        }        ArrayList<String> usernames = new ArrayList<String>();        ArrayList<String> nicknames = new ArrayList<String>();        ArrayList<String> contactTypeArray = new ArrayList<String>();        for (Contact c : contacts) {            String username = c.getAddress().getFullName();            String nickname = c.getName();            int type = Im.Contacts.TYPE_NORMAL;            if(isTemporary(username)) {                type = Im.Contacts.TYPE_TEMPORARY;            }            if (isBlocked(username)) {                type = Im.Contacts.TYPE_BLOCKED;            }            usernames.add(username);            nicknames.add(nickname);            contactTypeArray.add(String.valueOf(type));        }        ContentValues values = new ContentValues(6);        values.put(Im.Contacts.PROVIDER, mProviderId);        values.put(Im.Contacts.ACCOUNT, mAccountId);        values.put(Im.Contacts.CONTACTLIST, listId);        values.putStringArrayList(Im.Contacts.USERNAME, usernames);        values.putStringArrayList(Im.Contacts.NICKNAME, nicknames);        values.putStringArrayList(Im.Contacts.TYPE, contactTypeArray);        mResolver.insert(Im.Contacts.BULK_CONTENT_URI, values);    }    void updateListNameInDataBase(ContactList list) {        ContactListAdapter listAdapter = getContactListAdapter(list.getAddress());        Uri uri = ContentUris.withAppendedId(Im.ContactList.CONTENT_URI, listAdapter.getDataBaseId());        ContentValues values = new ContentValues(1);        values.put(Im.ContactList.NAME, list.getName());        mResolver.update(uri, values, null, null);    }    void deleteContactFromDataBase(Contact contact, ContactList list) {        String selection = Im.Contacts.USERNAME                + "=? AND " + Im.Contacts.CONTACTLIST + "=?";        long listId = getContactListAdapter(list.getAddress()).getDataBaseId();        String username = contact.getAddress().getFullName();        String[] selectionArgs = {username, Long.toString(listId)};        mResolver.delete(mContactUrl, selection, selectionArgs);        // clear the history message if the contact doesn't exist in any list        // anymore.        if(mAdaptee.getContact(contact.getAddress()) == null) {            clearHistoryMessages(username);        }    }    Uri insertContactContent(Contact contact, long listId) {        ContentValues values = getContactContentValues(contact, listId);        Uri uri = mResolver.insert(mContactUrl, values);        ContentValues presenceValues = getPresenceValues(ContentUris.parseId(uri),                contact.getPresence());        mResolver.insert(Im.Presence.CONTENT_URI, presenceValues);        return uri;    }    private ContentValues getContactContentValues(Contact contact, long listId) {        final String username = contact.getAddress().getFullName();        final String nickname = contact.getName();        int type = Im.Contacts.TYPE_NORMAL;        if(isTemporary(username)) {            type = Im.Contacts.TYPE_TEMPORARY;        }        if (isBlocked(username)) {            type = Im.Contacts.TYPE_BLOCKED;        }        ContentValues values = new ContentValues(4);        values.put(Im.Contacts.USERNAME, username);        values.put(Im.Contacts.NICKNAME, nickname);        values.put(Im.Contacts.CONTACTLIST, listId);        values.put(Im.Contacts.TYPE, type);        return values;    }    void clearHistoryMessages(String contact) {        Uri uri = Im.Messages.getContentUriByContact(mProviderId,            mAccountId, contact);        mResolver.delete(uri, null, null);    }    private ContentValues getPresenceValues(long contactId, Presence p) {        ContentValues values = new ContentValues(3);        values.put(Im.Presence.CONTACT_ID, contactId);        values.put(Im.Contacts.PRESENCE_STATUS, getContactStatus(p));        values.put(Im.Contacts.PRESENCE_CUSTOM_STATUS, p.getStatusText());        values.put(Im.Presence.CLIENT_TYPE, translateClientType(p));        return values;    }    private int translateClientType(Presence presence) {        int clientType = presence.getClientType();        switch (clientType) {            case Presence.CLIENT_TYPE_MOBILE:                return Im.Presence.CLIENT_TYPE_MOBILE;            default:                return Im.Presence.CLIENT_TYPE_DEFAULT;        }    }    private int getContactStatus(Presence presence) {        switch (presence.getStatus()) {        case Presence.AVAILABLE:            return Im.Presence.AVAILABLE;        case Presence.IDLE:            return Im.Presence.IDLE;        case Presence.AWAY:            return Im.Presence.AWAY;        case Presence.DO_NOT_DISTURB:            return Im.Presence.DO_NOT_DISTURB;        case Presence.OFFLINE:            return Im.Presence.OFFLINE;        }        // impossible...        Log.e(TAG, "Illegal presence status value " + presence.getStatus());        return Im.Presence.AVAILABLE;    }    public void clearOnLogout() {        clearValidatedContactsAndLists();        clearTemporaryContacts();        clearPresence();    }    /**     * Clears the list of validated contacts and contact lists.     * As contacts and contacts lists are added after login, contacts and contact lists are     * stored as "validated contacts". After initial download of contacts is complete, any contacts     * and contact lists that remain in the database, but are not in the validated list, are     * obsolete and should be removed.  This function resets that list for use upon login.     */    private void clearValidatedContactsAndLists() {        // clear the list of validated contacts, contact lists, and blocked contacts        mValidatedContacts.clear();        mValidatedContactLists.clear();        mValidatedBlockedContacts.clear();    }    /**     * Clear the temporary contacts in the database. As contacts are persist between     * IM sessions, the temporary contacts need to be cleared after logout.     */    private void clearTemporaryContacts() {        String selection = Im.Contacts.CONTACTLIST + "=" + FAKE_TEMPORARY_LIST_ID;        mResolver.delete(mContactUrl, selection, null);    }    /**     * Clears the presence of the all contacts. As contacts are persist between     * IM sessions, the presence need to be cleared after logout.     */    void clearPresence() {        StringBuilder where = new StringBuilder();        where.append(Im.Presence.CONTACT_ID);        where.append(" in (select _id from contacts where ");        where.append(Im.Contacts.ACCOUNT);        where.append("=");        where.append(mAccountId);        where.append(")");        mResolver.delete(Im.Presence.CONTENT_URI, where.toString(), null);    }    void closeChatSession(String address) {        ChatSessionManagerAdapter sessionManager =            (ChatSessionManagerAdapter) mConn.getChatSessionManager();        ChatSessionAdapter session =            (ChatSessionAdapter) sessionManager.getChatSession(address);        if(session != null) {            session.leave();        }    }    void updateChatPresence(String address, String nickname, Presence p) {        ChatSessionManagerAdapter sessionManager =            (ChatSessionManagerAdapter) mConn.getChatSessionManager();        // TODO: This only find single chat sessions, we need to go through all        // active chat sessions and find if the contact is a participant of the        // session.        ChatSessionAdapter session =            (ChatSessionAdapter) sessionManager.getChatSession(address);        if(session != null) {            session.insertPresenceUpdatesMsg(nickname, p);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -