ContactList.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:6k
- /*
- * Copyright (C) 2007-2008 Esmertec AG.
- * Copyright (C) 2007-2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package com.android.im.engine;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.HashMap;
- public class ContactList extends ImEntity {
- protected Address mAddress;
- protected String mName;
- protected boolean mDefault;
- protected ContactListManager mManager;
- private HashMap<String, Contact> mContactsCache;
- public ContactList(Address address, String name, boolean isDefault,
- Collection<Contact> contacts, ContactListManager manager) {
- mAddress = address;
- mDefault = isDefault;
- mName = name;
- mManager = manager;
- mContactsCache = new HashMap<String, Contact>();
- if (contacts != null) {
- for (Contact c : contacts) {
- mContactsCache.put(manager.normalizeAddress(c.getAddress().getFullName()), c);
- }
- }
- }
- @Override
- public Address getAddress() {
- return mAddress;
- }
- public String getName() {
- return mName;
- }
- public void setName(String name) {
- if (null == name) {
- throw new NullPointerException();
- }
- mManager.setListNameAsync(name, this);
- }
- public void setDefault(boolean isDefault) {
- this.mDefault = isDefault;
- }
- public boolean isDefault() {
- return mDefault;
- }
- /**
- * Add a contact to the list. The contact is specified by its address
- * string.
- *
- * @param address
- * the address string specifies the contact.
- * @throws IllegalArgumentException
- * if the address is invalid.
- * @throws NullPointerException
- * if the address string is null
- * @throws ImException
- * if the contact is not allowed to be added
- */
- public void addContact(String address) throws ImException {
- address = mManager.normalizeAddress(address);
- if (null == address) {
- throw new NullPointerException();
- }
- if (mManager.isBlocked(address)) {
- throw new ImException(ImErrorInfo.CANT_ADD_BLOCKED_CONTACT,
- "Contact has been blocked");
- }
- if(containsContact(address)){
- throw new ImException(ImErrorInfo.CONTACT_EXISTS_IN_LIST,
- "Contact already exists in the list");
- }
- mManager.addContactToListAsync(address, this);
- }
- /**
- * Remove a contact from the list. If the contact is not in the list,
- * nothing will happen. Otherwise, the contact will be removed from
- * the list on the server asynchronously.
- *
- * @param address
- * the address of the contact to be removed from the list
- * @throws NullPointerException
- * If the address is null
- */
- public void removeContact(Address address) throws ImException {
- if(address == null) {
- throw new NullPointerException();
- }
- Contact c = getContact(address);
- if(c != null) {
- removeContact(c);
- }
- }
- /**
- * Remove a contact from the list. If the contact is not in the list,
- * nothing will happen. Otherwise, the contact will be removed from
- * the list on the server asynchronously.
- *
- * @param contact
- * the contact to be removed from the list
- * @throws NullPointerException
- * If the contact is null
- */
- public void removeContact(Contact contact) throws ImException {
- if(contact == null) {
- throw new NullPointerException();
- }
- if(containsContact(contact)) {
- mManager.removeContactFromListAsync(contact, this);
- }
- }
- public synchronized Contact getContact(Address address) {
- return mContactsCache.get(mManager.normalizeAddress(address.getFullName()));
- }
- public synchronized Contact getContact(String address) {
- return mContactsCache.get(mManager.normalizeAddress(address));
- }
- public synchronized int getContactsCount() {
- return mContactsCache.size();
- }
- public synchronized Collection<Contact> getContacts() {
- return new ArrayList<Contact>(mContactsCache.values());
- }
- public synchronized boolean containsContact(String address) {
- return mContactsCache.containsKey(mManager.normalizeAddress(address));
- }
- public synchronized boolean containsContact(Address address) {
- return address == null ? false
- : mContactsCache.containsKey(mManager.normalizeAddress(address.getFullName()));
- }
- public synchronized boolean containsContact(Contact c) {
- return c == null ? false
- : mContactsCache.containsKey(mManager.normalizeAddress(c.getAddress().getFullName()));
- }
- protected void insertToCache(Contact contact) {
- mContactsCache.put(mManager.normalizeAddress(contact.getAddress().getFullName()), contact);
- }
- protected void removeFromCache(Contact contact) {
- mContactsCache.remove(mManager.normalizeAddress(contact.getAddress().getFullName()));
- }
- }