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

📄 impscontactlistmanager.java

📁 Android平台上即时通讯聊天工具源代码。 支持手机聊天。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        }        Primitive request = buildSubscribePresenceRequest(addresses);        return request;    }    @Override    protected void doCreateContactListAsync(final String name,            Collection<Contact> contacts,            final boolean isDefault) {        ImpsAddress selfAddress = mConnection.getSession().getLoginUserAddress();        ImpsAddress listAddress = new ImpsContactListAddress(selfAddress, name);        final ContactList list = new ContactList(listAddress, name,                isDefault, contacts, this);        Primitive createListRequest = buildCreateListReq(name, contacts,                isDefault, listAddress);        AsyncTransaction tx = new AsyncTransaction(mTransactionManager) {            @Override            public void onResponseError(ImpsErrorInfo error) {                notifyContactError(ContactListListener.ERROR_CREATING_LIST,                        error, name, null);            }            @Override            public void onResponseOk(Primitive response) {                subscribeToListAsync(list, new AsyncCompletion () {                    public void onComplete() {                        notifyContactListCreated(list);                    }                    public void onError(ImErrorInfo error) {                        ImpsLog.log("Error subscribing to newly created list: "                                + error.getDescription() + "; ignored");                        onComplete();                    }                });            }        };        tx.sendRequest(createListRequest);    }    private Primitive buildCreateListReq(String name,            Collection<Contact> contacts, boolean isDefault,            ImpsAddress listAddress) {        Primitive createListRequest = new Primitive(ImpsTags.CreateList_Request);        createListRequest.addElement(listAddress.toPrimitiveElement());        // add initial contacts, if any        if (null != contacts && !contacts.isEmpty()) {            PrimitiveElement nickList = createListRequest.addElement(ImpsTags.NickList);            for (Contact contact : contacts) {                nickList.addChild(buildNickNameElem(contact));            }        }        PrimitiveElement contactListProp = createListRequest.addElement(                ImpsTags.ContactListProperties);        contactListProp.addPropertyChild(ImpsConstants.DisplayName, name);        contactListProp.addPropertyChild(ImpsConstants.Default,                ImpsUtils.toImpsBool(isDefault));        return createListRequest;    }    /**     * Delete a specified contact list asyncLoginWrapper.     *     * @param list the contact list to be deleted     */    @Override    public void doDeleteContactListAsync(final ContactList list) {        Primitive delListRequest = buildDelListReq(list);        AsyncTransaction tx = new AsyncTransaction(mTransactionManager) {            @Override            public void onResponseError(ImpsErrorInfo error) {                notifyContactError(ContactListListener.ERROR_DELETING_LIST,                        error, list.getName(), null);            }            @Override            public void onResponseOk(Primitive response) {                notifyContactListDeleted(list);                if (!mAllowAutoSubscribe) {                    unsubscribeToListAsync(list, new AsyncCompletion(){                        public void onComplete() {}                        public void onError(ImErrorInfo error) {                            // don't bother to alert this error since the                            // list has already been removed.                            ImpsLog.log("Warning: unsubscribing list presence failed");                        }                    });                }            }        };        tx.sendRequest(delListRequest);    }    private Primitive buildDelListReq(final ContactList list) {        Primitive delListRequest = new Primitive(ImpsTags.DeleteList_Request);        delListRequest.addElement(((ImpsAddress)list.getAddress())                .toPrimitiveElement());        return delListRequest;    }    private Primitive buildListManageRequest(ContactList list, Collection<Contact> contactsToAdd,            Collection<Contact> contactsToRemove, String listName) {        // Create ListManage request        Primitive req = new Primitive(ImpsTags.ListManage_Request);        req.addElement(((ImpsAddress)list.getAddress()).toPrimitiveElement());        req.addElement(ImpsTags.ReceiveList, false);        // If there are any pending added contacts, add them to the addNickList        if (contactsToAdd != null && !contactsToAdd.isEmpty()) {            PrimitiveElement addList = req.addElement(ImpsTags.AddNickList);            for (Contact c : contactsToAdd) {                PrimitiveElement nickNameElem = addList.addChild(ImpsTags.NickName);                nickNameElem.addChild(ImpsTags.Name, c.getName());                nickNameElem.addChild(ImpsTags.UserID, c.getAddress().getFullName());            }        }        // If there are any pending removed contacts, add them to the removeNickList        if (contactsToRemove != null && !contactsToRemove.isEmpty()) {            PrimitiveElement removeList = req.addElement(ImpsTags.RemoveNickList);            for (Contact c : contactsToRemove) {                removeList.addChild(ImpsTags.UserID, c.getAddress().getFullName());            }        }        // Add the list properties        if (listName != null) {            PrimitiveElement requestProps = req.addElement(ImpsTags.ContactListProperties);            requestProps.addPropertyChild(ImpsConstants.DisplayName, listName);        }        return req;    }    private Primitive buildSubscribeToListsRequest(Collection<ContactList> lists) {        ArrayList<ImpsAddress> addresses = new ArrayList<ImpsAddress>();        for (ContactList list : lists) {            addresses.add((ImpsAddress)list.getAddress());        }        Primitive subscribePresenceRequest = buildSubscribePresenceRequest(addresses);        subscribePresenceRequest.addElement(ImpsTags.AutoSubscribe, true);        return subscribePresenceRequest;    }    private Primitive buildSubscribePresenceRequest(ArrayList<ImpsAddress> addresses) {        Primitive request = new Primitive(ImpsTags.SubscribePresence_Request);        // XXX: Workaround on OZ IMPS GTalk server which only supports a few        // basic presence attributes. The PresenceSubList is optional and an        // empty List or missing list indicates all available presence        // attributes are desired but the OZ server doens't quite follow the        // spec here. It won't send any PresenceNotification either when we        // don't send PresenceSubList or we request more PA than it supports.        if(mConnection.getConfig().supportBasicPresenceOnly()){            PrimitiveElement presenceList = request.addElement(ImpsTags.PresenceSubList);            presenceList.setAttribute(ImpsTags.XMLNS, mConnection.getConfig().getPresenceNs());            for(String pa : ImpsClientCapability.getBasicPresenceAttributes()) {                presenceList.addChild(pa);            }        }        for (ImpsAddress address : addresses) {            request.addElement(address.toPrimitiveElement());        }        return request;    }    public void notifyServerTransaction(ServerTransaction tx) {        Primitive request = tx.getRequest();        String type = request.getType();        if (ImpsTags.PresenceNotification_Request.equals(type)) {            tx.sendStatusResponse(ImpsConstants.SUCCESS_CODE);            ArrayList<Contact> updated = new ArrayList<Contact>();            PresenceMapping presenceMapping = mConnection.getConfig().getPresenceMapping();            for (PrimitiveElement presenceElem : request.getContentElement().getChildren()) {                String userId = presenceElem.getChildContents(ImpsTags.UserID);                if (userId == null) {                    continue;                }                PrimitiveElement presenceSubList = presenceElem.getChild(ImpsTags.PresenceSubList);                Presence presence = ImpsPresenceUtils.extractPresence(presenceSubList, presenceMapping);                // Find out the contact in all lists and update their presence                for(ContactList list : mContactLists) {                    Contact contact = list.getContact(userId);                    if (contact != null) {                        contact.setPresence(presence);                        updated.add(contact);                    }                }            }            if (updated.size() > 0) {                notifyContactsPresenceUpdated(updated.toArray(new Contact[updated.size()]));            }        } else if (ImpsTags.PresenceAuth_Request.equals(type)) {            tx.sendStatusResponse(ImpsConstants.SUCCESS_CODE);            String userId = request.getElementContents(ImpsTags.UserID);            Contact contact = getContact(userId);            if (contact == null) {                ImpsAddress address = new ImpsUserAddress(userId);                contact = new Contact(address, address.getScreenName());            }            if (getState() < LISTS_LOADED) {                if (mSubscriptionRequests == null) {                    mSubscriptionRequests = new ArrayList<Contact>();                }                mSubscriptionRequests.add(contact);            } else {                SubscriptionRequestListener listener = getSubscriptionRequestListener();                if (listener != null) {                    listener.onSubScriptionRequest(contact);                }            }        }    }    void loadContactsOfListAsync(final ImpsAddress address, final            AsyncCompletion completion) {        Primitive listManageRequest = new Primitive(ImpsTags.ListManage_Request);        listManageRequest.addElement(address.toPrimitiveElement());        listManageRequest.addElement(ImpsTags.ReceiveList, true);        AsyncTransaction tx = new AsyncTransaction(mTransactionManager) {            @Override            public void onResponseError(ImpsErrorInfo error) {                completion.onError(error);            }            @Override            public void onResponseOk(Primitive response) {                final ContactList list = extractContactList(response, address);                mContactLists.add(list);                if (list.isDefault()) {                    mDefaultContactList = list;                }                subscribeToListAsync(list, completion);            }        };        tx.sendRequest(listManageRequest);    }    private Primitive buildBlockContactReq(String address, boolean block) {        Primitive request = new Primitive(ImpsTags.BlockEntity_Request);        ImpsVersion version = mConnection.getConfig().getImpsVersion();        if (version == ImpsVersion.IMPS_VERSION_13) {            request.addElement(ImpsTags.BlockListInUse, true);            request.addElement(ImpsTags.GrantListInUse, false);        }        PrimitiveElement blockList = request.addElement(ImpsTags.BlockList);        if (version != ImpsVersion.IMPS_VERSION_13) {            blockList.addChild(ImpsTags.InUse, true);        }        PrimitiveElement entityList = blockList.addChild(block ?                ImpsTags.AddList : ImpsTags.RemoveList);        entityList.addChild(ImpsTags.UserID, address);        return request;    }    @Override    protected void doBlockContactAsync(String address, final boolean block) {        Primitive request = buildBlockContactReq(address, block);        final Address contactAddress = new ImpsUserAddress(address);        AsyncTransaction tx = new AsyncTransaction(mTransactionManager) {            @Override            public void onResponseError(ImpsErrorInfo error) {                Contact c = getContact(contactAddress);                if(c == null) {                    c = new Contact(contactAddress, contactAddress.getScreenName());                }                notifyContactError(                        block ? ContactListListener.ERROR_BLOCKING_CONTACT                                : ContactListListener.ERROR_UNBLOCKING_CONTACT,                        error, null, c);            }            @Override            public void onResponseOk(Primitive response) {                Contact c = getContact(contactAddress);                if(c == null) {                    c = new Contact(contactAddress, contactAddress.getScreenName());                }

⌨️ 快捷键说明

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