ChatGroup.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:4k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007 Esmertec AG.
  3.  * Copyright (C) 2007 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.engine;
  18. import java.util.Collection;
  19. import java.util.Collections;
  20. import java.util.List;
  21. import java.util.Vector;
  22. import java.util.concurrent.CopyOnWriteArrayList;
  23. public class ChatGroup extends ImEntity{
  24.     private ChatGroupManager mManager;
  25.     private Address mAddress;
  26.     private String mName;
  27.     private Vector<Contact> mMembers;
  28.     private CopyOnWriteArrayList<GroupMemberListener> mMemberListeners;
  29.     public ChatGroup(Address address, String name, ChatGroupManager manager) {
  30.         this(address, name, null, manager);
  31.     }
  32.     public ChatGroup(Address address, String name, Collection<Contact> members,
  33.             ChatGroupManager manager) {
  34.         mAddress = address;
  35.         mName = name;
  36.         mManager = manager;
  37.         mMembers = new Vector<Contact>();
  38.         if(members != null) {
  39.             mMembers.addAll(members);
  40.         }
  41.         mMemberListeners = new CopyOnWriteArrayList<GroupMemberListener>();
  42.     }
  43.     @Override
  44.     public Address getAddress() {
  45.         return mAddress;
  46.     }
  47.     /**
  48.      * Gets the name of the group.
  49.      *
  50.      * @return the name of the group.
  51.      */
  52.     public String getName() {
  53.         return mName;
  54.     }
  55.     public void addMemberListener(GroupMemberListener listener) {
  56.         mMemberListeners.add(listener);
  57.     }
  58.     public void removeMemberListener(GroupMemberListener listener) {
  59.         mMemberListeners.remove(listener);
  60.     }
  61.     /**
  62.      * Gets an unmodifiable collection of the members of the group.
  63.      *
  64.      * @return an unmodifiable collection of the members of the group.
  65.      */
  66.     public List<Contact> getMembers(){
  67.         return Collections.unmodifiableList(mMembers);
  68.     }
  69.     /**
  70.      * Adds a member to this group.
  71.      * TODO: more docs on async callbacks.
  72.      *
  73.      * @param contact the member to add.
  74.      */
  75.     public synchronized void addMemberAsync(Contact contact) {
  76.         mManager.addGroupMemberAsync(this, contact);
  77.     }
  78.     /**
  79.      * Removes a member from this group.
  80.      * TODO: more docs on async callbacks.
  81.      *
  82.      * @param contact the member to remove.
  83.      */
  84.     public synchronized void removeMemberAsync(Contact contact) {
  85.         mManager.removeGroupMemberAsync(this, contact);
  86.     }
  87.     /**
  88.      * Notifies that a contact has joined into this group.
  89.      *
  90.      * @param contact the contact who has joined into the group.
  91.      */
  92.     void notifyMemberJoined(Contact contact) {
  93.         mMembers.add(contact);
  94.         for(GroupMemberListener listener : mMemberListeners) {
  95.             listener.onMemberJoined(this, contact);
  96.         }
  97.     }
  98.     /**
  99.      * Notifies that a contact has left this group.
  100.      *
  101.      * @param contact the contact who has left this group.
  102.      */
  103.     void notifyMemberLeft(Contact contact) {
  104.         if(mMembers.remove(contact)) {
  105.             for(GroupMemberListener listener : mMemberListeners) {
  106.                 listener.onMemberLeft(this, contact);
  107.             }
  108.         }
  109.     }
  110.     /**
  111.      * Notifies that previous operation on this group has failed.
  112.      *
  113.      * @param error the error information.
  114.      */
  115.     void notifyGroupMemberError(ImErrorInfo error) {
  116.         for(GroupMemberListener listener : mMemberListeners) {
  117.             listener.onError(this, error);
  118.         }
  119.     }
  120. }