添加项目
@@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.tencent.qcloud.tuikit.tuigroup">
|
||||
|
||||
<application>
|
||||
<provider
|
||||
android:name=".TUIGroupService"
|
||||
android:authorities="${applicationId}.TUIGroup.Init"
|
||||
android:enabled="true"
|
||||
android:exported="false" />
|
||||
|
||||
|
||||
|
||||
<!-- **************** Classic UI Activity Start **************** -->
|
||||
<activity android:name=".classicui.page.GroupNoticeActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".classicui.page.SetGroupManagerActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".classicui.page.GroupMemberActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".classicui.page.ManageGroupActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".classicui.page.GroupInfoActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".classicui.page.GroupApplyManagerActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
|
||||
<!-- **************** Classic UI Activity End **************** -->
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- **************** Minimalist UI Activity Start **************** -->
|
||||
<activity android:name=".minimalistui.page.GroupNoticeMinimalistActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".minimalistui.page.SetGroupManagerMinimalistActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".minimalistui.page.GroupMemberMinimalistActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".minimalistui.page.ManageGroupMinimalistActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".minimalistui.page.GroupInfoMinimalistActivity"
|
||||
android:screenOrientation="portrait" />
|
||||
<activity android:name=".minimalistui.page.GroupApplyManagerMinimalistActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
|
||||
<!-- **************** Minimalist UI Activity End **************** -->
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup;
|
||||
|
||||
import com.tencent.qcloud.tuicore.interfaces.ITUIService;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface ITUIGroupService extends ITUIService {
|
||||
|
||||
@Override
|
||||
Object onCall(String method, Map<String, Object> param);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup;
|
||||
|
||||
public class TUIGroupConstants {
|
||||
|
||||
public static final class ActivityRequest {
|
||||
public static final int CODE_1 = 1;
|
||||
}
|
||||
|
||||
public static final class Group {
|
||||
public static final int MODIFY_GROUP_NAME = 0X01;
|
||||
public static final int MODIFY_GROUP_NOTICE = 0X02;
|
||||
public static final int MODIFY_GROUP_JOIN_TYPE = 0X03;
|
||||
public static final int MODIFY_MEMBER_NAME = 0X11;
|
||||
|
||||
public static final String GROUP_ID = "group_id";
|
||||
public static final String GROUP_INFO = "groupInfo";
|
||||
public static final String MEMBER_APPLY = "apply";
|
||||
}
|
||||
|
||||
public static class Selection {
|
||||
public static final String SELECT_FRIENDS = "select_friends";
|
||||
public static final String SELECT_FOR_CALL = "isSelectForCall";
|
||||
public static final String IS_SELECT_MODE = "isSelectMode";
|
||||
|
||||
public static final String CONTENT = "content";
|
||||
public static final String TYPE = "type";
|
||||
public static final String TITLE = "title";
|
||||
public static final String LIST = "list";
|
||||
public static final String LIMIT = "limit";
|
||||
public static final String EXCLUDE_LIST = "excludeList";
|
||||
public static final String SELECTED_LIST = "selectedList";
|
||||
public static final String FILTER = "filter";
|
||||
|
||||
}
|
||||
|
||||
public static final String GROUP_FACE_URL = "https://im.sdk.cloud.tencent.cn/download/tuikit-resource/group-avatar/group_avatar_%s.png";
|
||||
public static final int GROUP_FACE_COUNT = 24;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.tencent.imsdk.v2.V2TIMGroupChangeInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupListener;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberChangeInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMManager;
|
||||
import com.tencent.qcloud.tuicore.ServiceInitializer;
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.TUILogin;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.GroupEventListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupUtils;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class TUIGroupService extends ServiceInitializer implements ITUIGroupService {
|
||||
public static final String TAG = TUIGroupService.class.getSimpleName();
|
||||
private static TUIGroupService instance;
|
||||
|
||||
private final List<WeakReference<GroupEventListener>> groupEventListenerList = new ArrayList<>();
|
||||
|
||||
public static TUIGroupService getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(Context context) {
|
||||
instance = this;
|
||||
TUICore.registerService(TUIConstants.TUIGroup.SERVICE_NAME, this);
|
||||
initIMListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object onCall(String method, Map<String, Object> param) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private void initIMListener() {
|
||||
V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {
|
||||
@Override
|
||||
public void onMemberEnter(String groupID, List<V2TIMGroupMemberInfo> memberList) {
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.GROUP_ID, groupID);
|
||||
ArrayList<String> userIds = new ArrayList<>();
|
||||
for (V2TIMGroupMemberInfo memberInfo : memberList) {
|
||||
userIds.add(memberInfo.getUserID());
|
||||
}
|
||||
param.put(TUIConstants.TUIGroup.GROUP_MEMBER_ID_LIST, userIds);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_JOIN_GROUP, param);
|
||||
if (userIds.contains(TUILogin.getLoginUser())) {
|
||||
TUIGroupUtils.toastGroupEvent(TUIGroupUtils.GROUP_EVENT_TIP_JOINED, groupID);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMemberLeave(String groupID, V2TIMGroupMemberInfo member) {
|
||||
super.onMemberLeave(groupID, member);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMemberInvited(String groupID, V2TIMGroupMemberInfo opUser, List<V2TIMGroupMemberInfo> memberList) {
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.GROUP_ID, groupID);
|
||||
ArrayList<String> userIds = new ArrayList<>();
|
||||
for (V2TIMGroupMemberInfo memberInfo : memberList) {
|
||||
userIds.add(memberInfo.getUserID());
|
||||
}
|
||||
param.put(TUIConstants.TUIGroup.GROUP_MEMBER_ID_LIST, userIds);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_INVITED_GROUP, param);
|
||||
if (userIds.contains(TUILogin.getLoginUser())) {
|
||||
TUIGroupUtils.toastGroupEvent(TUIGroupUtils.GROUP_EVENT_TIP_INVITED, groupID);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMemberKicked(String groupID, V2TIMGroupMemberInfo opUser, List<V2TIMGroupMemberInfo> memberList) {
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.GROUP_ID, groupID);
|
||||
ArrayList<String> userIds = new ArrayList<>();
|
||||
for (V2TIMGroupMemberInfo memberInfo : memberList) {
|
||||
userIds.add(memberInfo.getUserID());
|
||||
}
|
||||
param.put(TUIConstants.TUIGroup.GROUP_MEMBER_ID_LIST, userIds);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_MEMBER_KICKED_GROUP, param);
|
||||
if (userIds.contains(TUILogin.getLoginUser())) {
|
||||
TUIGroupUtils.toastGroupEvent(TUIGroupUtils.GROUP_EVENT_TIP_KICKED, groupID);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMemberInfoChanged(String groupID, List<V2TIMGroupMemberChangeInfo> v2TIMGroupMemberChangeInfoList) {
|
||||
super.onMemberInfoChanged(groupID, v2TIMGroupMemberChangeInfoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupCreated(String groupID) {
|
||||
super.onGroupCreated(groupID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupDismissed(String groupID, V2TIMGroupMemberInfo opUser) {
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.GROUP_ID, groupID);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_GROUP_DISMISS, param);
|
||||
TUIGroupUtils.toastGroupEvent(TUIGroupUtils.GROUP_EVENT_TIP_DISBANDED, groupID);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupRecycled(String groupID, V2TIMGroupMemberInfo opUser) {
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.GROUP_ID, groupID);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_GROUP_RECYCLE, param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupInfoChanged(String groupID, List<V2TIMGroupChangeInfo> changeInfos) {
|
||||
List<GroupEventListener> groupEventListeners = getGroupEventListenerList();
|
||||
for (GroupEventListener groupEventListener : groupEventListeners) {
|
||||
groupEventListener.onGroupInfoChanged(groupID);
|
||||
}
|
||||
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.GROUP_ID, groupID);
|
||||
for (V2TIMGroupChangeInfo changeInfo : changeInfos) {
|
||||
if (changeInfo.getType() == V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_NAME) {
|
||||
param.put(TUIConstants.TUIGroup.GROUP_NAME, changeInfo.getValue());
|
||||
} else if (changeInfo.getType() == V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_FACE_URL) {
|
||||
param.put(TUIConstants.TUIGroup.GROUP_FACE_URL, changeInfo.getValue());
|
||||
} else if (changeInfo.getType() == V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER) {
|
||||
param.put(TUIConstants.TUIGroup.GROUP_OWNER, changeInfo.getValue());
|
||||
} else if (changeInfo.getType() == V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_NOTIFICATION) {
|
||||
param.put(TUIConstants.TUIGroup.GROUP_NOTIFICATION, changeInfo.getValue());
|
||||
} else if (changeInfo.getType() == V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_INTRODUCTION) {
|
||||
param.put(TUIConstants.TUIGroup.GROUP_INTRODUCTION, changeInfo.getValue());
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_GROUP_INFO_CHANGED, param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveJoinApplication(String groupID, V2TIMGroupMemberInfo member, String opReason) {
|
||||
super.onReceiveJoinApplication(groupID, member, opReason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onApplicationProcessed(String groupID, V2TIMGroupMemberInfo opUser, boolean isAgreeJoin, String opReason) {
|
||||
super.onApplicationProcessed(groupID, opUser, isAgreeJoin, opReason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGrantAdministrator(String groupID, V2TIMGroupMemberInfo opUser, List<V2TIMGroupMemberInfo> memberList) {
|
||||
super.onGrantAdministrator(groupID, opUser, memberList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRevokeAdministrator(String groupID, V2TIMGroupMemberInfo opUser, List<V2TIMGroupMemberInfo> memberList) {
|
||||
super.onRevokeAdministrator(groupID, opUser, memberList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuitFromGroup(String groupID) {
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.GROUP_ID, groupID);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_EXIT_GROUP, param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveRESTCustomData(String groupID, byte[] customData) {
|
||||
super.onReceiveRESTCustomData(groupID, customData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupAttributeChanged(String groupID, Map<String, String> groupAttributeMap) {
|
||||
super.onGroupAttributeChanged(groupID, groupAttributeMap);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void addGroupEventListener(GroupEventListener groupEventListener) {
|
||||
if (groupEventListener == null) {
|
||||
return;
|
||||
}
|
||||
for (WeakReference<GroupEventListener> listenerWeakReference : groupEventListenerList) {
|
||||
if (listenerWeakReference.get() == groupEventListener) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
groupEventListenerList.add(new WeakReference<>(groupEventListener));
|
||||
}
|
||||
|
||||
public List<GroupEventListener> getGroupEventListenerList() {
|
||||
List<GroupEventListener> listeners = new ArrayList<>();
|
||||
Iterator<WeakReference<GroupEventListener>> iterator = groupEventListenerList.listIterator();
|
||||
while(iterator.hasNext()) {
|
||||
WeakReference<GroupEventListener> listenerWeakReference = iterator.next();
|
||||
GroupEventListener listener = listenerWeakReference.get();
|
||||
if (listener == null) {
|
||||
iterator.remove();
|
||||
} else {
|
||||
listeners.add(listener);
|
||||
}
|
||||
}
|
||||
return listeners;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLightThemeResId() {
|
||||
return R.style.TUIGroupLightTheme;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLivelyThemeResId() {
|
||||
return R.style.TUIGroupLivelyTheme;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSeriousThemeResId() {
|
||||
return R.style.TUIGroupSeriousTheme;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.bean;
|
||||
|
||||
import com.tencent.imsdk.v2.V2TIMConversation;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupAtInfo;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 聊天信息基本类
|
||||
*/
|
||||
public class ChatInfo implements Serializable {
|
||||
|
||||
public static final int TYPE_C2C = V2TIMConversation.V2TIM_C2C;
|
||||
public static final int TYPE_GROUP = V2TIMConversation.V2TIM_GROUP;
|
||||
public static final int TYPE_INVALID = V2TIMConversation.CONVERSATION_TYPE_INVALID;
|
||||
|
||||
private static List<V2TIMGroupAtInfo> atInfoList;
|
||||
|
||||
private String chatName;
|
||||
private int type = V2TIMConversation.V2TIM_C2C;
|
||||
private String id;
|
||||
private String groupType;
|
||||
private boolean isTopChat;
|
||||
private boolean isFolded;
|
||||
|
||||
|
||||
public ChatInfo() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取聊天的标题,单聊一般为对方名称,群聊为群名字
|
||||
*
|
||||
* Get the title of the chat, usually the name of the other party for a single chat, and the group name for a group chat
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getChatName() {
|
||||
return chatName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置聊天的标题,单聊一般为对方名称,群聊为群名字
|
||||
*
|
||||
* Set the title of the chat, usually the name of the other party for a single chat, and the group name for a group chat
|
||||
*
|
||||
* @param chatName
|
||||
*/
|
||||
public void setChatName(String chatName) {
|
||||
this.chatName = chatName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取聊天类型,C2C为单聊,Group为群聊
|
||||
*
|
||||
* Get the chat type, C2C is a single chat, Group is a group chat
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置聊天类型,C2C为单聊,Group为群聊
|
||||
*
|
||||
* Set the chat type, C2C is a single chat, Group is a group chat
|
||||
*
|
||||
* @param type
|
||||
*/
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取聊天唯一标识
|
||||
*
|
||||
* Get chat id
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置聊天唯一标识
|
||||
*
|
||||
* Set chat id
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取群组类型
|
||||
*
|
||||
* Get group type
|
||||
*/
|
||||
public String getGroupType() {
|
||||
return groupType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置群组类型
|
||||
*
|
||||
* Set group type
|
||||
*/
|
||||
public void setGroupType(String groupType) {
|
||||
this.groupType = groupType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否为置顶的会话
|
||||
*
|
||||
* Is it a pinned conversation
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isTopChat() {
|
||||
return isTopChat;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置会话是否置顶
|
||||
*
|
||||
* Set whether the conversation is sticky
|
||||
*
|
||||
* @param topChat
|
||||
*/
|
||||
public void setTopChat(boolean topChat) {
|
||||
isTopChat = topChat;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否为折叠的会话
|
||||
*/
|
||||
public boolean isFolded() {
|
||||
return isFolded;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置会话折叠
|
||||
*/
|
||||
public void setFolded(boolean folded) {
|
||||
isFolded = folded;
|
||||
}
|
||||
|
||||
public List<V2TIMGroupAtInfo> getAtInfoList() {
|
||||
return atInfoList;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.bean;
|
||||
|
||||
import com.tencent.imsdk.v2.V2TIMGroupApplication;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class GroupApplyInfo implements Serializable {
|
||||
|
||||
public static final int APPLIED = 1;
|
||||
public static final int REFUSED = -1;
|
||||
public static final int UNHANDLED = 0;
|
||||
|
||||
private int status;
|
||||
private V2TIMGroupApplication timGroupApplication;
|
||||
|
||||
public GroupApplyInfo(V2TIMGroupApplication timGroupApplication) {
|
||||
this.timGroupApplication = timGroupApplication;
|
||||
}
|
||||
|
||||
public int getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(int status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public V2TIMGroupApplication getGroupApplication() {
|
||||
return timGroupApplication;
|
||||
}
|
||||
|
||||
public String getFromUser() {
|
||||
if (timGroupApplication != null) {
|
||||
return timGroupApplication.getFromUser();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getFromUserNickName() {
|
||||
if (timGroupApplication != null) {
|
||||
return timGroupApplication.getFromUserNickName();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public String getRequestMsg() {
|
||||
if (timGroupApplication != null) {
|
||||
return timGroupApplication.getRequestMsg();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public boolean isStatusHandled() {
|
||||
if (timGroupApplication != null) {
|
||||
return timGroupApplication.getHandleStatus() != V2TIMGroupApplication.V2TIM_GROUP_APPLICATION_HANDLE_STATUS_UNHANDLED;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,251 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.bean;
|
||||
|
||||
import com.tencent.imsdk.v2.V2TIMConversation;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupInfoResult;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberFullInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMManager;
|
||||
import com.tencent.imsdk.v2.V2TIMMessage;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfo extends ChatInfo {
|
||||
|
||||
public static final String GROUP_TYPE_MEETING = V2TIMManager.GROUP_TYPE_MEETING;
|
||||
public static final String GROUP_TYPE_AVCHATROOM = V2TIMManager.GROUP_TYPE_AVCHATROOM;
|
||||
public static final String GROUP_TYPE_COMMUNITY = V2TIMManager.GROUP_TYPE_COMMUNITY;
|
||||
public static final String GROUP_TYPE_PUBLIC = V2TIMManager.GROUP_TYPE_PUBLIC;
|
||||
public static final String GROUP_TYPE_WORK = V2TIMManager.GROUP_TYPE_WORK;
|
||||
|
||||
public static final int GROUP_MEMBER_FILTER_ALL = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL;
|
||||
public static final int GROUP_MEMBER_FILTER_OWNER = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_OWNER;
|
||||
public static final int GROUP_MEMBER_FILTER_ADMIN = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ADMIN;
|
||||
public static final int GROUP_MEMBER_FILTER_COMMON = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_COMMON;
|
||||
|
||||
private String groupType;
|
||||
private int memberCount;
|
||||
private String groupName;
|
||||
private String notice;
|
||||
private List<GroupMemberInfo> memberDetails = new ArrayList<>();
|
||||
private int joinType;
|
||||
private String owner;
|
||||
private boolean messageReceiveOption;
|
||||
private String faceUrl;
|
||||
private long mNextSeq = 0;
|
||||
private boolean canManagerGroup;
|
||||
private boolean isAllMuted;
|
||||
|
||||
public GroupInfo() {
|
||||
setType(V2TIMConversation.V2TIM_GROUP);
|
||||
}
|
||||
|
||||
public String getGroupName() {
|
||||
return groupName;
|
||||
}
|
||||
|
||||
public void setGroupName(String groupName) {
|
||||
this.groupName = groupName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取群公告
|
||||
*
|
||||
* Get group announcements
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getNotice() {
|
||||
return notice;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置群公告
|
||||
*
|
||||
* Set group announcements
|
||||
*
|
||||
* @param signature
|
||||
*/
|
||||
public void setNotice(String signature) {
|
||||
this.notice = signature;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取加群验证方式
|
||||
*
|
||||
* Get the group verification method
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getJoinType() {
|
||||
return joinType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置加群验证方式
|
||||
*
|
||||
* Set the group verification method
|
||||
*
|
||||
* @param joinType
|
||||
*/
|
||||
public void setJoinType(int joinType) {
|
||||
this.joinType = joinType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取群类型,Public/Private/ChatRoom
|
||||
*
|
||||
* Get the group type, Public/Private/ChatRoom
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public String getGroupType() {
|
||||
return groupType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置群类型
|
||||
*
|
||||
* Set the group type
|
||||
*
|
||||
* @param groupType
|
||||
*/
|
||||
public void setGroupType(String groupType) {
|
||||
this.groupType = groupType;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取成员详细信息
|
||||
*
|
||||
* Get member details
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public List<GroupMemberInfo> getMemberDetails() {
|
||||
return memberDetails;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置成员详细信息
|
||||
*
|
||||
* Set member details
|
||||
*
|
||||
* @param memberDetails
|
||||
*/
|
||||
public void setMemberDetails(List<GroupMemberInfo> memberDetails) {
|
||||
this.memberDetails = memberDetails;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取群成员数量
|
||||
*
|
||||
* Get the number of members that have joined the group
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getMemberCount() {
|
||||
return memberCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置群成员数量
|
||||
*
|
||||
* Set the number of members that have joined the group
|
||||
*
|
||||
* @param memberCount
|
||||
*/
|
||||
public void setMemberCount(int memberCount) {
|
||||
this.memberCount = memberCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回是否是群主
|
||||
*
|
||||
* Returns whether it is the owner of the group
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean isOwner() {
|
||||
return V2TIMManager.getInstance().getLoginUser().equals(owner);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置是否是群主
|
||||
*
|
||||
* Set whether it is the owner of the group
|
||||
*
|
||||
* @param owner
|
||||
*/
|
||||
public void setOwner(String owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取消息接收选项
|
||||
*
|
||||
* Get the current user's message receiving option in the group. To modify the group message receiving option, please call the setReceiveMessageOpt API.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean getMessageReceiveOption() {
|
||||
return messageReceiveOption;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置消息接收选项
|
||||
* @param messageReceiveOption, true,免打扰; false,接收消息
|
||||
*
|
||||
*
|
||||
* Set the current user's message receiving option in the group.
|
||||
* @param messageReceiveOption, true,no message will be received; false,messages will be received.
|
||||
*/
|
||||
public void setMessageReceiveOption(boolean messageReceiveOption) {
|
||||
this.messageReceiveOption = messageReceiveOption;
|
||||
}
|
||||
|
||||
public String getFaceUrl() {
|
||||
return faceUrl;
|
||||
}
|
||||
|
||||
public void setFaceUrl(String faceUrl) {
|
||||
this.faceUrl = faceUrl;
|
||||
}
|
||||
|
||||
public long getNextSeq() {
|
||||
return mNextSeq;
|
||||
}
|
||||
|
||||
public void setNextSeq(long mNextSeq) {
|
||||
this.mNextSeq = mNextSeq;
|
||||
}
|
||||
|
||||
public boolean isCanManagerGroup() {
|
||||
return canManagerGroup;
|
||||
}
|
||||
|
||||
public boolean isAllMuted() {
|
||||
return isAllMuted;
|
||||
}
|
||||
|
||||
public GroupInfo covertTIMGroupDetailInfo(V2TIMGroupInfoResult infoResult) {
|
||||
if (infoResult.getResultCode() != 0) {
|
||||
return this;
|
||||
}
|
||||
setChatName(infoResult.getGroupInfo().getGroupName());
|
||||
setGroupName(infoResult.getGroupInfo().getGroupName());
|
||||
setId(infoResult.getGroupInfo().getGroupID());
|
||||
setNotice(infoResult.getGroupInfo().getNotification());
|
||||
setMemberCount(infoResult.getGroupInfo().getMemberCount());
|
||||
setGroupType(infoResult.getGroupInfo().getGroupType());
|
||||
setOwner(infoResult.getGroupInfo().getOwner());
|
||||
setJoinType(infoResult.getGroupInfo().getGroupAddOpt());
|
||||
setMessageReceiveOption(infoResult.getGroupInfo().getRecvOpt() == V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE ? true : false);
|
||||
setFaceUrl(infoResult.getGroupInfo().getFaceUrl());
|
||||
int role = infoResult.getGroupInfo().getRole();
|
||||
canManagerGroup = role == V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_OWNER
|
||||
|| role == V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_ADMIN
|
||||
|| groupType == V2TIMManager.GROUP_TYPE_WORK;
|
||||
isAllMuted = infoResult.getGroupInfo().isAllMuted();
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,140 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.bean;
|
||||
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberFullInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberInfo;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class GroupMemberInfo implements Serializable {
|
||||
|
||||
private String iconUrl;
|
||||
private String account;
|
||||
private String signature;
|
||||
private String location;
|
||||
private String birthday;
|
||||
private String nameCard;
|
||||
private String nickName;
|
||||
private boolean isTopChat;
|
||||
private boolean isFriend;
|
||||
private long joinTime;
|
||||
private long tinyId;
|
||||
private int memberType;
|
||||
private boolean isSelected = false;
|
||||
|
||||
public String getIconUrl() {
|
||||
return iconUrl;
|
||||
}
|
||||
|
||||
public void setIconUrl(String iconUrl) {
|
||||
this.iconUrl = iconUrl;
|
||||
}
|
||||
|
||||
public String getAccount() {
|
||||
return account;
|
||||
}
|
||||
|
||||
public void setAccount(String account) {
|
||||
this.account = account;
|
||||
}
|
||||
|
||||
public String getSignature() {
|
||||
return signature;
|
||||
}
|
||||
|
||||
public void setSignature(String signature) {
|
||||
this.signature = signature;
|
||||
}
|
||||
|
||||
public String getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
public void setLocation(String location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public String getBirthday() {
|
||||
return birthday;
|
||||
}
|
||||
|
||||
public void setBirthday(String birthday) {
|
||||
this.birthday = birthday;
|
||||
}
|
||||
|
||||
public void setNameCard(String nameCard) {
|
||||
this.nameCard = nameCard;
|
||||
}
|
||||
|
||||
public String getNameCard() {
|
||||
return nameCard;
|
||||
}
|
||||
|
||||
public void setNickName(String nickName) {
|
||||
this.nickName = nickName;
|
||||
}
|
||||
|
||||
public String getNickName() {
|
||||
return this.nickName;
|
||||
}
|
||||
|
||||
public boolean isTopChat() {
|
||||
return isTopChat;
|
||||
}
|
||||
|
||||
public void setTopChat(boolean topChat) {
|
||||
isTopChat = topChat;
|
||||
}
|
||||
|
||||
public boolean isFriend() {
|
||||
return isFriend;
|
||||
}
|
||||
|
||||
public void setFriend(boolean friend) {
|
||||
isFriend = friend;
|
||||
}
|
||||
|
||||
public long getJoinTime() {
|
||||
return joinTime;
|
||||
}
|
||||
|
||||
public void setJoinTime(long joinTime) {
|
||||
this.joinTime = joinTime;
|
||||
}
|
||||
|
||||
public long getTinyId() {
|
||||
return tinyId;
|
||||
}
|
||||
|
||||
public void setTinyId(long tinyId) {
|
||||
this.tinyId = tinyId;
|
||||
}
|
||||
|
||||
public int getMemberType() {
|
||||
return memberType;
|
||||
}
|
||||
|
||||
public void setMemberType(int memberType) {
|
||||
this.memberType = memberType;
|
||||
}
|
||||
|
||||
public void setSelected(boolean selected) {
|
||||
isSelected = selected;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
return isSelected;
|
||||
}
|
||||
|
||||
public GroupMemberInfo covertTIMGroupMemberInfo(V2TIMGroupMemberInfo info) {
|
||||
if (info instanceof V2TIMGroupMemberFullInfo) {
|
||||
V2TIMGroupMemberFullInfo v2TIMGroupMemberFullInfo = (V2TIMGroupMemberFullInfo)info;
|
||||
setJoinTime(v2TIMGroupMemberFullInfo.getJoinTime());
|
||||
setMemberType(v2TIMGroupMemberFullInfo.getRole());
|
||||
}
|
||||
setAccount(info.getUserID());
|
||||
setNameCard(info.getNameCard());
|
||||
setIconUrl(info.getFaceUrl());
|
||||
setNickName(info.getNickName());
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
|
||||
public interface IGroupMemberChangedCallback {
|
||||
void onMemberRemoved(GroupMemberInfo memberInfo);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public interface IGroupMemberListener {
|
||||
|
||||
void forwardListMember(GroupInfo info);
|
||||
|
||||
void forwardAddMember(GroupInfo info);
|
||||
|
||||
void forwardDeleteMember(GroupInfo info);
|
||||
|
||||
default void setSelectedMember(ArrayList<String> members) {}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupApplyPresenter;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.view.GroupApplyManagerLayout;
|
||||
|
||||
public class GroupApplyManagerActivity extends BaseLightActivity {
|
||||
|
||||
private GroupApplyManagerLayout mManagerLayout;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.group_apply_manager_activity);
|
||||
if (getIntent().getExtras() == null) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
mManagerLayout = findViewById(R.id.group_apply_manager_layout);
|
||||
|
||||
GroupApplyPresenter presenter = new GroupApplyPresenter(mManagerLayout);
|
||||
mManagerLayout.setPresenter(presenter);
|
||||
|
||||
String groupId = getIntent().getExtras().getString(TUIGroupConstants.Group.GROUP_ID);
|
||||
GroupInfo groupInfo = new GroupInfo();
|
||||
groupInfo.setId(groupId);
|
||||
mManagerLayout.setDataSource(groupInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode != TUIGroupConstants.ActivityRequest.CODE_1) {
|
||||
return;
|
||||
}
|
||||
if (resultCode != RESULT_OK) {
|
||||
return;
|
||||
}
|
||||
GroupApplyInfo info = (GroupApplyInfo) data.getSerializableExtra(TUIGroupConstants.Group.MEMBER_APPLY);
|
||||
if (info == null) {
|
||||
return;
|
||||
}
|
||||
mManagerLayout.updateItemData(info);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfoActivity extends BaseLightActivity {
|
||||
|
||||
public static final int REQUEST_FOR_CHANGE_OWNER = 1;
|
||||
|
||||
private GroupInfoFragment fragment;
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.group_info_activity);
|
||||
fragment = new GroupInfoFragment();
|
||||
fragment.setArguments(getIntent().getExtras());
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.group_manager_base, fragment).commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
super.finish();
|
||||
setResult(1001);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == REQUEST_FOR_CHANGE_OWNER && data != null) {
|
||||
List<String> selectedList = data.getStringArrayListExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (selectedList != null && !selectedList.isEmpty()) {
|
||||
String newOwnerId = selectedList.get(0);
|
||||
fragment.changeGroupOwner(newOwnerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,253 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.activities.ImageSelectActivity;
|
||||
import com.tencent.qcloud.tuicore.component.fragments.BaseFragment;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.view.GroupInfoLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfoFragment extends BaseFragment {
|
||||
private static final int CHOOSE_AVATAR_REQUEST_CODE = 101;
|
||||
|
||||
private View baseView;
|
||||
private GroupInfoLayout groupInfoLayout;
|
||||
|
||||
private String groupId;
|
||||
|
||||
private GroupInfoPresenter groupInfoPresenter = null;
|
||||
private String mChatBackgroundThumbnailUrl;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
||||
baseView = inflater.inflate(R.layout.group_info_fragment, container, false);
|
||||
initView();
|
||||
return baseView;
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
Bundle bundle = getArguments();
|
||||
if (bundle == null) {
|
||||
ToastUtil.toastShortMessage("groupId is empty. bundle is null");
|
||||
return;
|
||||
}
|
||||
groupId = bundle.getString(TUIGroupConstants.Group.GROUP_ID);
|
||||
mChatBackgroundThumbnailUrl = bundle.getString(TUIConstants.TUIChat.CHAT_BACKGROUND_URI);
|
||||
groupInfoLayout = baseView.findViewById(R.id.group_info_layout);
|
||||
// 新建 presenter 与 layout 互相绑定
|
||||
groupInfoPresenter = new GroupInfoPresenter(groupInfoLayout);
|
||||
groupInfoPresenter.setGroupEventListener();
|
||||
groupInfoLayout.setGroupInfoPresenter(groupInfoPresenter);
|
||||
groupInfoLayout.setOnModifyGroupAvatarListener(new OnModifyGroupAvatarListener() {
|
||||
@Override
|
||||
public void onModifyGroupAvatar(String originAvatarUrl) {
|
||||
ArrayList<ImageSelectActivity.ImageBean> faceList = new ArrayList<>();
|
||||
for (int i = 0; i < TUIGroupConstants.GROUP_FACE_COUNT; i++) {
|
||||
ImageSelectActivity.ImageBean imageBean = new ImageSelectActivity.ImageBean();
|
||||
imageBean.setThumbnailUri(String.format(TUIGroupConstants.GROUP_FACE_URL, (i + 1) + ""));
|
||||
imageBean.setImageUri(String.format(TUIGroupConstants.GROUP_FACE_URL, (i + 1) + ""));
|
||||
faceList.add(imageBean);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(getContext(), ImageSelectActivity.class);
|
||||
intent.putExtra(ImageSelectActivity.TITLE, getResources().getString(R.string.group_choose_avatar));
|
||||
intent.putExtra(ImageSelectActivity.SPAN_COUNT, 4);
|
||||
intent.putExtra(ImageSelectActivity.ITEM_WIDTH, ScreenUtil.dip2px(77));
|
||||
intent.putExtra(ImageSelectActivity.ITEM_HEIGHT, ScreenUtil.dip2px(77));
|
||||
intent.putExtra(ImageSelectActivity.DATA, faceList);
|
||||
intent.putExtra(ImageSelectActivity.SELECTED, new ImageSelectActivity.ImageBean(originAvatarUrl, originAvatarUrl, false));
|
||||
startActivityForResult(intent, CHOOSE_AVATAR_REQUEST_CODE);
|
||||
}
|
||||
});
|
||||
groupInfoLayout.loadGroupInfo(groupId);
|
||||
groupInfoLayout.setRouter(new IGroupMemberListener() {
|
||||
@Override
|
||||
public void forwardListMember(GroupInfo info) {
|
||||
Intent intent = new Intent(getContext(), GroupMemberActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, false);
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, info.getId());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardAddMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FRIENDS, true);
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
for (GroupMemberInfo memberInfo : info.getMemberDetails()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
param.putStringArrayList(TUIGroupConstants.Selection.SELECTED_LIST, selectedList);
|
||||
TUICore.startActivity(GroupInfoFragment.this, "StartGroupMemberSelectActivity", param, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardDeleteMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FOR_CALL, true);
|
||||
TUICore.startActivity(GroupInfoFragment.this, "StartGroupMemberSelectActivity", param, 2);
|
||||
}
|
||||
});
|
||||
|
||||
groupInfoLayout.setOnButtonClickListener(new GroupInfoLayout.OnButtonClickListener() {
|
||||
@Override
|
||||
public void onSetChatBackground() {
|
||||
ArrayList<ImageSelectActivity.ImageBean> faceList = new ArrayList<>();
|
||||
ImageSelectActivity.ImageBean defaultFace = new ImageSelectActivity.ImageBean();
|
||||
defaultFace.setDefault(true);
|
||||
faceList.add(defaultFace);
|
||||
for (int i = 0; i < TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_COUNT; i++) {
|
||||
ImageSelectActivity.ImageBean imageBean = new ImageSelectActivity.ImageBean();
|
||||
imageBean.setImageUri(String.format(TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_URL, (i + 1) + ""));
|
||||
imageBean.setThumbnailUri(String.format(TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_THUMBNAIL_URL, (i + 1) + ""));
|
||||
faceList.add(imageBean);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(getContext(), ImageSelectActivity.class);
|
||||
intent.putExtra(ImageSelectActivity.TITLE, getResources().getString(R.string.chat_background_title));
|
||||
intent.putExtra(ImageSelectActivity.SPAN_COUNT, 2);
|
||||
intent.putExtra(ImageSelectActivity.ITEM_WIDTH, ScreenUtil.dip2px(186));
|
||||
intent.putExtra(ImageSelectActivity.ITEM_HEIGHT, ScreenUtil.dip2px(124));
|
||||
intent.putExtra(ImageSelectActivity.DATA, faceList);
|
||||
if (TextUtils.isEmpty(mChatBackgroundThumbnailUrl) || TextUtils.equals(TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_DEFAULT_URL, mChatBackgroundThumbnailUrl)) {
|
||||
intent.putExtra(ImageSelectActivity.SELECTED, defaultFace);
|
||||
} else {
|
||||
intent.putExtra(ImageSelectActivity.SELECTED, new ImageSelectActivity.ImageBean(mChatBackgroundThumbnailUrl, "", false));
|
||||
}
|
||||
intent.putExtra(ImageSelectActivity.NEED_DOWLOAD_LOCAL, true);
|
||||
startActivityForResult(intent, TUIConstants.TUIChat.CHAT_REQUEST_BACKGROUND_CODE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == 3) {
|
||||
List<String> friends = (List<String>) data.getSerializableExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (requestCode == 1) {
|
||||
inviteGroupMembers(friends);
|
||||
} else if (requestCode == 2) {
|
||||
deleteGroupMembers(friends);
|
||||
}
|
||||
} else if (requestCode == CHOOSE_AVATAR_REQUEST_CODE && resultCode == ImageSelectActivity.RESULT_CODE_SUCCESS) {
|
||||
if (data != null) {
|
||||
ImageSelectActivity.ImageBean imageBean = (ImageSelectActivity.ImageBean) data.getSerializableExtra(ImageSelectActivity.DATA);
|
||||
if (imageBean == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String avatarUrl = imageBean.getImageUri();
|
||||
modifyGroupAvatar(avatarUrl);
|
||||
}
|
||||
} else if (requestCode == TUIConstants.TUIChat.CHAT_REQUEST_BACKGROUND_CODE) {
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
ImageSelectActivity.ImageBean imageBean = (ImageSelectActivity.ImageBean) data.getSerializableExtra(ImageSelectActivity.DATA);
|
||||
if (imageBean == null) {
|
||||
TUIGroupLog.e("GroupInfoFragment", "onActivityResult imageBean is null");
|
||||
return;
|
||||
}
|
||||
|
||||
String backgroundUri = imageBean.getLocalPath();
|
||||
String thumbnailUri = imageBean.getThumbnailUri();
|
||||
String dataUri = thumbnailUri + "," + backgroundUri;
|
||||
TUIGroupLog.d("GroupInfoFragment", "onActivityResult backgroundUri = " + backgroundUri);
|
||||
mChatBackgroundThumbnailUrl = thumbnailUri;
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIChat.CHAT_ID, groupId);
|
||||
param.put(TUIConstants.TUIChat.CHAT_BACKGROUND_URI, dataUri);
|
||||
TUICore.callService(TUIConstants.TUIChat.SERVICE_NAME, TUIConstants.TUIChat.METHOD_UPDATE_DATA_STORE_CHAT_URI, param);
|
||||
}
|
||||
}
|
||||
|
||||
private void modifyGroupAvatar(String avatarUrl) {
|
||||
groupInfoLayout.modifyGroupAvatar(avatarUrl);
|
||||
}
|
||||
|
||||
private void deleteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
if (groupInfoPresenter != null) {
|
||||
groupInfoPresenter.deleteGroupMembers(groupId, friends, new IUIKitCallback<List<String>>() {
|
||||
@Override
|
||||
public void onSuccess(List<String> data) {
|
||||
groupInfoPresenter.loadGroupInfo(groupId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void inviteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
groupInfoPresenter.inviteGroupMembers(groupId, friends, new IUIKitCallback<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
if (data instanceof String) {
|
||||
ToastUtil.toastLongMessage(data.toString());
|
||||
} else {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_suc));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_fail) + errCode + "=" + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void changeGroupOwner(String newOwnerId) {
|
||||
groupInfoPresenter.transferGroupOwner(groupId, newOwnerId, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
groupInfoLayout.loadGroupInfo(groupId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public interface OnModifyGroupAvatarListener {
|
||||
void onModifyGroupAvatar(String originAvatarUrl);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import android.view.View;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.view.GroupMemberLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces.IGroupMemberListener;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class GroupMemberActivity extends BaseLightActivity {
|
||||
|
||||
private GroupMemberLayout mMemberLayout;
|
||||
private String groupID;
|
||||
private GroupInfoPresenter presenter;
|
||||
|
||||
private boolean isSelectMode = false;
|
||||
private ArrayList<String> excludeList;
|
||||
private ArrayList<String> alreadySelectedList;
|
||||
private String userData;
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.group_members_list);
|
||||
mMemberLayout = findViewById(R.id.group_member_grid_layout);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
Intent intent = getIntent();
|
||||
groupID = intent.getStringExtra(TUIConstants.TUIGroup.GROUP_ID);
|
||||
int limit = getIntent().getIntExtra(TUIConstants.TUIGroup.LIMIT, Integer.MAX_VALUE);
|
||||
isSelectMode = intent.getBooleanExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
String title = intent.getStringExtra(TUIConstants.TUIGroup.TITLE);
|
||||
excludeList = intent.getStringArrayListExtra(TUIConstants.TUIGroup.EXCLUDE_LIST);
|
||||
alreadySelectedList = intent.getStringArrayListExtra(TUIConstants.TUIGroup.SELECTED_LIST);
|
||||
userData = intent.getStringExtra(TUIConstants.TUIGroup.USER_DATA);
|
||||
int filter = intent.getIntExtra(TUIConstants.TUIGroup.FILTER, GroupInfo.GROUP_MEMBER_FILTER_ALL);
|
||||
mMemberLayout.setSelectMode(isSelectMode);
|
||||
mMemberLayout.setTitle(title);
|
||||
mMemberLayout.setExcludeList(excludeList);
|
||||
mMemberLayout.setAlreadySelectedList(alreadySelectedList);
|
||||
presenter = new GroupInfoPresenter(mMemberLayout);
|
||||
mMemberLayout.setPresenter(presenter);
|
||||
presenter.loadGroupInfo(groupID, filter);
|
||||
|
||||
mMemberLayout.getTitleBar().setOnLeftClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
mMemberLayout.setGroupMemberListener(new IGroupMemberListener() {
|
||||
|
||||
@Override
|
||||
public void setSelectedMember(ArrayList<String> members) {
|
||||
if (members == null || members.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (members.size() > limit) {
|
||||
String overLimitTip = getString(R.string.group_over_limit_tip, limit);
|
||||
ToastUtil.toastShortMessage(overLimitTip);
|
||||
return;
|
||||
}
|
||||
Intent result = new Intent();
|
||||
result.putStringArrayListExtra(TUIConstants.TUIGroup.LIST, members);
|
||||
setResult(0, result);
|
||||
|
||||
Map<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.LIST, members);
|
||||
param.put(TUIConstants.TUIGroup.USER_DATA, userData);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_GROUP_MEMBER_SELECTED, param);
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardListMember(GroupInfo info) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardAddMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FRIENDS, true);
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
for (GroupMemberInfo memberInfo : info.getMemberDetails()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
param.putStringArrayList(TUIGroupConstants.Selection.SELECTED_LIST, selectedList);
|
||||
TUICore.startActivity(GroupMemberActivity.this, "StartGroupMemberSelectActivity", param, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardDeleteMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FOR_CALL, true);
|
||||
TUICore.startActivity(GroupMemberActivity.this, "StartGroupMemberSelectActivity", param, 2);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == 3) {
|
||||
List<String> friends = (List<String>) data.getSerializableExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (requestCode == 1) {
|
||||
inviteGroupMembers(friends);
|
||||
} else if (requestCode == 2) {
|
||||
deleteGroupMembers(friends);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
if (presenter != null) {
|
||||
presenter.deleteGroupMembers(groupID, friends, new IUIKitCallback<List<String>>() {
|
||||
@Override
|
||||
public void onSuccess(List<String> data) {
|
||||
presenter.loadGroupInfo(groupID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void inviteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
if (presenter != null) {
|
||||
presenter.inviteGroupMembers(groupID, friends, new IUIKitCallback<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
if (data instanceof String) {
|
||||
ToastUtil.toastLongMessage(data.toString());
|
||||
} else {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_suc));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_fail) + errCode + "=" + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.page;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupManagerPresenter;
|
||||
|
||||
public class GroupNoticeActivity extends BaseLightActivity {
|
||||
|
||||
private static OnGroupNoticeChangedListener changedListener;
|
||||
|
||||
private EditText editText;
|
||||
|
||||
private GroupInfo groupInfo;
|
||||
|
||||
private TitleBarLayout titleBarLayout;
|
||||
|
||||
private boolean isEditModel = false;
|
||||
|
||||
private GroupManagerPresenter presenter;
|
||||
|
||||
public static void setOnGroupNoticeChangedListener(OnGroupNoticeChangedListener listener) {
|
||||
GroupNoticeActivity.changedListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_group_notice);
|
||||
editText = findViewById(R.id.group_notice_text);
|
||||
titleBarLayout = findViewById(R.id.group_notice_title_bar);
|
||||
groupInfo = (GroupInfo) getIntent().getSerializableExtra(TUIGroupConstants.Group.GROUP_INFO);
|
||||
presenter = new GroupManagerPresenter();
|
||||
if (!TextUtils.isEmpty(groupInfo.getNotice())) {
|
||||
editText.setText(groupInfo.getNotice());
|
||||
}
|
||||
titleBarLayout.getLeftGroup().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
titleBarLayout.setTitle(getString(R.string.group_notice), ITitleBarLayout.Position.MIDDLE);
|
||||
titleBarLayout.getRightIcon().setVisibility(View.GONE);
|
||||
|
||||
if (groupInfo.isCanManagerGroup()) {
|
||||
titleBarLayout.setTitle(getString(R.string.group_edit), ITitleBarLayout.Position.RIGHT);
|
||||
}
|
||||
titleBarLayout.getRightGroup().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!isEditModel) {
|
||||
titleBarLayout.setTitle(getString(com.tencent.qcloud.tuicore.R.string.sure), ITitleBarLayout.Position.RIGHT);
|
||||
editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
|
||||
editText.setClickable(true);
|
||||
editText.setFocusable(true);
|
||||
editText.setFocusableInTouchMode(true);
|
||||
showSoftInput();
|
||||
editText.setSelection(editText.getText().toString().length());
|
||||
isEditModel = true;
|
||||
} else {
|
||||
titleBarLayout.setTitle(getString(R.string.group_edit), ITitleBarLayout.Position.RIGHT);
|
||||
editText.setInputType(EditorInfo.TYPE_NULL);
|
||||
editText.setClickable(false);
|
||||
editText.setFocusable(false);
|
||||
editText.setFocusableInTouchMode(false);
|
||||
hideSoftInput();
|
||||
setGroupNotice(editText.getText().toString());
|
||||
isEditModel = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setGroupNotice(String groupNotice) {
|
||||
if (TextUtils.equals(groupNotice, groupInfo.getNotice())) {
|
||||
return;
|
||||
}
|
||||
presenter.modifyGroupNotification(groupInfo.getId(), groupNotice, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
groupInfo.setNotice(groupNotice);
|
||||
if (changedListener != null) {
|
||||
changedListener.onChanged(groupNotice);
|
||||
}
|
||||
ToastUtil.toastShortMessage(getResources().getString(R.string.modify_group_notice_success));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage("modifyGroupNotice error , errCode " + errCode + " errMsg " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showSoftInput() {
|
||||
editText.requestFocus();
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (!isSoftInputShown()) {
|
||||
imm.toggleSoftInput(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void hideSoftInput() {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
|
||||
editText.clearFocus();
|
||||
}
|
||||
|
||||
private boolean isSoftInputShown() {
|
||||
View decorView = getWindow().getDecorView();
|
||||
int screenHeight = decorView.getHeight();
|
||||
Rect rect = new Rect();
|
||||
decorView.getWindowVisibleDisplayFrame(rect);
|
||||
return screenHeight - rect.bottom - getNavigateBarHeight() >= 0;
|
||||
}
|
||||
|
||||
// 兼容有导航键的情况
|
||||
private int getNavigateBarHeight() {
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
|
||||
windowManager.getDefaultDisplay().getMetrics(metrics);
|
||||
int usableHeight = metrics.heightPixels;
|
||||
windowManager.getDefaultDisplay().getRealMetrics(metrics);
|
||||
int realHeight = metrics.heightPixels;
|
||||
if (realHeight > usableHeight) {
|
||||
return realHeight - usableHeight;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnGroupNoticeChangedListener {
|
||||
void onChanged(String notice);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,318 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.page;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.component.CustomLinearLayoutManager;
|
||||
import com.tencent.qcloud.tuicore.component.LineControllerView;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupManagerPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ManageGroupActivity extends BaseLightActivity {
|
||||
|
||||
private TitleBarLayout titleBarLayout;
|
||||
private LineControllerView setManagerView;
|
||||
private LineControllerView muteAllView;
|
||||
private View addMuteMemberView;
|
||||
private RecyclerView mutedList;
|
||||
private MutedMemberAdapter mutedMemberAdapter;
|
||||
|
||||
private GroupManagerPresenter presenter;
|
||||
private GroupInfo groupInfo;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_group_manager);
|
||||
presenter = new GroupManagerPresenter();
|
||||
titleBarLayout = findViewById(R.id.group_manage_title_bar);
|
||||
setManagerView = findViewById(R.id.group_manage_set_manager);
|
||||
muteAllView = findViewById(R.id.group_manage_mute_all);
|
||||
addMuteMemberView = findViewById(R.id.group_manage_add_mute_member);
|
||||
mutedList = findViewById(R.id.group_manage_muted_member_list);
|
||||
mutedList.setLayoutManager(new CustomLinearLayoutManager(this));
|
||||
mutedMemberAdapter = new MutedMemberAdapter();
|
||||
mutedList.setAdapter(mutedMemberAdapter);
|
||||
|
||||
groupInfo = (GroupInfo) getIntent().getSerializableExtra(TUIGroupConstants.Group.GROUP_INFO);
|
||||
|
||||
muteAllView.setChecked(groupInfo.isAllMuted());
|
||||
if (groupInfo.isAllMuted()) {
|
||||
addMuteMemberView.setVisibility(View.GONE);
|
||||
mutedList.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
titleBarLayout.setTitle(getString(R.string.group_manager), ITitleBarLayout.Position.MIDDLE);
|
||||
setClickListener();
|
||||
loadMutedMember();
|
||||
}
|
||||
|
||||
private void setClickListener() {
|
||||
titleBarLayout.getLeftIcon().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
muteAllView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
presenter.muteAll(groupInfo.getId(), isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
if (isChecked) {
|
||||
addMuteMemberView.setVisibility(View.GONE);
|
||||
mutedList.setVisibility(View.GONE);
|
||||
} else {
|
||||
addMuteMemberView.setVisibility(View.VISIBLE);
|
||||
mutedList.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
setManagerView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_AVCHATROOM)
|
||||
|| TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_WORK)) {
|
||||
ToastUtil.toastShortMessage(getString(R.string.group_not_support_set_manager));
|
||||
return;
|
||||
}
|
||||
Intent intent = new Intent(ManageGroupActivity.this, SetGroupManagerActivity.class);
|
||||
intent.putExtra(TUIGroupConstants.Group.GROUP_INFO, groupInfo);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
addMuteMemberView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_AVCHATROOM)
|
||||
|| TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_WORK)) {
|
||||
ToastUtil.toastShortMessage(getString(R.string.group_not_support_mute_member));
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(ManageGroupActivity.this, GroupMemberActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
intent.putExtra(TUIConstants.TUIGroup.FILTER, GroupInfo.GROUP_MEMBER_FILTER_COMMON);
|
||||
if (mutedMemberAdapter.getGroupMemberInfoList() != null) {
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
for (GroupMemberInfo memberInfo : mutedMemberAdapter.getGroupMemberInfoList()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
intent.putExtra(TUIConstants.TUIGroup.SELECTED_LIST, selectedList);
|
||||
}
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, groupInfo.getId());
|
||||
startActivityForResult(intent, 1);
|
||||
}
|
||||
});
|
||||
|
||||
mutedMemberAdapter.setOnItemLongClickListener(new SetGroupManagerActivity.OnItemLongClickListener() {
|
||||
@Override
|
||||
public void onClick(View view, GroupMemberInfo memberInfo, int position) {
|
||||
Drawable drawable = view.getBackground();
|
||||
if (drawable != null) {
|
||||
drawable.setColorFilter(0xd9d9d9, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
View itemPop = LayoutInflater.from(ManageGroupActivity.this).inflate(R.layout.group_manager_pop_menu, null);
|
||||
PopupWindow popupWindow = new PopupWindow(itemPop, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
|
||||
popupWindow.setBackgroundDrawable(new ColorDrawable());
|
||||
popupWindow.setOutsideTouchable(true);
|
||||
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss() {
|
||||
if (drawable != null) {
|
||||
drawable.clearColorFilter();
|
||||
}
|
||||
}
|
||||
});
|
||||
TextView popText = itemPop.findViewById(R.id.pop_text);
|
||||
popText.setText(R.string.group_cancel_mute_label);
|
||||
popText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
popupWindow.dismiss();
|
||||
presenter.cancelMuteGroupMember(groupInfo.getId(), memberInfo.getAccount(), new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mutedMemberAdapter.onItemRemoved(memberInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
int x = view.getWidth() / 2;
|
||||
int y = - view.getHeight() / 3;
|
||||
int popHeight = ScreenUtil.dip2px(45) * 3;
|
||||
if (y + popHeight + view.getY() + view.getHeight() > mutedList.getBottom()) {
|
||||
y = y - popHeight;
|
||||
}
|
||||
popupWindow.showAsDropDown(view, x, y, Gravity.TOP | Gravity.START);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void loadMutedMember() {
|
||||
presenter.loadMutedMembers(groupInfo.getId(), new IUIKitCallback<List<GroupMemberInfo>>() {
|
||||
@Override
|
||||
public void onSuccess(List<GroupMemberInfo> data) {
|
||||
mutedMemberAdapter.setGroupMemberInfoList(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == 1 && data != null) {
|
||||
List<String> selectedList = data.getStringArrayListExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (selectedList != null && !selectedList.isEmpty()) {
|
||||
for (String userId : selectedList) {
|
||||
presenter.muteGroupMember(groupInfo.getId(), userId, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
loadMutedMember();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class MutedMemberAdapter extends RecyclerView.Adapter<MutedMemberAdapter.MutedMemberViewHolder> {
|
||||
|
||||
private List<GroupMemberInfo> groupMemberInfoList;
|
||||
|
||||
private SetGroupManagerActivity.OnItemLongClickListener onItemLongClickListener;
|
||||
|
||||
public void setOnItemLongClickListener(SetGroupManagerActivity.OnItemLongClickListener onItemLongClickListener) {
|
||||
this.onItemLongClickListener = onItemLongClickListener;
|
||||
}
|
||||
|
||||
public void onItemRemoved(GroupMemberInfo memberInfo) {
|
||||
int index = groupMemberInfoList.indexOf(memberInfo);
|
||||
groupMemberInfoList.remove(memberInfo);
|
||||
notifyItemRemoved(index);
|
||||
}
|
||||
|
||||
public void setGroupMemberInfoList(List<GroupMemberInfo> groupMemberInfoList) {
|
||||
this.groupMemberInfoList = groupMemberInfoList;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public List<GroupMemberInfo> getGroupMemberInfoList() {
|
||||
return groupMemberInfoList;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public MutedMemberViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_manager_item, parent, false);
|
||||
return new MutedMemberViewHolder(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull MutedMemberViewHolder holder, int position) {
|
||||
GroupMemberInfo groupMemberInfo = groupMemberInfoList.get(position);
|
||||
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (onItemLongClickListener != null) {
|
||||
onItemLongClickListener.onClick(v, groupMemberInfo, position);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
String displayName = getDisplayName(groupMemberInfo);
|
||||
holder.managerName.setText(displayName);
|
||||
GlideEngine.loadUserIcon(holder.faceIcon, groupMemberInfo.getIconUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (groupMemberInfoList == null || groupMemberInfoList.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return groupMemberInfoList.size();
|
||||
}
|
||||
|
||||
class MutedMemberViewHolder extends RecyclerView.ViewHolder {
|
||||
ShadeImageView faceIcon;
|
||||
TextView managerName;
|
||||
public MutedMemberViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
faceIcon = itemView.findViewById(R.id.group_manager_face);
|
||||
managerName = itemView.findViewById(R.id.group_manage_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getDisplayName(GroupMemberInfo groupMemberInfo) {
|
||||
String displayName = groupMemberInfo.getNameCard();
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getNickName();
|
||||
}
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getAccount();
|
||||
}
|
||||
return displayName;
|
||||
}
|
||||
|
||||
interface OnItemLongClickListener {
|
||||
void onClick(View view, GroupMemberInfo groupMemberInfo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,288 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.page;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.component.CustomLinearLayoutManager;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupManagerPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SetGroupManagerActivity extends BaseLightActivity {
|
||||
private TitleBarLayout titleBarLayout;
|
||||
private TextView managerCountLabel;
|
||||
|
||||
private GroupManagerPresenter presenter;
|
||||
private GroupInfo groupInfo;
|
||||
private RecyclerView managerList;
|
||||
private ManagerAdapter managerAdapter;
|
||||
private ShadeImageView ownerFace;
|
||||
private TextView ownerName;
|
||||
private View setManagerView;
|
||||
private String ownerID;
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_set_group_manager);
|
||||
titleBarLayout = findViewById(R.id.set_group_manager_title_bar);
|
||||
managerCountLabel = findViewById(R.id.set_group_manager_manager_label);
|
||||
managerList = findViewById(R.id.set_group_manager_manager_list);
|
||||
ownerFace = findViewById(R.id.set_group_manager_owner_face);
|
||||
ownerName = findViewById(R.id.set_group_manager_owner_name);
|
||||
setManagerView = findViewById(R.id.set_group_manager_add_manager);
|
||||
|
||||
titleBarLayout.setTitle(getString(R.string.group_set_manager), ITitleBarLayout.Position.MIDDLE);
|
||||
managerList.setLayoutManager(new CustomLinearLayoutManager(this));
|
||||
managerAdapter = new ManagerAdapter();
|
||||
managerList.setAdapter(managerAdapter);
|
||||
groupInfo = (GroupInfo) getIntent().getSerializableExtra(TUIGroupConstants.Group.GROUP_INFO);
|
||||
|
||||
presenter = new GroupManagerPresenter();
|
||||
|
||||
setClickListener();
|
||||
loadGroupManager();
|
||||
loadGroupOwner();
|
||||
}
|
||||
|
||||
private void loadGroupManager() {
|
||||
presenter.loadGroupManager(groupInfo.getId(), new IUIKitCallback<List<GroupMemberInfo>>() {
|
||||
@Override
|
||||
public void onSuccess(List<GroupMemberInfo> data) {
|
||||
if (data != null) {
|
||||
managerCountLabel.setText(getString(R.string.group_add_manager_count_label, data.size()));
|
||||
managerAdapter.setGroupMemberInfoList(data);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void loadGroupOwner() {
|
||||
presenter.loadGroupOwner(groupInfo.getId(), new IUIKitCallback<GroupMemberInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupMemberInfo data) {
|
||||
ownerID = data.getAccount();
|
||||
String faceUrl = data.getIconUrl();
|
||||
String displayName = getDisplayName(data);
|
||||
GlideEngine.loadUserIcon(ownerFace, faceUrl);
|
||||
ownerName.setText(displayName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setClickListener() {
|
||||
titleBarLayout.getLeftIcon().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
setManagerView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(SetGroupManagerActivity.this, GroupMemberActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
if (managerAdapter.getGroupMemberInfoList() != null) {
|
||||
for (GroupMemberInfo memberInfo : managerAdapter.getGroupMemberInfoList()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
intent.putExtra(TUIConstants.TUIGroup.SELECTED_LIST, selectedList);
|
||||
}
|
||||
ArrayList<String> excludeList = new ArrayList<>();
|
||||
excludeList.add(ownerID);
|
||||
intent.putExtra(TUIConstants.TUIGroup.EXCLUDE_LIST, excludeList);
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, groupInfo.getId());
|
||||
startActivityForResult(intent, 1);
|
||||
}
|
||||
});
|
||||
|
||||
managerAdapter.setOnItemLongClickListener(new OnItemLongClickListener() {
|
||||
@Override
|
||||
public void onClick(View view, GroupMemberInfo memberInfo, int position) {
|
||||
Drawable drawable = view.getBackground();
|
||||
if (drawable != null) {
|
||||
drawable.setColorFilter(0xd9d9d9, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
View itemPop = LayoutInflater.from(SetGroupManagerActivity.this).inflate(R.layout.group_manager_pop_menu, null);
|
||||
PopupWindow popupWindow = new PopupWindow(itemPop, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
|
||||
popupWindow.setBackgroundDrawable(new ColorDrawable());
|
||||
popupWindow.setOutsideTouchable(true);
|
||||
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss() {
|
||||
if (drawable != null) {
|
||||
drawable.clearColorFilter();
|
||||
}
|
||||
}
|
||||
});
|
||||
TextView popText = itemPop.findViewById(R.id.pop_text);
|
||||
popText.setText(R.string.group_remove_manager_label);
|
||||
popText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
popupWindow.dismiss();
|
||||
presenter.clearGroupManager(groupInfo.getId(), memberInfo.getAccount(), new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
loadGroupManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
int x = view.getWidth() / 2;
|
||||
int y = - view.getHeight() / 3;
|
||||
int popHeight = ScreenUtil.dip2px(45) * 3;
|
||||
if (y + popHeight + view.getY() + view.getHeight() > managerList.getBottom()) {
|
||||
y = y - popHeight;
|
||||
}
|
||||
popupWindow.showAsDropDown(view, x, y, Gravity.TOP | Gravity.START);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == 1 && data != null) {
|
||||
List<String> selectedList = data.getStringArrayListExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (selectedList != null && !selectedList.isEmpty()) {
|
||||
for (String userId : selectedList) {
|
||||
presenter.setGroupManager(groupInfo.getId(), userId, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
loadGroupManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ManagerAdapter extends RecyclerView.Adapter<ManagerAdapter.ManagerViewHolder> {
|
||||
|
||||
private List<GroupMemberInfo> groupMemberInfoList;
|
||||
|
||||
private OnItemLongClickListener onItemLongClickListener;
|
||||
|
||||
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
|
||||
this.onItemLongClickListener = onItemLongClickListener;
|
||||
}
|
||||
|
||||
public void setGroupMemberInfoList(List<GroupMemberInfo> groupMemberInfoList) {
|
||||
this.groupMemberInfoList = groupMemberInfoList;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public List<GroupMemberInfo> getGroupMemberInfoList() {
|
||||
return groupMemberInfoList;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ManagerAdapter.ManagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_manager_item, parent, false);
|
||||
return new ManagerViewHolder(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ManagerViewHolder holder, int position) {
|
||||
GroupMemberInfo groupMemberInfo = groupMemberInfoList.get(position);
|
||||
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (onItemLongClickListener != null) {
|
||||
onItemLongClickListener.onClick(v, groupMemberInfo, position);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
String displayName = getDisplayName(groupMemberInfo);
|
||||
holder.managerName.setText(displayName);
|
||||
GlideEngine.loadUserIcon(holder.faceIcon, groupMemberInfo.getIconUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (groupMemberInfoList == null || groupMemberInfoList.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return groupMemberInfoList.size();
|
||||
}
|
||||
|
||||
class ManagerViewHolder extends RecyclerView.ViewHolder {
|
||||
ShadeImageView faceIcon;
|
||||
TextView managerName;
|
||||
public ManagerViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
faceIcon = itemView.findViewById(R.id.group_manager_face);
|
||||
managerName = itemView.findViewById(R.id.group_manage_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getDisplayName(GroupMemberInfo groupMemberInfo) {
|
||||
String displayName = groupMemberInfo.getNameCard();
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getNickName();
|
||||
}
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getAccount();
|
||||
}
|
||||
return displayName;
|
||||
}
|
||||
|
||||
interface OnItemLongClickListener {
|
||||
void onClick(View view, GroupMemberInfo groupMemberInfo, int position);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.view;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupApplyPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupApplyAdapter extends BaseAdapter {
|
||||
|
||||
private List<GroupApplyInfo> mGroupMembers = new ArrayList<>();
|
||||
private OnItemClickListener mOnItemClickListener;
|
||||
private GroupApplyPresenter presenter;
|
||||
|
||||
public GroupApplyAdapter() {
|
||||
|
||||
}
|
||||
|
||||
public void setPresenter(GroupApplyPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mGroupMembers.size();
|
||||
}
|
||||
|
||||
public int getUnHandledSize() {
|
||||
int total = 0;
|
||||
for (GroupApplyInfo i : mGroupMembers) {
|
||||
if (i.getStatus() == GroupApplyInfo.UNHANDLED) {
|
||||
total++;
|
||||
}
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupApplyInfo getItem(int i) {
|
||||
return mGroupMembers.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int i) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(final int i, View view, ViewGroup viewGroup) {
|
||||
MyViewHolder holder;
|
||||
final GroupApplyInfo info = getItem(i);
|
||||
if (view == null) {
|
||||
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.group_member_apply_adpater, viewGroup, false);
|
||||
view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mOnItemClickListener != null && info.getStatus() == GroupApplyInfo.UNHANDLED) {
|
||||
mOnItemClickListener.onItemClick(info);
|
||||
}
|
||||
}
|
||||
});
|
||||
holder = new MyViewHolder();
|
||||
holder.memberIcon = view.findViewById(R.id.group_apply_member_icon);
|
||||
holder.memberName = view.findViewById(R.id.group_apply_member_name);
|
||||
holder.reason = view.findViewById(R.id.group_apply_reason);
|
||||
holder.accept = view.findViewById(R.id.group_apply_accept);
|
||||
holder.refuse = view.findViewById(R.id.group_apply_refuse);
|
||||
view.setTag(holder);
|
||||
} else {
|
||||
holder = (MyViewHolder) view.getTag();
|
||||
}
|
||||
holder.memberName.setText(info.getGroupApplication().getFromUser());
|
||||
holder.reason.setText(info.getGroupApplication().getRequestMsg());
|
||||
if (info.getStatus() == GroupApplyInfo.UNHANDLED) {
|
||||
holder.accept.setVisibility(View.VISIBLE);
|
||||
holder.accept.setText(R.string.accept);
|
||||
holder.accept.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.color.bg_positive_btn));
|
||||
holder.accept.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
acceptApply(i, info);
|
||||
}
|
||||
});
|
||||
holder.refuse.setVisibility(View.VISIBLE);
|
||||
holder.refuse.setText(R.string.refuse);
|
||||
holder.refuse.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.color.bg_negative_btn));
|
||||
holder.refuse.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
refuseApply(i, info);
|
||||
}
|
||||
});
|
||||
} else if (info.getStatus() == GroupApplyInfo.APPLIED) {
|
||||
holder.accept.setVisibility(View.VISIBLE);
|
||||
holder.accept.setClickable(false);
|
||||
holder.accept.setText(R.string.accepted);
|
||||
holder.accept.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.drawable.gray_btn_bg));
|
||||
holder.refuse.setVisibility(View.GONE);
|
||||
} else if (info.getStatus() == GroupApplyInfo.REFUSED) {
|
||||
holder.refuse.setVisibility(View.VISIBLE);
|
||||
holder.refuse.setClickable(false);
|
||||
holder.refuse.setText(R.string.refused);
|
||||
holder.refuse.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.drawable.gray_btn_bg));
|
||||
holder.accept.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
public void setOnItemClickListener(OnItemClickListener l) {
|
||||
mOnItemClickListener = l;
|
||||
}
|
||||
|
||||
public void updateItemData(GroupApplyInfo info) {
|
||||
for (GroupApplyInfo i : mGroupMembers) {
|
||||
if (TextUtils.equals(i.getGroupApplication().getFromUser(), info.getGroupApplication().getFromUser())) {
|
||||
i.setStatus(info.getStatus());
|
||||
notifyDataSetChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo info) {
|
||||
presenter.loadGroupApplies();
|
||||
}
|
||||
|
||||
public void setDataSource(List<GroupApplyInfo> applyInfoList) {
|
||||
mGroupMembers = applyInfoList;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void acceptApply(final int position, final GroupApplyInfo item) {
|
||||
if (presenter == null) {
|
||||
return;
|
||||
}
|
||||
presenter.acceptApply(item);
|
||||
}
|
||||
|
||||
public void refuseApply(final int position, final GroupApplyInfo item) {
|
||||
if (presenter == null) {
|
||||
return;
|
||||
}
|
||||
presenter.refuseApply(item);
|
||||
}
|
||||
|
||||
public interface OnItemClickListener {
|
||||
void onItemClick(GroupApplyInfo info);
|
||||
}
|
||||
|
||||
private class MyViewHolder {
|
||||
private ImageView memberIcon;
|
||||
private TextView memberName, reason;
|
||||
private Button accept, refuse;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.view;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupApplyLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupApplyPresenter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupApplyManagerLayout extends LinearLayout implements IGroupApplyLayout {
|
||||
|
||||
private TitleBarLayout mTitleBar;
|
||||
private ListView mApplyMemberList;
|
||||
private GroupApplyAdapter mAdapter;
|
||||
|
||||
private GroupApplyPresenter presenter;
|
||||
public GroupApplyManagerLayout(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupApplyManagerLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupApplyManagerLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.group_apply_manager_layout, this);
|
||||
mApplyMemberList = findViewById(R.id.group_apply_members);
|
||||
mAdapter = new GroupApplyAdapter();
|
||||
mAdapter.setOnItemClickListener(new GroupApplyAdapter.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(GroupApplyInfo info) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("fromUser", info.getFromUser());
|
||||
bundle.putString("fromUserNickName", info.getFromUserNickName());
|
||||
bundle.putString("requestMsg", info.getRequestMsg());
|
||||
bundle.putSerializable("groupApplication", info.getGroupApplication());
|
||||
TUICore.startActivity(getContext(),"FriendProfileActivity", bundle, TUIGroupConstants.ActivityRequest.CODE_1);
|
||||
}
|
||||
});
|
||||
mApplyMemberList.setAdapter(mAdapter);
|
||||
mTitleBar = findViewById(R.id.group_apply_title_bar);
|
||||
mTitleBar.getRightGroup().setVisibility(View.GONE);
|
||||
mTitleBar.setTitle(getResources().getString(R.string.group_apply_members), ITitleBarLayout.Position.MIDDLE);
|
||||
mTitleBar.setOnLeftClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (getContext() instanceof Activity) {
|
||||
((Activity) getContext()).finish();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public TitleBarLayout getTitleBar() {
|
||||
return mTitleBar;
|
||||
}
|
||||
|
||||
public void updateItemData(GroupApplyInfo info) {
|
||||
mAdapter.updateItemData(info);
|
||||
}
|
||||
|
||||
public void onDataSetChanged() {
|
||||
mAdapter.notifyDataSetChanged();
|
||||
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIChat.IS_GROUP_CHAT, true);
|
||||
param.put(TUIConstants.TUIChat.GROUP_APPLY_NUM, mAdapter.getCount()-1);
|
||||
TUICore.callService(TUIConstants.TUIChat.SERVICE_NAME, TUIConstants.TUIChat.METHOD_GROUP_APPLICAITON_PROCESSED, param);
|
||||
}
|
||||
|
||||
public void setPresenter(GroupApplyPresenter groupApplyPresenter) {
|
||||
this.presenter = groupApplyPresenter;
|
||||
mAdapter.setPresenter(groupApplyPresenter);
|
||||
}
|
||||
|
||||
public void onGroupApplyInfoListChanged(List<GroupApplyInfo> applyInfoList) {
|
||||
mAdapter.setDataSource(applyInfoList);
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo dataSource) {
|
||||
presenter.setGroupInfo(dataSource);
|
||||
mAdapter.setDataSource(dataSource);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.view;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.util.BackgroundTasks;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfoAdapter extends BaseAdapter {
|
||||
|
||||
private static final int ADD_TYPE = -100;
|
||||
private static final int DEL_TYPE = -101;
|
||||
private static final int OWNER_PRIVATE_MAX_LIMIT = 8; //讨论组,owner可以添加成员和删除成员,
|
||||
private static final int OWNER_PUBLIC_MAX_LIMIT = 9; //公开群,owner不可以添加成员,但是可以删除成员
|
||||
private static final int OWNER_CHATROOM_MAX_LIMIT = 9; //聊天室,owner不可以添加成员,但是可以删除成员
|
||||
private static final int OWNER_COMMUNITY_MAX_LIMIT = 8; //社群,owner可以添加成员和删除成员,
|
||||
private static final int NORMAL_PRIVATE_MAX_LIMIT = 9; //讨论组,普通人可以添加成员
|
||||
private static final int NORMAL_PUBLIC_MAX_LIMIT = 10; //公开群,普通人没有权限添加成员和删除成员
|
||||
private static final int NORMAL_CHATROOM_MAX_LIMIT = 10; //聊天室,普通人没有权限添加成员和删除成员
|
||||
private static final int NORMAL_COMMUNITY_MAX_LIMIT = 9; //社群,普通人可以添加成员
|
||||
|
||||
private List<GroupMemberInfo> mGroupMembers = new ArrayList<>();
|
||||
private IGroupMemberListener mTailListener;
|
||||
private GroupInfo mGroupInfo;
|
||||
|
||||
private GroupInfoPresenter presenter;
|
||||
|
||||
public void setPresenter(GroupInfoPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
}
|
||||
|
||||
public void setManagerCallBack(IGroupMemberListener listener) {
|
||||
mTailListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mGroupMembers.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupMemberInfo getItem(int i) {
|
||||
return mGroupMembers.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int i) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(final int i, View view, final ViewGroup viewGroup) {
|
||||
MyViewHolder holder;
|
||||
if (view == null) {
|
||||
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.group_member_item_layout, viewGroup, false);
|
||||
holder = new MyViewHolder();
|
||||
holder.memberIcon = view.findViewById(R.id.group_member_icon);
|
||||
holder.memberName = view.findViewById(R.id.group_member_name);
|
||||
view.setTag(holder);
|
||||
} else {
|
||||
holder = (MyViewHolder) view.getTag();
|
||||
}
|
||||
final GroupMemberInfo info = getItem(i);
|
||||
GlideEngine.loadImage(holder.memberIcon, info.getIconUrl());
|
||||
// 显示优先级 群名片->昵称->账号
|
||||
if (!TextUtils.isEmpty(info.getNameCard())) {
|
||||
holder.memberName.setText(info.getNameCard());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getNickName())) {
|
||||
holder.memberName.setText(info.getNickName());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getAccount())) {
|
||||
holder.memberName.setText(info.getAccount());
|
||||
} else {
|
||||
holder.memberName.setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
view.setOnClickListener(null);
|
||||
holder.memberIcon.setBackground(null);
|
||||
holder.memberIcon.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||
if (info.getMemberType() == ADD_TYPE) {
|
||||
holder.memberIcon.setImageResource(R.drawable.add_group_member);
|
||||
holder.memberIcon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
|
||||
holder.memberIcon.setBackgroundResource(R.drawable.bottom_action_border);
|
||||
view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mTailListener != null) {
|
||||
mTailListener.forwardAddMember(mGroupInfo);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if (info.getMemberType() == DEL_TYPE) {
|
||||
holder.memberIcon.setImageResource(R.drawable.del_group_member);
|
||||
holder.memberIcon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
|
||||
holder.memberIcon.setBackgroundResource(R.drawable.bottom_action_border);
|
||||
view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mTailListener != null) {
|
||||
mTailListener.forwardDeleteMember(mGroupInfo);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return view;
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo info) {
|
||||
mGroupInfo = info;
|
||||
mGroupMembers.clear();
|
||||
List<GroupMemberInfo> members = info.getMemberDetails();
|
||||
if (members != null) {
|
||||
int shootMemberCount = 0;
|
||||
if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_PRIVATE)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_WORK)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_PRIVATE_MAX_LIMIT ? OWNER_PRIVATE_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_PRIVATE_MAX_LIMIT ? NORMAL_PRIVATE_MAX_LIMIT : members.size();
|
||||
}
|
||||
} else if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_PUBLIC)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_PUBLIC_MAX_LIMIT ? OWNER_PUBLIC_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_PUBLIC_MAX_LIMIT ? NORMAL_PUBLIC_MAX_LIMIT : members.size();
|
||||
}
|
||||
} else if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_CHAT_ROOM)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_MEETING)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_CHATROOM_MAX_LIMIT ? OWNER_CHATROOM_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_CHATROOM_MAX_LIMIT ? NORMAL_CHATROOM_MAX_LIMIT : members.size();
|
||||
}
|
||||
} else if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_COMMUNITY)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_COMMUNITY_MAX_LIMIT ? OWNER_COMMUNITY_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_COMMUNITY_MAX_LIMIT ? NORMAL_COMMUNITY_MAX_LIMIT : members.size();
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < shootMemberCount; i++) {
|
||||
mGroupMembers.add(members.get(i));
|
||||
}
|
||||
if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_PRIVATE)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_WORK)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_COMMUNITY)) {
|
||||
// 公开群/聊天室 只有APP管理员可以邀请他人入群
|
||||
GroupMemberInfo add = new GroupMemberInfo();
|
||||
add.setMemberType(ADD_TYPE);
|
||||
mGroupMembers.add(add);
|
||||
}
|
||||
GroupMemberInfo self = null;
|
||||
for (int i = 0; i < mGroupMembers.size(); i++) {
|
||||
GroupMemberInfo memberInfo = mGroupMembers.get(i);
|
||||
if (isSelf(memberInfo.getAccount())) {
|
||||
self = memberInfo;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (info.isOwner() || (self != null && isAdmin(self.getMemberType()))) {
|
||||
GroupMemberInfo del = new GroupMemberInfo();
|
||||
del.setMemberType(DEL_TYPE);
|
||||
mGroupMembers.add(del);
|
||||
}
|
||||
BackgroundTasks.getInstance().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isAdmin(int memberType) {
|
||||
if (presenter != null) {
|
||||
return presenter.isAdmin(memberType);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isSelf(String userId) {
|
||||
if (presenter != null) {
|
||||
return presenter.isSelf(userId);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private class MyViewHolder {
|
||||
private ImageView memberIcon;
|
||||
private TextView memberName;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,680 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.view;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.TUILogin;
|
||||
import com.tencent.qcloud.tuicore.component.LineControllerView;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.SelectionActivity;
|
||||
import com.tencent.qcloud.tuicore.component.dialog.TUIKitDialog;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.component.popupcard.PopupInputCard;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.TUIUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.page.GroupInfoActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.page.GroupInfoFragment;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.page.GroupMemberActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.page.GroupNoticeActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.page.ManageGroupActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.component.BottomSelectSheet;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupMemberLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class GroupInfoLayout extends LinearLayout implements IGroupMemberLayout, View.OnClickListener {
|
||||
|
||||
private static final String TAG = GroupInfoLayout.class.getSimpleName();
|
||||
private TitleBarLayout mTitleBar;
|
||||
private LineControllerView mMemberView;
|
||||
private GroupInfoAdapter mMemberAdapter;
|
||||
private IGroupMemberListener mMemberPreviewListener;
|
||||
private LineControllerView mGroupTypeView;
|
||||
private TextView mGroupIDView;
|
||||
private TextView mGroupNameView;
|
||||
private View groupDetailArea;
|
||||
private ImageView mGroupIcon;
|
||||
private ImageView mGroupDetailArrow;
|
||||
private View mGroupNotice;
|
||||
private TextView mGroupNoticeText;
|
||||
private LineControllerView mGroupManageView;
|
||||
private LineControllerView mNickView;
|
||||
private LineControllerView mJoinTypeView;
|
||||
private LineControllerView mTopSwitchView;
|
||||
private LineControllerView mMsgRevOptionSwitchView;
|
||||
private LineControllerView mFoldGroupChatSwitchView;
|
||||
private LineControllerView mChatBackground;
|
||||
private View mLayoutFold;
|
||||
private TextView mDissolveBtn;
|
||||
private TextView mClearMsgBtn;
|
||||
private TextView mChangeOwnerBtn;
|
||||
private GridView memberList;
|
||||
|
||||
private OnButtonClickListener mListener;
|
||||
|
||||
private GroupInfo mGroupInfo;
|
||||
private GroupInfoPresenter mPresenter;
|
||||
private ArrayList<String> mJoinTypes = new ArrayList<>();
|
||||
private GroupInfoFragment.OnModifyGroupAvatarListener onModifyGroupAvatarListener;
|
||||
public GroupInfoLayout(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupInfoLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupInfoLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.group_info_layout, this);
|
||||
// 标题
|
||||
mTitleBar = findViewById(R.id.group_info_title_bar);
|
||||
mTitleBar.getRightGroup().setVisibility(GONE);
|
||||
mTitleBar.setTitle(getResources().getString(R.string.group_detail), ITitleBarLayout.Position.MIDDLE);
|
||||
mTitleBar.setOnLeftClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
((Activity) getContext()).finish();
|
||||
}
|
||||
});
|
||||
|
||||
// 成员标题
|
||||
mMemberView = findViewById(R.id.group_member_bar);
|
||||
mMemberView.setOnClickListener(this);
|
||||
mMemberView.setCanNav(true);
|
||||
// 成员列表
|
||||
memberList = findViewById(R.id.group_members);
|
||||
mMemberAdapter = new GroupInfoAdapter();
|
||||
memberList.setAdapter(mMemberAdapter);
|
||||
// 群类型,只读
|
||||
mGroupTypeView = findViewById(R.id.group_type_bar);
|
||||
// 群ID,只读
|
||||
mGroupIDView = findViewById(R.id.group_account);
|
||||
// 群聊名称
|
||||
mGroupNameView = findViewById(R.id.group_name);
|
||||
|
||||
groupDetailArea = findViewById(R.id.group_detail_area);
|
||||
groupDetailArea.setOnClickListener(this);
|
||||
// 群头像
|
||||
mGroupIcon = findViewById(R.id.group_icon);
|
||||
mGroupIcon.setOnClickListener(this);
|
||||
|
||||
// 群详情右箭头
|
||||
mGroupDetailArrow = findViewById(R.id.group_detail_arrow);
|
||||
|
||||
// 群公告
|
||||
mGroupNotice = findViewById(R.id.group_notice);
|
||||
mGroupNotice.setOnClickListener(this);
|
||||
mGroupNoticeText = findViewById(R.id.group_notice_text);
|
||||
// 群管理
|
||||
mGroupManageView = findViewById(R.id.group_manage);
|
||||
mGroupManageView.setOnClickListener(this);
|
||||
|
||||
// 加群方式
|
||||
mJoinTypeView = findViewById(R.id.join_type_bar);
|
||||
mJoinTypeView.setOnClickListener(this);
|
||||
mJoinTypeView.setCanNav(true);
|
||||
mJoinTypes.addAll(Arrays.asList(getResources().getStringArray(R.array.group_join_type)));
|
||||
// 群昵称
|
||||
mNickView = findViewById(R.id.self_nickname_bar);
|
||||
mNickView.setOnClickListener(this);
|
||||
mNickView.setCanNav(true);
|
||||
// 是否置顶
|
||||
mTopSwitchView = findViewById(R.id.chat_to_top_switch);
|
||||
mTopSwitchView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(final CompoundButton buttonView, boolean isChecked) {
|
||||
if (mGroupInfo == null) {
|
||||
return;
|
||||
}
|
||||
mPresenter.setTopConversation(mGroupInfo.getId(), isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
buttonView.setChecked(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// 消息接收选项
|
||||
mMsgRevOptionSwitchView = findViewById(R.id.msg_rev_option);
|
||||
// 折叠
|
||||
mLayoutFold = findViewById(R.id.layout_fold);
|
||||
mFoldGroupChatSwitchView = findViewById(R.id.fold_group_chat);
|
||||
|
||||
// 退群
|
||||
mDissolveBtn = findViewById(R.id.group_dissolve_button);
|
||||
mDissolveBtn.setOnClickListener(this);
|
||||
|
||||
// 清空群消息按钮
|
||||
mClearMsgBtn = findViewById(R.id.group_clear_msg_button);
|
||||
mClearMsgBtn.setOnClickListener(this);
|
||||
|
||||
// 转让群主
|
||||
mChangeOwnerBtn = findViewById(R.id.group_change_owner_button);
|
||||
mChangeOwnerBtn.setOnClickListener(this);
|
||||
|
||||
mChatBackground = findViewById(R.id.chat_background);
|
||||
mChatBackground.setOnClickListener(this);
|
||||
mChatBackground.setCanNav(true);
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
int radius = ScreenUtil.dip2px(5);
|
||||
GlideEngine.loadUserIcon(mGroupIcon, mGroupInfo.getFaceUrl(), TUIUtil.getDefaultGroupIconResIDByGroupType(getContext(), mGroupInfo.getGroupType()), radius);
|
||||
if (!mGroupInfo.isCanManagerGroup()) {
|
||||
mGroupDetailArrow.setVisibility(GONE);
|
||||
}
|
||||
if (mGroupInfo.isOwner()) {
|
||||
mChangeOwnerBtn.setVisibility(VISIBLE);
|
||||
} else {
|
||||
mChangeOwnerBtn.setVisibility(GONE);
|
||||
}
|
||||
}
|
||||
|
||||
public void setGroupInfoPresenter(GroupInfoPresenter presenter) {
|
||||
this.mPresenter = presenter;
|
||||
if (mMemberAdapter != null) {
|
||||
mMemberAdapter.setPresenter(presenter);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mGroupInfo == null) {
|
||||
TUIGroupLog.e(TAG, "mGroupInfo is NULL");
|
||||
return;
|
||||
}
|
||||
if (v.getId() == R.id.group_member_bar) {
|
||||
if (mMemberPreviewListener != null) {
|
||||
mMemberPreviewListener.forwardListMember(mGroupInfo);
|
||||
}
|
||||
} else if (v.getId() == R.id.group_detail_area) {
|
||||
if (!mGroupInfo.isCanManagerGroup()) {
|
||||
return;
|
||||
}
|
||||
PopupInputCard popupInputCard = new PopupInputCard((Activity) getContext());
|
||||
BottomSelectSheet sheet = new BottomSelectSheet(getContext());
|
||||
List<String> stringList = new ArrayList<>();
|
||||
String modifyGroupName = getResources().getString(R.string.modify_group_name);
|
||||
String modifyGroupNotice = getResources().getString(R.string.modify_group_notice);
|
||||
stringList.add(modifyGroupName);
|
||||
stringList.add(modifyGroupNotice);
|
||||
sheet.setSelectList(stringList);
|
||||
sheet.setOnClickListener(new BottomSelectSheet.BottomSelectSheetOnClickListener() {
|
||||
@Override
|
||||
public void onSheetClick(int index) {
|
||||
if (index == 0) {
|
||||
popupInputCard.setContent(mGroupNameView.getText().toString());
|
||||
popupInputCard.setTitle(modifyGroupName);
|
||||
popupInputCard.setOnPositive((result -> {
|
||||
mPresenter.modifyGroupName(result);
|
||||
if (!TextUtils.isEmpty(result)) {
|
||||
mGroupNameView.setText(result);
|
||||
}
|
||||
}));
|
||||
popupInputCard.show(groupDetailArea, Gravity.BOTTOM);
|
||||
} else if (index == 1) {
|
||||
popupInputCard.setContent(mGroupNoticeText.getText().toString());
|
||||
popupInputCard.setTitle(modifyGroupNotice);
|
||||
popupInputCard.setOnPositive((result -> {
|
||||
mPresenter.modifyGroupNotice(result);
|
||||
if (TextUtils.isEmpty(result)) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(result);
|
||||
}
|
||||
}));
|
||||
popupInputCard.show(groupDetailArea, Gravity.BOTTOM);
|
||||
}
|
||||
}
|
||||
});
|
||||
sheet.show();
|
||||
} else if (v.getId() == R.id.group_icon) {
|
||||
if (!mGroupInfo.isCanManagerGroup()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (onModifyGroupAvatarListener != null) {
|
||||
onModifyGroupAvatarListener.onModifyGroupAvatar(mGroupInfo.getFaceUrl());
|
||||
}
|
||||
} else if (v.getId() == R.id.group_notice) {
|
||||
Intent intent = new Intent(getContext(), GroupNoticeActivity.class);
|
||||
GroupNoticeActivity.setOnGroupNoticeChangedListener(new GroupNoticeActivity.OnGroupNoticeChangedListener() {
|
||||
@Override
|
||||
public void onChanged(String notice) {
|
||||
if (TextUtils.isEmpty(notice)) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(notice);
|
||||
}
|
||||
}
|
||||
});
|
||||
intent.putExtra(TUIGroupConstants.Group.GROUP_INFO, mGroupInfo);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
getContext().startActivity(intent);
|
||||
} else if (v.getId() == R.id.self_nickname_bar) {
|
||||
PopupInputCard popupInputCard = new PopupInputCard((Activity) getContext());
|
||||
popupInputCard.setContent(mNickView.getContent());
|
||||
popupInputCard.setTitle(getResources().getString(R.string.modify_nick_name_in_goup));
|
||||
String description = getResources().getString(R.string.group_modify_remark_rule);
|
||||
popupInputCard.setRule("^[a-zA-Z0-9_\u4e00-\u9fa5]*$");
|
||||
popupInputCard.setDescription(description);
|
||||
popupInputCard.setOnPositive((result -> {
|
||||
mPresenter.modifyMyGroupNickname(result);
|
||||
mNickView.setContent(result);
|
||||
}));
|
||||
popupInputCard.show(mNickView, Gravity.BOTTOM);
|
||||
|
||||
} else if (v.getId() == R.id.join_type_bar) {
|
||||
if (mGroupTypeView.getContent().equals(getContext().getString(R.string.chat_room))) {
|
||||
ToastUtil.toastLongMessage(getContext().getString(R.string.chat_room_tip));
|
||||
return;
|
||||
}
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(SelectionActivity.Selection.TITLE, getResources().getString(R.string.group_join_type));
|
||||
bundle.putStringArrayList(SelectionActivity.Selection.LIST, mJoinTypes);
|
||||
bundle.putInt(SelectionActivity.Selection.DEFAULT_SELECT_ITEM_INDEX, mGroupInfo.getJoinType());
|
||||
SelectionActivity.startListSelection((Activity) getContext(), bundle, new SelectionActivity.OnResultReturnListener() {
|
||||
@Override
|
||||
public void onReturn(final Object text) {
|
||||
mPresenter.modifyGroupInfo((Integer) text, TUIGroupConstants.Group.MODIFY_GROUP_JOIN_TYPE);
|
||||
}
|
||||
});
|
||||
} else if (v.getId() == R.id.group_dissolve_button) {
|
||||
if (mGroupInfo.isOwner() &&
|
||||
(!mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_WORK)
|
||||
&& !mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_PRIVATE))) {
|
||||
new TUIKitDialog(getContext())
|
||||
.builder()
|
||||
.setCancelable(true)
|
||||
.setCancelOutside(true)
|
||||
.setTitle(getContext().getString(R.string.dismiss_group_tip))
|
||||
.setDialogWidth(0.75f)
|
||||
.setPositiveButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mPresenter.deleteGroup(new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
((Activity) GroupInfoLayout.this.getContext()).finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.cancel), new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
}
|
||||
})
|
||||
.show();
|
||||
} else {
|
||||
new TUIKitDialog(getContext())
|
||||
.builder()
|
||||
.setCancelable(true)
|
||||
.setCancelOutside(true)
|
||||
.setTitle(getContext().getString(R.string.quit_group_tip))
|
||||
.setDialogWidth(0.75f)
|
||||
.setPositiveButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mPresenter.quitGroup(new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
((Activity) GroupInfoLayout.this.getContext()).finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
((Activity) GroupInfoLayout.this.getContext()).finish();
|
||||
ToastUtil.toastShortMessage("quitGroup failed, errCode = " + errCode + " errMsg = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.cancel), new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
||||
} else if (v.getId() == R.id.group_clear_msg_button) {
|
||||
new TUIKitDialog(getContext())
|
||||
.builder()
|
||||
.setCancelable(true)
|
||||
.setCancelOutside(true)
|
||||
.setTitle(getContext().getString(R.string.clear_group_msg_tip))
|
||||
.setDialogWidth(0.75f)
|
||||
.setPositiveButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Map<String, Object> hashMap = new HashMap<>();
|
||||
hashMap.put(TUIConstants.TUIGroup.GROUP_ID, mGroupInfo.getId());
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP,
|
||||
TUIConstants.TUIGroup.EVENT_SUB_KEY_CLEAR_MESSAGE, hashMap);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.cancel), new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
}
|
||||
})
|
||||
.show();
|
||||
} else if (v.getId() == R.id.group_manage) {
|
||||
Intent intent = new Intent(getContext(), ManageGroupActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(TUIGroupConstants.Group.GROUP_INFO, mGroupInfo);
|
||||
getContext().startActivity(intent);
|
||||
} else if (v == mChangeOwnerBtn) {
|
||||
ArrayList<String> excludeList = new ArrayList<>();
|
||||
excludeList.add(TUILogin.getLoginUser());
|
||||
Intent intent = new Intent(getContext(), GroupMemberActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, mGroupInfo.getId());
|
||||
intent.putExtra(TUIConstants.TUIGroup.LIMIT, 1);
|
||||
intent.putExtra(TUIConstants.TUIGroup.EXCLUDE_LIST, excludeList);
|
||||
intent.putExtra(TUIConstants.TUIGroup.TITLE, getResources().getString(R.string.group_transfer_group_owner));
|
||||
((Activity) getContext()).startActivityForResult(intent, GroupInfoActivity.REQUEST_FOR_CHANGE_OWNER);
|
||||
} else if (v.getId() == R.id.chat_background) {
|
||||
if (mListener != null) {
|
||||
mListener.onSetChatBackground();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void loadGroupInfo(String groupId) {
|
||||
mPresenter.loadGroupInfo(groupId);
|
||||
}
|
||||
|
||||
public void getGroupMembers(GroupInfo groupInfo) {
|
||||
mPresenter.getGroupMembers(groupInfo, new IUIKitCallback<GroupInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupInfo data) {
|
||||
setGroupInfo((GroupInfo) data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setGroupInfo(GroupInfo info) {
|
||||
if (info == null) {
|
||||
return;
|
||||
}
|
||||
this.mGroupInfo = info;
|
||||
mGroupNameView.setText(info.getGroupName());
|
||||
mGroupIDView.setText(info.getId());
|
||||
if (TextUtils.isEmpty(info.getNotice())) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(info.getNotice());
|
||||
}
|
||||
mMemberView.setContent(info.getMemberCount() + "人");
|
||||
mMemberAdapter.setDataSource(info);
|
||||
|
||||
int columnNum = memberList.getNumColumns();
|
||||
int rowNum = (int) Math.ceil(mMemberAdapter.getCount() * 1.0f / columnNum);
|
||||
int itemHeight = ScreenUtil.dip2px(88);
|
||||
ViewGroup.LayoutParams layoutParams = memberList.getLayoutParams();
|
||||
layoutParams.height = itemHeight * rowNum;
|
||||
memberList.setLayoutParams(layoutParams);
|
||||
|
||||
mGroupTypeView.setContent(convertGroupText(info.getGroupType()));
|
||||
mJoinTypeView.setContent(mJoinTypes.get(info.getJoinType()));
|
||||
mNickView.setContent(mPresenter.getNickName());
|
||||
mTopSwitchView.setChecked(mGroupInfo.isTopChat());
|
||||
|
||||
if (GroupInfo.GROUP_TYPE_MEETING.equals(info.getGroupType())) {
|
||||
mMsgRevOptionSwitchView.setVisibility(GONE);
|
||||
mLayoutFold.setVisibility(GONE);
|
||||
} else {
|
||||
if (mGroupInfo.getMessageReceiveOption()) {
|
||||
mLayoutFold.setVisibility(View.VISIBLE);
|
||||
if (mGroupInfo.isFolded()) {
|
||||
mFoldGroupChatSwitchView.setChecked(true);
|
||||
}
|
||||
} else {
|
||||
mLayoutFold.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
mMsgRevOptionSwitchView.setChecked(mGroupInfo.getMessageReceiveOption());
|
||||
mMsgRevOptionSwitchView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(final CompoundButton buttonView, boolean isChecked) {
|
||||
mPresenter.setGroupNotDisturb(mGroupInfo, isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
if (!isChecked) {
|
||||
mLayoutFold.setVisibility(View.GONE);
|
||||
if (mGroupInfo.isFolded()) {
|
||||
mPresenter.setGroupFold(mGroupInfo, false, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mFoldGroupChatSwitchView.setChecked(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
mLayoutFold.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (mGroupInfo.isFolded()) {
|
||||
mTopSwitchView.setMask(true);
|
||||
}
|
||||
|
||||
mFoldGroupChatSwitchView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
mPresenter.setGroupFold(mGroupInfo, isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
if (isChecked) {
|
||||
if (mGroupInfo.isTopChat()) {
|
||||
mPresenter.setTopConversation(mGroupInfo.getId(), false, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mTopSwitchView.setChecked(false);
|
||||
mTopSwitchView.setMask(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mTopSwitchView.setMask(true);
|
||||
}
|
||||
} else {
|
||||
mTopSwitchView.setMask(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
mDissolveBtn.setText(R.string.dissolve);
|
||||
mClearMsgBtn.setText(R.string.clear_message);
|
||||
if (mGroupInfo.isOwner()) {
|
||||
mJoinTypeView.setVisibility(VISIBLE);
|
||||
if (mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_WORK)
|
||||
|| mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_PRIVATE)) {
|
||||
mDissolveBtn.setText(R.string.exit_group);
|
||||
}
|
||||
} else {
|
||||
mJoinTypeView.setCanNav(false);
|
||||
mJoinTypeView.setOnClickListener(null);
|
||||
mDissolveBtn.setText(R.string.exit_group);
|
||||
}
|
||||
|
||||
if (mGroupInfo.isCanManagerGroup()) {
|
||||
mGroupManageView.setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
initView();
|
||||
}
|
||||
|
||||
private String convertGroupText(String groupType) {
|
||||
String groupText = "";
|
||||
if (TextUtils.isEmpty(groupType)) {
|
||||
return groupText;
|
||||
}
|
||||
if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_PRIVATE)
|
||||
|| TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_WORK)) {
|
||||
groupText = getContext().getString(R.string.private_group);
|
||||
} else if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_PUBLIC)) {
|
||||
groupText = getContext().getString(R.string.public_group);
|
||||
} else if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_CHAT_ROOM)
|
||||
|| TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_MEETING)) {
|
||||
groupText = getContext().getString(R.string.chat_room);
|
||||
} else if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_COMMUNITY)) {
|
||||
groupText = getContext().getString(R.string.community_group);
|
||||
}
|
||||
return groupText;
|
||||
}
|
||||
|
||||
public void onGroupInfoModified(Object value, int type) {
|
||||
switch (type) {
|
||||
case TUIGroupConstants.Group.MODIFY_GROUP_NAME:
|
||||
ToastUtil.toastLongMessage(getResources().getString(R.string.modify_group_name_success));
|
||||
mGroupNameView.setText(value.toString());
|
||||
break;
|
||||
case TUIGroupConstants.Group.MODIFY_GROUP_NOTICE:
|
||||
if (TextUtils.isEmpty(value.toString())) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(value.toString());
|
||||
}
|
||||
ToastUtil.toastLongMessage(getResources().getString(R.string.modify_group_notice_success));
|
||||
break;
|
||||
case TUIGroupConstants.Group.MODIFY_GROUP_JOIN_TYPE:
|
||||
mJoinTypeView.setContent(mJoinTypes.get((Integer) value));
|
||||
break;
|
||||
case TUIGroupConstants.Group.MODIFY_MEMBER_NAME:
|
||||
ToastUtil.toastLongMessage(getResources().getString(R.string.modify_nickname_success));
|
||||
mNickView.setContent(value.toString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void setRouter(IGroupMemberListener listener) {
|
||||
mMemberPreviewListener = listener;
|
||||
mMemberAdapter.setManagerCallBack(listener);
|
||||
}
|
||||
|
||||
public void setOnModifyGroupAvatarListener(GroupInfoFragment.OnModifyGroupAvatarListener onModifyGroupAvatarListener) {
|
||||
this.onModifyGroupAvatarListener = onModifyGroupAvatarListener;
|
||||
}
|
||||
|
||||
public void modifyGroupAvatar(String avatarUrl) {
|
||||
mPresenter.modifyGroupFaceUrl(mGroupInfo.getId(), avatarUrl, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mGroupInfo.setFaceUrl(avatarUrl);
|
||||
setGroupInfo(mGroupInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(TUIGroupService.getAppContext().getString(R.string.modify_icon_fail) + ", code = " + errCode + ", info = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupInfoChanged(GroupInfo dataSource) {
|
||||
setGroupInfo(dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TitleBarLayout getTitleBar() {
|
||||
return mTitleBar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParentLayout(Object parent) {
|
||||
|
||||
}
|
||||
|
||||
public void setOnButtonClickListener(OnButtonClickListener l) {
|
||||
mListener = l;
|
||||
}
|
||||
|
||||
public interface OnButtonClickListener {
|
||||
default void onSetChatBackground() {};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,238 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.view;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.BackgroundTasks;
|
||||
import com.tencent.qcloud.tuicore.util.PopWindowUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces.IGroupMemberChangedCallback;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GroupMemberAdapter extends RecyclerView.Adapter<GroupMemberAdapter.GroupMemberViewHodler> {
|
||||
|
||||
private IGroupMemberChangedCallback mCallback;
|
||||
private GroupInfo mGroupInfo;
|
||||
private List<GroupMemberInfo> mGroupMembers = new ArrayList<>();
|
||||
private List<GroupMemberInfo> selectedGroupMemberInfos = new ArrayList<>();
|
||||
|
||||
private GroupInfoPresenter presenter;
|
||||
private boolean isSelectMode;
|
||||
private GroupMemberLayout.OnSelectChangedListener onSelectChangedListener;
|
||||
private ArrayList<String> selectedMember = new ArrayList<>();
|
||||
private ArrayList<String> excludeList;
|
||||
private ArrayList<String> alreadySelectedList;
|
||||
public void setSelectMode(boolean selectMode) {
|
||||
isSelectMode = selectMode;
|
||||
}
|
||||
|
||||
public ArrayList<String> getSelectedMember() {
|
||||
return selectedMember;
|
||||
}
|
||||
|
||||
public List<GroupMemberInfo> getSelectedMemberInfoList() {
|
||||
return selectedGroupMemberInfos;
|
||||
}
|
||||
|
||||
public void setPresenter(GroupInfoPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
}
|
||||
|
||||
public void setMemberChangedCallback(IGroupMemberChangedCallback callback) {
|
||||
this.mCallback = callback;
|
||||
}
|
||||
|
||||
public void setExcludeList(ArrayList<String> excludeList) {
|
||||
this.excludeList = excludeList;
|
||||
}
|
||||
|
||||
public void setAlreadySelectedList(ArrayList<String> alreadySelectedList) {
|
||||
this.alreadySelectedList = alreadySelectedList;
|
||||
}
|
||||
|
||||
public void setOnSelectChangedListener(GroupMemberLayout.OnSelectChangedListener onSelectChangedListener) {
|
||||
this.onSelectChangedListener = onSelectChangedListener;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public GroupMemberViewHodler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_member_list_item, parent, false);
|
||||
return new GroupMemberViewHodler(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull GroupMemberViewHodler holder, int position) {
|
||||
final GroupMemberInfo info = mGroupMembers.get(position);
|
||||
GlideEngine.loadImage(holder.memberIcon, info.getIconUrl());
|
||||
if (!TextUtils.isEmpty(info.getNameCard())) {
|
||||
holder.memberName.setText(info.getNameCard());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getNickName())) {
|
||||
holder.memberName.setText(info.getNickName());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getAccount())) {
|
||||
holder.memberName.setText(info.getAccount());
|
||||
} else {
|
||||
holder.memberName.setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isSelectMode) {
|
||||
holder.checkBox.setVisibility(View.VISIBLE);
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
holder.checkBox.setChecked(!holder.checkBox.isChecked());
|
||||
if (holder.checkBox.isChecked()) {
|
||||
info.setSelected(true);
|
||||
selectedMember.add(info.getAccount());
|
||||
selectedGroupMemberInfos.add(info);
|
||||
} else {
|
||||
info.setSelected(false);
|
||||
selectedMember.remove(info.getAccount());
|
||||
selectedGroupMemberInfos.remove(info);
|
||||
}
|
||||
if (onSelectChangedListener != null) {
|
||||
onSelectChangedListener.onSelectChanged();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (!mGroupInfo.isOwner()) {
|
||||
return false;
|
||||
}
|
||||
TextView delete = new TextView(holder.itemView.getContext());
|
||||
delete.setText(R.string.group_remove_member);
|
||||
int padding = ScreenUtil.getPxByDp(10);
|
||||
delete.setPadding(padding, padding, padding, padding);
|
||||
delete.setBackgroundResource(R.drawable.text_border);
|
||||
int location[] = new int[2];
|
||||
v.getLocationInWindow(location);
|
||||
final PopupWindow window = PopWindowUtil.popupWindow(delete, holder.itemView, location[0], location[1] + v.getMeasuredHeight() / 3);
|
||||
delete.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
List<GroupMemberInfo> dels = new ArrayList<>();
|
||||
dels.add(info);
|
||||
if (presenter == null) {
|
||||
return;
|
||||
}
|
||||
presenter.removeGroupMembers(mGroupInfo, dels, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
mGroupMembers.remove(info);
|
||||
notifyDataSetChanged();
|
||||
if (mCallback != null) {
|
||||
mCallback.onMemberRemoved(info);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.remove_fail_tip) + ":errCode=" + errCode);
|
||||
}
|
||||
});
|
||||
window.dismiss();
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(TUIConstants.TUIChat.CHAT_ID, info.getAccount());
|
||||
TUICore.startActivity("FriendProfileActivity", bundle);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setAlreadySelected(holder, info);
|
||||
}
|
||||
|
||||
private void setAlreadySelected(GroupMemberViewHodler holder, GroupMemberInfo memberInfo) {
|
||||
if (alreadySelectedList != null && alreadySelectedList.contains(memberInfo.getAccount())) {
|
||||
holder.checkBox.setChecked(true);
|
||||
holder.itemView.setEnabled(false);
|
||||
holder.checkBox.setEnabled(false);
|
||||
} else {
|
||||
holder.itemView.setEnabled(true);
|
||||
holder.checkBox.setEnabled(true);
|
||||
holder.checkBox.setSelected(memberInfo.isSelected());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mGroupMembers == null) {
|
||||
return 0;
|
||||
}
|
||||
return mGroupMembers.size();
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo groupInfo) {
|
||||
if (groupInfo != null) {
|
||||
mGroupInfo = groupInfo;
|
||||
mGroupMembers.clear();
|
||||
if (excludeList == null || excludeList.isEmpty()) {
|
||||
mGroupMembers.addAll(groupInfo.getMemberDetails());
|
||||
} else {
|
||||
for (GroupMemberInfo groupMemberInfo : groupInfo.getMemberDetails()) {
|
||||
if (excludeList.contains(groupMemberInfo.getAccount())) {
|
||||
continue;
|
||||
}
|
||||
mGroupMembers.add(groupMemberInfo);
|
||||
}
|
||||
}
|
||||
BackgroundTasks.getInstance().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected class GroupMemberViewHodler extends RecyclerView.ViewHolder {
|
||||
private ImageView memberIcon;
|
||||
private TextView memberName;
|
||||
private CheckBox checkBox;
|
||||
|
||||
public GroupMemberViewHodler(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
checkBox = itemView.findViewById(R.id.group_member_check_box);
|
||||
memberIcon = itemView.findViewById(R.id.group_member_icon);
|
||||
memberName = itemView.findViewById(R.id.group_member_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,299 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.classicui.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.CustomLinearLayoutManager;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces.IGroupMemberChangedCallback;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.classicui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.component.BottomSelectSheet;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupMemberLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupMemberLayout extends LinearLayout implements IGroupMemberLayout {
|
||||
// 取一个足够大的偏移保证能一次性滚动到最底部
|
||||
// Take a large enough offset to scroll to the bottom at one time
|
||||
private static final int SCROLL_TO_END_OFFSET = -999999;
|
||||
|
||||
private TitleBarLayout mTitleBar;
|
||||
private GroupMemberAdapter mAdapter;
|
||||
private IGroupMemberListener groupMemberListener;
|
||||
private GroupInfo mGroupInfo;
|
||||
private RecyclerView recyclerView;
|
||||
private boolean isSelectMode;
|
||||
private String title;
|
||||
private ArrayList<String> excludeList;
|
||||
private ArrayList<String> alreadySelectedList;
|
||||
private RecyclerView selectedList;
|
||||
private SelectedAdapter selectedListAdapter;
|
||||
private View selectArea;
|
||||
private TextView confirmButton;
|
||||
|
||||
private GroupInfoPresenter presenter;
|
||||
|
||||
public GroupMemberLayout(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupMemberLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupMemberLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.group_member_layout, this);
|
||||
mTitleBar = findViewById(R.id.group_member_title_bar);
|
||||
mTitleBar.setTitle(getContext().getString(R.string.manager), ITitleBarLayout.Position.RIGHT);
|
||||
mTitleBar.getRightIcon().setVisibility(GONE);
|
||||
mTitleBar.setOnRightClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
buildPopMenu();
|
||||
}
|
||||
});
|
||||
mAdapter = new GroupMemberAdapter();
|
||||
mAdapter.setMemberChangedCallback(new IGroupMemberChangedCallback() {
|
||||
|
||||
@Override
|
||||
public void onMemberRemoved(GroupMemberInfo memberInfo) {
|
||||
if (!TextUtils.isEmpty(title)) {
|
||||
mTitleBar.setTitle(title, ITitleBarLayout.Position.MIDDLE);
|
||||
} else {
|
||||
mTitleBar.setTitle(getContext().getString(R.string.group_members) +
|
||||
"(" + mGroupInfo.getMemberCount() + ")", TitleBarLayout.Position.MIDDLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
recyclerView = findViewById(R.id.group_all_members);
|
||||
recyclerView.setLayoutManager(new CustomLinearLayoutManager(getContext()));
|
||||
recyclerView.setAdapter(mAdapter);
|
||||
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
|
||||
if (layoutManager == null) {
|
||||
return;
|
||||
}
|
||||
int lastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
|
||||
if (mAdapter != null) {
|
||||
if (lastPosition == mAdapter.getItemCount() - 1) {
|
||||
if (mGroupInfo != null && mGroupInfo.getNextSeq() != 0) {
|
||||
presenter.getGroupMembers(mGroupInfo, new IUIKitCallback<GroupInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupInfo data) {
|
||||
onGroupInfoChanged(data);
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
selectArea = findViewById(R.id.select_area);
|
||||
selectedList = findViewById(R.id.selected_list);
|
||||
selectedListAdapter = new SelectedAdapter();
|
||||
selectedList.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.HORIZONTAL, false));
|
||||
selectedList.setAdapter(selectedListAdapter);
|
||||
|
||||
confirmButton = findViewById(R.id.confirm_button);
|
||||
confirmButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
confirmAndFinish();
|
||||
}
|
||||
});
|
||||
|
||||
mAdapter.setOnSelectChangedListener(new OnSelectChangedListener() {
|
||||
@Override
|
||||
public void onSelectChanged() {
|
||||
selectedListAdapter.setMembers(mAdapter.getSelectedMemberInfoList());
|
||||
selectedListAdapter.notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void confirmAndFinish() {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.setSelectedMember(mAdapter.getSelectedMember());
|
||||
}
|
||||
}
|
||||
|
||||
public TitleBarLayout getTitleBar() {
|
||||
return mTitleBar;
|
||||
}
|
||||
|
||||
public void setExcludeList(ArrayList<String> excludeList) {
|
||||
this.excludeList = excludeList;
|
||||
mAdapter.setExcludeList(excludeList);
|
||||
}
|
||||
|
||||
public void setAlreadySelectedList(ArrayList<String> alreadySelectedList) {
|
||||
this.alreadySelectedList = alreadySelectedList;
|
||||
mAdapter.setAlreadySelectedList(alreadySelectedList);
|
||||
}
|
||||
|
||||
public void setSelectMode(boolean selectMode) {
|
||||
isSelectMode = selectMode;
|
||||
if (isSelectMode) {
|
||||
mTitleBar.setTitle(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), ITitleBarLayout.Position.RIGHT);
|
||||
mTitleBar.getRightGroup().setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.setSelectedMember(mAdapter.getSelectedMember());
|
||||
}
|
||||
}
|
||||
});
|
||||
selectArea.setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
mAdapter.setSelectMode(isSelectMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParentLayout(Object parent) {
|
||||
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public void onGroupInfoChanged(GroupInfo groupInfo) {
|
||||
mGroupInfo = groupInfo;
|
||||
presenter.setGroupInfo(groupInfo);
|
||||
mAdapter.setDataSource(groupInfo);
|
||||
if (groupInfo != null) {
|
||||
if (!TextUtils.isEmpty(title)) {
|
||||
mTitleBar.setTitle(title, ITitleBarLayout.Position.MIDDLE);
|
||||
} else {
|
||||
mTitleBar.setTitle(getContext().getString(R.string.group_members) +
|
||||
"(" + groupInfo.getMemberCount() + ")", TitleBarLayout.Position.MIDDLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupInfoModified(Object value, int type) {
|
||||
|
||||
}
|
||||
|
||||
private void buildPopMenu() {
|
||||
if (mGroupInfo == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
BottomSelectSheet sheet = new BottomSelectSheet(getContext());
|
||||
List<String> stringList = new ArrayList<>();
|
||||
String addMember = getResources().getString(R.string.add_group_member);
|
||||
String removeMember = getResources().getString(R.string.remove_group_member);
|
||||
stringList.add(addMember);
|
||||
if (mGroupInfo.isOwner()) {
|
||||
stringList.add(removeMember);
|
||||
}
|
||||
sheet.setSelectList(stringList);
|
||||
sheet.setOnClickListener(new BottomSelectSheet.BottomSelectSheetOnClickListener() {
|
||||
@Override
|
||||
public void onSheetClick(int index) {
|
||||
if (index == 0) {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.forwardAddMember(mGroupInfo);
|
||||
}
|
||||
} else if (index == 1) {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.forwardDeleteMember(mGroupInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
sheet.show();
|
||||
}
|
||||
|
||||
public void setGroupMemberListener(IGroupMemberListener listener) {
|
||||
this.groupMemberListener = listener;
|
||||
}
|
||||
|
||||
public void setPresenter(GroupInfoPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
mAdapter.setPresenter(presenter);
|
||||
}
|
||||
|
||||
public static class SelectedAdapter extends RecyclerView.Adapter<SelectedAdapter.SelectedViewHolder> {
|
||||
private List<GroupMemberInfo> mMembers;
|
||||
|
||||
public void setMembers(List<GroupMemberInfo> mMembers) {
|
||||
this.mMembers = mMembers;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public SelectedViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
return new SelectedViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.group_member_selected_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull SelectedAdapter.SelectedViewHolder holder, int position) {
|
||||
GlideEngine.loadImage(holder.userIconView, mMembers.get(position).getIconUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mMembers == null) {
|
||||
return 0;
|
||||
}
|
||||
return mMembers.size();
|
||||
}
|
||||
|
||||
public static class SelectedViewHolder extends RecyclerView.ViewHolder {
|
||||
public final ImageView userIconView;
|
||||
public SelectedViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
userIconView = (ImageView) itemView.findViewById(R.id.ivAvatar);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnSelectChangedListener {
|
||||
void onSelectChanged();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.component;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.view.Display;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BottomSelectSheet {
|
||||
|
||||
private List<String> selectList = new ArrayList<>();
|
||||
private Dialog dialog;
|
||||
private ArrayAdapter<String> listAdapter;
|
||||
private BottomSelectSheetOnClickListener onClickListener;
|
||||
public BottomSelectSheet(Context context) {
|
||||
View view = View.inflate(context, R.layout.bottom_select_sheet, null);
|
||||
dialog = new Dialog(context, R.style.BottomSelectSheet);
|
||||
dialog.setContentView(view);
|
||||
dialog.setCancelable(true);
|
||||
dialog.setCanceledOnTouchOutside(true);
|
||||
Window window = dialog.getWindow();
|
||||
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||
WindowManager m = window.getWindowManager();
|
||||
Display d = m.getDefaultDisplay();
|
||||
WindowManager.LayoutParams p = window.getAttributes();
|
||||
p.width = d.getWidth();
|
||||
p.height = ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
window.setAttributes(p);
|
||||
window.setGravity(Gravity.BOTTOM);
|
||||
window.setWindowAnimations(R.style.BottomSelectSheet_Anim); //添加动画
|
||||
|
||||
final ListView listView = view.findViewById(R.id.item_list);
|
||||
listAdapter = new ArrayAdapter<>(context, R.layout.bottom_sheet_item, R.id.sheet_item, selectList);
|
||||
listView.setAdapter(listAdapter);
|
||||
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
dismiss();
|
||||
if (onClickListener != null) {
|
||||
onClickListener.onSheetClick(position);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
TextView cancelButton = view.findViewById(R.id.cancel_button);
|
||||
cancelButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void dismiss() {
|
||||
if (dialog != null && dialog.isShowing()) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if (dialog != null && !dialog.isShowing()) {
|
||||
listAdapter.notifyDataSetChanged();
|
||||
dialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
public void setSelectList(List<String> selectList) {
|
||||
this.selectList.clear();
|
||||
this.selectList.addAll(selectList);
|
||||
}
|
||||
|
||||
public void setOnClickListener(BottomSelectSheetOnClickListener onClickListener) {
|
||||
this.onClickListener = onClickListener;
|
||||
}
|
||||
|
||||
public interface BottomSelectSheetOnClickListener {
|
||||
void onSheetClick(int index);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.interfaces;
|
||||
|
||||
public interface GroupEventListener {
|
||||
void onGroupInfoChanged(String groupID);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.interfaces;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IGroupApplyLayout {
|
||||
void onGroupApplyInfoListChanged(List<GroupApplyInfo> dataSource);
|
||||
void onDataSetChanged();
|
||||
Context getContext();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.interfaces;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ILayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
|
||||
|
||||
public interface IGroupMemberLayout extends ILayout {
|
||||
|
||||
void onGroupInfoChanged(GroupInfo dataSource);
|
||||
void onGroupInfoModified(Object value, int type);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
|
||||
public interface IGroupMemberChangedCallback {
|
||||
void onMemberRemoved(GroupMemberInfo memberInfo);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public interface IGroupMemberListener {
|
||||
|
||||
void forwardListMember(GroupInfo info);
|
||||
|
||||
void forwardAddMember(GroupInfo info);
|
||||
|
||||
void forwardDeleteMember(GroupInfo info);
|
||||
|
||||
default void setSelectedMember(ArrayList<String> members) {}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.view.GroupApplyManagerLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupApplyPresenter;
|
||||
|
||||
public class GroupApplyManagerMinimalistActivity extends BaseLightActivity {
|
||||
|
||||
private GroupApplyManagerLayout mManagerLayout;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.group_minimalist_apply_manager_activity);
|
||||
if (getIntent().getExtras() == null) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
mManagerLayout = findViewById(R.id.group_apply_manager_layout);
|
||||
|
||||
GroupApplyPresenter presenter = new GroupApplyPresenter(mManagerLayout);
|
||||
mManagerLayout.setPresenter(presenter);
|
||||
|
||||
String groupId = getIntent().getExtras().getString(TUIGroupConstants.Group.GROUP_ID);
|
||||
GroupInfo groupInfo = new GroupInfo();
|
||||
groupInfo.setId(groupId);
|
||||
mManagerLayout.setDataSource(groupInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (requestCode != TUIGroupConstants.ActivityRequest.CODE_1) {
|
||||
return;
|
||||
}
|
||||
if (resultCode != RESULT_OK) {
|
||||
return;
|
||||
}
|
||||
GroupApplyInfo info = (GroupApplyInfo) data.getSerializableExtra(TUIGroupConstants.Group.MEMBER_APPLY);
|
||||
if (info == null) {
|
||||
return;
|
||||
}
|
||||
mManagerLayout.updateItemData(info);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfoMinimalistActivity extends BaseLightActivity {
|
||||
|
||||
public static final int REQUEST_FOR_CHANGE_OWNER = 1;
|
||||
|
||||
private GroupInfoMinimalistFragment fragment;
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.group_info_activity);
|
||||
fragment = new GroupInfoMinimalistFragment();
|
||||
fragment.setArguments(getIntent().getExtras());
|
||||
getSupportFragmentManager().beginTransaction().replace(R.id.group_manager_base, fragment).commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void finish() {
|
||||
super.finish();
|
||||
setResult(1001);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == REQUEST_FOR_CHANGE_OWNER && data != null) {
|
||||
List<String> selectedList = data.getStringArrayListExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (selectedList != null && !selectedList.isEmpty()) {
|
||||
String newOwnerId = selectedList.get(0);
|
||||
fragment.changeGroupOwner(newOwnerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,253 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.activities.ImageSelectActivity;
|
||||
import com.tencent.qcloud.tuicore.component.fragments.BaseFragment;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.view.GroupInfoLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfoMinimalistFragment extends BaseFragment {
|
||||
private static final int CHOOSE_AVATAR_REQUEST_CODE = 101;
|
||||
|
||||
private View baseView;
|
||||
private GroupInfoLayout groupInfoLayout;
|
||||
|
||||
private String groupId;
|
||||
|
||||
private GroupInfoPresenter groupInfoPresenter = null;
|
||||
private String mChatBackgroundThumbnailUrl;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
|
||||
baseView = inflater.inflate(R.layout.group_minimalist_info_fragment, container, false);
|
||||
initView();
|
||||
return baseView;
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
Bundle bundle = getArguments();
|
||||
if (bundle == null) {
|
||||
ToastUtil.toastShortMessage("groupId is empty. bundle is null");
|
||||
return;
|
||||
}
|
||||
groupId = bundle.getString(TUIGroupConstants.Group.GROUP_ID);
|
||||
mChatBackgroundThumbnailUrl = bundle.getString(TUIConstants.TUIChat.CHAT_BACKGROUND_URI);
|
||||
groupInfoLayout = baseView.findViewById(R.id.group_info_layout);
|
||||
// 新建 presenter 与 layout 互相绑定
|
||||
groupInfoPresenter = new GroupInfoPresenter(groupInfoLayout);
|
||||
groupInfoPresenter.setGroupEventListener();
|
||||
groupInfoLayout.setGroupInfoPresenter(groupInfoPresenter);
|
||||
groupInfoLayout.setOnModifyGroupAvatarListener(new OnModifyGroupAvatarListener() {
|
||||
@Override
|
||||
public void onModifyGroupAvatar(String originAvatarUrl) {
|
||||
ArrayList<ImageSelectActivity.ImageBean> faceList = new ArrayList<>();
|
||||
for (int i = 0; i < TUIGroupConstants.GROUP_FACE_COUNT; i++) {
|
||||
ImageSelectActivity.ImageBean imageBean = new ImageSelectActivity.ImageBean();
|
||||
imageBean.setThumbnailUri(String.format(TUIGroupConstants.GROUP_FACE_URL, (i + 1) + ""));
|
||||
imageBean.setImageUri(String.format(TUIGroupConstants.GROUP_FACE_URL, (i + 1) + ""));
|
||||
faceList.add(imageBean);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(getContext(), ImageSelectActivity.class);
|
||||
intent.putExtra(ImageSelectActivity.TITLE, getResources().getString(R.string.group_choose_avatar));
|
||||
intent.putExtra(ImageSelectActivity.SPAN_COUNT, 4);
|
||||
intent.putExtra(ImageSelectActivity.ITEM_WIDTH, ScreenUtil.dip2px(77));
|
||||
intent.putExtra(ImageSelectActivity.ITEM_HEIGHT, ScreenUtil.dip2px(77));
|
||||
intent.putExtra(ImageSelectActivity.DATA, faceList);
|
||||
intent.putExtra(ImageSelectActivity.SELECTED, new ImageSelectActivity.ImageBean(originAvatarUrl, originAvatarUrl, false));
|
||||
startActivityForResult(intent, CHOOSE_AVATAR_REQUEST_CODE);
|
||||
}
|
||||
});
|
||||
groupInfoLayout.loadGroupInfo(groupId);
|
||||
groupInfoLayout.setRouter(new IGroupMemberListener() {
|
||||
@Override
|
||||
public void forwardListMember(GroupInfo info) {
|
||||
Intent intent = new Intent(getContext(), GroupMemberMinimalistActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, false);
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, info.getId());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardAddMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FRIENDS, true);
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
for (GroupMemberInfo memberInfo : info.getMemberDetails()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
param.putStringArrayList(TUIGroupConstants.Selection.SELECTED_LIST, selectedList);
|
||||
TUICore.startActivity(GroupInfoMinimalistFragment.this, "StartGroupMemberSelectMinimalistActivity", param, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardDeleteMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FOR_CALL, true);
|
||||
TUICore.startActivity(GroupInfoMinimalistFragment.this, "StartGroupMemberSelectMinimalistActivity", param, 2);
|
||||
}
|
||||
});
|
||||
|
||||
groupInfoLayout.setOnButtonClickListener(new GroupInfoLayout.OnButtonClickListener() {
|
||||
@Override
|
||||
public void onSetChatBackground() {
|
||||
ArrayList<ImageSelectActivity.ImageBean> faceList = new ArrayList<>();
|
||||
ImageSelectActivity.ImageBean defaultFace = new ImageSelectActivity.ImageBean();
|
||||
defaultFace.setDefault(true);
|
||||
faceList.add(defaultFace);
|
||||
for (int i = 0; i < TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_COUNT; i++) {
|
||||
ImageSelectActivity.ImageBean imageBean = new ImageSelectActivity.ImageBean();
|
||||
imageBean.setImageUri(String.format(TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_URL, (i + 1) + ""));
|
||||
imageBean.setThumbnailUri(String.format(TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_THUMBNAIL_URL, (i + 1) + ""));
|
||||
faceList.add(imageBean);
|
||||
}
|
||||
|
||||
Intent intent = new Intent(getContext(), ImageSelectActivity.class);
|
||||
intent.putExtra(ImageSelectActivity.TITLE, getResources().getString(R.string.chat_background_title));
|
||||
intent.putExtra(ImageSelectActivity.SPAN_COUNT, 2);
|
||||
intent.putExtra(ImageSelectActivity.ITEM_WIDTH, ScreenUtil.dip2px(186));
|
||||
intent.putExtra(ImageSelectActivity.ITEM_HEIGHT, ScreenUtil.dip2px(124));
|
||||
intent.putExtra(ImageSelectActivity.DATA, faceList);
|
||||
if (TextUtils.isEmpty(mChatBackgroundThumbnailUrl) || TextUtils.equals(TUIConstants.TUIChat.CHAT_CONVERSATION_BACKGROUND_DEFAULT_URL, mChatBackgroundThumbnailUrl)) {
|
||||
intent.putExtra(ImageSelectActivity.SELECTED, defaultFace);
|
||||
} else {
|
||||
intent.putExtra(ImageSelectActivity.SELECTED, new ImageSelectActivity.ImageBean(mChatBackgroundThumbnailUrl, "", false));
|
||||
}
|
||||
intent.putExtra(ImageSelectActivity.NEED_DOWLOAD_LOCAL, true);
|
||||
startActivityForResult(intent, TUIConstants.TUIChat.CHAT_REQUEST_BACKGROUND_CODE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == 3) {
|
||||
List<String> friends = (List<String>) data.getSerializableExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (requestCode == 1) {
|
||||
inviteGroupMembers(friends);
|
||||
} else if (requestCode == 2) {
|
||||
deleteGroupMembers(friends);
|
||||
}
|
||||
} else if (requestCode == CHOOSE_AVATAR_REQUEST_CODE && resultCode == ImageSelectActivity.RESULT_CODE_SUCCESS) {
|
||||
if (data != null) {
|
||||
ImageSelectActivity.ImageBean imageBean = (ImageSelectActivity.ImageBean) data.getSerializableExtra(ImageSelectActivity.DATA);
|
||||
if (imageBean == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String avatarUrl = imageBean.getImageUri();
|
||||
modifyGroupAvatar(avatarUrl);
|
||||
}
|
||||
} else if (requestCode == TUIConstants.TUIChat.CHAT_REQUEST_BACKGROUND_CODE) {
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
ImageSelectActivity.ImageBean imageBean = (ImageSelectActivity.ImageBean) data.getSerializableExtra(ImageSelectActivity.DATA);
|
||||
if (imageBean == null) {
|
||||
TUIGroupLog.e("GroupInfoMinimalistFragment", "onActivityResult imageBean is null");
|
||||
return;
|
||||
}
|
||||
|
||||
String backgroundUri = imageBean.getLocalPath();
|
||||
String thumbnailUri = imageBean.getThumbnailUri();
|
||||
String dataUri = thumbnailUri + "," + backgroundUri;
|
||||
TUIGroupLog.d("GroupInfoMinimalistFragment", "onActivityResult backgroundUri = " + backgroundUri);
|
||||
mChatBackgroundThumbnailUrl = thumbnailUri;
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIChat.CHAT_ID, groupId);
|
||||
param.put(TUIConstants.TUIChat.CHAT_BACKGROUND_URI, dataUri);
|
||||
TUICore.callService(TUIConstants.TUIChat.SERVICE_NAME, TUIConstants.TUIChat.METHOD_UPDATE_DATA_STORE_CHAT_URI, param);
|
||||
}
|
||||
}
|
||||
|
||||
private void modifyGroupAvatar(String avatarUrl) {
|
||||
groupInfoLayout.modifyGroupAvatar(avatarUrl);
|
||||
}
|
||||
|
||||
private void deleteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
if (groupInfoPresenter != null) {
|
||||
groupInfoPresenter.deleteGroupMembers(groupId, friends, new IUIKitCallback<List<String>>() {
|
||||
@Override
|
||||
public void onSuccess(List<String> data) {
|
||||
groupInfoPresenter.loadGroupInfo(groupId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void inviteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
groupInfoPresenter.inviteGroupMembers(groupId, friends, new IUIKitCallback<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
if (data instanceof String) {
|
||||
ToastUtil.toastLongMessage(data.toString());
|
||||
} else {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_suc));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_fail) + errCode + "=" + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void changeGroupOwner(String newOwnerId) {
|
||||
groupInfoPresenter.transferGroupOwner(groupId, newOwnerId, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
groupInfoLayout.loadGroupInfo(groupId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public interface OnModifyGroupAvatarListener {
|
||||
void onModifyGroupAvatar(String originAvatarUrl);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.view.GroupMemberLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class GroupMemberMinimalistActivity extends BaseLightActivity {
|
||||
|
||||
private GroupMemberLayout mMemberLayout;
|
||||
private String groupID;
|
||||
private GroupInfoPresenter presenter;
|
||||
|
||||
private boolean isSelectMode = false;
|
||||
private ArrayList<String> excludeList;
|
||||
private ArrayList<String> alreadySelectedList;
|
||||
private String userData;
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.group_minimalist_members_list);
|
||||
mMemberLayout = findViewById(R.id.group_member_grid_layout);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
Intent intent = getIntent();
|
||||
groupID = intent.getStringExtra(TUIConstants.TUIGroup.GROUP_ID);
|
||||
int limit = getIntent().getIntExtra(TUIConstants.TUIGroup.LIMIT, Integer.MAX_VALUE);
|
||||
isSelectMode = intent.getBooleanExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
String title = intent.getStringExtra(TUIConstants.TUIGroup.TITLE);
|
||||
excludeList = intent.getStringArrayListExtra(TUIConstants.TUIGroup.EXCLUDE_LIST);
|
||||
alreadySelectedList = intent.getStringArrayListExtra(TUIConstants.TUIGroup.SELECTED_LIST);
|
||||
userData = intent.getStringExtra(TUIConstants.TUIGroup.USER_DATA);
|
||||
int filter = intent.getIntExtra(TUIConstants.TUIGroup.FILTER, GroupInfo.GROUP_MEMBER_FILTER_ALL);
|
||||
mMemberLayout.setSelectMode(isSelectMode);
|
||||
mMemberLayout.setTitle(title);
|
||||
mMemberLayout.setExcludeList(excludeList);
|
||||
mMemberLayout.setAlreadySelectedList(alreadySelectedList);
|
||||
presenter = new GroupInfoPresenter(mMemberLayout);
|
||||
mMemberLayout.setPresenter(presenter);
|
||||
presenter.loadGroupInfo(groupID, filter);
|
||||
|
||||
mMemberLayout.getTitleBar().setOnLeftClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
mMemberLayout.setGroupMemberListener(new IGroupMemberListener() {
|
||||
|
||||
@Override
|
||||
public void setSelectedMember(ArrayList<String> members) {
|
||||
if (members == null || members.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
if (members.size() > limit) {
|
||||
String overLimitTip = getString(R.string.group_over_limit_tip, limit);
|
||||
ToastUtil.toastShortMessage(overLimitTip);
|
||||
return;
|
||||
}
|
||||
Intent result = new Intent();
|
||||
result.putStringArrayListExtra(TUIConstants.TUIGroup.LIST, members);
|
||||
setResult(0, result);
|
||||
|
||||
Map<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIGroup.LIST, members);
|
||||
param.put(TUIConstants.TUIGroup.USER_DATA, userData);
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP, TUIConstants.TUIGroup.EVENT_SUB_KEY_GROUP_MEMBER_SELECTED, param);
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardListMember(GroupInfo info) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardAddMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FRIENDS, true);
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
for (GroupMemberInfo memberInfo : info.getMemberDetails()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
param.putStringArrayList(TUIGroupConstants.Selection.SELECTED_LIST, selectedList);
|
||||
TUICore.startActivity(GroupMemberMinimalistActivity.this, "StartGroupMemberSelectMinimalistActivity", param, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forwardDeleteMember(GroupInfo info) {
|
||||
Bundle param = new Bundle();
|
||||
param.putString(TUIGroupConstants.Group.GROUP_ID, info.getId());
|
||||
param.putBoolean(TUIGroupConstants.Selection.SELECT_FOR_CALL, true);
|
||||
TUICore.startActivity(GroupMemberMinimalistActivity.this, "StartGroupMemberSelectMinimalistActivity", param, 2);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == 3) {
|
||||
List<String> friends = (List<String>) data.getSerializableExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (requestCode == 1) {
|
||||
inviteGroupMembers(friends);
|
||||
} else if (requestCode == 2) {
|
||||
deleteGroupMembers(friends);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void deleteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
if (presenter != null) {
|
||||
presenter.deleteGroupMembers(groupID, friends, new IUIKitCallback<List<String>>() {
|
||||
@Override
|
||||
public void onSuccess(List<String> data) {
|
||||
presenter.loadGroupInfo(groupID);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void inviteGroupMembers(List<String> friends) {
|
||||
if (friends != null && friends.size() > 0) {
|
||||
if (presenter != null) {
|
||||
presenter.inviteGroupMembers(groupID, friends, new IUIKitCallback<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
if (data instanceof String) {
|
||||
ToastUtil.toastLongMessage(data.toString());
|
||||
} else {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_suc));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.invite_fail) + errCode + "=" + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.page;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupManagerPresenter;
|
||||
|
||||
public class GroupNoticeMinimalistActivity extends BaseLightActivity {
|
||||
|
||||
private static OnGroupNoticeChangedListener changedListener;
|
||||
|
||||
private EditText editText;
|
||||
|
||||
private GroupInfo groupInfo;
|
||||
|
||||
private TitleBarLayout titleBarLayout;
|
||||
|
||||
private boolean isEditModel = false;
|
||||
|
||||
private GroupManagerPresenter presenter;
|
||||
|
||||
public static void setOnGroupNoticeChangedListener(OnGroupNoticeChangedListener listener) {
|
||||
GroupNoticeMinimalistActivity.changedListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_group_notice);
|
||||
editText = findViewById(R.id.group_notice_text);
|
||||
titleBarLayout = findViewById(R.id.group_notice_title_bar);
|
||||
groupInfo = (GroupInfo) getIntent().getSerializableExtra(TUIGroupConstants.Group.GROUP_INFO);
|
||||
presenter = new GroupManagerPresenter();
|
||||
if (!TextUtils.isEmpty(groupInfo.getNotice())) {
|
||||
editText.setText(groupInfo.getNotice());
|
||||
}
|
||||
titleBarLayout.getLeftGroup().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
titleBarLayout.setTitle(getString(R.string.group_notice), ITitleBarLayout.Position.MIDDLE);
|
||||
titleBarLayout.getRightIcon().setVisibility(View.GONE);
|
||||
|
||||
if (groupInfo.isCanManagerGroup()) {
|
||||
titleBarLayout.setTitle(getString(R.string.group_edit), ITitleBarLayout.Position.RIGHT);
|
||||
}
|
||||
titleBarLayout.getRightGroup().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!isEditModel) {
|
||||
titleBarLayout.setTitle(getString(com.tencent.qcloud.tuicore.R.string.sure), ITitleBarLayout.Position.RIGHT);
|
||||
editText.setInputType(EditorInfo.TYPE_CLASS_TEXT);
|
||||
editText.setClickable(true);
|
||||
editText.setFocusable(true);
|
||||
editText.setFocusableInTouchMode(true);
|
||||
showSoftInput();
|
||||
editText.setSelection(editText.getText().toString().length());
|
||||
isEditModel = true;
|
||||
} else {
|
||||
titleBarLayout.setTitle(getString(R.string.group_edit), ITitleBarLayout.Position.RIGHT);
|
||||
editText.setInputType(EditorInfo.TYPE_NULL);
|
||||
editText.setClickable(false);
|
||||
editText.setFocusable(false);
|
||||
editText.setFocusableInTouchMode(false);
|
||||
hideSoftInput();
|
||||
setGroupNotice(editText.getText().toString());
|
||||
isEditModel = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setGroupNotice(String groupNotice) {
|
||||
if (TextUtils.equals(groupNotice, groupInfo.getNotice())) {
|
||||
return;
|
||||
}
|
||||
presenter.modifyGroupNotification(groupInfo.getId(), groupNotice, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
groupInfo.setNotice(groupNotice);
|
||||
if (changedListener != null) {
|
||||
changedListener.onChanged(groupNotice);
|
||||
}
|
||||
ToastUtil.toastShortMessage(getResources().getString(R.string.modify_group_notice_success));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage("modifyGroupNotice error , errCode " + errCode + " errMsg " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showSoftInput() {
|
||||
editText.requestFocus();
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
if (!isSoftInputShown()) {
|
||||
imm.toggleSoftInput(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void hideSoftInput() {
|
||||
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
|
||||
editText.clearFocus();
|
||||
}
|
||||
|
||||
private boolean isSoftInputShown() {
|
||||
View decorView = getWindow().getDecorView();
|
||||
int screenHeight = decorView.getHeight();
|
||||
Rect rect = new Rect();
|
||||
decorView.getWindowVisibleDisplayFrame(rect);
|
||||
return screenHeight - rect.bottom - getNavigateBarHeight() >= 0;
|
||||
}
|
||||
|
||||
// 兼容有导航键的情况
|
||||
private int getNavigateBarHeight() {
|
||||
DisplayMetrics metrics = new DisplayMetrics();
|
||||
WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
|
||||
windowManager.getDefaultDisplay().getMetrics(metrics);
|
||||
int usableHeight = metrics.heightPixels;
|
||||
windowManager.getDefaultDisplay().getRealMetrics(metrics);
|
||||
int realHeight = metrics.heightPixels;
|
||||
if (realHeight > usableHeight) {
|
||||
return realHeight - usableHeight;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnGroupNoticeChangedListener {
|
||||
void onChanged(String notice);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,319 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.component.CustomLinearLayoutManager;
|
||||
import com.tencent.qcloud.tuicore.component.LineControllerView;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupManagerPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class ManageGroupMinimalistActivity extends BaseLightActivity {
|
||||
|
||||
private TitleBarLayout titleBarLayout;
|
||||
private LineControllerView setManagerView;
|
||||
private LineControllerView muteAllView;
|
||||
private View addMuteMemberView;
|
||||
private RecyclerView mutedList;
|
||||
private MutedMemberAdapter mutedMemberAdapter;
|
||||
|
||||
private GroupManagerPresenter presenter;
|
||||
private GroupInfo groupInfo;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_group_manager);
|
||||
presenter = new GroupManagerPresenter();
|
||||
titleBarLayout = findViewById(R.id.group_manage_title_bar);
|
||||
setManagerView = findViewById(R.id.group_manage_set_manager);
|
||||
muteAllView = findViewById(R.id.group_manage_mute_all);
|
||||
addMuteMemberView = findViewById(R.id.group_manage_add_mute_member);
|
||||
mutedList = findViewById(R.id.group_manage_muted_member_list);
|
||||
mutedList.setLayoutManager(new CustomLinearLayoutManager(this));
|
||||
mutedMemberAdapter = new MutedMemberAdapter();
|
||||
mutedList.setAdapter(mutedMemberAdapter);
|
||||
|
||||
groupInfo = (GroupInfo) getIntent().getSerializableExtra(TUIGroupConstants.Group.GROUP_INFO);
|
||||
|
||||
muteAllView.setChecked(groupInfo.isAllMuted());
|
||||
if (groupInfo.isAllMuted()) {
|
||||
addMuteMemberView.setVisibility(View.GONE);
|
||||
mutedList.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
titleBarLayout.setTitle(getString(R.string.group_manager), ITitleBarLayout.Position.MIDDLE);
|
||||
setClickListener();
|
||||
loadMutedMember();
|
||||
}
|
||||
|
||||
private void setClickListener() {
|
||||
titleBarLayout.getLeftIcon().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
muteAllView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
presenter.muteAll(groupInfo.getId(), isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
if (isChecked) {
|
||||
addMuteMemberView.setVisibility(View.GONE);
|
||||
mutedList.setVisibility(View.GONE);
|
||||
} else {
|
||||
addMuteMemberView.setVisibility(View.VISIBLE);
|
||||
mutedList.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
setManagerView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_AVCHATROOM)
|
||||
|| TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_WORK)) {
|
||||
ToastUtil.toastShortMessage(getString(R.string.group_not_support_set_manager));
|
||||
return;
|
||||
}
|
||||
Intent intent = new Intent(ManageGroupMinimalistActivity.this, SetGroupManagerMinimalistActivity.class);
|
||||
intent.putExtra(TUIGroupConstants.Group.GROUP_INFO, groupInfo);
|
||||
startActivity(intent);
|
||||
}
|
||||
});
|
||||
|
||||
addMuteMemberView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_AVCHATROOM)
|
||||
|| TextUtils.equals(groupInfo.getGroupType(), GroupInfo.GROUP_TYPE_WORK)) {
|
||||
ToastUtil.toastShortMessage(getString(R.string.group_not_support_mute_member));
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(ManageGroupMinimalistActivity.this, GroupMemberMinimalistActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
intent.putExtra(TUIConstants.TUIGroup.FILTER, GroupInfo.GROUP_MEMBER_FILTER_COMMON);
|
||||
if (mutedMemberAdapter.getGroupMemberInfoList() != null) {
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
for (GroupMemberInfo memberInfo : mutedMemberAdapter.getGroupMemberInfoList()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
intent.putExtra(TUIConstants.TUIGroup.SELECTED_LIST, selectedList);
|
||||
}
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, groupInfo.getId());
|
||||
startActivityForResult(intent, 1);
|
||||
}
|
||||
});
|
||||
|
||||
mutedMemberAdapter.setOnItemLongClickListener(new SetGroupManagerMinimalistActivity.OnItemLongClickListener() {
|
||||
@Override
|
||||
public void onClick(View view, GroupMemberInfo memberInfo, int position) {
|
||||
Drawable drawable = view.getBackground();
|
||||
if (drawable != null) {
|
||||
drawable.setColorFilter(0xd9d9d9, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
View itemPop = LayoutInflater.from(ManageGroupMinimalistActivity.this).inflate(R.layout.group_manager_pop_menu, null);
|
||||
PopupWindow popupWindow = new PopupWindow(itemPop, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
|
||||
popupWindow.setBackgroundDrawable(new ColorDrawable());
|
||||
popupWindow.setOutsideTouchable(true);
|
||||
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss() {
|
||||
if (drawable != null) {
|
||||
drawable.clearColorFilter();
|
||||
}
|
||||
}
|
||||
});
|
||||
TextView popText = itemPop.findViewById(R.id.pop_text);
|
||||
popText.setText(R.string.group_cancel_mute_label);
|
||||
popText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
popupWindow.dismiss();
|
||||
presenter.cancelMuteGroupMember(groupInfo.getId(), memberInfo.getAccount(), new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mutedMemberAdapter.onItemRemoved(memberInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
int x = view.getWidth() / 2;
|
||||
int y = - view.getHeight() / 3;
|
||||
int popHeight = ScreenUtil.dip2px(45) * 3;
|
||||
if (y + popHeight + view.getY() + view.getHeight() > mutedList.getBottom()) {
|
||||
y = y - popHeight;
|
||||
}
|
||||
popupWindow.showAsDropDown(view, x, y, Gravity.TOP | Gravity.START);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void loadMutedMember() {
|
||||
presenter.loadMutedMembers(groupInfo.getId(), new IUIKitCallback<List<GroupMemberInfo>>() {
|
||||
@Override
|
||||
public void onSuccess(List<GroupMemberInfo> data) {
|
||||
mutedMemberAdapter.setGroupMemberInfoList(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == 1 && data != null) {
|
||||
List<String> selectedList = data.getStringArrayListExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (selectedList != null && !selectedList.isEmpty()) {
|
||||
for (String userId : selectedList) {
|
||||
presenter.muteGroupMember(groupInfo.getId(), userId, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
loadMutedMember();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class MutedMemberAdapter extends RecyclerView.Adapter<MutedMemberAdapter.MutedMemberViewHolder> {
|
||||
|
||||
private List<GroupMemberInfo> groupMemberInfoList;
|
||||
|
||||
private SetGroupManagerMinimalistActivity.OnItemLongClickListener onItemLongClickListener;
|
||||
|
||||
public void setOnItemLongClickListener(SetGroupManagerMinimalistActivity.OnItemLongClickListener onItemLongClickListener) {
|
||||
this.onItemLongClickListener = onItemLongClickListener;
|
||||
}
|
||||
|
||||
public void onItemRemoved(GroupMemberInfo memberInfo) {
|
||||
int index = groupMemberInfoList.indexOf(memberInfo);
|
||||
groupMemberInfoList.remove(memberInfo);
|
||||
notifyItemRemoved(index);
|
||||
}
|
||||
|
||||
public void setGroupMemberInfoList(List<GroupMemberInfo> groupMemberInfoList) {
|
||||
this.groupMemberInfoList = groupMemberInfoList;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public List<GroupMemberInfo> getGroupMemberInfoList() {
|
||||
return groupMemberInfoList;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public MutedMemberViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_manager_item, parent, false);
|
||||
return new MutedMemberViewHolder(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull MutedMemberViewHolder holder, int position) {
|
||||
GroupMemberInfo groupMemberInfo = groupMemberInfoList.get(position);
|
||||
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (onItemLongClickListener != null) {
|
||||
onItemLongClickListener.onClick(v, groupMemberInfo, position);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
String displayName = getDisplayName(groupMemberInfo);
|
||||
holder.managerName.setText(displayName);
|
||||
GlideEngine.loadUserIcon(holder.faceIcon, groupMemberInfo.getIconUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (groupMemberInfoList == null || groupMemberInfoList.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return groupMemberInfoList.size();
|
||||
}
|
||||
|
||||
class MutedMemberViewHolder extends RecyclerView.ViewHolder {
|
||||
ShadeImageView faceIcon;
|
||||
TextView managerName;
|
||||
public MutedMemberViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
faceIcon = itemView.findViewById(R.id.group_manager_face);
|
||||
faceIcon.setRadius(ScreenUtil.dip2px(20));
|
||||
managerName = itemView.findViewById(R.id.group_manage_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getDisplayName(GroupMemberInfo groupMemberInfo) {
|
||||
String displayName = groupMemberInfo.getNameCard();
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getNickName();
|
||||
}
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getAccount();
|
||||
}
|
||||
return displayName;
|
||||
}
|
||||
|
||||
interface OnItemLongClickListener {
|
||||
void onClick(View view, GroupMemberInfo groupMemberInfo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,290 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.page;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.component.CustomLinearLayoutManager;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.BaseLightActivity;
|
||||
import com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupManagerPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SetGroupManagerMinimalistActivity extends BaseLightActivity {
|
||||
private TitleBarLayout titleBarLayout;
|
||||
private TextView managerCountLabel;
|
||||
|
||||
private GroupManagerPresenter presenter;
|
||||
private GroupInfo groupInfo;
|
||||
private RecyclerView managerList;
|
||||
private ManagerAdapter managerAdapter;
|
||||
private ShadeImageView ownerFace;
|
||||
private TextView ownerName;
|
||||
private View setManagerView;
|
||||
private String ownerID;
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_set_group_manager);
|
||||
titleBarLayout = findViewById(R.id.set_group_manager_title_bar);
|
||||
managerCountLabel = findViewById(R.id.set_group_manager_manager_label);
|
||||
managerList = findViewById(R.id.set_group_manager_manager_list);
|
||||
ownerFace = findViewById(R.id.set_group_manager_owner_face);
|
||||
ownerFace.setRadius(ScreenUtil.dip2px(20));
|
||||
ownerName = findViewById(R.id.set_group_manager_owner_name);
|
||||
setManagerView = findViewById(R.id.set_group_manager_add_manager);
|
||||
|
||||
titleBarLayout.setTitle(getString(R.string.group_set_manager), ITitleBarLayout.Position.MIDDLE);
|
||||
managerList.setLayoutManager(new CustomLinearLayoutManager(this));
|
||||
managerAdapter = new ManagerAdapter();
|
||||
managerList.setAdapter(managerAdapter);
|
||||
groupInfo = (GroupInfo) getIntent().getSerializableExtra(TUIGroupConstants.Group.GROUP_INFO);
|
||||
|
||||
presenter = new GroupManagerPresenter();
|
||||
|
||||
setClickListener();
|
||||
loadGroupManager();
|
||||
loadGroupOwner();
|
||||
}
|
||||
|
||||
private void loadGroupManager() {
|
||||
presenter.loadGroupManager(groupInfo.getId(), new IUIKitCallback<List<GroupMemberInfo>>() {
|
||||
@Override
|
||||
public void onSuccess(List<GroupMemberInfo> data) {
|
||||
if (data != null) {
|
||||
managerCountLabel.setText(getString(R.string.group_add_manager_count_label, data.size()));
|
||||
managerAdapter.setGroupMemberInfoList(data);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void loadGroupOwner() {
|
||||
presenter.loadGroupOwner(groupInfo.getId(), new IUIKitCallback<GroupMemberInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupMemberInfo data) {
|
||||
ownerID = data.getAccount();
|
||||
String faceUrl = data.getIconUrl();
|
||||
String displayName = getDisplayName(data);
|
||||
GlideEngine.loadUserIcon(ownerFace, faceUrl);
|
||||
ownerName.setText(displayName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setClickListener() {
|
||||
titleBarLayout.getLeftIcon().setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
finish();
|
||||
}
|
||||
});
|
||||
|
||||
setManagerView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent intent = new Intent(SetGroupManagerMinimalistActivity.this, GroupMemberMinimalistActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
ArrayList<String> selectedList = new ArrayList<>();
|
||||
if (managerAdapter.getGroupMemberInfoList() != null) {
|
||||
for (GroupMemberInfo memberInfo : managerAdapter.getGroupMemberInfoList()) {
|
||||
selectedList.add(memberInfo.getAccount());
|
||||
}
|
||||
intent.putExtra(TUIConstants.TUIGroup.SELECTED_LIST, selectedList);
|
||||
}
|
||||
ArrayList<String> excludeList = new ArrayList<>();
|
||||
excludeList.add(ownerID);
|
||||
intent.putExtra(TUIConstants.TUIGroup.EXCLUDE_LIST, excludeList);
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, groupInfo.getId());
|
||||
startActivityForResult(intent, 1);
|
||||
}
|
||||
});
|
||||
|
||||
managerAdapter.setOnItemLongClickListener(new OnItemLongClickListener() {
|
||||
@Override
|
||||
public void onClick(View view, GroupMemberInfo memberInfo, int position) {
|
||||
Drawable drawable = view.getBackground();
|
||||
if (drawable != null) {
|
||||
drawable.setColorFilter(0xd9d9d9, PorterDuff.Mode.SRC_IN);
|
||||
}
|
||||
View itemPop = LayoutInflater.from(SetGroupManagerMinimalistActivity.this).inflate(R.layout.group_manager_pop_menu, null);
|
||||
PopupWindow popupWindow = new PopupWindow(itemPop, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
|
||||
popupWindow.setBackgroundDrawable(new ColorDrawable());
|
||||
popupWindow.setOutsideTouchable(true);
|
||||
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss() {
|
||||
if (drawable != null) {
|
||||
drawable.clearColorFilter();
|
||||
}
|
||||
}
|
||||
});
|
||||
TextView popText = itemPop.findViewById(R.id.pop_text);
|
||||
popText.setText(R.string.group_remove_manager_label);
|
||||
popText.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
popupWindow.dismiss();
|
||||
presenter.clearGroupManager(groupInfo.getId(), memberInfo.getAccount(), new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
loadGroupManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
int x = view.getWidth() / 2;
|
||||
int y = - view.getHeight() / 3;
|
||||
int popHeight = ScreenUtil.dip2px(45) * 3;
|
||||
if (y + popHeight + view.getY() + view.getHeight() > managerList.getBottom()) {
|
||||
y = y - popHeight;
|
||||
}
|
||||
popupWindow.showAsDropDown(view, x, y, Gravity.TOP | Gravity.START);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == 1 && data != null) {
|
||||
List<String> selectedList = data.getStringArrayListExtra(TUIGroupConstants.Selection.LIST);
|
||||
if (selectedList != null && !selectedList.isEmpty()) {
|
||||
for (String userId : selectedList) {
|
||||
presenter.setGroupManager(groupInfo.getId(), userId, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
loadGroupManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(errCode + ", " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ManagerAdapter extends RecyclerView.Adapter<ManagerAdapter.ManagerViewHolder> {
|
||||
|
||||
private List<GroupMemberInfo> groupMemberInfoList;
|
||||
|
||||
private OnItemLongClickListener onItemLongClickListener;
|
||||
|
||||
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
|
||||
this.onItemLongClickListener = onItemLongClickListener;
|
||||
}
|
||||
|
||||
public void setGroupMemberInfoList(List<GroupMemberInfo> groupMemberInfoList) {
|
||||
this.groupMemberInfoList = groupMemberInfoList;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public List<GroupMemberInfo> getGroupMemberInfoList() {
|
||||
return groupMemberInfoList;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public ManagerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_manager_item, parent, false);
|
||||
return new ManagerViewHolder(itemView);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull ManagerViewHolder holder, int position) {
|
||||
GroupMemberInfo groupMemberInfo = groupMemberInfoList.get(position);
|
||||
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (onItemLongClickListener != null) {
|
||||
onItemLongClickListener.onClick(v, groupMemberInfo, position);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
String displayName = getDisplayName(groupMemberInfo);
|
||||
holder.managerName.setText(displayName);
|
||||
GlideEngine.loadUserIcon(holder.faceIcon, groupMemberInfo.getIconUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (groupMemberInfoList == null || groupMemberInfoList.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
return groupMemberInfoList.size();
|
||||
}
|
||||
|
||||
class ManagerViewHolder extends RecyclerView.ViewHolder {
|
||||
ShadeImageView faceIcon;
|
||||
TextView managerName;
|
||||
public ManagerViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
faceIcon = itemView.findViewById(R.id.group_manager_face);
|
||||
faceIcon.setRadius(ScreenUtil.dip2px(20));
|
||||
managerName = itemView.findViewById(R.id.group_manage_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getDisplayName(GroupMemberInfo groupMemberInfo) {
|
||||
String displayName = groupMemberInfo.getNameCard();
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getNickName();
|
||||
}
|
||||
if (TextUtils.isEmpty(displayName)) {
|
||||
displayName = groupMemberInfo.getAccount();
|
||||
}
|
||||
return displayName;
|
||||
}
|
||||
|
||||
interface OnItemLongClickListener {
|
||||
void onClick(View view, GroupMemberInfo groupMemberInfo, int position);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.view;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupApplyPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupApplyAdapter extends BaseAdapter {
|
||||
|
||||
private List<GroupApplyInfo> mGroupMembers = new ArrayList<>();
|
||||
private OnItemClickListener mOnItemClickListener;
|
||||
private GroupApplyPresenter presenter;
|
||||
|
||||
public GroupApplyAdapter() {
|
||||
|
||||
}
|
||||
|
||||
public void setPresenter(GroupApplyPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mGroupMembers.size();
|
||||
}
|
||||
|
||||
public int getUnHandledSize() {
|
||||
int total = 0;
|
||||
for (GroupApplyInfo i : mGroupMembers) {
|
||||
if (i.getStatus() == GroupApplyInfo.UNHANDLED) {
|
||||
total++;
|
||||
}
|
||||
}
|
||||
return total;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupApplyInfo getItem(int i) {
|
||||
return mGroupMembers.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int i) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(final int i, View view, ViewGroup viewGroup) {
|
||||
MyViewHolder holder;
|
||||
final GroupApplyInfo info = getItem(i);
|
||||
if (view == null) {
|
||||
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.group_member_apply_adpater, viewGroup, false);
|
||||
view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mOnItemClickListener != null && info.getStatus() == GroupApplyInfo.UNHANDLED) {
|
||||
mOnItemClickListener.onItemClick(info);
|
||||
}
|
||||
}
|
||||
});
|
||||
holder = new MyViewHolder();
|
||||
holder.memberIcon = view.findViewById(R.id.group_apply_member_icon);
|
||||
holder.memberName = view.findViewById(R.id.group_apply_member_name);
|
||||
holder.reason = view.findViewById(R.id.group_apply_reason);
|
||||
holder.accept = view.findViewById(R.id.group_apply_accept);
|
||||
holder.refuse = view.findViewById(R.id.group_apply_refuse);
|
||||
view.setTag(holder);
|
||||
} else {
|
||||
holder = (MyViewHolder) view.getTag();
|
||||
}
|
||||
holder.memberName.setText(info.getGroupApplication().getFromUser());
|
||||
holder.reason.setText(info.getGroupApplication().getRequestMsg());
|
||||
if (info.getStatus() == GroupApplyInfo.UNHANDLED) {
|
||||
holder.accept.setVisibility(View.VISIBLE);
|
||||
holder.accept.setText(R.string.accept);
|
||||
holder.accept.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.color.bg_positive_btn));
|
||||
holder.accept.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
acceptApply(i, info);
|
||||
}
|
||||
});
|
||||
holder.refuse.setVisibility(View.VISIBLE);
|
||||
holder.refuse.setText(R.string.refuse);
|
||||
holder.refuse.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.color.bg_negative_btn));
|
||||
holder.refuse.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
refuseApply(i, info);
|
||||
}
|
||||
});
|
||||
} else if (info.getStatus() == GroupApplyInfo.APPLIED) {
|
||||
holder.accept.setVisibility(View.VISIBLE);
|
||||
holder.accept.setClickable(false);
|
||||
holder.accept.setText(R.string.accepted);
|
||||
holder.accept.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.drawable.gray_btn_bg));
|
||||
holder.refuse.setVisibility(View.GONE);
|
||||
} else if (info.getStatus() == GroupApplyInfo.REFUSED) {
|
||||
holder.refuse.setVisibility(View.VISIBLE);
|
||||
holder.refuse.setClickable(false);
|
||||
holder.refuse.setText(R.string.refused);
|
||||
holder.refuse.setBackground(TUIGroupService.getAppContext().getResources().getDrawable(R.drawable.gray_btn_bg));
|
||||
holder.accept.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
public void setOnItemClickListener(OnItemClickListener l) {
|
||||
mOnItemClickListener = l;
|
||||
}
|
||||
|
||||
public void updateItemData(GroupApplyInfo info) {
|
||||
for (GroupApplyInfo i : mGroupMembers) {
|
||||
if (TextUtils.equals(i.getGroupApplication().getFromUser(), info.getGroupApplication().getFromUser())) {
|
||||
i.setStatus(info.getStatus());
|
||||
notifyDataSetChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo info) {
|
||||
presenter.loadGroupApplies();
|
||||
}
|
||||
|
||||
public void setDataSource(List<GroupApplyInfo> applyInfoList) {
|
||||
mGroupMembers = applyInfoList;
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
public void acceptApply(final int position, final GroupApplyInfo item) {
|
||||
if (presenter == null) {
|
||||
return;
|
||||
}
|
||||
presenter.acceptApply(item);
|
||||
}
|
||||
|
||||
public void refuseApply(final int position, final GroupApplyInfo item) {
|
||||
if (presenter == null) {
|
||||
return;
|
||||
}
|
||||
presenter.refuseApply(item);
|
||||
}
|
||||
|
||||
public interface OnItemClickListener {
|
||||
void onItemClick(GroupApplyInfo info);
|
||||
}
|
||||
|
||||
private class MyViewHolder {
|
||||
private ImageView memberIcon;
|
||||
private TextView memberName, reason;
|
||||
private Button accept, refuse;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.view;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ListView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupApplyLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupApplyPresenter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupApplyManagerLayout extends LinearLayout implements IGroupApplyLayout {
|
||||
|
||||
private TitleBarLayout mTitleBar;
|
||||
private ListView mApplyMemberList;
|
||||
private GroupApplyAdapter mAdapter;
|
||||
|
||||
private GroupApplyPresenter presenter;
|
||||
public GroupApplyManagerLayout(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupApplyManagerLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupApplyManagerLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.group_apply_manager_layout, this);
|
||||
mApplyMemberList = findViewById(R.id.group_apply_members);
|
||||
mAdapter = new GroupApplyAdapter();
|
||||
mAdapter.setOnItemClickListener(new GroupApplyAdapter.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(GroupApplyInfo info) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("fromUser", info.getFromUser());
|
||||
bundle.putString("fromUserNickName", info.getFromUserNickName());
|
||||
bundle.putString("requestMsg", info.getRequestMsg());
|
||||
bundle.putSerializable("groupApplication", info.getGroupApplication());
|
||||
TUICore.startActivity(getContext(),"FriendProfileActivity", bundle, TUIGroupConstants.ActivityRequest.CODE_1);
|
||||
}
|
||||
});
|
||||
mApplyMemberList.setAdapter(mAdapter);
|
||||
mTitleBar = findViewById(R.id.group_apply_title_bar);
|
||||
mTitleBar.getRightGroup().setVisibility(View.GONE);
|
||||
mTitleBar.setTitle(getResources().getString(R.string.group_apply_members), ITitleBarLayout.Position.MIDDLE);
|
||||
mTitleBar.setOnLeftClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (getContext() instanceof Activity) {
|
||||
((Activity) getContext()).finish();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public TitleBarLayout getTitleBar() {
|
||||
return mTitleBar;
|
||||
}
|
||||
|
||||
public void updateItemData(GroupApplyInfo info) {
|
||||
mAdapter.updateItemData(info);
|
||||
}
|
||||
|
||||
public void onDataSetChanged() {
|
||||
mAdapter.notifyDataSetChanged();
|
||||
|
||||
HashMap<String, Object> param = new HashMap<>();
|
||||
param.put(TUIConstants.TUIChat.IS_GROUP_CHAT, true);
|
||||
param.put(TUIConstants.TUIChat.GROUP_APPLY_NUM, mAdapter.getCount()-1);
|
||||
TUICore.callService(TUIConstants.TUIChat.SERVICE_NAME, TUIConstants.TUIChat.METHOD_GROUP_APPLICAITON_PROCESSED, param);
|
||||
}
|
||||
|
||||
public void setPresenter(GroupApplyPresenter groupApplyPresenter) {
|
||||
this.presenter = groupApplyPresenter;
|
||||
mAdapter.setPresenter(groupApplyPresenter);
|
||||
}
|
||||
|
||||
public void onGroupApplyInfoListChanged(List<GroupApplyInfo> applyInfoList) {
|
||||
mAdapter.setDataSource(applyInfoList);
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo dataSource) {
|
||||
presenter.setGroupInfo(dataSource);
|
||||
mAdapter.setDataSource(dataSource);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,216 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.view;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.BaseAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.util.BackgroundTasks;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfoAdapter extends BaseAdapter {
|
||||
|
||||
private static final int ADD_TYPE = -100;
|
||||
private static final int DEL_TYPE = -101;
|
||||
private static final int OWNER_PRIVATE_MAX_LIMIT = 8; //讨论组,owner可以添加成员和删除成员,
|
||||
private static final int OWNER_PUBLIC_MAX_LIMIT = 9; //公开群,owner不可以添加成员,但是可以删除成员
|
||||
private static final int OWNER_CHATROOM_MAX_LIMIT = 9; //聊天室,owner不可以添加成员,但是可以删除成员
|
||||
private static final int OWNER_COMMUNITY_MAX_LIMIT = 8; //社群,owner可以添加成员和删除成员,
|
||||
private static final int NORMAL_PRIVATE_MAX_LIMIT = 9; //讨论组,普通人可以添加成员
|
||||
private static final int NORMAL_PUBLIC_MAX_LIMIT = 10; //公开群,普通人没有权限添加成员和删除成员
|
||||
private static final int NORMAL_CHATROOM_MAX_LIMIT = 10; //聊天室,普通人没有权限添加成员和删除成员
|
||||
private static final int NORMAL_COMMUNITY_MAX_LIMIT = 9; //社群,普通人可以添加成员
|
||||
|
||||
private List<GroupMemberInfo> mGroupMembers = new ArrayList<>();
|
||||
private IGroupMemberListener mTailListener;
|
||||
private GroupInfo mGroupInfo;
|
||||
|
||||
private GroupInfoPresenter presenter;
|
||||
|
||||
public void setPresenter(GroupInfoPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
}
|
||||
|
||||
public void setManagerCallBack(IGroupMemberListener listener) {
|
||||
mTailListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mGroupMembers.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public GroupMemberInfo getItem(int i) {
|
||||
return mGroupMembers.get(i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int i) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(final int i, View view, final ViewGroup viewGroup) {
|
||||
MyViewHolder holder;
|
||||
if (view == null) {
|
||||
view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.group_member_item_layout, viewGroup, false);
|
||||
holder = new MyViewHolder();
|
||||
holder.memberIcon = view.findViewById(R.id.group_member_icon);
|
||||
holder.memberIcon.setRadius(ScreenUtil.dip2px(24));
|
||||
holder.memberName = view.findViewById(R.id.group_member_name);
|
||||
view.setTag(holder);
|
||||
} else {
|
||||
holder = (MyViewHolder) view.getTag();
|
||||
}
|
||||
final GroupMemberInfo info = getItem(i);
|
||||
GlideEngine.loadImage(holder.memberIcon, info.getIconUrl());
|
||||
// 显示优先级 群名片->昵称->账号
|
||||
if (!TextUtils.isEmpty(info.getNameCard())) {
|
||||
holder.memberName.setText(info.getNameCard());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getNickName())) {
|
||||
holder.memberName.setText(info.getNickName());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getAccount())) {
|
||||
holder.memberName.setText(info.getAccount());
|
||||
} else {
|
||||
holder.memberName.setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
view.setOnClickListener(null);
|
||||
holder.memberIcon.setBackground(null);
|
||||
holder.memberIcon.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||
if (info.getMemberType() == ADD_TYPE) {
|
||||
holder.memberIcon.setImageResource(R.drawable.add_group_member);
|
||||
holder.memberIcon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
|
||||
holder.memberIcon.setBackgroundResource(R.drawable.group_minimalist_add_border);
|
||||
view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mTailListener != null) {
|
||||
mTailListener.forwardAddMember(mGroupInfo);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if (info.getMemberType() == DEL_TYPE) {
|
||||
holder.memberIcon.setImageResource(R.drawable.del_group_member);
|
||||
holder.memberIcon.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
|
||||
holder.memberIcon.setBackgroundResource(R.drawable.bottom_action_border);
|
||||
view.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mTailListener != null) {
|
||||
mTailListener.forwardDeleteMember(mGroupInfo);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return view;
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo info) {
|
||||
mGroupInfo = info;
|
||||
mGroupMembers.clear();
|
||||
List<GroupMemberInfo> members = info.getMemberDetails();
|
||||
if (members != null) {
|
||||
int shootMemberCount = 0;
|
||||
if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_PRIVATE)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_WORK)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_PRIVATE_MAX_LIMIT ? OWNER_PRIVATE_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_PRIVATE_MAX_LIMIT ? NORMAL_PRIVATE_MAX_LIMIT : members.size();
|
||||
}
|
||||
} else if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_PUBLIC)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_PUBLIC_MAX_LIMIT ? OWNER_PUBLIC_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_PUBLIC_MAX_LIMIT ? NORMAL_PUBLIC_MAX_LIMIT : members.size();
|
||||
}
|
||||
} else if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_CHAT_ROOM)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_MEETING)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_CHATROOM_MAX_LIMIT ? OWNER_CHATROOM_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_CHATROOM_MAX_LIMIT ? NORMAL_CHATROOM_MAX_LIMIT : members.size();
|
||||
}
|
||||
} else if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_COMMUNITY)) {
|
||||
if (info.isOwner()) {
|
||||
shootMemberCount = members.size() > OWNER_COMMUNITY_MAX_LIMIT ? OWNER_COMMUNITY_MAX_LIMIT : members.size();
|
||||
} else {
|
||||
shootMemberCount = members.size() > NORMAL_COMMUNITY_MAX_LIMIT ? NORMAL_COMMUNITY_MAX_LIMIT : members.size();
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < shootMemberCount; i++) {
|
||||
mGroupMembers.add(members.get(i));
|
||||
}
|
||||
if (TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_PRIVATE)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_WORK)
|
||||
|| TextUtils.equals(info.getGroupType(), TUIConstants.GroupType.TYPE_COMMUNITY)) {
|
||||
// 公开群/聊天室 只有APP管理员可以邀请他人入群
|
||||
GroupMemberInfo add = new GroupMemberInfo();
|
||||
add.setMemberType(ADD_TYPE);
|
||||
mGroupMembers.add(add);
|
||||
}
|
||||
GroupMemberInfo self = null;
|
||||
for (int i = 0; i < mGroupMembers.size(); i++) {
|
||||
GroupMemberInfo memberInfo = mGroupMembers.get(i);
|
||||
if (isSelf(memberInfo.getAccount())) {
|
||||
self = memberInfo;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (info.isOwner() || (self != null && isAdmin(self.getMemberType()))) {
|
||||
GroupMemberInfo del = new GroupMemberInfo();
|
||||
del.setMemberType(DEL_TYPE);
|
||||
mGroupMembers.add(del);
|
||||
}
|
||||
BackgroundTasks.getInstance().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public boolean isAdmin(int memberType) {
|
||||
if (presenter != null) {
|
||||
return presenter.isAdmin(memberType);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isSelf(String userId) {
|
||||
if (presenter != null) {
|
||||
return presenter.isSelf(userId);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private class MyViewHolder {
|
||||
private ShadeImageView memberIcon;
|
||||
private TextView memberName;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,682 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.view;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CompoundButton;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.TUILogin;
|
||||
import com.tencent.qcloud.tuicore.component.LineControllerView;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.activities.SelectionActivity;
|
||||
import com.tencent.qcloud.tuicore.component.dialog.TUIKitDialog;
|
||||
import com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.component.popupcard.PopupInputCard;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.TUIUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.component.BottomSelectSheet;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupMemberLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.page.GroupInfoMinimalistActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.page.GroupInfoMinimalistFragment;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.page.GroupMemberMinimalistActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.page.GroupNoticeMinimalistActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.page.ManageGroupMinimalistActivity;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class GroupInfoLayout extends LinearLayout implements IGroupMemberLayout, View.OnClickListener {
|
||||
|
||||
private static final String TAG = GroupInfoLayout.class.getSimpleName();
|
||||
private TitleBarLayout mTitleBar;
|
||||
private LineControllerView mMemberView;
|
||||
private GroupInfoAdapter mMemberAdapter;
|
||||
private IGroupMemberListener mMemberPreviewListener;
|
||||
private LineControllerView mGroupTypeView;
|
||||
private TextView mGroupIDView;
|
||||
private TextView mGroupNameView;
|
||||
private View groupDetailArea;
|
||||
private ShadeImageView mGroupIcon;
|
||||
private ImageView mGroupDetailArrow;
|
||||
private View mGroupNotice;
|
||||
private TextView mGroupNoticeText;
|
||||
private LineControllerView mGroupManageView;
|
||||
private LineControllerView mNickView;
|
||||
private LineControllerView mJoinTypeView;
|
||||
private LineControllerView mTopSwitchView;
|
||||
private LineControllerView mMsgRevOptionSwitchView;
|
||||
private LineControllerView mFoldGroupChatSwitchView;
|
||||
private LineControllerView mChatBackground;
|
||||
private View mLayoutFold;
|
||||
private TextView mDissolveBtn;
|
||||
private TextView mClearMsgBtn;
|
||||
private TextView mChangeOwnerBtn;
|
||||
private GridView memberList;
|
||||
|
||||
private OnButtonClickListener mListener;
|
||||
|
||||
private GroupInfo mGroupInfo;
|
||||
private GroupInfoPresenter mPresenter;
|
||||
private ArrayList<String> mJoinTypes = new ArrayList<>();
|
||||
private GroupInfoMinimalistFragment.OnModifyGroupAvatarListener onModifyGroupAvatarListener;
|
||||
public GroupInfoLayout(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupInfoLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupInfoLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.group_info_layout, this);
|
||||
// 标题
|
||||
mTitleBar = findViewById(R.id.group_info_title_bar);
|
||||
mTitleBar.getRightGroup().setVisibility(GONE);
|
||||
mTitleBar.setTitle(getResources().getString(R.string.group_detail), ITitleBarLayout.Position.MIDDLE);
|
||||
mTitleBar.setOnLeftClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
((Activity) getContext()).finish();
|
||||
}
|
||||
});
|
||||
|
||||
// 成员标题
|
||||
mMemberView = findViewById(R.id.group_member_bar);
|
||||
mMemberView.setOnClickListener(this);
|
||||
mMemberView.setCanNav(true);
|
||||
// 成员列表
|
||||
memberList = findViewById(R.id.group_members);
|
||||
mMemberAdapter = new GroupInfoAdapter();
|
||||
memberList.setAdapter(mMemberAdapter);
|
||||
// 群类型,只读
|
||||
mGroupTypeView = findViewById(R.id.group_type_bar);
|
||||
// 群ID,只读
|
||||
mGroupIDView = findViewById(R.id.group_account);
|
||||
// 群聊名称
|
||||
mGroupNameView = findViewById(R.id.group_name);
|
||||
|
||||
groupDetailArea = findViewById(R.id.group_detail_area);
|
||||
groupDetailArea.setOnClickListener(this);
|
||||
// 群头像
|
||||
mGroupIcon = findViewById(R.id.group_icon);
|
||||
mGroupIcon.setRadius(ScreenUtil.dip2px(25));
|
||||
mGroupIcon.setOnClickListener(this);
|
||||
|
||||
// 群详情右箭头
|
||||
mGroupDetailArrow = findViewById(R.id.group_detail_arrow);
|
||||
|
||||
// 群公告
|
||||
mGroupNotice = findViewById(R.id.group_notice);
|
||||
mGroupNotice.setOnClickListener(this);
|
||||
mGroupNoticeText = findViewById(R.id.group_notice_text);
|
||||
// 群管理
|
||||
mGroupManageView = findViewById(R.id.group_manage);
|
||||
mGroupManageView.setOnClickListener(this);
|
||||
|
||||
// 加群方式
|
||||
mJoinTypeView = findViewById(R.id.join_type_bar);
|
||||
mJoinTypeView.setOnClickListener(this);
|
||||
mJoinTypeView.setCanNav(true);
|
||||
mJoinTypes.addAll(Arrays.asList(getResources().getStringArray(R.array.group_join_type)));
|
||||
// 群昵称
|
||||
mNickView = findViewById(R.id.self_nickname_bar);
|
||||
mNickView.setOnClickListener(this);
|
||||
mNickView.setCanNav(true);
|
||||
// 是否置顶
|
||||
mTopSwitchView = findViewById(R.id.chat_to_top_switch);
|
||||
mTopSwitchView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(final CompoundButton buttonView, boolean isChecked) {
|
||||
if (mGroupInfo == null) {
|
||||
return;
|
||||
}
|
||||
mPresenter.setTopConversation(mGroupInfo.getId(), isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
buttonView.setChecked(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// 消息接收选项
|
||||
mMsgRevOptionSwitchView = findViewById(R.id.msg_rev_option);
|
||||
// 折叠
|
||||
mLayoutFold = findViewById(R.id.layout_fold);
|
||||
mFoldGroupChatSwitchView = findViewById(R.id.fold_group_chat);
|
||||
|
||||
// 退群
|
||||
mDissolveBtn = findViewById(R.id.group_dissolve_button);
|
||||
mDissolveBtn.setOnClickListener(this);
|
||||
|
||||
// 清空群消息按钮
|
||||
mClearMsgBtn = findViewById(R.id.group_clear_msg_button);
|
||||
mClearMsgBtn.setOnClickListener(this);
|
||||
|
||||
// 转让群主
|
||||
mChangeOwnerBtn = findViewById(R.id.group_change_owner_button);
|
||||
mChangeOwnerBtn.setOnClickListener(this);
|
||||
|
||||
mChatBackground = findViewById(R.id.chat_background);
|
||||
mChatBackground.setOnClickListener(this);
|
||||
mChatBackground.setCanNav(true);
|
||||
}
|
||||
|
||||
private void initView() {
|
||||
int radius = ScreenUtil.dip2px(5);
|
||||
GlideEngine.loadUserIcon(mGroupIcon, mGroupInfo.getFaceUrl(), TUIUtil.getDefaultGroupIconResIDByGroupType(getContext(), mGroupInfo.getGroupType()), radius);
|
||||
if (!mGroupInfo.isCanManagerGroup()) {
|
||||
mGroupDetailArrow.setVisibility(GONE);
|
||||
}
|
||||
if (mGroupInfo.isOwner()) {
|
||||
mChangeOwnerBtn.setVisibility(VISIBLE);
|
||||
} else {
|
||||
mChangeOwnerBtn.setVisibility(GONE);
|
||||
}
|
||||
}
|
||||
|
||||
public void setGroupInfoPresenter(GroupInfoPresenter presenter) {
|
||||
this.mPresenter = presenter;
|
||||
if (mMemberAdapter != null) {
|
||||
mMemberAdapter.setPresenter(presenter);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mGroupInfo == null) {
|
||||
TUIGroupLog.e(TAG, "mGroupInfo is NULL");
|
||||
return;
|
||||
}
|
||||
if (v.getId() == R.id.group_member_bar) {
|
||||
if (mMemberPreviewListener != null) {
|
||||
mMemberPreviewListener.forwardListMember(mGroupInfo);
|
||||
}
|
||||
} else if (v.getId() == R.id.group_detail_area) {
|
||||
if (!mGroupInfo.isCanManagerGroup()) {
|
||||
return;
|
||||
}
|
||||
PopupInputCard popupInputCard = new PopupInputCard((Activity) getContext());
|
||||
BottomSelectSheet sheet = new BottomSelectSheet(getContext());
|
||||
List<String> stringList = new ArrayList<>();
|
||||
String modifyGroupName = getResources().getString(R.string.modify_group_name);
|
||||
String modifyGroupNotice = getResources().getString(R.string.modify_group_notice);
|
||||
stringList.add(modifyGroupName);
|
||||
stringList.add(modifyGroupNotice);
|
||||
sheet.setSelectList(stringList);
|
||||
sheet.setOnClickListener(new BottomSelectSheet.BottomSelectSheetOnClickListener() {
|
||||
@Override
|
||||
public void onSheetClick(int index) {
|
||||
if (index == 0) {
|
||||
popupInputCard.setContent(mGroupNameView.getText().toString());
|
||||
popupInputCard.setTitle(modifyGroupName);
|
||||
popupInputCard.setOnPositive((result -> {
|
||||
mPresenter.modifyGroupName(result);
|
||||
if (!TextUtils.isEmpty(result)) {
|
||||
mGroupNameView.setText(result);
|
||||
}
|
||||
}));
|
||||
popupInputCard.show(groupDetailArea, Gravity.BOTTOM);
|
||||
} else if (index == 1) {
|
||||
popupInputCard.setContent(mGroupNoticeText.getText().toString());
|
||||
popupInputCard.setTitle(modifyGroupNotice);
|
||||
popupInputCard.setOnPositive((result -> {
|
||||
mPresenter.modifyGroupNotice(result);
|
||||
if (TextUtils.isEmpty(result)) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(result);
|
||||
}
|
||||
}));
|
||||
popupInputCard.show(groupDetailArea, Gravity.BOTTOM);
|
||||
}
|
||||
}
|
||||
});
|
||||
sheet.show();
|
||||
} else if (v.getId() == R.id.group_icon) {
|
||||
if (!mGroupInfo.isCanManagerGroup()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (onModifyGroupAvatarListener != null) {
|
||||
onModifyGroupAvatarListener.onModifyGroupAvatar(mGroupInfo.getFaceUrl());
|
||||
}
|
||||
} else if (v.getId() == R.id.group_notice) {
|
||||
Intent intent = new Intent(getContext(), GroupNoticeMinimalistActivity.class);
|
||||
GroupNoticeMinimalistActivity.setOnGroupNoticeChangedListener(new GroupNoticeMinimalistActivity.OnGroupNoticeChangedListener() {
|
||||
@Override
|
||||
public void onChanged(String notice) {
|
||||
if (TextUtils.isEmpty(notice)) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(notice);
|
||||
}
|
||||
}
|
||||
});
|
||||
intent.putExtra(TUIGroupConstants.Group.GROUP_INFO, mGroupInfo);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
getContext().startActivity(intent);
|
||||
} else if (v.getId() == R.id.self_nickname_bar) {
|
||||
PopupInputCard popupInputCard = new PopupInputCard((Activity) getContext());
|
||||
popupInputCard.setContent(mNickView.getContent());
|
||||
popupInputCard.setTitle(getResources().getString(R.string.modify_nick_name_in_goup));
|
||||
String description = getResources().getString(R.string.group_modify_remark_rule);
|
||||
popupInputCard.setRule("^[a-zA-Z0-9_\u4e00-\u9fa5]*$");
|
||||
popupInputCard.setDescription(description);
|
||||
popupInputCard.setOnPositive((result -> {
|
||||
mPresenter.modifyMyGroupNickname(result);
|
||||
mNickView.setContent(result);
|
||||
}));
|
||||
popupInputCard.show(mNickView, Gravity.BOTTOM);
|
||||
|
||||
} else if (v.getId() == R.id.join_type_bar) {
|
||||
if (mGroupTypeView.getContent().equals(getContext().getString(R.string.chat_room))) {
|
||||
ToastUtil.toastLongMessage(getContext().getString(R.string.chat_room_tip));
|
||||
return;
|
||||
}
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(SelectionActivity.Selection.TITLE, getResources().getString(R.string.group_join_type));
|
||||
bundle.putStringArrayList(SelectionActivity.Selection.LIST, mJoinTypes);
|
||||
bundle.putInt(SelectionActivity.Selection.DEFAULT_SELECT_ITEM_INDEX, mGroupInfo.getJoinType());
|
||||
SelectionActivity.startListSelection((Activity) getContext(), bundle, new SelectionActivity.OnResultReturnListener() {
|
||||
@Override
|
||||
public void onReturn(final Object text) {
|
||||
mPresenter.modifyGroupInfo((Integer) text, TUIGroupConstants.Group.MODIFY_GROUP_JOIN_TYPE);
|
||||
}
|
||||
});
|
||||
} else if (v.getId() == R.id.group_dissolve_button) {
|
||||
if (mGroupInfo.isOwner() &&
|
||||
(!mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_WORK)
|
||||
&& !mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_PRIVATE))) {
|
||||
new TUIKitDialog(getContext())
|
||||
.builder()
|
||||
.setCancelable(true)
|
||||
.setCancelOutside(true)
|
||||
.setTitle(getContext().getString(R.string.dismiss_group_tip))
|
||||
.setDialogWidth(0.75f)
|
||||
.setPositiveButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mPresenter.deleteGroup(new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
((Activity) GroupInfoLayout.this.getContext()).finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.cancel), new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
}
|
||||
})
|
||||
.show();
|
||||
} else {
|
||||
new TUIKitDialog(getContext())
|
||||
.builder()
|
||||
.setCancelable(true)
|
||||
.setCancelOutside(true)
|
||||
.setTitle(getContext().getString(R.string.quit_group_tip))
|
||||
.setDialogWidth(0.75f)
|
||||
.setPositiveButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mPresenter.quitGroup(new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
((Activity) GroupInfoLayout.this.getContext()).finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
((Activity) GroupInfoLayout.this.getContext()).finish();
|
||||
ToastUtil.toastShortMessage("quitGroup failed, errCode = " + errCode + " errMsg = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.cancel), new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
||||
} else if (v.getId() == R.id.group_clear_msg_button) {
|
||||
new TUIKitDialog(getContext())
|
||||
.builder()
|
||||
.setCancelable(true)
|
||||
.setCancelOutside(true)
|
||||
.setTitle(getContext().getString(R.string.clear_group_msg_tip))
|
||||
.setDialogWidth(0.75f)
|
||||
.setPositiveButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Map<String, Object> hashMap = new HashMap<>();
|
||||
hashMap.put(TUIConstants.TUIGroup.GROUP_ID, mGroupInfo.getId());
|
||||
TUICore.notifyEvent(TUIConstants.TUIGroup.EVENT_GROUP,
|
||||
TUIConstants.TUIGroup.EVENT_SUB_KEY_CLEAR_MESSAGE, hashMap);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(getContext().getString(com.tencent.qcloud.tuicore.R.string.cancel), new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
}
|
||||
})
|
||||
.show();
|
||||
} else if (v.getId() == R.id.group_manage) {
|
||||
Intent intent = new Intent(getContext(), ManageGroupMinimalistActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
intent.putExtra(TUIGroupConstants.Group.GROUP_INFO, mGroupInfo);
|
||||
getContext().startActivity(intent);
|
||||
} else if (v == mChangeOwnerBtn) {
|
||||
ArrayList<String> excludeList = new ArrayList<>();
|
||||
excludeList.add(TUILogin.getLoginUser());
|
||||
Intent intent = new Intent(getContext(), GroupMemberMinimalistActivity.class);
|
||||
intent.putExtra(TUIConstants.TUIGroup.IS_SELECT_MODE, true);
|
||||
intent.putExtra(TUIConstants.TUIGroup.GROUP_ID, mGroupInfo.getId());
|
||||
intent.putExtra(TUIConstants.TUIGroup.LIMIT, 1);
|
||||
intent.putExtra(TUIConstants.TUIGroup.EXCLUDE_LIST, excludeList);
|
||||
intent.putExtra(TUIConstants.TUIGroup.TITLE, getResources().getString(R.string.group_transfer_group_owner));
|
||||
((Activity) getContext()).startActivityForResult(intent, GroupInfoMinimalistActivity.REQUEST_FOR_CHANGE_OWNER);
|
||||
} else if (v.getId() == R.id.chat_background) {
|
||||
if (mListener != null) {
|
||||
mListener.onSetChatBackground();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void loadGroupInfo(String groupId) {
|
||||
mPresenter.loadGroupInfo(groupId);
|
||||
}
|
||||
|
||||
public void getGroupMembers(GroupInfo groupInfo) {
|
||||
mPresenter.getGroupMembers(groupInfo, new IUIKitCallback<GroupInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupInfo data) {
|
||||
setGroupInfo((GroupInfo) data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setGroupInfo(GroupInfo info) {
|
||||
if (info == null) {
|
||||
return;
|
||||
}
|
||||
this.mGroupInfo = info;
|
||||
mGroupNameView.setText(info.getGroupName());
|
||||
mGroupIDView.setText(info.getId());
|
||||
if (TextUtils.isEmpty(info.getNotice())) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(info.getNotice());
|
||||
}
|
||||
mMemberView.setContent(info.getMemberCount() + "人");
|
||||
mMemberAdapter.setDataSource(info);
|
||||
|
||||
int columnNum = memberList.getNumColumns();
|
||||
int rowNum = (int) Math.ceil(mMemberAdapter.getCount() * 1.0f / columnNum);
|
||||
int itemHeight = ScreenUtil.dip2px(88);
|
||||
ViewGroup.LayoutParams layoutParams = memberList.getLayoutParams();
|
||||
layoutParams.height = itemHeight * rowNum;
|
||||
memberList.setLayoutParams(layoutParams);
|
||||
|
||||
mGroupTypeView.setContent(convertGroupText(info.getGroupType()));
|
||||
mJoinTypeView.setContent(mJoinTypes.get(info.getJoinType()));
|
||||
mNickView.setContent(mPresenter.getNickName());
|
||||
mTopSwitchView.setChecked(mGroupInfo.isTopChat());
|
||||
|
||||
if (GroupInfo.GROUP_TYPE_MEETING.equals(info.getGroupType())) {
|
||||
mMsgRevOptionSwitchView.setVisibility(GONE);
|
||||
mLayoutFold.setVisibility(GONE);
|
||||
} else {
|
||||
if (mGroupInfo.getMessageReceiveOption()) {
|
||||
mLayoutFold.setVisibility(View.VISIBLE);
|
||||
if (mGroupInfo.isFolded()) {
|
||||
mFoldGroupChatSwitchView.setChecked(true);
|
||||
}
|
||||
} else {
|
||||
mLayoutFold.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
mMsgRevOptionSwitchView.setChecked(mGroupInfo.getMessageReceiveOption());
|
||||
mMsgRevOptionSwitchView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(final CompoundButton buttonView, boolean isChecked) {
|
||||
mPresenter.setGroupNotDisturb(mGroupInfo, isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
if (!isChecked) {
|
||||
mLayoutFold.setVisibility(View.GONE);
|
||||
if (mGroupInfo.isFolded()) {
|
||||
mPresenter.setGroupFold(mGroupInfo, false, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mFoldGroupChatSwitchView.setChecked(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
mLayoutFold.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (mGroupInfo.isFolded()) {
|
||||
mTopSwitchView.setMask(true);
|
||||
}
|
||||
|
||||
mFoldGroupChatSwitchView.setCheckListener(new CompoundButton.OnCheckedChangeListener() {
|
||||
@Override
|
||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
||||
mPresenter.setGroupFold(mGroupInfo, isChecked, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
if (isChecked) {
|
||||
if (mGroupInfo.isTopChat()) {
|
||||
mPresenter.setTopConversation(mGroupInfo.getId(), false, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mTopSwitchView.setChecked(false);
|
||||
mTopSwitchView.setMask(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mTopSwitchView.setMask(true);
|
||||
}
|
||||
} else {
|
||||
mTopSwitchView.setMask(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(module + ", Error code = " + errCode + ", desc = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
mDissolveBtn.setText(R.string.dissolve);
|
||||
mClearMsgBtn.setText(R.string.clear_message);
|
||||
if (mGroupInfo.isOwner()) {
|
||||
mJoinTypeView.setVisibility(VISIBLE);
|
||||
if (mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_WORK)
|
||||
|| mGroupInfo.getGroupType().equals(TUIConstants.GroupType.TYPE_PRIVATE)) {
|
||||
mDissolveBtn.setText(R.string.exit_group);
|
||||
}
|
||||
} else {
|
||||
mJoinTypeView.setCanNav(false);
|
||||
mJoinTypeView.setOnClickListener(null);
|
||||
mDissolveBtn.setText(R.string.exit_group);
|
||||
}
|
||||
|
||||
if (mGroupInfo.isCanManagerGroup()) {
|
||||
mGroupManageView.setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
initView();
|
||||
}
|
||||
|
||||
private String convertGroupText(String groupType) {
|
||||
String groupText = "";
|
||||
if (TextUtils.isEmpty(groupType)) {
|
||||
return groupText;
|
||||
}
|
||||
if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_PRIVATE)
|
||||
|| TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_WORK)) {
|
||||
groupText = getContext().getString(R.string.private_group);
|
||||
} else if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_PUBLIC)) {
|
||||
groupText = getContext().getString(R.string.public_group);
|
||||
} else if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_CHAT_ROOM)
|
||||
|| TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_MEETING)) {
|
||||
groupText = getContext().getString(R.string.chat_room);
|
||||
} else if (TextUtils.equals(groupType, TUIConstants.GroupType.TYPE_COMMUNITY)) {
|
||||
groupText = getContext().getString(R.string.community_group);
|
||||
}
|
||||
return groupText;
|
||||
}
|
||||
|
||||
public void onGroupInfoModified(Object value, int type) {
|
||||
switch (type) {
|
||||
case TUIGroupConstants.Group.MODIFY_GROUP_NAME:
|
||||
ToastUtil.toastLongMessage(getResources().getString(R.string.modify_group_name_success));
|
||||
mGroupNameView.setText(value.toString());
|
||||
break;
|
||||
case TUIGroupConstants.Group.MODIFY_GROUP_NOTICE:
|
||||
if (TextUtils.isEmpty(value.toString())) {
|
||||
mGroupNoticeText.setText(getResources().getString(R.string.group_notice_empty_tip));
|
||||
} else {
|
||||
mGroupNoticeText.setText(value.toString());
|
||||
}
|
||||
ToastUtil.toastLongMessage(getResources().getString(R.string.modify_group_notice_success));
|
||||
break;
|
||||
case TUIGroupConstants.Group.MODIFY_GROUP_JOIN_TYPE:
|
||||
mJoinTypeView.setContent(mJoinTypes.get((Integer) value));
|
||||
break;
|
||||
case TUIGroupConstants.Group.MODIFY_MEMBER_NAME:
|
||||
ToastUtil.toastLongMessage(getResources().getString(R.string.modify_nickname_success));
|
||||
mNickView.setContent(value.toString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void setRouter(IGroupMemberListener listener) {
|
||||
mMemberPreviewListener = listener;
|
||||
mMemberAdapter.setManagerCallBack(listener);
|
||||
}
|
||||
|
||||
public void setOnModifyGroupAvatarListener(GroupInfoMinimalistFragment.OnModifyGroupAvatarListener onModifyGroupAvatarListener) {
|
||||
this.onModifyGroupAvatarListener = onModifyGroupAvatarListener;
|
||||
}
|
||||
|
||||
public void modifyGroupAvatar(String avatarUrl) {
|
||||
mPresenter.modifyGroupFaceUrl(mGroupInfo.getId(), avatarUrl, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
mGroupInfo.setFaceUrl(avatarUrl);
|
||||
setGroupInfo(mGroupInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastShortMessage(TUIGroupService.getAppContext().getString(R.string.modify_icon_fail) + ", code = " + errCode + ", info = " + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupInfoChanged(GroupInfo dataSource) {
|
||||
setGroupInfo(dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TitleBarLayout getTitleBar() {
|
||||
return mTitleBar;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParentLayout(Object parent) {
|
||||
|
||||
}
|
||||
|
||||
public void setOnButtonClickListener(OnButtonClickListener l) {
|
||||
mListener = l;
|
||||
}
|
||||
|
||||
public interface OnButtonClickListener {
|
||||
default void onSetChatBackground() {};
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,240 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.view;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.PopupWindow;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.TUIConstants;
|
||||
import com.tencent.qcloud.tuicore.TUICore;
|
||||
import com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.BackgroundTasks;
|
||||
import com.tencent.qcloud.tuicore.util.PopWindowUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces.IGroupMemberChangedCallback;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class GroupMemberAdapter extends RecyclerView.Adapter<GroupMemberAdapter.GroupMemberViewHodler> {
|
||||
|
||||
private IGroupMemberChangedCallback mCallback;
|
||||
private GroupInfo mGroupInfo;
|
||||
private List<GroupMemberInfo> mGroupMembers = new ArrayList<>();
|
||||
private List<GroupMemberInfo> selectedGroupMemberInfos = new ArrayList<>();
|
||||
|
||||
private GroupInfoPresenter presenter;
|
||||
private boolean isSelectMode;
|
||||
private GroupMemberLayout.OnSelectChangedListener onSelectChangedListener;
|
||||
private ArrayList<String> selectedMember = new ArrayList<>();
|
||||
private ArrayList<String> excludeList;
|
||||
private ArrayList<String> alreadySelectedList;
|
||||
public void setSelectMode(boolean selectMode) {
|
||||
isSelectMode = selectMode;
|
||||
}
|
||||
|
||||
public ArrayList<String> getSelectedMember() {
|
||||
return selectedMember;
|
||||
}
|
||||
|
||||
public List<GroupMemberInfo> getSelectedMemberInfoList() {
|
||||
return selectedGroupMemberInfos;
|
||||
}
|
||||
|
||||
public void setPresenter(GroupInfoPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
}
|
||||
|
||||
public void setMemberChangedCallback(IGroupMemberChangedCallback callback) {
|
||||
this.mCallback = callback;
|
||||
}
|
||||
|
||||
public void setExcludeList(ArrayList<String> excludeList) {
|
||||
this.excludeList = excludeList;
|
||||
}
|
||||
|
||||
public void setAlreadySelectedList(ArrayList<String> alreadySelectedList) {
|
||||
this.alreadySelectedList = alreadySelectedList;
|
||||
}
|
||||
|
||||
public void setOnSelectChangedListener(GroupMemberLayout.OnSelectChangedListener onSelectChangedListener) {
|
||||
this.onSelectChangedListener = onSelectChangedListener;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public GroupMemberViewHodler onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.group_member_list_item, parent, false);
|
||||
return new GroupMemberViewHodler(view);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull GroupMemberViewHodler holder, int position) {
|
||||
final GroupMemberInfo info = mGroupMembers.get(position);
|
||||
GlideEngine.loadImage(holder.memberIcon, info.getIconUrl());
|
||||
if (!TextUtils.isEmpty(info.getNameCard())) {
|
||||
holder.memberName.setText(info.getNameCard());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getNickName())) {
|
||||
holder.memberName.setText(info.getNickName());
|
||||
} else {
|
||||
if (!TextUtils.isEmpty(info.getAccount())) {
|
||||
holder.memberName.setText(info.getAccount());
|
||||
} else {
|
||||
holder.memberName.setText("");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isSelectMode) {
|
||||
holder.checkBox.setVisibility(View.VISIBLE);
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
holder.checkBox.setChecked(!holder.checkBox.isChecked());
|
||||
if (holder.checkBox.isChecked()) {
|
||||
info.setSelected(true);
|
||||
selectedMember.add(info.getAccount());
|
||||
selectedGroupMemberInfos.add(info);
|
||||
} else {
|
||||
info.setSelected(false);
|
||||
selectedMember.remove(info.getAccount());
|
||||
selectedGroupMemberInfos.remove(info);
|
||||
}
|
||||
if (onSelectChangedListener != null) {
|
||||
onSelectChangedListener.onSelectChanged();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
|
||||
@Override
|
||||
public boolean onLongClick(View v) {
|
||||
if (!mGroupInfo.isOwner()) {
|
||||
return false;
|
||||
}
|
||||
TextView delete = new TextView(holder.itemView.getContext());
|
||||
delete.setText(R.string.group_remove_member);
|
||||
int padding = ScreenUtil.getPxByDp(10);
|
||||
delete.setPadding(padding, padding, padding, padding);
|
||||
delete.setBackgroundResource(R.drawable.text_border);
|
||||
int location[] = new int[2];
|
||||
v.getLocationInWindow(location);
|
||||
final PopupWindow window = PopWindowUtil.popupWindow(delete, holder.itemView, location[0], location[1] + v.getMeasuredHeight() / 3);
|
||||
delete.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
List<GroupMemberInfo> dels = new ArrayList<>();
|
||||
dels.add(info);
|
||||
if (presenter == null) {
|
||||
return;
|
||||
}
|
||||
presenter.removeGroupMembers(mGroupInfo, dels, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
mGroupMembers.remove(info);
|
||||
notifyDataSetChanged();
|
||||
if (mCallback != null) {
|
||||
mCallback.onMemberRemoved(info);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(TUIGroupService.getAppContext().getString(R.string.remove_fail_tip) + ":errCode=" + errCode);
|
||||
}
|
||||
});
|
||||
window.dismiss();
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
holder.itemView.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(TUIConstants.TUIChat.CHAT_ID, info.getAccount());
|
||||
TUICore.startActivity("FriendProfileActivity", bundle);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setAlreadySelected(holder, info);
|
||||
}
|
||||
|
||||
private void setAlreadySelected(GroupMemberViewHodler holder, GroupMemberInfo memberInfo) {
|
||||
if (alreadySelectedList != null && alreadySelectedList.contains(memberInfo.getAccount())) {
|
||||
holder.checkBox.setChecked(true);
|
||||
holder.itemView.setEnabled(false);
|
||||
holder.checkBox.setEnabled(false);
|
||||
} else {
|
||||
holder.itemView.setEnabled(true);
|
||||
holder.checkBox.setEnabled(true);
|
||||
holder.checkBox.setSelected(memberInfo.isSelected());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mGroupMembers == null) {
|
||||
return 0;
|
||||
}
|
||||
return mGroupMembers.size();
|
||||
}
|
||||
|
||||
public void setDataSource(GroupInfo groupInfo) {
|
||||
if (groupInfo != null) {
|
||||
mGroupInfo = groupInfo;
|
||||
mGroupMembers.clear();
|
||||
if (excludeList == null || excludeList.isEmpty()) {
|
||||
mGroupMembers.addAll(groupInfo.getMemberDetails());
|
||||
} else {
|
||||
for (GroupMemberInfo groupMemberInfo : groupInfo.getMemberDetails()) {
|
||||
if (excludeList.contains(groupMemberInfo.getAccount())) {
|
||||
continue;
|
||||
}
|
||||
mGroupMembers.add(groupMemberInfo);
|
||||
}
|
||||
}
|
||||
BackgroundTasks.getInstance().runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected class GroupMemberViewHodler extends RecyclerView.ViewHolder {
|
||||
private ShadeImageView memberIcon;
|
||||
private TextView memberName;
|
||||
private CheckBox checkBox;
|
||||
|
||||
public GroupMemberViewHodler(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
checkBox = itemView.findViewById(R.id.group_member_check_box);
|
||||
memberIcon = itemView.findViewById(R.id.group_member_icon);
|
||||
memberIcon.setRadius(ScreenUtil.dip2px(20));
|
||||
memberName = itemView.findViewById(R.id.group_member_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,302 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.minimalistui.view;
|
||||
|
||||
import android.content.Context;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.CustomLinearLayoutManager;
|
||||
import com.tencent.qcloud.tuicore.component.RoundCornerImageView;
|
||||
import com.tencent.qcloud.tuicore.component.TitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.imageEngine.impl.GlideEngine;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.ITitleBarLayout;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ScreenUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.component.BottomSelectSheet;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupMemberLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces.IGroupMemberChangedCallback;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.minimalistui.interfaces.IGroupMemberListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.presenter.GroupInfoPresenter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupMemberLayout extends LinearLayout implements IGroupMemberLayout {
|
||||
// 取一个足够大的偏移保证能一次性滚动到最底部
|
||||
// Take a large enough offset to scroll to the bottom at one time
|
||||
private static final int SCROLL_TO_END_OFFSET = -999999;
|
||||
|
||||
private TitleBarLayout mTitleBar;
|
||||
private GroupMemberAdapter mAdapter;
|
||||
private IGroupMemberListener groupMemberListener;
|
||||
private GroupInfo mGroupInfo;
|
||||
private RecyclerView recyclerView;
|
||||
private boolean isSelectMode;
|
||||
private String title;
|
||||
private ArrayList<String> excludeList;
|
||||
private ArrayList<String> alreadySelectedList;
|
||||
private RecyclerView selectedList;
|
||||
private SelectedAdapter selectedListAdapter;
|
||||
private View selectArea;
|
||||
private TextView confirmButton;
|
||||
|
||||
private GroupInfoPresenter presenter;
|
||||
|
||||
public GroupMemberLayout(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupMemberLayout(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public GroupMemberLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.group_member_layout, this);
|
||||
mTitleBar = findViewById(R.id.group_member_title_bar);
|
||||
mTitleBar.setTitle(getContext().getString(R.string.manager), ITitleBarLayout.Position.RIGHT);
|
||||
mTitleBar.getRightIcon().setVisibility(GONE);
|
||||
mTitleBar.setOnRightClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
buildPopMenu();
|
||||
}
|
||||
});
|
||||
mAdapter = new GroupMemberAdapter();
|
||||
mAdapter.setMemberChangedCallback(new IGroupMemberChangedCallback() {
|
||||
|
||||
@Override
|
||||
public void onMemberRemoved(GroupMemberInfo memberInfo) {
|
||||
if (!TextUtils.isEmpty(title)) {
|
||||
mTitleBar.setTitle(title, ITitleBarLayout.Position.MIDDLE);
|
||||
} else {
|
||||
mTitleBar.setTitle(getContext().getString(R.string.group_members) +
|
||||
"(" + mGroupInfo.getMemberCount() + ")", TitleBarLayout.Position.MIDDLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
recyclerView = findViewById(R.id.group_all_members);
|
||||
recyclerView.setLayoutManager(new CustomLinearLayoutManager(getContext()));
|
||||
recyclerView.setAdapter(mAdapter);
|
||||
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
|
||||
super.onScrollStateChanged(recyclerView, newState);
|
||||
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
||||
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
|
||||
if (layoutManager == null) {
|
||||
return;
|
||||
}
|
||||
int lastPosition = layoutManager.findLastCompletelyVisibleItemPosition();
|
||||
if (mAdapter != null) {
|
||||
if (lastPosition == mAdapter.getItemCount() - 1) {
|
||||
if (mGroupInfo != null && mGroupInfo.getNextSeq() != 0) {
|
||||
presenter.getGroupMembers(mGroupInfo, new IUIKitCallback<GroupInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupInfo data) {
|
||||
onGroupInfoChanged(data);
|
||||
mAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
selectArea = findViewById(R.id.select_area);
|
||||
selectedList = findViewById(R.id.selected_list);
|
||||
selectedListAdapter = new SelectedAdapter();
|
||||
selectedList.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.HORIZONTAL, false));
|
||||
selectedList.setAdapter(selectedListAdapter);
|
||||
|
||||
confirmButton = findViewById(R.id.confirm_button);
|
||||
confirmButton.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
confirmAndFinish();
|
||||
}
|
||||
});
|
||||
|
||||
mAdapter.setOnSelectChangedListener(new OnSelectChangedListener() {
|
||||
@Override
|
||||
public void onSelectChanged() {
|
||||
selectedListAdapter.setMembers(mAdapter.getSelectedMemberInfoList());
|
||||
selectedListAdapter.notifyDataSetChanged();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void confirmAndFinish() {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.setSelectedMember(mAdapter.getSelectedMember());
|
||||
}
|
||||
}
|
||||
|
||||
public TitleBarLayout getTitleBar() {
|
||||
return mTitleBar;
|
||||
}
|
||||
|
||||
public void setExcludeList(ArrayList<String> excludeList) {
|
||||
this.excludeList = excludeList;
|
||||
mAdapter.setExcludeList(excludeList);
|
||||
}
|
||||
|
||||
public void setAlreadySelectedList(ArrayList<String> alreadySelectedList) {
|
||||
this.alreadySelectedList = alreadySelectedList;
|
||||
mAdapter.setAlreadySelectedList(alreadySelectedList);
|
||||
}
|
||||
|
||||
public void setSelectMode(boolean selectMode) {
|
||||
isSelectMode = selectMode;
|
||||
if (isSelectMode) {
|
||||
mTitleBar.setTitle(getContext().getString(com.tencent.qcloud.tuicore.R.string.sure), ITitleBarLayout.Position.RIGHT);
|
||||
mTitleBar.getRightGroup().setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.setSelectedMember(mAdapter.getSelectedMember());
|
||||
}
|
||||
}
|
||||
});
|
||||
selectArea.setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
mAdapter.setSelectMode(isSelectMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParentLayout(Object parent) {
|
||||
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public void onGroupInfoChanged(GroupInfo groupInfo) {
|
||||
mGroupInfo = groupInfo;
|
||||
presenter.setGroupInfo(groupInfo);
|
||||
mAdapter.setDataSource(groupInfo);
|
||||
if (groupInfo != null) {
|
||||
if (!TextUtils.isEmpty(title)) {
|
||||
mTitleBar.setTitle(title, ITitleBarLayout.Position.MIDDLE);
|
||||
} else {
|
||||
mTitleBar.setTitle(getContext().getString(R.string.group_members) +
|
||||
"(" + groupInfo.getMemberCount() + ")", TitleBarLayout.Position.MIDDLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGroupInfoModified(Object value, int type) {
|
||||
|
||||
}
|
||||
|
||||
private void buildPopMenu() {
|
||||
if (mGroupInfo == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
BottomSelectSheet sheet = new BottomSelectSheet(getContext());
|
||||
List<String> stringList = new ArrayList<>();
|
||||
String addMember = getResources().getString(R.string.add_group_member);
|
||||
String removeMember = getResources().getString(R.string.remove_group_member);
|
||||
stringList.add(addMember);
|
||||
if (mGroupInfo.isOwner()) {
|
||||
stringList.add(removeMember);
|
||||
}
|
||||
sheet.setSelectList(stringList);
|
||||
sheet.setOnClickListener(new BottomSelectSheet.BottomSelectSheetOnClickListener() {
|
||||
@Override
|
||||
public void onSheetClick(int index) {
|
||||
if (index == 0) {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.forwardAddMember(mGroupInfo);
|
||||
}
|
||||
} else if (index == 1) {
|
||||
if (groupMemberListener != null) {
|
||||
groupMemberListener.forwardDeleteMember(mGroupInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
sheet.show();
|
||||
}
|
||||
|
||||
public void setGroupMemberListener(IGroupMemberListener listener) {
|
||||
this.groupMemberListener = listener;
|
||||
}
|
||||
|
||||
public void setPresenter(GroupInfoPresenter presenter) {
|
||||
this.presenter = presenter;
|
||||
mAdapter.setPresenter(presenter);
|
||||
}
|
||||
|
||||
public static class SelectedAdapter extends RecyclerView.Adapter<SelectedAdapter.SelectedViewHolder> {
|
||||
private List<GroupMemberInfo> mMembers;
|
||||
|
||||
public void setMembers(List<GroupMemberInfo> mMembers) {
|
||||
this.mMembers = mMembers;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public SelectedViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
||||
return new SelectedViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.group_member_selected_item, parent, false));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(@NonNull SelectedViewHolder holder, int position) {
|
||||
GlideEngine.loadImage(holder.userIconView, mMembers.get(position).getIconUrl());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
if (mMembers == null) {
|
||||
return 0;
|
||||
}
|
||||
return mMembers.size();
|
||||
}
|
||||
|
||||
public static class SelectedViewHolder extends RecyclerView.ViewHolder {
|
||||
public final RoundCornerImageView userIconView;
|
||||
public SelectedViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
userIconView = itemView.findViewById(R.id.ivAvatar);
|
||||
userIconView.setRadius(ScreenUtil.dip2px(20));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface OnSelectChangedListener {
|
||||
void onSelectChanged();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,670 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.model;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.tencent.imsdk.v2.V2TIMCallback;
|
||||
import com.tencent.imsdk.v2.V2TIMConversation;
|
||||
import com.tencent.imsdk.v2.V2TIMConversationOperationResult;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupApplication;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupApplicationResult;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupInfoResult;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberFullInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberInfoResult;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupMemberOperationResult;
|
||||
import com.tencent.imsdk.v2.V2TIMManager;
|
||||
import com.tencent.imsdk.v2.V2TIMMessage;
|
||||
import com.tencent.imsdk.v2.V2TIMValueCallback;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ErrorMessageConverter;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public class GroupInfoProvider {
|
||||
|
||||
private static final String TAG = GroupInfoProvider.class.getSimpleName();
|
||||
|
||||
private static final int PAGE = 50;
|
||||
|
||||
public void loadGroupInfo(final String groupId, final IUIKitCallback<GroupInfo> callBack) {
|
||||
loadGroupInfo(groupId, V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL, callBack);
|
||||
}
|
||||
|
||||
public void loadGroupInfo(final String groupId, int filter, final IUIKitCallback<GroupInfo> callBack) {
|
||||
loadGroupPublicInfo(groupId, new IUIKitCallback<V2TIMGroupInfoResult>() {
|
||||
@Override
|
||||
public void onSuccess(V2TIMGroupInfoResult data) {
|
||||
GroupInfo groupInfo = new GroupInfo();
|
||||
groupInfo.covertTIMGroupDetailInfo(data);
|
||||
String conversationId = TUIGroupUtils.getConversationIdByUserId(groupId, true);
|
||||
V2TIMManager.getConversationManager().getConversation(conversationId, new V2TIMValueCallback<V2TIMConversation>() {
|
||||
@Override
|
||||
public void onSuccess(V2TIMConversation v2TIMConversation) {
|
||||
boolean isTop = v2TIMConversation.isPinned();
|
||||
groupInfo.setTopChat(isTop);
|
||||
|
||||
List<Long> markList = v2TIMConversation.getMarkList();
|
||||
if (markList.contains(V2TIMConversation.V2TIM_CONVERSATION_MARK_TYPE_FOLD)) {
|
||||
groupInfo.setFolded(true);
|
||||
}
|
||||
|
||||
// 异步获取群成员
|
||||
loadGroupMembers(groupInfo, filter , 0, callBack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
loadGroupMembers(groupInfo, filter, 0, callBack);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e(TAG, "loadGroupPublicInfo failed, code: " + errCode + "|desc: " + ErrorMessageConverter.convertIMError(errCode, errMsg));
|
||||
if (callBack != null) {
|
||||
callBack.onError(module, errCode, ErrorMessageConverter.convertIMError(errCode, errMsg));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void deleteGroup(String groupId, final IUIKitCallback<Void> callBack) {
|
||||
V2TIMManager.getInstance().dismissGroup(groupId, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callBack, TAG, code, desc);
|
||||
TUIGroupLog.e(TAG, "deleteGroup failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void loadGroupPublicInfo(String groupId, final IUIKitCallback<V2TIMGroupInfoResult> callBack) {
|
||||
List<String> groupList = new ArrayList<>();
|
||||
groupList.add(groupId);
|
||||
|
||||
V2TIMManager.getGroupManager().getGroupsInfo(groupList, new V2TIMValueCallback<List<V2TIMGroupInfoResult>>() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "loadGroupPublicInfo failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
callBack.onError(TAG, code, ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<V2TIMGroupInfoResult> v2TIMGroupInfoResults) {
|
||||
if (v2TIMGroupInfoResults.size() > 0) {
|
||||
V2TIMGroupInfoResult infoResult = v2TIMGroupInfoResults.get(0);
|
||||
TUIGroupLog.i(TAG, infoResult.toString());
|
||||
|
||||
callBack.onSuccess(infoResult);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void loadGroupMembers(GroupInfo groupInfo, long nextSeq, final IUIKitCallback<GroupInfo> callBack) {
|
||||
loadGroupMembers(groupInfo, V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL, nextSeq, callBack);
|
||||
}
|
||||
|
||||
public void loadGroupMembers(GroupInfo groupInfo, int filter, long nextSeq, final IUIKitCallback<GroupInfo> callBack) {
|
||||
if (filter != V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL && filter != V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_OWNER
|
||||
&& filter != V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ADMIN && filter != V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_COMMON) {
|
||||
filter = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL;
|
||||
}
|
||||
V2TIMManager.getGroupManager().getGroupMemberList(groupInfo.getId(), filter, nextSeq, new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "loadGroupMembers failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
TUIGroupUtils.callbackOnError(callBack, TAG, code, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(V2TIMGroupMemberInfoResult v2TIMGroupMemberInfoResult) {
|
||||
List<GroupMemberInfo> members = new ArrayList<>();
|
||||
for (int i = 0; i < v2TIMGroupMemberInfoResult.getMemberInfoList().size(); i++) {
|
||||
GroupMemberInfo member = new GroupMemberInfo();
|
||||
members.add(member.covertTIMGroupMemberInfo(v2TIMGroupMemberInfoResult.getMemberInfoList().get(i)));
|
||||
}
|
||||
List<GroupMemberInfo> memberInfoList = groupInfo.getMemberDetails();
|
||||
Iterator<GroupMemberInfo> iterator = members.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
GroupMemberInfo memberInfo = iterator.next();
|
||||
for (GroupMemberInfo existsMemberInfo : memberInfoList) {
|
||||
if (TextUtils.equals(memberInfo.getAccount(), existsMemberInfo.getAccount())) {
|
||||
iterator.remove();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
memberInfoList.addAll(members);
|
||||
groupInfo.setNextSeq(v2TIMGroupMemberInfoResult.getNextSeq());
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, groupInfo);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyGroupInfo(GroupInfo groupInfo, final Object value, final int type, final IUIKitCallback callBack) {
|
||||
V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
|
||||
v2TIMGroupInfo.setGroupID(groupInfo.getId());
|
||||
if (type == TUIGroupConstants.Group.MODIFY_GROUP_NAME) {
|
||||
v2TIMGroupInfo.setGroupName(value.toString());
|
||||
} else if (type == TUIGroupConstants.Group.MODIFY_GROUP_NOTICE) {
|
||||
v2TIMGroupInfo.setNotification(value.toString());
|
||||
} else if (type == TUIGroupConstants.Group.MODIFY_GROUP_JOIN_TYPE) {
|
||||
v2TIMGroupInfo.setGroupAddOpt((Integer)value);
|
||||
}
|
||||
V2TIMManager.getGroupManager().setGroupInfo(v2TIMGroupInfo, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.i(TAG, "modifyGroupInfo failed type| value| code| desc " + value + ":" + type + ":" + code + ":" + ErrorMessageConverter.convertIMError(code, desc));
|
||||
TUIGroupUtils.callbackOnError(callBack, TAG, code, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
if (type == TUIGroupConstants.Group.MODIFY_GROUP_NAME) {
|
||||
groupInfo.setGroupName(value.toString());
|
||||
} else if (type == TUIGroupConstants.Group.MODIFY_GROUP_NOTICE) {
|
||||
groupInfo.setNotice(value.toString());
|
||||
} else if (type == TUIGroupConstants.Group.MODIFY_GROUP_JOIN_TYPE) {
|
||||
groupInfo.setJoinType((Integer) value);
|
||||
}
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, value);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyMyGroupNickname(GroupInfo groupInfo, final String nickname, final IUIKitCallback callBack) {
|
||||
if (groupInfo == null) {
|
||||
ToastUtil.toastLongMessage("modifyMyGroupNickname fail: NO GROUP");
|
||||
return;
|
||||
}
|
||||
|
||||
V2TIMGroupMemberFullInfo v2TIMGroupMemberFullInfo = new V2TIMGroupMemberFullInfo();
|
||||
v2TIMGroupMemberFullInfo.setUserID(V2TIMManager.getInstance().getLoginUser());
|
||||
v2TIMGroupMemberFullInfo.setNameCard(nickname);
|
||||
V2TIMManager.getGroupManager().setGroupMemberInfo(groupInfo.getId(), v2TIMGroupMemberFullInfo, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
callBack.onError(TAG, code, ErrorMessageConverter.convertIMError(code, desc));
|
||||
ToastUtil.toastLongMessage("modifyMyGroupNickname fail: " + code + "=" + ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
callBack.onSuccess(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setTopConversation(String conversationId, boolean isSetTop, IUIKitCallback<Void> callBack) {
|
||||
TUIGroupLog.i(TAG, "setConversationTop id:" + conversationId + "|isTop:" + isSetTop);
|
||||
V2TIMManager.getConversationManager().pinConversation(conversationId, isSetTop, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "setConversationTop code:" + code + "|desc:" + ErrorMessageConverter.convertIMError(code, desc));
|
||||
TUIGroupUtils.callbackOnError(callBack, code, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void quitGroup(String groupId, final IUIKitCallback<Void> callBack) {
|
||||
V2TIMManager.getInstance().quitGroup(groupId, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "quitGroup failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
TUIGroupUtils.callbackOnError(callBack, TAG, code, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void inviteGroupMembers(GroupInfo groupInfo, List<String> addMembers, final IUIKitCallback callBack) {
|
||||
if (addMembers == null || addMembers.size() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
V2TIMManager.getGroupManager().inviteUserToGroup(groupInfo.getId(), addMembers, new V2TIMValueCallback<List<V2TIMGroupMemberOperationResult>>() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "addGroupMembers failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
callBack.onError(TAG, code, ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<V2TIMGroupMemberOperationResult> v2TIMGroupMemberOperationResults) {
|
||||
final List<String> adds = new ArrayList<>();
|
||||
if (v2TIMGroupMemberOperationResults.size() > 0) {
|
||||
for (int i = 0; i < v2TIMGroupMemberOperationResults.size(); i++) {
|
||||
V2TIMGroupMemberOperationResult res = v2TIMGroupMemberOperationResults.get(i);
|
||||
if (res.getResult() == V2TIMGroupMemberOperationResult.OPERATION_RESULT_PENDING) {
|
||||
callBack.onSuccess(TUIGroupService.getAppContext().getString(R.string.request_wait));
|
||||
return;
|
||||
}
|
||||
if (res.getResult() > 0) {
|
||||
adds.add(res.getMemberID());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (adds.size() > 0) {
|
||||
groupInfo.getMemberDetails().clear();
|
||||
loadGroupMembers(groupInfo, 0, callBack);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void removeGroupMembers(String groupId, List<String> members, final IUIKitCallback<List<String>> callBack) {
|
||||
if (members == null || members.size() == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
V2TIMManager.getGroupManager().kickGroupMember(groupId, members, "", new V2TIMValueCallback<List<V2TIMGroupMemberOperationResult>>() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "removeGroupMembers failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
callBack.onError(TAG, code, ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<V2TIMGroupMemberOperationResult> v2TIMGroupMemberOperationResults) {
|
||||
List<String> dels = new ArrayList<>();
|
||||
for (int i = 0; i < v2TIMGroupMemberOperationResults.size(); i++) {
|
||||
V2TIMGroupMemberOperationResult res = v2TIMGroupMemberOperationResults.get(i);
|
||||
if (res.getResult() == V2TIMGroupMemberOperationResult.OPERATION_RESULT_SUCC) {
|
||||
dels.add(res.getMemberID());
|
||||
}
|
||||
}
|
||||
callBack.onSuccess(dels);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public List<GroupApplyInfo> getApplyList() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void loadGroupApplies(GroupInfo groupInfo, final IUIKitCallback<List<GroupApplyInfo>> callBack) {
|
||||
loadApplyInfo(new IUIKitCallback<List<GroupApplyInfo>>() {
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<GroupApplyInfo> data) {
|
||||
if (groupInfo == null) {
|
||||
callBack.onError(TAG, 0, "no groupInfo");
|
||||
return;
|
||||
}
|
||||
String groupId = groupInfo.getId();
|
||||
List<GroupApplyInfo> applyInfos = new ArrayList<>();
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
GroupApplyInfo applyInfo = data.get(i);
|
||||
if (groupId.equals(applyInfo.getGroupApplication().getGroupID())
|
||||
&& applyInfo.getGroupApplication().getHandleStatus() == V2TIMGroupApplication.V2TIM_GROUP_APPLICATION_HANDLE_STATUS_UNHANDLED) {
|
||||
applyInfos.add(applyInfo);
|
||||
}
|
||||
}
|
||||
callBack.onSuccess(applyInfos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e(TAG, "loadApplyInfo failed, code: " + errCode + "|desc: " + ErrorMessageConverter.convertIMError(errCode, errMsg));
|
||||
callBack.onError(module, errCode, ErrorMessageConverter.convertIMError(errCode, errMsg));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void loadApplyInfo(final IUIKitCallback<List<GroupApplyInfo>> callBack) {
|
||||
final List<GroupApplyInfo> applies = new ArrayList<>();
|
||||
|
||||
V2TIMManager.getGroupManager().getGroupApplicationList(new V2TIMValueCallback<V2TIMGroupApplicationResult>() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "getGroupPendencyList failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
callBack.onError(TAG, code, ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(V2TIMGroupApplicationResult v2TIMGroupApplicationResult) {
|
||||
List<V2TIMGroupApplication> v2TIMGroupApplicationList = v2TIMGroupApplicationResult.getGroupApplicationList();
|
||||
for (int i = 0; i < v2TIMGroupApplicationList.size(); i++) {
|
||||
GroupApplyInfo info = new GroupApplyInfo(v2TIMGroupApplicationList.get(i));
|
||||
info.setStatus(0);
|
||||
applies.add(info);
|
||||
}
|
||||
callBack.onSuccess(applies);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void acceptApply(final GroupApplyInfo item, final IUIKitCallback<Void> callBack) {
|
||||
V2TIMManager.getGroupManager().acceptGroupApplication(item.getGroupApplication(), "", new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "acceptApply failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
callBack.onError(TAG, code, ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
callBack.onSuccess(null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void refuseApply(final GroupApplyInfo item, final IUIKitCallback<Void> callBack) {
|
||||
V2TIMManager.getGroupManager().refuseGroupApplication(item.getGroupApplication(), "", new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "refuseApply failed, code: " + code + "|desc: " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
TUIGroupUtils.callbackOnError(callBack, TAG, code, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setGroupReceiveMessageOpt(String groupId, boolean isReceive, IUIKitCallback callBack) {
|
||||
int option;
|
||||
if (!isReceive) {
|
||||
option = V2TIMMessage.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE;
|
||||
} else {
|
||||
option = V2TIMMessage.V2TIM_RECEIVE_MESSAGE;
|
||||
}
|
||||
V2TIMManager.getMessageManager().setGroupReceiveMessageOpt(groupId, option, new V2TIMCallback(){
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, null);
|
||||
TUIGroupLog.d(TAG, "setReceiveMessageOpt onSuccess");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callBack, code, desc);
|
||||
TUIGroupLog.d(TAG, "setReceiveMessageOpt onError code = " + code + ", desc = " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setGroupFold(String groupID, boolean isFold, IUIKitCallback callback) {
|
||||
TUIGroupLog.i(TAG, "setGroupFold id:" + groupID + "|isTop:" + isFold);
|
||||
String conversationID = "group_" + groupID;
|
||||
List<String> conversationIDList = new ArrayList<>();
|
||||
conversationIDList.add(conversationID);
|
||||
V2TIMManager.getConversationManager().markConversation(conversationIDList,
|
||||
V2TIMConversation.V2TIM_CONVERSATION_MARK_TYPE_FOLD, isFold,
|
||||
new V2TIMValueCallback<List<V2TIMConversationOperationResult>>() {
|
||||
@Override
|
||||
public void onSuccess(List<V2TIMConversationOperationResult> v2TIMConversationOperationResults) {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
TUIGroupLog.d(TAG, "markConversation fold onSuccess");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
TUIGroupLog.d(TAG, "markConversation fold onError code = " + code + ", desc = " + ErrorMessageConverter.convertIMError(code, desc));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyGroupFaceUrl(String groupId, String faceUrl, IUIKitCallback<Void> callback) {
|
||||
V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
|
||||
v2TIMGroupInfo.setGroupID(groupId);
|
||||
v2TIMGroupInfo.setFaceUrl(faceUrl);
|
||||
V2TIMManager.getGroupManager().setGroupInfo(v2TIMGroupInfo, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "modify group icon failed, code:" + code + "|desc:" + ErrorMessageConverter.convertIMError(code, desc));
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public GroupMemberInfo getSelfGroupMemberInfo(GroupInfo groupInfo) {
|
||||
for (int i = 0; i < groupInfo.getMemberDetails().size(); i++) {
|
||||
GroupMemberInfo memberInfo = groupInfo.getMemberDetails().get(i);
|
||||
if (TextUtils.equals(memberInfo.getAccount(), V2TIMManager.getInstance().getLoginUser())) {
|
||||
return memberInfo;
|
||||
}
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isAdmin(int memberType) {
|
||||
return memberType == V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_ADMIN;
|
||||
}
|
||||
|
||||
public boolean isSelf(String userId) {
|
||||
return TextUtils.equals(userId, V2TIMManager.getInstance().getLoginUser());
|
||||
}
|
||||
|
||||
public void muteAll(String groupId, boolean isAllMute, IUIKitCallback<Void> callback) {
|
||||
V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
|
||||
v2TIMGroupInfo.setGroupID(groupId);
|
||||
v2TIMGroupInfo.setAllMuted(isAllMute);
|
||||
V2TIMManager.getGroupManager().setGroupInfo(v2TIMGroupInfo, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "muteAll failed, code:" + code + "|desc:" + ErrorMessageConverter.convertIMError(code, desc));
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void loadGroupManagers(String groupId, IUIKitCallback<List<GroupMemberInfo>> callback) {
|
||||
List<GroupMemberInfo> managerList = new ArrayList<>();
|
||||
|
||||
V2TIMValueCallback<V2TIMGroupMemberInfoResult> v2TIMValueCallback = new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {
|
||||
@Override
|
||||
public void onSuccess(V2TIMGroupMemberInfoResult v2TIMGroupMemberInfoResult) {
|
||||
List<V2TIMGroupMemberFullInfo> infoList = v2TIMGroupMemberInfoResult.getMemberInfoList();
|
||||
for (V2TIMGroupMemberFullInfo fullInfo : infoList) {
|
||||
GroupMemberInfo member = new GroupMemberInfo();
|
||||
managerList.add(member.covertTIMGroupMemberInfo(fullInfo));
|
||||
}
|
||||
|
||||
long loadNextSeq = v2TIMGroupMemberInfoResult.getNextSeq();
|
||||
if (loadNextSeq == 0) {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, managerList);
|
||||
} else {
|
||||
loadGroupManagers(groupId, loadNextSeq, this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
};
|
||||
loadGroupManagers(groupId, 0, v2TIMValueCallback);
|
||||
}
|
||||
|
||||
private void loadGroupManagers(String groupId, long nextSeq, V2TIMValueCallback<V2TIMGroupMemberInfoResult> callback) {
|
||||
int filter = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ADMIN;
|
||||
V2TIMManager.getGroupManager().getGroupMemberList(groupId, filter, nextSeq, callback);
|
||||
}
|
||||
|
||||
private void loadGroupMembers(String groupId, long nextSeq, V2TIMValueCallback<V2TIMGroupMemberInfoResult> callback) {
|
||||
int filter = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL;
|
||||
V2TIMManager.getGroupManager().getGroupMemberList(groupId, filter, nextSeq, callback);
|
||||
}
|
||||
|
||||
public void loadMutedMembers(String groupId, IUIKitCallback<List<GroupMemberInfo>> callback) {
|
||||
List<GroupMemberInfo> managerList = new ArrayList<>();
|
||||
|
||||
V2TIMValueCallback<V2TIMGroupMemberInfoResult> v2TIMValueCallback = new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {
|
||||
@Override
|
||||
public void onSuccess(V2TIMGroupMemberInfoResult v2TIMGroupMemberInfoResult) {
|
||||
List<V2TIMGroupMemberFullInfo> infoList = v2TIMGroupMemberInfoResult.getMemberInfoList();
|
||||
long serverTime = V2TIMManager.getInstance().getServerTime();
|
||||
for (V2TIMGroupMemberFullInfo fullInfo : infoList) {
|
||||
long mutedUntil = fullInfo.getMuteUntil();
|
||||
if (mutedUntil > serverTime) {
|
||||
GroupMemberInfo member = new GroupMemberInfo();
|
||||
managerList.add(member.covertTIMGroupMemberInfo(fullInfo));
|
||||
}
|
||||
}
|
||||
|
||||
long loadNextSeq = v2TIMGroupMemberInfoResult.getNextSeq();
|
||||
if (loadNextSeq == 0) {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, managerList);
|
||||
} else {
|
||||
loadGroupMembers(groupId, loadNextSeq, this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
};
|
||||
loadGroupMembers(groupId, 0, v2TIMValueCallback);
|
||||
}
|
||||
|
||||
public void loadGroupOwner(String groupId, IUIKitCallback<GroupMemberInfo> callback) {
|
||||
int filter = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_OWNER;
|
||||
V2TIMManager.getGroupManager().getGroupMemberList(groupId, filter, 0, new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {
|
||||
@Override
|
||||
public void onSuccess(V2TIMGroupMemberInfoResult v2TIMGroupMemberInfoResult) {
|
||||
List<V2TIMGroupMemberFullInfo> list = v2TIMGroupMemberInfoResult.getMemberInfoList();
|
||||
GroupMemberInfo member = new GroupMemberInfo();
|
||||
member.covertTIMGroupMemberInfo(list.get(0));
|
||||
TUIGroupUtils.callbackOnSuccess(callback, member);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void muteGroupMember(String groupId, String userId, int seconds, IUIKitCallback<Void> callback) {
|
||||
V2TIMManager.getGroupManager().muteGroupMember(groupId, userId, seconds, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void cancelMuteGroupMember(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
V2TIMManager.getGroupManager().muteGroupMember(groupId, userId, 0, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setGroupManager(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
int role = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_ADMIN;
|
||||
V2TIMManager.getGroupManager().setGroupMemberRole(groupId, userId, role, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void clearGroupManager(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
int role = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_MEMBER;
|
||||
V2TIMManager.getGroupManager().setGroupMemberRole(groupId, userId, role, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void transferGroupOwner(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
V2TIMManager.getGroupManager().transferGroupOwner(groupId, userId, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupUtils.callbackOnError(callback, code, desc);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyGroupNotification(String groupId, final String value, final IUIKitCallback callBack) {
|
||||
V2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();
|
||||
v2TIMGroupInfo.setGroupID(groupId);
|
||||
v2TIMGroupInfo.setNotification(value);
|
||||
V2TIMManager.getGroupManager().setGroupInfo(v2TIMGroupInfo, new V2TIMCallback() {
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "modifyGroupNotification failed value| code| desc " + value + ":" + code + ":" + desc);
|
||||
TUIGroupUtils.callbackOnError(callBack, TAG, code, desc);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.presenter;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupApplyInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupApplyLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.model.GroupInfoProvider;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GroupApplyPresenter {
|
||||
private final IGroupApplyLayout layout;
|
||||
private final GroupInfoProvider provider;
|
||||
|
||||
private GroupInfo groupInfo;
|
||||
|
||||
public GroupApplyPresenter(IGroupApplyLayout layout) {
|
||||
this.layout = layout;
|
||||
provider = new GroupInfoProvider();
|
||||
}
|
||||
|
||||
public void setGroupInfo(GroupInfo groupInfo) {
|
||||
this.groupInfo = groupInfo;
|
||||
}
|
||||
|
||||
public void loadGroupApplies() {
|
||||
provider.loadGroupApplies(groupInfo, new IUIKitCallback<List<GroupApplyInfo>>() {
|
||||
@Override
|
||||
public void onSuccess(List<GroupApplyInfo> data) {
|
||||
layout.onGroupApplyInfoListChanged(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void acceptApply(GroupApplyInfo item) {
|
||||
provider.acceptApply(item, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
item.setStatus(GroupApplyInfo.APPLIED);
|
||||
layout.onDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void refuseApply(final GroupApplyInfo item) {
|
||||
provider.refuseApply(item, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
item.setStatus(GroupApplyInfo.REFUSED);
|
||||
layout.onDataSetChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,369 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.presenter;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuicore.util.ToastUtil;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupConstants;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.GroupEventListener;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.interfaces.IGroupMemberLayout;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.model.GroupInfoProvider;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupLog;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.util.TUIGroupUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class GroupInfoPresenter {
|
||||
public static final String TAG = GroupInfoPresenter.class.getSimpleName();
|
||||
|
||||
private final IGroupMemberLayout layout;
|
||||
private final GroupInfoProvider provider;
|
||||
|
||||
private GroupInfo groupInfo;
|
||||
private GroupMemberInfo selfGroupMemberInfo;
|
||||
|
||||
private GroupEventListener groupEventListener;
|
||||
|
||||
public GroupInfoPresenter(IGroupMemberLayout layout) {
|
||||
this.layout = layout;
|
||||
provider = new GroupInfoProvider();
|
||||
}
|
||||
|
||||
public void setGroupEventListener() {
|
||||
groupEventListener = new GroupEventListener() {
|
||||
@Override
|
||||
public void onGroupInfoChanged(String groupID) {
|
||||
GroupInfoPresenter.this.onGroupInfoChanged(groupID);
|
||||
}
|
||||
};
|
||||
TUIGroupService.getInstance().addGroupEventListener(groupEventListener);
|
||||
}
|
||||
|
||||
public void setGroupInfo(GroupInfo groupInfo) {
|
||||
this.groupInfo = groupInfo;
|
||||
}
|
||||
|
||||
public void loadGroupInfo(String groupId) {
|
||||
loadGroupInfo(groupId, GroupInfo.GROUP_MEMBER_FILTER_ALL);
|
||||
}
|
||||
|
||||
public void loadGroupInfo(String groupId, int filter) {
|
||||
provider.loadGroupInfo(groupId, filter, new IUIKitCallback<GroupInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupInfo data) {
|
||||
groupInfo = data;
|
||||
layout.onGroupInfoChanged(data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e("loadGroupInfo", errCode + ":" + errMsg);
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void onGroupInfoChanged(String groupID) {
|
||||
if (groupInfo != null && TextUtils.equals(groupID, groupInfo.getId())) {
|
||||
loadGroupInfo(groupID);
|
||||
}
|
||||
}
|
||||
|
||||
public void getGroupMembers(GroupInfo groupInfo, final IUIKitCallback<GroupInfo> callBack) {
|
||||
provider.loadGroupMembers(groupInfo, groupInfo.getNextSeq(), new IUIKitCallback<GroupInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupInfo data) {
|
||||
if (layout != null) {
|
||||
layout.onGroupInfoChanged(data);
|
||||
}
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e("loadGroupInfo", errCode + ":" + errMsg);
|
||||
TUIGroupUtils.callbackOnError(callBack, errCode, errMsg);
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyGroupName(final String name) {
|
||||
if (groupInfo == null) {
|
||||
return;
|
||||
}
|
||||
provider.modifyGroupInfo(groupInfo, name, TUIGroupConstants.Group.MODIFY_GROUP_NAME, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
layout.onGroupInfoModified(name, TUIGroupConstants.Group.MODIFY_GROUP_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e("modifyGroupName", errCode + ":" + errMsg);
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyGroupNotice(final String notice) {
|
||||
if (groupInfo == null) {
|
||||
return;
|
||||
}
|
||||
provider.modifyGroupInfo(groupInfo, notice, TUIGroupConstants.Group.MODIFY_GROUP_NOTICE, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
layout.onGroupInfoModified(notice, TUIGroupConstants.Group.MODIFY_GROUP_NOTICE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e("modifyGroupNotice", errCode + ":" + errMsg);
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public String getNickName() {
|
||||
String nickName = "";
|
||||
GroupMemberInfo self = getSelfGroupMemberInfo();
|
||||
if (self != null) {
|
||||
nickName = self.getNameCard();
|
||||
}
|
||||
return nickName == null ? "" : nickName;
|
||||
}
|
||||
|
||||
public void modifyMyGroupNickname(final String nickname) {
|
||||
provider.modifyMyGroupNickname(groupInfo, nickname, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
layout.onGroupInfoModified(nickname, TUIGroupConstants.Group.MODIFY_MEMBER_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e("modifyMyGroupNickname", errCode + ":" + errMsg);
|
||||
ToastUtil.toastLongMessage(errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void deleteGroup(IUIKitCallback<Void> callback) {
|
||||
if (groupInfo == null) {
|
||||
return;
|
||||
}
|
||||
String groupId = groupInfo.getId();
|
||||
provider.deleteGroup(groupId, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupLog.e("deleteGroup", errCode + ":" + errMsg);
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setTopConversation(String groupId, boolean isSetTop, IUIKitCallback<Void> callback) {
|
||||
String conversationId = TUIGroupUtils.getConversationIdByUserId(groupId, true);
|
||||
provider.setTopConversation(conversationId, isSetTop, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
groupInfo.setTopChat(isSetTop);
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void quitGroup(IUIKitCallback<Void> callback) {
|
||||
if (groupInfo == null) {
|
||||
return;
|
||||
}
|
||||
String groupId = groupInfo.getId();
|
||||
provider.quitGroup(groupId, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
TUIGroupLog.e("quitGroup", errCode + ":" + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyGroupInfo(int value, int type) {
|
||||
if (groupInfo == null) {
|
||||
return;
|
||||
}
|
||||
provider.modifyGroupInfo(groupInfo, value, type, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
layout.onGroupInfoModified(data, TUIGroupConstants.Group.MODIFY_GROUP_JOIN_TYPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
ToastUtil.toastLongMessage("modifyGroupInfo fail :" + errCode + "=" + errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void inviteGroupMembers(String groupId, List<String> addMembers, IUIKitCallback<Object> callback) {
|
||||
provider.loadGroupInfo(groupId, new IUIKitCallback<GroupInfo>() {
|
||||
@Override
|
||||
public void onSuccess(GroupInfo data) {
|
||||
groupInfo = data;
|
||||
inviteGroupMembers(addMembers, callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public void deleteGroupMembers(String groupId, List<String> members, IUIKitCallback<List<String>> callback) {
|
||||
provider.removeGroupMembers(groupId, members, callback);
|
||||
}
|
||||
|
||||
private void inviteGroupMembers(List<String> addMembers, IUIKitCallback<Object> callback) {
|
||||
provider.inviteGroupMembers(groupInfo, addMembers, new IUIKitCallback<Object>() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, data);
|
||||
if (layout != null) {
|
||||
layout.onGroupInfoChanged(groupInfo);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void removeGroupMembers(GroupInfo groupInfo, List<GroupMemberInfo> delMembers, IUIKitCallback callBack) {
|
||||
List<String> memberAccountList = new ArrayList<>();
|
||||
for (GroupMemberInfo memberInfo : delMembers) {
|
||||
memberAccountList.add(memberInfo.getAccount());
|
||||
}
|
||||
provider.removeGroupMembers(groupInfo.getId(), memberAccountList, new IUIKitCallback<List<String>>() {
|
||||
@Override
|
||||
public void onSuccess(List<String> data) {
|
||||
List<GroupMemberInfo> memberInfoList = groupInfo.getMemberDetails();
|
||||
for (int i = 0; i < data.size(); i++) {
|
||||
for (int j = memberInfoList.size() - 1; j >= 0; j--) {
|
||||
if (memberInfoList.get(j).getAccount().equals(data.get(i))) {
|
||||
memberInfoList.remove(j);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
TUIGroupUtils.callbackOnSuccess(callBack, data);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callBack, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setGroupNotDisturb(GroupInfo groupInfo, boolean isChecked, IUIKitCallback<Void> callback) {
|
||||
if (groupInfo == null) {
|
||||
TUIGroupLog.e(TAG, "mGroupInfo is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
provider.setGroupReceiveMessageOpt(groupInfo.getId(), !isChecked, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
groupInfo.setMessageReceiveOption(!isChecked);
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setGroupFold(GroupInfo groupInfo, boolean isChecked, IUIKitCallback<Void> callback) {
|
||||
if (groupInfo == null) {
|
||||
TUIGroupLog.e(TAG, "mGroupInfo is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
provider.setGroupFold(groupInfo.getId(), isChecked, new IUIKitCallback() {
|
||||
@Override
|
||||
public void onSuccess(Object data) {
|
||||
groupInfo.setFolded(isChecked);
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void modifyGroupFaceUrl(String groupId, String faceUrl, IUIKitCallback<Void> callback) {
|
||||
provider.modifyGroupFaceUrl(groupId, faceUrl, new IUIKitCallback<Void>() {
|
||||
@Override
|
||||
public void onSuccess(Void data) {
|
||||
TUIGroupUtils.callbackOnSuccess(callback, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(String module, int errCode, String errMsg) {
|
||||
TUIGroupUtils.callbackOnError(callback, module, errCode, errMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public GroupMemberInfo getSelfGroupMemberInfo() {
|
||||
if (selfGroupMemberInfo != null) {
|
||||
return selfGroupMemberInfo;
|
||||
}
|
||||
if (groupInfo == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
GroupMemberInfo groupMemberInfo = provider.getSelfGroupMemberInfo(groupInfo);
|
||||
selfGroupMemberInfo = groupMemberInfo;
|
||||
return selfGroupMemberInfo;
|
||||
}
|
||||
|
||||
public boolean isAdmin(int memberType) {
|
||||
return provider.isAdmin(memberType);
|
||||
}
|
||||
|
||||
public boolean isSelf(String userId) {
|
||||
return provider.isSelf(userId);
|
||||
}
|
||||
|
||||
public void transferGroupOwner(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
provider.transferGroupOwner(groupId, userId, callback);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.presenter;
|
||||
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.bean.GroupMemberInfo;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.model.GroupInfoProvider;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class GroupManagerPresenter {
|
||||
private final GroupInfoProvider provider;
|
||||
|
||||
public GroupManagerPresenter() {
|
||||
provider = new GroupInfoProvider();
|
||||
}
|
||||
|
||||
public void muteAll(String groupId, boolean isAllMute, IUIKitCallback<Void> callback) {
|
||||
provider.muteAll(groupId, isAllMute, callback);
|
||||
}
|
||||
|
||||
public void loadGroupManager(String groupId, IUIKitCallback<List<GroupMemberInfo>> callback) {
|
||||
provider.loadGroupManagers(groupId, callback);
|
||||
}
|
||||
|
||||
public void loadGroupOwner(String groupId, IUIKitCallback<GroupMemberInfo> callback) {
|
||||
provider.loadGroupOwner(groupId, callback);
|
||||
}
|
||||
|
||||
public void loadMutedMembers(String groupId, IUIKitCallback<List<GroupMemberInfo>> callback) {
|
||||
provider.loadMutedMembers(groupId, callback);
|
||||
}
|
||||
|
||||
public void muteGroupMember(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
int muteTime = 365 * 24 * 3600; // 365 days
|
||||
provider.muteGroupMember(groupId, userId, muteTime, callback);
|
||||
}
|
||||
|
||||
public void setGroupManager(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
provider.setGroupManager(groupId, userId, callback);
|
||||
}
|
||||
|
||||
public void clearGroupManager(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
provider.clearGroupManager(groupId, userId, callback);
|
||||
}
|
||||
|
||||
public void cancelMuteGroupMember(String groupId, String userId, IUIKitCallback<Void> callback) {
|
||||
provider.cancelMuteGroupMember(groupId, userId, callback);
|
||||
}
|
||||
|
||||
public void modifyGroupNotification(String groupId, String value, IUIKitCallback<Void> callback) {
|
||||
provider.modifyGroupNotification(groupId, value, callback);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.util;
|
||||
|
||||
import com.tencent.imsdk.common.IMLog;
|
||||
|
||||
public class TUIGroupLog extends IMLog {
|
||||
|
||||
private static final String PRE = "TUIGroup-";
|
||||
|
||||
private static String mixTag(String tag) {
|
||||
return PRE + tag;
|
||||
}
|
||||
|
||||
public static void v(String strTag, String strInfo) {
|
||||
IMLog.v(mixTag(strTag), strInfo);
|
||||
}
|
||||
|
||||
public static void d(String strTag, String strInfo) {
|
||||
IMLog.d(mixTag(strTag), strInfo);
|
||||
}
|
||||
|
||||
public static void i(String strTag, String strInfo) {
|
||||
IMLog.i(mixTag(strTag), strInfo);
|
||||
}
|
||||
|
||||
public static void w(String strTag, String strInfo) {
|
||||
IMLog.w(mixTag(strTag), strInfo);
|
||||
}
|
||||
|
||||
public static void w(String strTag, String strInfo, Throwable e) {
|
||||
IMLog.w(mixTag(strTag), strInfo + e.getMessage());
|
||||
}
|
||||
|
||||
public static void e(String strTag, String strInfo) {
|
||||
IMLog.e(mixTag(strTag), strInfo);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.tencent.qcloud.tuikit.tuigroup.util;
|
||||
|
||||
import static com.tencent.qcloud.tuicore.TUIConstants.TUIConversation.CONVERSATION_C2C_PREFIX;
|
||||
import static com.tencent.qcloud.tuicore.TUIConstants.TUIConversation.CONVERSATION_GROUP_PREFIX;
|
||||
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.tencent.imsdk.v2.V2TIMGroupInfo;
|
||||
import com.tencent.imsdk.v2.V2TIMGroupInfoResult;
|
||||
import com.tencent.imsdk.v2.V2TIMManager;
|
||||
import com.tencent.imsdk.v2.V2TIMValueCallback;
|
||||
import com.tencent.qcloud.tuicore.TUILogin;
|
||||
import com.tencent.qcloud.tuicore.component.interfaces.IUIKitCallback;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.R;
|
||||
import com.tencent.qcloud.tuikit.tuigroup.TUIGroupService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class TUIGroupUtils {
|
||||
private static final String TAG = "TUIGroupUtils";
|
||||
|
||||
public static final int GROUP_EVENT_TIP_JOINED = 1;
|
||||
public static final int GROUP_EVENT_TIP_INVITED = 2;
|
||||
public static final int GROUP_EVENT_TIP_KICKED = 3;
|
||||
public static final int GROUP_EVENT_TIP_DISBANDED = 4;
|
||||
|
||||
public static <T> void callbackOnError(IUIKitCallback<T> callBack, String module, int errCode, String desc) {
|
||||
if (callBack != null) {
|
||||
callBack.onError(module, errCode, desc);
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> void callbackOnError(IUIKitCallback<T> callBack, int errCode, String desc) {
|
||||
if (callBack != null) {
|
||||
callBack.onError(null, errCode, desc);
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> void callbackOnSuccess(IUIKitCallback<T> callBack, T data) {
|
||||
if (callBack != null) {
|
||||
callBack.onSuccess(data);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getConversationIdByUserId(String id, boolean isGroup) {
|
||||
String conversationIdPrefix = isGroup ? CONVERSATION_GROUP_PREFIX : CONVERSATION_C2C_PREFIX;
|
||||
return conversationIdPrefix + id;
|
||||
}
|
||||
|
||||
public static void toastGroupEvent(int type, String groupID) {
|
||||
List<String> groupList = new ArrayList<>();
|
||||
groupList.add(groupID);
|
||||
V2TIMManager.getGroupManager().getGroupsInfo(groupList, new V2TIMValueCallback<List<V2TIMGroupInfoResult>>() {
|
||||
@Override
|
||||
public void onSuccess(List<V2TIMGroupInfoResult> v2TIMGroupInfoResults) {
|
||||
V2TIMGroupInfoResult v2TIMGroupInfoResult = v2TIMGroupInfoResults.get(0);
|
||||
if (v2TIMGroupInfoResult.getResultCode() == 0) {
|
||||
V2TIMGroupInfo groupInfo = v2TIMGroupInfoResult.getGroupInfo();
|
||||
if (TextUtils.equals(TUILogin.getLoginUser(), groupInfo.getOwner())) {
|
||||
return;
|
||||
}
|
||||
String groupName = groupInfo.getGroupName();
|
||||
if (TextUtils.isEmpty(groupName)) {
|
||||
groupName = groupID;
|
||||
}
|
||||
toastGroupEventByName(type, groupName);
|
||||
} else {
|
||||
TUIGroupLog.e(TAG, "toastGroupEvent failed, code=" + v2TIMGroupInfoResult.getResultCode() + ", msg=" + v2TIMGroupInfoResult.getResultMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(int code, String desc) {
|
||||
TUIGroupLog.e(TAG, "toastGroupEvent failed, code=" + code + ", msg=" + desc);
|
||||
toastGroupEventByName(type, groupID);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void toastGroupEventByName(int type, String groupName) {
|
||||
String toastString = null;
|
||||
if (type == GROUP_EVENT_TIP_JOINED) {
|
||||
toastString = TUIGroupService.getAppContext().getString(R.string.joined_tip) + groupName;
|
||||
} else if (type == GROUP_EVENT_TIP_INVITED) {
|
||||
toastString = TUIGroupService.getAppContext().getString(R.string.join_group_tip) + groupName;
|
||||
} else if (type == GROUP_EVENT_TIP_KICKED) {
|
||||
toastString = TUIGroupService.getAppContext().getString(R.string.kick_group) + groupName;
|
||||
} else if (type == GROUP_EVENT_TIP_DISBANDED) {
|
||||
toastString = TUIGroupService.getAppContext().getString(R.string.dismiss_tip_before) + groupName + TUIGroupService.getAppContext().getString(R.string.dismiss_tip_after);
|
||||
}
|
||||
if (toastString != null) {
|
||||
// ToastUtil.toastLongMessage(toastString); //当前需要不要提示,所以注释掉
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<style name="TUIGroupLightTheme" parent="TUIBaseLightTheme">
|
||||
<item name="group_add_icon">@drawable/group_add_icon_light</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<style name="TUIGroupLivelyTheme" parent="TUIBaseLivelyTheme">
|
||||
<item name="group_add_icon">@drawable/group_add_icon_lively</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
|
||||
<solid android:color="#ffffff" />
|
||||
<stroke
|
||||
android:dashGap="5dp"
|
||||
android:dashWidth="5dp"
|
||||
android:width="1dp"
|
||||
android:color="#bfbfbf" />
|
||||
<corners android:radius="25dp" />
|
||||
</shape>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.tencent.qcloud.tuikit.tuigroup.minimalistui.view.GroupApplyManagerLayout
|
||||
android:id="@+id/group_apply_manager_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.tencent.qcloud.tuikit.tuigroup.minimalistui.view.GroupInfoLayout
|
||||
android:id="@+id/group_info_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/status_bar_color"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<com.tencent.qcloud.tuikit.tuigroup.minimalistui.view.GroupMemberLayout
|
||||
android:id="@+id/group_member_grid_layout"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/limit_tips"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center"
|
||||
android:paddingBottom="36dp"
|
||||
android:paddingTop="12dp"
|
||||
android:background="#F6F6F6"
|
||||
android:textColor="#999999"
|
||||
android:textSize="12sp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:visibility="visible"
|
||||
tools:text="123"
|
||||
android:visibility="gone"/>
|
||||
</LinearLayout>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<style name="TUIGroupSeriousTheme" parent="TUIBaseSeriousTheme">
|
||||
<item name="group_add_icon">@drawable/group_add_icon_serious</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fromXDelta="0"
|
||||
android:fromYDelta="100%"
|
||||
android:toXDelta="0"
|
||||
android:toYDelta="0"
|
||||
android:duration="150">
|
||||
</translate>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<translate xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:fromXDelta="0"
|
||||
android:fromYDelta="0"
|
||||
android:toXDelta="0"
|
||||
android:toYDelta="100"
|
||||
android:duration="150">
|
||||
</translate>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true" android:color="@color/btn_negative_hover">
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
<corners android:radius="2.5dp" />
|
||||
<solid android:color="@color/btn_negative_hover" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:color="@color/btn_negative">
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
<corners android:radius="2.5dp" />
|
||||
<solid android:color="@color/btn_negative" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:state_pressed="true" android:color="@color/btn_positive_hover" >
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
<corners android:radius="5dp" />
|
||||
<solid android:color="@color/btn_positive_hover" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:color="@color/btn_positive" >
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle" >
|
||||
<corners android:radius="5dp" />
|
||||
<solid android:color="@color/btn_positive" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
||||
|
After Width: | Height: | Size: 421 B |
|
After Width: | Height: | Size: 141 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#ffffff" />
|
||||
<stroke
|
||||
android:dashGap="5dp"
|
||||
android:dashWidth="5dp"
|
||||
android:width="1dp"
|
||||
android:color="#bfbfbf" />
|
||||
<corners android:radius="5dp" />
|
||||
</shape>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#ffffff" />
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/item_split_color" />
|
||||
<solid android:color="#00000000" />
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<corners android:radius="5dp" />
|
||||
|
||||
<solid android:color="#c3c3c3" />
|
||||
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item android:drawable="@drawable/check_box_selected" android:state_checked="true" android:state_enabled="true"/>
|
||||
<item android:drawable="@drawable/group_select_disable" android:state_checked="true" android:state_enabled="false"/>
|
||||
<item android:drawable="@drawable/check_box_unselected" android:state_checked="false" />
|
||||
<item android:drawable="@drawable/check_box_unselected" />
|
||||
|
||||
</selector>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="?attr/core_primary_color"/>
|
||||
<corners android:radius="4dp"/>
|
||||
</shape>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
|
||||
<solid
|
||||
android:color="#E5E5E5"/>
|
||||
|
||||
<size
|
||||
android:height="0.5dp"/>
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="@color/green" />
|
||||
<size android:width="1dp" />
|
||||
</shape>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape>
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="#cccccc" />
|
||||
<solid android:color="#ffffff" />
|
||||
</shape>
|
||||
|
||||
</item>
|
||||
|
||||
</layer-list>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="@color/item_split_color" />
|
||||
<solid android:color="#fff" />
|
||||
|
||||
</shape>
|
||||
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#F2F3F5"
|
||||
android:orientation="vertical"
|
||||
tools:context=".classicui.page.ManageGroupActivity">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.TitleBarLayout
|
||||
android:id="@+id/group_manage_title_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height" />
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/group_manage_set_manager"
|
||||
app:isTop="true"
|
||||
app:canNav="true"
|
||||
app:name="@string/group_set_manager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"/>
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/group_manage_mute_all"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
app:name="@string/group_mute_all"
|
||||
app:isSwitch="true"
|
||||
app:isTop="true"
|
||||
app:canNav="false"/>
|
||||
|
||||
<TextView
|
||||
android:text="@string/group_mute_tip"
|
||||
android:textSize="11.52sp"
|
||||
android:lineHeight="17.28dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/group_manage_add_mute_member"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:background="@color/white"
|
||||
android:gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height">
|
||||
|
||||
<ImageView
|
||||
android:background="?attr/group_add_icon"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_width="19.2dp"
|
||||
android:layout_height="19.2dp"
|
||||
android:layout_marginRight="13.44dp"/>
|
||||
|
||||
<TextView
|
||||
android:text="@string/group_add_mute_member_tip"
|
||||
android:textSize="15.36sp"
|
||||
android:textColor="#444444"
|
||||
android:lineHeight="23sp"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/group_manage_muted_member_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:context=".classicui.page.GroupNoticeActivity">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.TitleBarLayout
|
||||
android:id="@+id/group_notice_title_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/group_notice_text"
|
||||
android:longClickable="false"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingLeft="15.36dp"
|
||||
android:paddingRight="15.36dp"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:background="@null"
|
||||
android:gravity="start"
|
||||
android:lines="8"
|
||||
android:maxLines="10"
|
||||
android:text="@string/group_notice_empty_tip"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,105 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#F2F3F5"
|
||||
android:orientation="vertical"
|
||||
tools:context=".classicui.page.SetGroupManagerActivity">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.TitleBarLayout
|
||||
android:id="@+id/set_group_manager_title_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/set_group_manager_owner_label"
|
||||
android:text="@string/group_owner_label"
|
||||
android:textSize="13.44sp"
|
||||
android:lineHeight="19.2dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/set_group_manager_group_owner"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:background="@color/white"
|
||||
android:gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView
|
||||
android:id="@+id/set_group_manager_owner_face"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_marginRight="11.52dp"
|
||||
android:layout_width="38.4dp"
|
||||
android:layout_height="38.4dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/set_group_manager_owner_name"
|
||||
android:textSize="17.28sp"
|
||||
android:textColor="#444444"
|
||||
android:lineHeight="23sp"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/set_group_manager_manager_label"
|
||||
android:textSize="13.44sp"
|
||||
android:lineHeight="19.2dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/set_group_manager_add_manager"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:background="@color/white"
|
||||
android:gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height">
|
||||
|
||||
<ImageView
|
||||
android:background="?attr/group_add_icon"
|
||||
android:scaleType="centerCrop"
|
||||
android:layout_width="19.2dp"
|
||||
android:layout_height="19.2dp"
|
||||
android:layout_marginRight="13.44dp"/>
|
||||
|
||||
<TextView
|
||||
android:text="@string/group_add_manager_label"
|
||||
android:textSize="15.36sp"
|
||||
android:textColor="#444444"
|
||||
android:lineHeight="23sp"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:background="@drawable/group_list_divider"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.6dp"/>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/set_group_manager_manager_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:background="@null"
|
||||
android:paddingBottom="15dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ListView
|
||||
android:id="@+id/item_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/bottom_sheet_border" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/cancel_button"
|
||||
android:text="@string/cancel"
|
||||
android:textSize="17sp"
|
||||
android:gravity="center"
|
||||
android:textColor="?attr/core_primary_color"
|
||||
android:textStyle="bold"
|
||||
android:background="@drawable/bottom_sheet_border"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/sheet_item"
|
||||
android:textSize="17sp"
|
||||
android:gravity="center"
|
||||
android:background="@null"
|
||||
android:textColor="?attr/core_primary_color"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"/>
|
||||
|
||||
</FrameLayout>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.tencent.qcloud.tuikit.tuigroup.classicui.view.GroupApplyManagerLayout
|
||||
android:id="@+id/group_apply_manager_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.TitleBarLayout
|
||||
android:id="@+id/group_apply_title_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height" />
|
||||
|
||||
|
||||
<ListView
|
||||
android:id="@+id/group_apply_members"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/group_manager_base"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/status_bar_color"
|
||||
android:clickable="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.tencent.qcloud.tuikit.tuigroup.classicui.view.GroupInfoLayout
|
||||
android:id="@+id/group_info_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,320 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/core_bg_color"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.TitleBarLayout
|
||||
android:id="@+id/group_info_title_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height" />
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/group_detail_area"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_height"
|
||||
android:background="#FFFFFF">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView
|
||||
android:id="@+id/group_icon"
|
||||
android:layout_width="@dimen/group_profile_face_size"
|
||||
android:layout_height="@dimen/group_profile_face_size"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="@dimen/group_profile_face_margin_left"
|
||||
android:layout_marginTop="@dimen/group_profile_face_margin_top"
|
||||
android:layout_marginRight="@dimen/group_profile_face_margin_right"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignTop="@id/group_icon"
|
||||
android:layout_toEndOf="@id/group_icon"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:singleLine="true"
|
||||
android:textSize="@dimen/group_profile_group_name_size"
|
||||
tools:text="群聊" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_account_tag"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/group_name"
|
||||
android:layout_alignStart="@id/group_name"
|
||||
android:layout_marginTop="7.64dp"
|
||||
android:gravity="center_vertical"
|
||||
android:text="@string/group_account_tag"
|
||||
android:textSize="@dimen/group_profile_group_id_size" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_account"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/group_name"
|
||||
android:layout_alignTop="@+id/group_account_tag"
|
||||
android:layout_toEndOf="@id/group_account_tag"
|
||||
android:gravity="center_vertical"
|
||||
android:textIsSelectable="true"
|
||||
android:textSize="@dimen/group_profile_group_id_size"
|
||||
tools:text="99618" />
|
||||
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/group_detail_arrow"
|
||||
android:layout_width="11.52dp"
|
||||
android:layout_height="11.52dp"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:src="@drawable/arrow_right" />
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/group_member_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
android:layout_marginTop="10dp"
|
||||
app:name="@string/group_members" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<GridView
|
||||
android:id="@+id/group_members"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="0.6dp"
|
||||
android:background="@color/white"
|
||||
android:fadeScrollbars="true"
|
||||
android:numColumns="5"
|
||||
android:paddingLeft="@dimen/group_profile_member_grid_padding_left_right"
|
||||
android:paddingTop="@dimen/group_profile_member_grid_padding_top"
|
||||
android:scrollbars="none" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/view_more_group_members"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone">
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="20dp"
|
||||
android:paddingEnd="7.68dp"
|
||||
android:text="@string/group_view_more_group_members" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/arrow_right" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/group_notice"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="69dp"
|
||||
android:background="@color/white"
|
||||
android:paddingLeft="@dimen/group_profile_face_margin_left"
|
||||
android:paddingRight="20dp"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="11.52dp"
|
||||
android:lineHeight="23.04sp"
|
||||
android:text="@string/group_notice"
|
||||
android:textColor="#444444"
|
||||
android:textSize="15.36sp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="15.36dp"
|
||||
android:layout_marginTop="5dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_notice_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:ellipsize="end"
|
||||
android:text="@string/group_notice_empty_tip"
|
||||
android:lineHeight="17.28sp"
|
||||
android:singleLine="true"
|
||||
android:textColor="#888888"
|
||||
android:textSize="11.52sp" />
|
||||
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/arrow_right" />
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/group_notice"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
android:layout_marginTop="10dp"
|
||||
android:visibility="gone"
|
||||
app:name="@string/group_notice" />
|
||||
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/group_manage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
android:visibility="gone"
|
||||
app:canNav="true"
|
||||
app:isTop="true"
|
||||
app:name="@string/group_manager"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/group_type_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
app:isTop="true"
|
||||
app:name="@string/group_type" />
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/join_type_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
app:isTop="true"
|
||||
app:name="@string/join_group_type" />
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/self_nickname_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
android:layout_marginTop="10dp"
|
||||
app:name="@string/in_group_nick_name" />
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/msg_rev_option"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
android:layout_marginTop="10dp"
|
||||
app:isSwitch="true"
|
||||
app:name="@string/profile_msgrev_opt" />
|
||||
<RelativeLayout
|
||||
android:id="@+id/layout_fold"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white" >
|
||||
<View
|
||||
android:id="@+id/fold_top_line"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:background="@color/line"/>
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/fold_group_chat"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
android:layout_below="@id/fold_top_line"
|
||||
android:layout_marginLeft="20dp"
|
||||
app:isSwitch="true"
|
||||
app:name="@string/fold_this_group_chat" />
|
||||
<View
|
||||
android:id="@+id/left_line"
|
||||
android:layout_width="10dp"
|
||||
android:layout_height="2px"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:layout_centerVertical="true"
|
||||
android:background="@color/dark_line"/>
|
||||
<View
|
||||
android:layout_below="@id/fold_group_chat"
|
||||
android:id="@+id/fold_bottom_line"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1px"
|
||||
android:background="@color/line"/>
|
||||
</RelativeLayout>
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/chat_to_top_switch"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
app:isSwitch="true"
|
||||
app:name="@string/chat_to_top" />
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.LineControllerView
|
||||
android:id="@+id/chat_background"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/group_profile_item_height"
|
||||
app:canNav="true"
|
||||
app:name="@string/profile_chat_background"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_clear_msg_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:background="#ffffff"
|
||||
android:gravity="center"
|
||||
android:textSize="16.32sp"
|
||||
android:textColor="?attr/core_error_tip_color"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_change_owner_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="0.6dp"
|
||||
android:background="#ffffff"
|
||||
android:gravity="center"
|
||||
android:text="@string/group_transfer_group_owner"
|
||||
android:textColor="?attr/core_error_tip_color"
|
||||
android:textSize="16.32sp"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_dissolve_button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="50dp"
|
||||
android:layout_marginTop="0.6dp"
|
||||
android:textSize="16.32sp"
|
||||
android:background="#ffffff"
|
||||
android:gravity="center"
|
||||
android:textColor="?attr/core_error_tip_color"
|
||||
tools:visibility="visible" />
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="58dp"
|
||||
android:background="@color/white"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView
|
||||
android:id="@+id/group_manager_face"
|
||||
android:layout_width="38.4dp"
|
||||
android:layout_height="38.4dp"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginLeft="15.36dp"
|
||||
android:layout_marginRight="11.52dp" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_manage_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center_vertical"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end"
|
||||
android:layout_weight="1"
|
||||
android:lineHeight="23.04sp"
|
||||
android:textSize="17.28sp" />
|
||||
|
||||
<View
|
||||
android:id="@+id/view_line"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.55dp"
|
||||
android:background="#D9D9D9" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardBackgroundColor="@color/white"
|
||||
app:cardUseCompatPadding="true"
|
||||
app:cardElevation="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/pop_text"
|
||||
android:textSize="15sp"
|
||||
android:gravity="center"
|
||||
android:textColor="#888888"
|
||||
android:layout_margin="15dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="60dp"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="@dimen/page_margin"
|
||||
android:paddingRight="@dimen/page_margin">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView
|
||||
android:id="@+id/group_apply_member_icon"
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:scaleType="fitCenter"
|
||||
android:background="?attr/core_default_user_icon" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_apply_member_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:lines="1"
|
||||
android:textColor="@color/text_color_black" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_apply_reason"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:lines="1"
|
||||
android:textColor="@color/text_color_gray" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:id="@+id/group_apply_accept"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:background="@color/bg_positive_btn"
|
||||
android:onClick="startConversation"
|
||||
android:text="@string/accept"
|
||||
android:textColor="#fff" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/group_apply_refuse"
|
||||
android:layout_width="60dp"
|
||||
android:layout_height="40dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:background="@color/bg_negative_btn"
|
||||
android:onClick="startConversation"
|
||||
android:text="@string/refuse"
|
||||
android:textColor="#fb6155" />
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView
|
||||
android:id="@+id/group_member_icon"
|
||||
android:layout_width="@dimen/group_profile_member_item_width"
|
||||
android:layout_height="@dimen/group_profile_member_item_width"
|
||||
android:scaleType="centerCrop"
|
||||
android:background="?attr/core_default_user_icon" />
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_member_name"
|
||||
android:layout_width="@dimen/group_profile_member_item_width"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="9.6dp"
|
||||
android:layout_marginTop="7.68dp"
|
||||
android:gravity="center"
|
||||
android:lines="1"
|
||||
android:maxEms="3"
|
||||
android:ellipsize="end"
|
||||
android:textSize="@dimen/group_profile_member_item_name_size"
|
||||
android:textColor="@color/group_profile_member_name_text_color" />
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.TitleBarLayout
|
||||
android:id="@+id/group_member_title_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/page_title_height" />
|
||||
|
||||
<!-- 搜索 -->
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/group_all_members"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp" />
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/select_area"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
app:cardElevation="8dp"
|
||||
app:cardBackgroundColor="@color/white"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_vertical"
|
||||
android:orientation="horizontal"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:paddingBottom="16dp">
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/selected_list"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/confirm_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginLeft="12dp"
|
||||
android:background="@drawable/group_confirm_button_bg"
|
||||
android:paddingLeft="12dp"
|
||||
android:paddingTop="4dp"
|
||||
android:paddingRight="12dp"
|
||||
android:paddingBottom="4dp"
|
||||
android:text="@string/sure"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="14sp" />
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.cardview.widget.CardView>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="58.48dp"
|
||||
android:background="@color/white"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/group_member_check_box"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginRight="10dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:button="@null"
|
||||
android:background="@drawable/group_checkbox_selector"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center"
|
||||
android:clickable="false"
|
||||
android:focusable="false"
|
||||
android:visibility="gone" />
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.gatherimage.ShadeImageView
|
||||
android:id="@+id/group_member_icon"
|
||||
android:layout_width="38.4dp"
|
||||
android:layout_height="38.4dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_marginLeft="15.36dp"
|
||||
android:layout_marginRight="11.52dp"
|
||||
android:scaleType="centerCrop" />
|
||||
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/group_member_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:lines="1"
|
||||
android:textColor="#ff111111"
|
||||
android:textSize="17.28sp" />
|
||||
|
||||
<View
|
||||
android:id="@+id/view_line"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0.55dp"
|
||||
android:background="#D9D9D9" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#00FFFFFF"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingRight="12dp"
|
||||
android:clickable="true">
|
||||
|
||||
<com.tencent.qcloud.tuicore.component.RoundCornerImageView
|
||||
android:id="@+id/ivAvatar"
|
||||
android:layout_width="38.4dp"
|
||||
android:layout_height="38.4dp"
|
||||
app:corner_radius="3.2dp"
|
||||
android:scaleType="centerCrop"
|
||||
android:clickable="false"
|
||||
android:focusable="false" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/status_bar_color"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
||||
<com.tencent.qcloud.tuikit.tuigroup.classicui.view.GroupMemberLayout
|
||||
android:id="@+id/group_member_grid_layout"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/limit_tips"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center"
|
||||
android:paddingBottom="36dp"
|
||||
android:paddingTop="12dp"
|
||||
android:background="#F6F6F6"
|
||||
android:textColor="#999999"
|
||||
android:textSize="12sp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
tools:visibility="visible"
|
||||
tools:text="123"
|
||||
android:visibility="gone"/>
|
||||
</LinearLayout>
|
||||