blob: 4189b0c6ff4495c1d44133cc0e42d9da166c6b12 [file] [log] [blame]
/*
* Copyright (C) 2007 Esmertec AG.
* Copyright (C) 2007 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.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.CopyOnWriteArrayList;
public class ChatGroup extends ImEntity{
private ChatGroupManager mManager;
private Address mAddress;
private String mName;
private Vector<Contact> mMembers;
private CopyOnWriteArrayList<GroupMemberListener> mMemberListeners;
public ChatGroup(Address address, String name, ChatGroupManager manager) {
this(address, name, null, manager);
}
public ChatGroup(Address address, String name, Collection<Contact> members,
ChatGroupManager manager) {
mAddress = address;
mName = name;
mManager = manager;
mMembers = new Vector<Contact>();
if(members != null) {
mMembers.addAll(members);
}
mMemberListeners = new CopyOnWriteArrayList<GroupMemberListener>();
}
@Override
public Address getAddress() {
return mAddress;
}
/**
* Gets the name of the group.
*
* @return the name of the group.
*/
public String getName() {
return mName;
}
public void addMemberListener(GroupMemberListener listener) {
mMemberListeners.add(listener);
}
public void removeMemberListener(GroupMemberListener listener) {
mMemberListeners.remove(listener);
}
/**
* Gets an unmodifiable collection of the members of the group.
*
* @return an unmodifiable collection of the members of the group.
*/
public List<Contact> getMembers(){
return Collections.unmodifiableList(mMembers);
}
/**
* Adds a member to this group.
* TODO: more docs on async callbacks.
*
* @param contact the member to add.
*/
public synchronized void addMemberAsync(Contact contact) {
mManager.addGroupMemberAsync(this, contact);
}
/**
* Removes a member from this group.
* TODO: more docs on async callbacks.
*
* @param contact the member to remove.
*/
public synchronized void removeMemberAsync(Contact contact) {
mManager.removeGroupMemberAsync(this, contact);
}
/**
* Notifies that a contact has joined into this group.
*
* @param contact the contact who has joined into the group.
*/
void notifyMemberJoined(Contact contact) {
mMembers.add(contact);
for(GroupMemberListener listener : mMemberListeners) {
listener.onMemberJoined(this, contact);
}
}
/**
* Notifies that a contact has left this group.
*
* @param contact the contact who has left this group.
*/
void notifyMemberLeft(Contact contact) {
if(mMembers.remove(contact)) {
for(GroupMemberListener listener : mMemberListeners) {
listener.onMemberLeft(this, contact);
}
}
}
/**
* Notifies that previous operation on this group has failed.
*
* @param error the error information.
*/
void notifyGroupMemberError(ImErrorInfo error) {
for(GroupMemberListener listener : mMemberListeners) {
listener.onError(this, error);
}
}
}