群聊修改

This commit is contained in:
guozhen
2024-12-25 11:09:23 +08:00
committed by xuhuixiang
parent 675f68d00c
commit 16b58830cb
40 changed files with 1579 additions and 159 deletions

View File

@@ -59,6 +59,7 @@ public class ContactGroupSettingActivity extends FunBaseSelectorDataActivity imp
FunContactSelectorSettingActivityBinding binding;
protected FunContactMembersAdapter membersAdapter;
protected boolean isChecked = true;
protected boolean isAllow = true;
protected ArrayList<String> listkey;
protected ArrayList<String> listname;
protected ArrayList<String> listavat;
@@ -142,6 +143,10 @@ public class ContactGroupSettingActivity extends FunBaseSelectorDataActivity imp
binding.rbSelector.setChecked(isChecked);
}
);
binding.swichAllow.setOnClickListener(v -> {
isAllow = !isAllow;
binding.swichAllow.setChecked(isAllow);
});
LinearLayoutManager layoutManager =
new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false);
binding.rvMembers.setLayoutManager(layoutManager);
@@ -288,6 +293,7 @@ public class ContactGroupSettingActivity extends FunBaseSelectorDataActivity imp
result.putExtra(KEY_TEAM_NAME, TextUtils.isEmpty(groupname) ? binding.editGroupname.getHint().toString() : groupname);
result.putExtra(KEY_TEAM_ICON, groupHeadUrl);
result.putExtra(ContactConstant.REQUEST_FUN_CREATE_GROUP_AUTO, isChecked);
result.putExtra(ContactConstant.REQUEST_FUN_CREATE_GROUP_ALLOW_ADDFRIENDS, isAllow);
setResult(RESULT_OK, result);
finish();
}).setActionTextColor(getResources().getColor(R.color.color_6877fe));

View File

@@ -3,7 +3,6 @@ package com.dskj.rbchat.contact;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
@@ -36,11 +35,8 @@ import com.dskj.rbchat.adapter.CommonAdapter;
import com.dskj.rbchat.adapter.ViewHolder;
import com.dskj.rbchat.databinding.ActivityUserInfoBinding;
import com.dskj.rbchat.dialog.ActionConfirmDialog;
import com.dskj.rbchat.main.MainActivity;
import com.dskj.rbchat.main.mine.EditFriendUserInfoActivity;
import com.dskj.rbchat.main.mine.EditUserInfoActivity;
import com.dskj.rbchat.main.mine.photo.AddPhotoActivity;
import com.dskj.rbchat.main.mine.photo.UserPhotoDetailsActivity;
import com.dskj.rbchat.main.mine.photo.UserPhotoListActivity;
import com.dskj.rbchat.model.AlbumBean;
import com.dskj.rbchat.model.ListBeanResult;
@@ -62,7 +58,6 @@ import com.netease.yunxin.kit.chatkit.ui.common.ChatUtils;
import com.netease.yunxin.kit.chatkit.ui.common.RxBus;
import com.netease.yunxin.kit.chatkit.ui.model.ChatBlackEvent;
import com.netease.yunxin.kit.chatkit.ui.model.ChatDeleteEvent;
import com.netease.yunxin.kit.chatkit.ui.model.CleanHistoryEvent;
import com.netease.yunxin.kit.common.ui.activities.BaseActivity;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.common.ui.viewmodel.LoadStatus;
@@ -80,9 +75,9 @@ import com.netease.yunxin.kit.corekit.im.provider.FetchCallback;
import com.netease.yunxin.kit.corekit.im.repo.CommonRepo;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.corekit.route.XKitRouter;
import com.netease.yunxin.kit.teamkit.ui.utils.viewmodel.TeamSettingViewModel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -93,12 +88,16 @@ import io.reactivex.schedulers.Schedulers;
public class UserInfoActivity extends BaseActivity {
private ActivityUserInfoBinding viewBinding;
protected UserInfoViewModel viewModel;
protected TeamSettingViewModel teammodel;
protected ContactUserInfoBean userInfoData;
protected String accId;
private ActivityResultLauncher<Intent> launcher;
protected BlackListViewModel blackListViewModel;
private String alias = "";
private String teamId = "";
private int isAllowAdd = 1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -588,7 +587,10 @@ public class UserInfoActivity extends BaseActivity {
viewBinding.moreIv.setVisibility(View.GONE);
viewBinding.starIv.setVisibility(View.GONE);
viewBinding.friendLy.setVisibility(View.GONE);
viewBinding.addFriendsTv.setVisibility(View.VISIBLE);
if (isAllowAdd == 1) {
viewBinding.addFriendsTv.setVisibility(View.VISIBLE);
}
finish();
RxBus.getInstance().post(IMUIKitConfig.CHANGE_FOLLOW_USER);
@@ -599,7 +601,9 @@ public class UserInfoActivity extends BaseActivity {
viewBinding.moreIv.setVisibility(View.GONE);
viewBinding.starIv.setVisibility(View.GONE);
viewBinding.friendLy.setVisibility(View.GONE);
viewBinding.addFriendsTv.setVisibility(View.VISIBLE);
if (isAllowAdd == 1) {
viewBinding.addFriendsTv.setVisibility(View.VISIBLE);
}
finish();
RxBus.getInstance().post(IMUIKitConfig.CHANGE_FOLLOW_USER);
@@ -665,6 +669,30 @@ public class UserInfoActivity extends BaseActivity {
finish();
}
}
//群设置了不允许互加好友
// teamId = getIntent().getStringExtra("teamId");
// if (!TextUtils.isEmpty(teamId)) {
// teammodel = new TeamSettingViewModel();
// teammodel.getTeamWithMemberData().observe(this, teamResultInfo -> {
// if (teamResultInfo.getValue() == null || !teamResultInfo.getSuccess()) {
// return;
// }
// Team teaminfo = teamResultInfo.getValue().getTeam();
// String extension = teaminfo.getExtension();
// if (!TextUtils.isEmpty(extension)) {
// TeamExtensionBean extensionBean = GsonUtils.getObjFromJSON(extension, TeamExtensionBean.class);
// if (extensionBean != null) {
// isAllowAdd = extensionBean.getAllowAddFriends();
// }
// if (isAllowAdd == 0) {
// viewBinding.addFriendsTv.setVisibility(View.GONE);
// }
//
// }
// });
// teammodel.requestTeamData(teamId);
// }
IMApplication.schemeUserId = null;
if (accId.equals(IMKitClient.account()) || ContactRepo.isFriend(accId)) { //是好友或者是自己 可以修改备注
@@ -845,7 +873,7 @@ public class UserInfoActivity extends BaseActivity {
viewBinding.moreIv.setVisibility(View.VISIBLE);
viewBinding.starIv.setVisibility(View.VISIBLE);
} else {
if (!userInfoData.isBlack) {
if (!userInfoData.isBlack && isAllowAdd == 1) {
viewBinding.addFriendsTv.setVisibility(View.VISIBLE);
}
}

View File

@@ -106,25 +106,20 @@ public class FunContactSelectorActivity extends BaseContactSelectorActivity {
super.updateView();
if (type == 1) { //转发 这ui 修改的....
rvSelected.setVisibility(View.GONE);
contactListView.showSelector(false);
lastContactView.showSelector(false);
loveContactView.showSelector(false);
searchContactView.showSelector(false);
LinearLayout.LayoutParams params1 = (LinearLayout.LayoutParams) contactListView.getLayoutParams();
LinearLayout.LayoutParams params2 = (LinearLayout.LayoutParams) lastContactView.getLayoutParams();
LinearLayout.LayoutParams params3 = (LinearLayout.LayoutParams) loveContactView.getLayoutParams();
LinearLayout.LayoutParams params4 = (LinearLayout.LayoutParams) searchContactView.getLayoutParams();
params1.setMarginStart(SizeUtils.dp2px(15));
params2.setMarginStart(SizeUtils.dp2px(15));
params3.setMarginStart(SizeUtils.dp2px(15));
params4.setMarginStart(SizeUtils.dp2px(15));
contactListView.setLayoutParams(params1);
lastContactView.setLayoutParams(params2);
loveContactView.setLayoutParams(params3);
searchContactView.setLayoutParams(params4);
updateListView(contactListView);
updateListView(lastContactView);
updateListView(loveContactView);
updateListView(searchContactView);
}
}
public void updateListView(ContactListView contactListView) {
contactListView.showSelector(false);
LinearLayout.LayoutParams params1 = (LinearLayout.LayoutParams) contactListView.getLayoutParams();
params1.setMarginStart(SizeUtils.dp2px(15));
contactListView.setLayoutParams(params1);
}
public void setViewHolderFactory(ContactListView contactView) {
contactView
.getDecoration()
@@ -169,6 +164,7 @@ public class FunContactSelectorActivity extends BaseContactSelectorActivity {
.withParam(KEY_TEAM_NAME, data.getStringExtra(KEY_TEAM_NAME))
.withParam(KEY_TEAM_ICON, data.getStringExtra(KEY_TEAM_ICON))
.withParam(ContactConstant.REQUEST_FUN_CREATE_GROUP_AUTO, data.getBooleanExtra(ContactConstant.REQUEST_FUN_CREATE_GROUP_AUTO, true))
.withParam(ContactConstant.REQUEST_FUN_CREATE_GROUP_ALLOW_ADDFRIENDS, data.getBooleanExtra(ContactConstant.REQUEST_FUN_CREATE_GROUP_ALLOW_ADDFRIENDS, true))
.navigate(
res -> {
if (res.getSuccess() && res.getValue() instanceof CreateTeamResult) {

View File

@@ -418,6 +418,7 @@ public abstract class BaseTeamQrSettingActivity extends BaseActivity implements
.withParam(KEY_TEAM_NAME, data.getStringExtra(KEY_TEAM_NAME))
.withParam(KEY_TEAM_ICON, data.getStringExtra(KEY_TEAM_ICON))
.withParam(ContactConstant.REQUEST_FUN_CREATE_GROUP_AUTO, data.getBooleanExtra(ContactConstant.REQUEST_FUN_CREATE_GROUP_AUTO, true))
.withParam(ContactConstant.REQUEST_FUN_CREATE_GROUP_ALLOW_ADDFRIENDS, data.getBooleanExtra(ContactConstant.REQUEST_FUN_CREATE_GROUP_ALLOW_ADDFRIENDS, true))
.navigate(
res -> {
if (res.getSuccess() && res.getValue() instanceof CreateTeamResult) {

View File

@@ -0,0 +1,394 @@
package com.dskj.rbchat.imkit.team;
import static com.netease.yunxin.kit.corekit.im.utils.RouterConstant.KEY_TEAM_ID;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatRadioButton;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.dskj.rbchat.R;
import com.dskj.rbchat.adapter.CommonAdapter;
import com.dskj.rbchat.adapter.ViewHolder;
import com.dskj.rbchat.base.LllChatBaseActivity;
import com.dskj.rbchat.databinding.ActivityTeamaddmanagerBinding;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.team.TeamService;
import com.netease.nimlib.sdk.team.model.TeamMember;
import com.netease.yunxin.kit.chatkit.repo.ContactRepo;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.common.ui.widgets.ContactAvatarView;
import com.netease.yunxin.kit.common.utils.NetworkUtils;
import com.netease.yunxin.kit.contactkit.ui.databinding.FunContactSelectorActivityLayoutBinding;
import com.netease.yunxin.kit.contactkit.ui.fun.contact.FunContactDefaultFactory;
import com.netease.yunxin.kit.contactkit.ui.view.ContactListView;
import com.netease.yunxin.kit.corekit.im.IMKitClient;
import com.netease.yunxin.kit.corekit.im.model.UserInfo;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.corekit.route.XKitRouter;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 添加管理員
*/
public class TeamAddManagerActivity extends LllChatBaseActivity {
@Override
public int initNavigationBarColor() {
return getColor(R.color.color_fffafa);
}
@Override
public int initStatusBarColor() {
return getColor(R.color.color_titlebar);
}
protected ActivityTeamaddmanagerBinding binding;
protected RecyclerView searchContactView; //搜索
protected RecyclerView allTeamContactView; //群好友
protected RecyclerView rvSelected; //已選擇
protected CommonAdapter selectedAdapter;
protected CommonAdapter searchAdapter;
protected CommonAdapter allMemberAdapter;
private List<UserInfo> listMembers = new ArrayList<>();
private List<UserInfo> listSearch = new ArrayList<>();
public static final String LISTMEMBERS = "listTeamMembers";
public static final String HASSELECTOR = "hasSelector"; //只能添加个数
public static final String BUNDLE = "bundle";
private List<UserInfo> userInfos;
private List<UserInfo> selectorPosition = new ArrayList<>();
private String teamId = "";
private int hasAdd;
public static void launch(Context context, String teamId, List<UserInfo> userInfos, int hasSelector, @NonNull ActivityResultLauncher<Intent> launcher) {
Intent intent = new Intent(context, TeamAddManagerActivity.class);
Bundle bundle = new Bundle();
bundle.putString(KEY_TEAM_ID, teamId);
bundle.putInt(HASSELECTOR, hasSelector);
bundle.putSerializable(LISTMEMBERS, (Serializable) userInfos);
intent.putExtra(BUNDLE, bundle);
launcher.launch(intent);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityTeamaddmanagerBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Bundle args = getIntent().getBundleExtra(BUNDLE);
if (args == null) {
finish();
return;
}
userInfos = (List<UserInfo>) args.getSerializable(LISTMEMBERS);
teamId = args.getString(KEY_TEAM_ID);
hasAdd = args.getInt(HASSELECTOR);
listMembers.addAll(userInfos);
searchContactView = binding.recyclerSearchlistView;
rvSelected = binding.rvSelected;
allTeamContactView = binding.recyclerMember;
binding.title
.setOnBackIconClickListener(v -> onBackPressed())
.setTitle(R.string.str_teammanager_add_title)
.setActionText(String.format(getString(R.string.str_teammanager_title_right), selectorPosition.size()))
.setActionTextColor(getResources().getColor(com.netease.yunxin.kit.contactkit.ui.R.color.color_6877fe))
.setActionListener(
v -> {
if (!NetworkUtils.isConnected()) {
Toast.makeText(this, com.netease.yunxin.kit.contactkit.ui.R.string.contact_network_error_tip, Toast.LENGTH_SHORT).show();
return;
}
if (selectorPosition.size() > 0) {
List<String> accountId = new ArrayList<>();
for (UserInfo userInfo : selectorPosition) {
accountId.add(userInfo.getAccount());
}
addManager(accountId);
}else{
ToastX.showShortToast(R.string.str_teammanager_add_not_toast);
}
});
binding.title.getTitleTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
binding.editSelectorFriends.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
String search = textView.getEditableText().toString();
//搜索好友
List<UserInfo> listSearchResult = searchName(search);
listSearch.clear();
listSearch.addAll(listSearchResult);
binding.layoutSearchlist.setVisibility(View.VISIBLE);
binding.layoutTeammemberlist.setVisibility(View.GONE);
searchAdapter.notifyDataSetChanged();
}
return false;
}
});
binding.editSelectorFriends.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable editable) {
if (TextUtils.isEmpty(editable.toString())) {
binding.icCleanEdit.setVisibility(View.GONE);
binding.layoutSearchlist.setVisibility(View.GONE);
binding.layoutTeammemberlist.setVisibility(View.VISIBLE);
listSearch.clear();
searchAdapter.notifyDataSetChanged();
} else {
binding.icCleanEdit.setVisibility(View.VISIBLE);
}
}
});
binding.icCleanEdit.setOnClickListener(view -> binding.editSelectorFriends.setText(""));
initRecyclerView();
}
public List<UserInfo> searchName(String key) {
List<UserInfo> listSearch = new ArrayList<>();
List<UserInfo> result = new ArrayList<>();
result.addAll(listMembers);
for (UserInfo userInfo : result) {
String name = getAlias(userInfo);
if (name.contains(key)) {
listSearch.add(userInfo);
}
}
return listSearch;
}
public String getAlias(UserInfo userInfo) {
String name = userInfo.getName();
if (ContactRepo.isFriend(userInfo.getAccount())) {
String alias = ContactRepo.getFriend(userInfo.getAccount()).getAlias();
return TextUtils.isEmpty(alias) ? name : alias;
}
return name;
}
public void addManager(List<String> accountList) {
NIMClient.getService(TeamService.class).addManagers(teamId, accountList).setCallback(new RequestCallback<List<TeamMember>>() {
@Override
public void onSuccess(List<TeamMember> members) {
// 撤销群管理员成功
ToastX.showShortToast(getString(R.string.str_teammanager_add_succ_toast));
Intent intent = new Intent();
intent.putExtra("managerlist", (Serializable) selectorPosition);
setResult(RESULT_OK, intent);
finish();
}
@Override
public void onFailed(int code) {
// 撤销群管理员失败
ToastX.showShortToast(getString(R.string.str_teammanager_delete_error));
}
@Override
public void onException(Throwable exception) {
// 错误
ToastX.showShortToast(getString(R.string.str_teammanager_delete_error));
}
});
}
public void initRecyclerView() {
LinearLayoutManager layoutManager =
new LinearLayoutManager(this, RecyclerView.HORIZONTAL, false);
rvSelected.setLayoutManager(layoutManager);
selectedAdapter = new CommonAdapter<>(this, com.netease.yunxin.kit.contactkit.ui.R.layout.fun_friend_selected_view_holder, selectorPosition) {
@Override
public void convert(ViewHolder holder, UserInfo user, int index) {
ContactAvatarView contactAvatarView = holder.getView(com.netease.yunxin.kit.contactkit.ui.R.id.avatar_view);
TextView tvName = holder.getView(com.netease.yunxin.kit.contactkit.ui.R.id.tv_name);
String name = user.getName();
if (ContactRepo.isFriend(user.getAccount())) {
String alias = ContactRepo.getFriend(user.getAccount()).getAlias();
if (!TextUtils.isEmpty(alias)) {
name = alias;
}
}
tvName.setText(name);
if (TextUtils.isEmpty(user.getAvatar())) {
contactAvatarView.setData(R.mipmap.default_head_img, user.getName(), 0);
} else {
contactAvatarView.setData(user.getAvatar(), user.getName());
}
holder.getView(com.netease.yunxin.kit.contactkit.ui.R.id.root_view).setOnClickListener(v -> {
selectorPosition.remove(selectorPosition.indexOf(user));
notifyDataSetChanged();
allMemberAdapter.notifyDataSetChanged();
searchAdapter.notifyDataSetChanged();
updateTitleView();
});
}
};
rvSelected.setAdapter(selectedAdapter);
allTeamContactView.setLayoutManager(new LinearLayoutManager(this));
allMemberAdapter = new CommonAdapter<>(this, R.layout.item_team_members_selector, listMembers) {
@Override
public void convert(ViewHolder holder, UserInfo user, int index) {
ContactAvatarView contactAvatarView = holder.getView(R.id.avatar_view);
TextView tvName = holder.getView(R.id.tv_name);
AppCompatRadioButton radioButton = holder.getView(R.id.rb_selector);
String name = user.getName();
if (ContactRepo.isFriend(user.getAccount())) {
String alias = ContactRepo.getFriend(user.getAccount()).getAlias();
if (!TextUtils.isEmpty(alias)) {
name = alias;
}
}
tvName.setText(name);
if (TextUtils.isEmpty(user.getAvatar())) {
contactAvatarView.setData(R.mipmap.default_head_img, user.getName(), 0);
} else {
contactAvatarView.setData(user.getAvatar(), user.getName());
}
contactAvatarView.setOnClickListener(v -> {
startUserInfoActivity(user);
});
radioButton.setChecked(isSelector(user));
holder.getView(R.id.root_view).setOnClickListener(v -> {
if (!radioButton.isChecked() && selectorPosition.size() == hasAdd) {
ToastX.showShortToast(getResources().getString(R.string.str_teammanager_add_faile_toast));
return;
}
radioButton.setChecked(!radioButton.isChecked());
if (radioButton.isChecked()) {
selectorPosition.add(user);
} else {
selectorPosition.remove(selectorPosition.indexOf(user));
}
selectedAdapter.notifyDataSetChanged();
updateTitleView();
});
}
};
allTeamContactView.setAdapter(allMemberAdapter);
searchContactView.setLayoutManager(new LinearLayoutManager(this));
searchAdapter = new CommonAdapter<>(this, R.layout.item_team_members_selector, listSearch) {
@Override
public void convert(ViewHolder holder, UserInfo user, int index) {
ContactAvatarView contactAvatarView = holder.getView(R.id.avatar_view);
TextView tvName = holder.getView(R.id.tv_name);
AppCompatRadioButton radioButton = holder.getView(R.id.rb_selector);
String name = user.getName();
if (ContactRepo.isFriend(user.getAccount())) {
String alias = ContactRepo.getFriend(user.getAccount()).getAlias();
if (!TextUtils.isEmpty(alias)) {
name = alias;
}
}
tvName.setText(name);
if (TextUtils.isEmpty(user.getAvatar())) {
contactAvatarView.setData(R.mipmap.default_head_img, user.getName(), 0);
} else {
contactAvatarView.setData(user.getAvatar(), user.getName());
}
contactAvatarView.setOnClickListener(v -> {
startUserInfoActivity(user);
});
radioButton.setChecked(isSelector(user));
holder.getView(R.id.root_view).setOnClickListener(v -> {
if (!radioButton.isChecked() && selectorPosition.size() == hasAdd) {
ToastX.showShortToast(getResources().getString(R.string.str_teammanager_add_faile_toast));
return;
}
radioButton.setChecked(!radioButton.isChecked());
if (radioButton.isChecked()) {
selectorPosition.add(user);
} else {
selectorPosition.remove(selectorPosition.indexOf(user));
}
searchAdapter.notifyDataSetChanged();
selectedAdapter.notifyDataSetChanged();
allMemberAdapter.notifyDataSetChanged();
updateTitleView();
});
}
};
searchContactView.setAdapter(searchAdapter);
}
private void startUserInfoActivity(UserInfo user) {
XKitRouter.withKey(RouterConstant.PATH_USER_INFO_PAGE)
.withContext(TeamAddManagerActivity.this)
.withParam(RouterConstant.KEY_ACCOUNT_ID_KEY, IMKitClient.account())
.withParam("userId", user.getAccount())
.withParam("isGroup", true)
.navigate();
}
protected void updateTitleView() {
binding.title.setActionText(String.format(getString(R.string.str_teammanager_title_right), selectorPosition.size()));
}
protected boolean isSelector(UserInfo index) {
for (UserInfo userInfo : selectorPosition) {
if (index == userInfo) {
return true;
}
}
return false;
}
}

View File

@@ -0,0 +1,291 @@
// Copyright (c) 2022 NetEase, Inc. All rights reserved.
// Use of this source code is governed by a MIT license that can be
// found in the LICENSE file.
package com.dskj.rbchat.imkit.team;
import static com.netease.yunxin.kit.corekit.im.utils.RouterConstant.KEY_TEAM_ID;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.dskj.rbchat.R;
import com.dskj.rbchat.adapter.CommonAdapter;
import com.dskj.rbchat.adapter.ViewHolder;
import com.dskj.rbchat.base.LllChatBaseActivity;
import com.dskj.rbchat.databinding.ActivityTeamManagerBinding;
import com.dskj.rbchat.databinding.ActivityTeamMembersBinding;
import com.dskj.rbchat.dialog.ActionConfirmDialog;
import com.dskj.rbchat.imkit.team.adapter.TeamMembersAdapter;
import com.dskj.rbchat.network.Api;
import com.dskj.rbchat.network.BaseObserver;
import com.dskj.rbchat.network.Result;
import com.dskj.rbchat.utils.LogUtils;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.team.TeamService;
import com.netease.nimlib.sdk.team.constant.TeamMemberType;
import com.netease.nimlib.sdk.team.model.TeamMember;
import com.netease.yunxin.kit.chatkit.model.UserInfoWithTeam;
import com.netease.yunxin.kit.chatkit.repo.ContactRepo;
import com.netease.yunxin.kit.common.ui.activities.BaseActivity;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.common.ui.widgets.ContactAvatarView;
import com.netease.yunxin.kit.common.utils.NetworkUtils;
import com.netease.yunxin.kit.contactkit.ui.model.ContactFriendBean;
import com.netease.yunxin.kit.corekit.im.IMKitClient;
import com.netease.yunxin.kit.corekit.im.model.UserInfo;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.corekit.route.XKitRouter;
import com.netease.yunxin.kit.teamkit.ui.utils.viewmodel.TeamSettingViewModel;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* 群管理员 (获取群成员,找出管理员)
*/
public class TeamManagerActivity extends LllChatBaseActivity {
public final TeamSettingViewModel teammodel = new TeamSettingViewModel();
private String teamId;
private String avaterurl;
// public static void launch(Context context, String teamId, @NonNull ActivityResultLauncher<Intent> launcher) {
// Intent intent = new Intent(context, TeamManagerActivity.class);
// intent.putExtra(KEY_TEAM_ID, teamId);
// launcher.launch(intent);
// }
ActivityTeamManagerBinding binding;
private List<UserInfo> listManager = new ArrayList<>();
private List<UserInfo> listTeamMembers = new ArrayList<>();
private CommonAdapter managerAdapter;
private ActivityResultLauncher launcher;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityTeamManagerBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
teamId = getIntent().getStringExtra(KEY_TEAM_ID);
launcher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
List<UserInfo> managers = (List<UserInfo>) result.getData().getSerializableExtra("managerlist"); //选了管理员,更新普通用户列表 更新当前管理员列表
listManager.addAll(managers);
updateManagerTextView();
binding.title.getRightTextView().setText(String.format(getString(R.string.str_teammanager_title_right), listManager.size()));
new Thread(new Runnable() {
@Override
public void run() {
for (UserInfo userInfoWithTeam : listManager) {
for (int i = 0; i < listTeamMembers.size(); i++) {
if (userInfoWithTeam.getAccount().equals(listTeamMembers.get(i).getAccount())) {
listTeamMembers.remove(i);
}
}
}
}
}).start();
}
});
if (NetworkUtils.isConnected()) {
showLoading();
//重新获取群成员
teammodel.getUserInfoData().observe(this, listResultInfo -> {
if (listResultInfo.getSuccess()) {
listManager.clear();
listTeamMembers.clear();
List<UserInfoWithTeam> listmember = listResultInfo.getValue();
setDataView(listmember);
dismissLoading();
}
});
teammodel.requestTeamMembers(teamId);
}
UserInfo userInfo = IMKitClient.getUserInfo();
avaterurl = userInfo.getAvatar();
if (TextUtils.isEmpty(avaterurl)) {
binding.avatarView.setData(R.mipmap.default_head_img, userInfo.getName(), 0);
} else {
binding.avatarView.setData(avaterurl, userInfo.getName());
}
binding.avatarView.setOnClickListener(v -> {
startUserInfoActivity(userInfo.getAccount());
});
binding.tvName.setText(userInfo.getName() + "");
binding.title.setOnBackIconClickListener(view -> finish());
binding.title.getTitleTextView().setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20);
binding.title.setActionTextColor(getResources().getColor(com.netease.yunxin.kit.contactkit.ui.R.color.color_6877fe));
binding.title.setActionListener(v -> {
if (listManager.size() < 5) {
//添加管理員
TeamAddManagerActivity.launch(this, teamId, listTeamMembers, 5 - listManager.size(), launcher);
} else {
ToastX.showShortToast(R.string.str_teammanager_add_faile_toast);
}
});
binding.recyclerviewManager.setLayoutManager(new LinearLayoutManager(this));
managerAdapter = new CommonAdapter<>(this, R.layout.item_team_manager, listManager) {
@Override
public void convert(ViewHolder holder, UserInfo user, int index) {
ContactAvatarView contactAvatarView = holder.getView(R.id.item_avatar);
TextView tvName = holder.getView(R.id.item_username);
View line = holder.getView(R.id.item_line);
String name = user.getName();
if (ContactRepo.isFriend(user.getAccount())) {
String alias = ContactRepo.getFriend(user.getAccount()).getAlias();
if (!TextUtils.isEmpty(alias)) {
name = alias;
}
}
tvName.setText(name);
if (TextUtils.isEmpty(user.getAvatar())) {
contactAvatarView.setData(R.mipmap.default_head_img, user.getName(), 0);
} else {
contactAvatarView.setData(user.getAvatar(), user.getName());
}
contactAvatarView.setOnClickListener(v -> {
startUserInfoActivity(user.getAccount());
});
line.setVisibility(View.VISIBLE);
if (index == listManager.size() - 1) {
line.setVisibility(View.GONE);
}
holder.getView(R.id.iv_delete).setOnClickListener(v -> {
showDeleteDialog(index, user.getName(), user.getAccount());
});
}
};
binding.recyclerviewManager.setAdapter(managerAdapter);
}
public void showDeleteDialog(int position, String name, String account) {
ActionConfirmDialog actionConfirmDialog = new ActionConfirmDialog(this, String.format(getString(R.string.str_teammanager_dialog_title), name),
getString(R.string.str_teammanager_dialog_cancel),
getString(com.netease.yunxin.kit.chatkit.ui.R.string.chat_dialog_sure));
actionConfirmDialog.setOnToActionListener(new ActionConfirmDialog.OnToActionListener() {
@Override
public void toSumbit() {
List<String> listaccount = new ArrayList<>();
listaccount.add(account);
removeManager(position, listaccount);
}
@Override
public void toCancel() {
}
});
actionConfirmDialog.show();
}
public void removeManager(int position, List<String> accountList) {
NIMClient.getService(TeamService.class).removeManagers(teamId, accountList).setCallback(new RequestCallback<List<TeamMember>>() {
@Override
public void onSuccess(List<TeamMember> members) {
// 撤销群管理员成功
ToastX.showShortToast(getString(R.string.str_teammanager_delete_succ));
listTeamMembers.add(0, listManager.get(position));
listManager.remove(position);
updateManagerTextView();
}
@Override
public void onFailed(int code) {
// 撤销群管理员失败
ToastX.showShortToast(getString(R.string.str_teammanager_delete_error));
}
@Override
public void onException(Throwable exception) {
// 错误
ToastX.showShortToast(getString(R.string.str_teammanager_delete_error));
}
});
}
//设置展示View
public void setDataView(List<UserInfoWithTeam> listmember) {
for (UserInfoWithTeam userInfoWithTeam :
listmember) {
TeamMemberType type = userInfoWithTeam.getTeamInfo().getType();
if (type == TeamMemberType.Manager) {
listManager.add(userInfoWithTeam.getUserInfo());
} else if (type == TeamMemberType.Normal) {
listTeamMembers.add(userInfoWithTeam.getUserInfo());
}
}
updateManagerTextView();
}
public void updateManagerTextView() {
if (listManager.size() > 0) {
binding.layoutManagerempty.setVisibility(View.GONE);
binding.recyclerviewManager.setVisibility(View.VISIBLE);
binding.tvTitlemanager.setText(getString(R.string.teamsetting_other_teammanager) + " (" + listManager.size() + "/5" + ")");
} else {
binding.tvTitlemanager.setText(getString(R.string.teamsetting_other_teammanager));
binding.layoutManagerempty.setVisibility(View.VISIBLE);
binding.recyclerviewManager.setVisibility(View.GONE);
}
binding.title.getRightTextView().setText(String.format(getString(R.string.str_teammanager_title_right), listManager.size()));
managerAdapter.setDates(listManager);
}
@Override
public int initNavigationBarColor() {
return getColor(R.color.color_fffafa);
}
@Override
public int initStatusBarColor() {
return getColor(R.color.color_titlebar);
}
public void startUserInfoActivity(String userid) {
XKitRouter.withKey(RouterConstant.PATH_USER_INFO_PAGE)
.withContext(TeamManagerActivity.this)
.withParam(RouterConstant.KEY_ACCOUNT_ID_KEY, IMKitClient.account())
.withParam("userId", userid)
.withParam("isGroup", true)
.navigate();
}
}

View File

@@ -4,10 +4,7 @@
package com.dskj.rbchat.imkit.team;
import static com.dskj.rbchat.utils.GsonUtils.gson;
import static com.netease.yunxin.kit.corekit.im.utils.RouterConstant.KEY_TEAM_ID;
import static com.netease.yunxin.kit.corekit.im.utils.RouterConstant.KEY_TEAM_NAME;
import static com.netease.yunxin.kit.teamkit.ui.utils.NetworkUtilsWrapper.handleNetworkBrokenResult;
import android.content.Context;
import android.content.Intent;
@@ -24,68 +21,32 @@ import android.view.inputmethod.EditorInfo;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.dskj.rbchat.R;
import com.dskj.rbchat.base.LllChatBaseActivity;
import com.dskj.rbchat.databinding.ActivityTeamMembersBinding;
import com.dskj.rbchat.dialog.ActionConfirmDialog;
import com.dskj.rbchat.imkit.team.adapter.TeamMembersAdapter;
import com.dskj.rbchat.model.AdBean;
import com.dskj.rbchat.model.UsersExistBean;
import com.dskj.rbchat.network.Api;
import com.dskj.rbchat.network.BaseObserver;
import com.dskj.rbchat.network.Result;
import com.dskj.rbchat.utils.GsonUtils;
import com.dskj.rbchat.utils.LogUtils;
import com.dskj.rbchat.utils.ShareDateUtils;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.team.constant.TeamMemberType;
import com.netease.nimlib.sdk.team.constant.TeamMessageNotifyTypeEnum;
import com.netease.nimlib.sdk.team.model.Team;
import com.netease.nimlib.sdk.team.model.TeamMember;
import com.netease.yunxin.kit.alog.ALog;
import com.netease.yunxin.kit.chatkit.model.ConversationInfo;
import com.netease.yunxin.kit.chatkit.model.TeamWithCurrentMember;
import com.netease.yunxin.kit.chatkit.model.UserInfoWithTeam;
import com.netease.yunxin.kit.chatkit.repo.ContactRepo;
import com.netease.yunxin.kit.chatkit.ui.page.LocationPageActivity;
import com.netease.yunxin.kit.chatkit.ui.page.viewmodel.ChatBaseViewModel;
import com.netease.yunxin.kit.chatkit.ui.page.viewmodel.ChatTeamViewModel;
import com.netease.yunxin.kit.chatkit.ui.model.TeamExtensionBean;
import com.netease.yunxin.kit.common.ui.utils.ToastX;
import com.netease.yunxin.kit.common.ui.viewmodel.LoadStatus;
import com.netease.yunxin.kit.common.utils.NetworkUtils;
import com.netease.yunxin.kit.contactkit.ui.contact.ContactViewModel;
import com.netease.yunxin.kit.contactkit.ui.fun.selector.FunContactMembersAdapter;
import com.netease.yunxin.kit.contactkit.ui.fun.selector.FunContactSelectorDialog;
import com.netease.yunxin.kit.contactkit.ui.model.ContactFriendBean;
import com.netease.yunxin.kit.contactkit.ui.search.SearchViewModel;
import com.netease.yunxin.kit.conversationkit.ui.model.ConversationBean;
import com.netease.yunxin.kit.conversationkit.ui.page.viewmodel.ConversationViewModel;
import com.netease.yunxin.kit.corekit.im.IMKitClient;
import com.netease.yunxin.kit.corekit.im.model.FriendInfo;
import com.netease.yunxin.kit.corekit.im.model.UserInfo;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.corekit.model.ResultInfo;
import com.netease.yunxin.kit.corekit.route.XKitRouter;
import com.netease.yunxin.kit.teamkit.ui.normal.adapter.TeamMemberListAdapter;
import com.netease.yunxin.kit.teamkit.ui.utils.viewmodel.TeamSettingViewModel;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -100,6 +61,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
public static final String ISMANAGER = "isManager";
public static final String LISTUSERINFOS = "listUserInfos";
public static final String TEAMINFO = "teamInfo";
public static final String TYPE = "type";
public static final String QUITE = "quite";
public static final String TEAMQR = "teamQr";
@@ -108,14 +70,16 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
public boolean isRefresh = false; //是否刷新设置页
public boolean teamQr = true;
public List<UserInfo> listSearch = new ArrayList<>();
public int isAllowAdd = 1;
public static void launch(Context context, boolean isManager, boolean isShowTeamQR, String teamId, List<UserInfo> userInfos, @NonNull ActivityResultLauncher<Intent> launcher) {
public static void launch(Context context, int isManager, boolean isShowTeamQR, String teamId, List<UserInfo> userInfos, Team team, @NonNull ActivityResultLauncher<Intent> launcher) {
Intent intent = new Intent(context, TeamMembersListActivity.class);
intent.putExtra(ISMANAGER, isManager);
intent.putExtra(TYPE, 0);
intent.putExtra(TEAMQR, isShowTeamQR);
intent.putExtra(KEY_TEAM_ID, teamId);
intent.putExtra(LISTUSERINFOS, (Serializable) userInfos);
intent.putExtra(TEAMINFO, (Serializable) team);
launcher.launch(intent);
}
@@ -130,21 +94,37 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
ActivityTeamMembersBinding binding;
private boolean isManager;
private int isManager = 0; // 1 群主 2 管理员
private Team teamInfo;
private String teamOwnerId; //群主id;
private TeamMembersAdapter membersAdapter;
private TeamExtensionBean extensionBean;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setNavigationBarColor(getResources().getColor(com.netease.yunxin.kit.chatkit.ui.R.color.color_white));
isManager = getIntent().getBooleanExtra(ISMANAGER, false);
isManager = getIntent().getIntExtra(ISMANAGER, 0);
teamInfo = (Team) getIntent().getSerializableExtra(TEAMINFO);
type = getIntent().getIntExtra(TYPE, 0);
quite = getIntent().getIntExtra(QUITE, 0);
List<UserInfo> list = (List<UserInfo>) getIntent().getSerializableExtra(LISTUSERINFOS);
teamQr = getIntent().getBooleanExtra(TEAMQR, true);
if (teamInfo != null) {
teamOwnerId = teamInfo.getCreator();
if (!TextUtils.isEmpty(teamInfo.getExtension())) {
extensionBean = GsonUtils.getObjFromJSON(teamInfo.getExtension(), TeamExtensionBean.class);
if (extensionBean == null) {
extensionBean = new TeamExtensionBean(Integer.parseInt(teamInfo.getExtension()), 1);
}
} else {
extensionBean = new TeamExtensionBean(1, 1);
}
isAllowAdd = extensionBean.getAllowAddFriends();
}
if (list != null && list.size() > 0) {
listmemebers.clear();
listmemebers.addAll(list);
@@ -173,6 +153,22 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
}
initView();
initData();
// teammodel.getTeamWithMemberData().observe(this, teamResultInfo -> {
// if (teamResultInfo.getValue() == null || !teamResultInfo.getSuccess()) {
// return;
// }
// Team teaminfo = teamResultInfo.getValue().getTeam();
// String extension = teaminfo.getExtension();
// if (!TextUtils.isEmpty(extension)) {
// TeamExtensionBean extensionBean = GsonUtils.getObjFromJSON(extension, TeamExtensionBean.class);
// if (extensionBean != null) {
// isAllowAdd = extensionBean.getAllowAddFriends();
// }
//
// }
// });
// teammodel.requestTeamData(teamId);
}
@@ -186,7 +182,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
Map<String, Long> memberMap;
public void getTeamActiveTime() {
if (isManager && type == 0) {
if (isManager != 0 && type == 0) {
Api.getInstance().teamMemberActiveTime(teamId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
@@ -198,7 +194,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
listmemebers.remove(0);
listmemebers = sortListByActivieTime(listmemebers);
listmemebers.add(0, IMKitClient.getUserInfo());
membersAdapter.setData(listmemebers, true, memberMap);
membersAdapter.setData(listmemebers, true, memberMap, teamId);
}
@@ -240,7 +236,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
public void setData() {
if (type == 0) {
listmemebers.add(0, IMKitClient.getUserInfo());
membersAdapter.setData(listmemebers, true, memberMap);
membersAdapter.setData(listmemebers, true, memberMap, teamId);
binding.tvteammembers.setText(getString(com.netease.yunxin.kit.contactkit.ui.R.string.fun_creategroup_members, listmemebers.size() - 1));
} else { //不能编辑 转让
// UserInfo info = IMKitClient.getUserInfo();
@@ -256,7 +252,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
binding.tvteammembers.setText(getString(com.netease.yunxin.kit.contactkit.ui.R.string.fun_creategroup_members, listmemebers.size()));
membersAdapter.setEdit(false);
membersAdapter.setData(listmemebers, false, memberMap);
membersAdapter.setData(listmemebers, false, memberMap, teamId);
}
binding.rvMembers.setAdapter(membersAdapter);
}
@@ -273,7 +269,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
@Override
public void onItemClick(UserInfo item, int position) {
//查看成员详情 普通用户点击头像
startUserInfoActivity(item.getAccount());
startUserInfoActivity(item.getAccount(), teamId);
// deletePosition = position;
// if (!item.getAccount().equals(IMKitClient.account()) && membersAdapter.isEdit()) {
// if (type == 0) {
@@ -339,11 +335,18 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
binding.icCleanEdit.setOnClickListener(view -> binding.editSelectorFriends.setText(""));
}
public void startUserInfoActivity(String userid) {
public void startUserInfoActivity(String userid, String teamId) {
//如果群不允许群内添加好友 当前登录用户不是群主以及userid 也不是群主 直接跳过
if (isAllowAdd == 0 && isManager != 1 && !userid.equals(teamOwnerId)) {
return;
}
XKitRouter.withKey(RouterConstant.PATH_USER_INFO_PAGE)
.withContext(TeamMembersListActivity.this)
.withParam(RouterConstant.KEY_ACCOUNT_ID_KEY, IMKitClient.account())
.withParam("userId", userid)
.withParam("teamId", teamId)
.withParam("isGroup", true)
.navigate();
}
@@ -419,7 +422,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
selectorlist.add(userinfo.getUserInfo().getAccount());
listmemebers.add(userinfo.getUserInfo());
}
membersAdapter.setData(listmemebers, true, memberMap);
membersAdapter.setData(listmemebers, true, memberMap, teamId);
isRefresh = true;
binding.tvteammembers.setText(getString(com.netease.yunxin.kit.contactkit.ui.R.string.fun_creategroup_members, listmemebers.size() - 1));
}
@@ -448,7 +451,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
private void initTitleView() {
if (type == 0) { //右上角编辑,删除
binding.title.setTitle(R.string.teamsetting_members);
if (isManager) {
if (isManager != 0) {
setTitleAction(R.string.teammember_edit, new View.OnClickListener() {
@Override
public void onClick(View view) {
@@ -538,7 +541,7 @@ public class TeamMembersListActivity extends BaseTeamQrSettingActivity {
binding.title.setActionText(actionText);
membersAdapter.setEdit(!isEdit);
membersAdapter.getSelectedInt().clear();
membersAdapter.setData(listmember, isEdit, memberMap);
membersAdapter.setData(listmember, isEdit, memberMap, teamId);
}
public void showConfirmDialog(boolean isDelete, String title, List<String> account) {

View File

@@ -26,6 +26,7 @@ import com.dskj.rbchat.R;
import com.dskj.rbchat.dialog.ActionConfirmDialog;
import com.dskj.rbchat.imkit.base.BaseSettingOtherActivity;
import com.dskj.rbchat.model.TeamUpdateEvent;
import com.dskj.rbchat.utils.GsonUtils;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.msg.MsgService;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
@@ -33,8 +34,10 @@ import com.netease.nimlib.sdk.team.constant.TeamBeInviteModeEnum;
import com.netease.nimlib.sdk.team.constant.TeamFieldEnum;
import com.netease.nimlib.sdk.team.model.Team;
import com.netease.yunxin.kit.chatkit.model.UserInfoWithTeam;
import com.netease.yunxin.kit.chatkit.ui.model.TeamExtensionBean;
import com.netease.yunxin.kit.corekit.event.EventCenter;
import com.netease.yunxin.kit.corekit.im.model.UserInfo;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.teamkit.ui.utils.viewmodel.TeamSettingViewModel;
import java.io.Serializable;
@@ -57,6 +60,7 @@ public class TeamOtherSettingActivity extends BaseSettingOtherActivity {
private ActivityResultLauncher launcher;
public List<UserInfo> listmemebers = new ArrayList<>();
private boolean updateIcon = false;
private TeamExtensionBean extensionBean;
public static void launch(Context context, Team teaminfo, @NonNull ActivityResultLauncher<Intent> launcher) {
Intent intent = new Intent(context, TeamOtherSettingActivity.class);
@@ -165,16 +169,24 @@ public class TeamOtherSettingActivity extends BaseSettingOtherActivity {
team, launcher
);
});
String extension = team.getExtension();
String extension = team.getExtension(); //扩展字段
if (!TextUtils.isEmpty(extension)) {
binding.swichTeamqr.setChecked(team.getExtension().equals("1"));
extensionBean = GsonUtils.getObjFromJSON(extension, TeamExtensionBean.class);
if (extensionBean == null) {
extensionBean = new TeamExtensionBean(Integer.parseInt(extension), 1);
}
binding.swichTeamqr.setChecked(extensionBean.getShowQrCode() == 1);
} else {
extensionBean = new TeamExtensionBean(1, 1);
}
int value = team.getVerifyType().getValue();
binding.swichAddtype.setChecked(team.getTeamBeInviteMode().getValue() == 1);
binding.tvTeamallowaddfriends.setText(extensionBean.getAllowAddFriends() == 1 ? getString(R.string.teamsetting_other_teamallow) : getString(R.string.teamsetting_other_teamallow_not));
Map<TeamFieldEnum, Serializable> map = new HashMap<>();
binding.swichTeamqr.setOnClickListener(view -> {
//onclick check 变更
map.put(TeamFieldEnum.Extension, binding.swichTeamqr.isChecked() ? "1" : "0");
// map.put(TeamFieldEnum.Extension, binding.swichTeamqr.isChecked() ? "1" : "0");
extensionBean.setShowQrCode(binding.swichTeamqr.isChecked() ? 1 : 0);
map.put(TeamFieldEnum.Extension, GsonUtils.beanToJSONString(extensionBean));
teammodel.UpdateTeamFilesExtension(team.getId(), map);
});
@@ -182,6 +194,11 @@ public class TeamOtherSettingActivity extends BaseSettingOtherActivity {
map.put(TeamFieldEnum.BeInviteMode, binding.swichAddtype.isChecked() ? TeamBeInviteModeEnum.NoAuth : TeamBeInviteModeEnum.NeedAuth);
teammodel.UpdateTeamFilesExtension(team.getId(), map);
});
binding.flteammanager.setOnClickListener(v -> {
Intent intent = new Intent(this, TeamManagerActivity.class);
intent.putExtra(RouterConstant.KEY_TEAM_ID, team.getId());
startActivity(intent);
});
}

View File

@@ -44,16 +44,13 @@ import com.netease.nimlib.sdk.team.model.TeamMember;
import com.netease.yunxin.kit.chatkit.model.IMMessageInfo;
import com.netease.yunxin.kit.chatkit.model.UserInfoWithTeam;
import com.netease.yunxin.kit.chatkit.ui.ChatKitUIConstant;
import com.netease.yunxin.kit.chatkit.ui.common.ChatUtils;
import com.netease.yunxin.kit.chatkit.ui.model.CleanHistoryEvent;
import com.netease.yunxin.kit.chatkit.ui.model.TeamExtensionBean;
import com.netease.yunxin.kit.corekit.event.EventCenter;
import com.netease.yunxin.kit.corekit.im.model.UserInfo;
import com.netease.yunxin.kit.corekit.im.utils.RouterConstant;
import com.netease.yunxin.kit.corekit.route.XKitRouter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
@@ -126,7 +123,14 @@ public class TeamSettingActivity extends BaseTeamQrSettingActivity {
}
);
binding.tvmember.setOnClickListener(view -> {
TeamMembersListActivity.launch(this, teamMember.getType() == TeamMemberType.Owner, isTeamShow, teamId, listmemebers, launcher);
int manager = 0;
if (teamMember.getType() == TeamMemberType.Owner) {
manager = 1;
}
if (teamMember.getType() == TeamMemberType.Manager) {
manager = 2;
}
TeamMembersListActivity.launch(this, manager, isTeamShow, teamId, listmemebers, teamInfo, launcher);
});
binding.tvinvited.setOnClickListener(view -> showAddFriendsDialog(isTeamShow));
binding.tvexit.setOnClickListener(view -> setQuitTeam());
@@ -292,7 +296,6 @@ public class TeamSettingActivity extends BaseTeamQrSettingActivity {
});
teammodel.getQuitTeamData().observe(this, voidResultInfo -> {
if (voidResultInfo.getSuccess()) {
finish();
@@ -331,8 +334,7 @@ public class TeamSettingActivity extends BaseTeamQrSettingActivity {
}
TeamExtensionBean extensionBean;
protected void refreshUI(Team team) {
teamName = team.getName();
@@ -340,11 +342,21 @@ public class TeamSettingActivity extends BaseTeamQrSettingActivity {
binding.tvTitle.setText(String.format("%s(%d)", teamName, teamNumber));
setNotifyUI(teamInfo.getMessageNotifyType() == TeamMessageNotifyTypeEnum.All);
setSettingUI(teamMember.getType() == TeamMemberType.Owner);
if (!TextUtils.isEmpty(teamInfo.getExtension()) && teamInfo.getExtension().equals("0")) {
isTeamShow = false;
//为了兼容老版本
if (!TextUtils.isEmpty(teamInfo.getExtension())) {
extensionBean = GsonUtils.getObjFromJSON(teamInfo.getExtension(), TeamExtensionBean.class);
if (extensionBean == null) {
extensionBean = new TeamExtensionBean(Integer.parseInt(teamInfo.getExtension()), 1);
}
} else {
isTeamShow = true;
extensionBean = new TeamExtensionBean(1, 1);
}
isTeamShow = (extensionBean.getShowQrCode() == 1);
// if (!TextUtils.isEmpty(teamInfo.getExtension()) && teamInfo.getExtension().equals("0")) {
// isTeamShow = false;
// } else {
// isTeamShow = true;
// }
}
// public void setExtension() {

View File

@@ -19,6 +19,10 @@ import androidx.viewbinding.ViewBinding;
import com.dskj.rbchat.R;
import com.dskj.rbchat.databinding.TeamMembersViewHolderBinding;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.team.TeamService;
import com.netease.nimlib.sdk.team.constant.TeamMemberType;
import com.netease.nimlib.sdk.team.model.TeamMember;
import com.netease.yunxin.kit.chatkit.repo.ContactRepo;
import com.netease.yunxin.kit.chatkit.ui.normal.factory.ChatVieHolderFactory;
import com.netease.yunxin.kit.common.ui.utils.AvatarColor;
@@ -47,6 +51,7 @@ public class TeamMembersAdapter extends RecyclerView.Adapter<TeamMembersAdapter.
private int selectpostion = -1;
private Map<String, Long> mapTime;
private List<Integer> selectedInt = new ArrayList<>(); //多选position
private String teamId;
public TeamMembersAdapter(Context context, int type) {
members = new ArrayList<>();
@@ -60,12 +65,13 @@ public class TeamMembersAdapter extends RecyclerView.Adapter<TeamMembersAdapter.
this.itemClickListener = itemClickListener;
}
public void setData(List<UserInfo> list, boolean isShow, Map<String, Long> mapActiveTime) {
public void setData(List<UserInfo> list, boolean isShow, Map<String, Long> mapActiveTime, String teamId) {
members.clear();
members.addAll(list);
selectedInt.clear();
isShowInvited = isShow;
mapTime = mapActiveTime;
this.teamId = teamId;
notifyDataSetChanged();
}
@@ -125,14 +131,19 @@ public class TeamMembersAdapter extends RecyclerView.Adapter<TeamMembersAdapter.
holder.binding.tvName.setText(mContext.getResources().getString(R.string.invcode_friend_txt));
holder.binding.tvNameActivetime.setVisibility(View.GONE);
} else {
if (isEdit) {
TeamMember teamMember = NIMClient.getService(TeamService.class).queryTeamMemberBlock(teamId, userInfo.getAccount());
if (teamMember != null && (teamMember.getType() == TeamMemberType.Manager || teamMember.getType() == TeamMemberType.Owner)) {
holder.binding.icDelete.setVisibility(View.GONE);
} else {
holder.binding.icDelete.setVisibility(View.VISIBLE);
}
if (selectedInt.indexOf(position) >= 0) {
holder.binding.icDelete.setBackgroundResource(R.mipmap.dialog_gou_t);
} else {
holder.binding.icDelete.setBackgroundResource(R.mipmap.dialog_gou_ff);
}
holder.binding.icDelete.setVisibility(userInfo.getAccount().equals(IMKitClient.account()) ? View.GONE : View.VISIBLE);
// holder.binding.icDelete.setVisibility(userInfo.getAccount().equals(IMKitClient.account()) ? View.GONE : View.VISIBLE);
} else if (mType == 1) {
if (selectpostion >= 0 && position == selectpostion) {
@@ -182,7 +193,7 @@ public class TeamMembersAdapter extends RecyclerView.Adapter<TeamMembersAdapter.
}
notifyDataSetChanged();
} else {
if (isEdit) {
if (isEdit && holder.binding.icDelete.getVisibility() == View.VISIBLE) {
//管理员删除用户选择
int index = selectedInt.indexOf(position);
if (index >= 0) {