移除成员列表优化

This commit is contained in:
huangjian
2020-11-24 14:37:18 +08:00
parent 50199e5a1c
commit cfeb2525e9
12 changed files with 168 additions and 780 deletions

View File

@@ -1022,9 +1022,6 @@
android:name=".module_hall.team.activity.TeamEditActivity"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".module_hall.hall.activity.GroupMemberListActivity"
android:screenOrientation="portrait" />
<activity
android:name=".module_hall.hall.activity.RemoveMemberListActivity"
android:screenOrientation="portrait" />

View File

@@ -61,7 +61,7 @@ public class AdminAddActivity extends BaseMvpActivity<IAdminAddView, AdminAddPre
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group_member);
setContentView(R.layout.activity_admin_add);
ButterKnife.bind(this);

View File

@@ -1,385 +0,0 @@
package com.yizhuan.erban.module_hall.hall.activity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.View;
import android.widget.TextView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.orhanobut.logger.Logger;
import com.yizhuan.erban.R;
import com.yizhuan.erban.UIHelper;
import com.yizhuan.erban.base.BaseMvpActivity;
import com.yizhuan.erban.base.TitleBar;
import com.yizhuan.erban.common.widget.dialog.DialogManager;
import com.yizhuan.erban.module_hall.HallDataManager;
import com.yizhuan.erban.module_hall.hall.adapter.GroupMemberListAdapter;
import com.yizhuan.erban.module_hall.hall.presenter.GroupMemberPresenter;
import com.yizhuan.erban.module_hall.hall.view.IGroupMemberView;
import com.yizhuan.erban.module_hall.hall.view.dialog.HallMenuDialog;
import com.yizhuan.erban.module_hall.secretcode.PwdCodeMgr;
import com.yizhuan.xchat_android_core.module_hall.hall.HallModel;
import com.yizhuan.xchat_android_core.module_hall.hall.bean.AuthInfo;
import com.yizhuan.xchat_android_core.module_hall.hall.bean.MemberInfo;
import com.yizhuan.xchat_android_core.module_hall.income.event.UpdateMemberListEvent;
import com.yizhuan.xchat_android_core.statistic.StatisticManager;
import com.yizhuan.xchat_android_core.statistic.protocol.StatisticsProtocol;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
@CreatePresenter(GroupMemberPresenter.class)
public class GroupMemberListActivity extends BaseMvpActivity<IGroupMemberView, GroupMemberPresenter>
implements IGroupMemberView{
@BindView(R.id.tv_count)
TextView tvCount;
@BindView(R.id.srl_group)
SwipeRefreshLayout srlGroup;
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
private GroupMemberListAdapter mGroupMemberListAdapter;
private List<MemberInfo> listInfos = new ArrayList<>();
private List<AuthInfo> mAuthInfoList;
private int page = 1;
private int pageSize = 50;
private boolean isLoading, noMoreData;
public static void start(Context context) {
Intent intent = new Intent(context, GroupMemberListActivity.class);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group_member);
ButterKnife.bind(this);
initTitleBar("成员列表");
setRightOption();
srlGroup.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (isLoading) {
return;
}
page = 1;
loadMembers();
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mGroupMemberListAdapter = new GroupMemberListAdapter(this, null);
mGroupMemberListAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
List<MemberInfo> memberInfoList = mGroupMemberListAdapter.getData();
if (memberInfoList.size() > 0) {
MemberInfo memberInfo = memberInfoList.get(position);
int type = mGroupMemberListAdapter.getmType();
if (type == GroupMemberListAdapter.TYPE_REMOVE) {
if (view.getId() == R.id.iv_remove) {
showRemoveDialog(memberInfo.getUid(), memberInfo.getRoleType(), memberInfo.getNick());
}
} else {
UIHelper.showUserInfoAct(GroupMemberListActivity.this, memberInfo.getUid());
}
}
}
});
recyclerView.setAdapter(mGroupMemberListAdapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
if (isLoading || noMoreData) {
return;
}
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int lastfirst = manager.findLastVisibleItemPosition();
int itemCount = mGroupMemberListAdapter.getItemCount();
if (lastfirst >= itemCount - 2) {
loadMembers();
}
}
}
});
setTvCount(0);
loadMembers();
getMvpPresenter().getHallAuths();
EventBus.getDefault().register(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void displayNotEmptyQueuingMic(UpdateMemberListEvent event) {
onReloadDate();
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Override
public void onReloadDate() {
page = 1;
loadMembers();
}
@SuppressLint("CheckResult")
private void loadMembers() {
isLoading = true;
HallModel.get().getAllMembers(HallDataManager.get().getHallId(), page, pageSize)
.compose(RxHelper.bindActivity(this))
.subscribe((listMemberInfo, throwable) -> {
srlGroup.setRefreshing(false);
isLoading = false;
if (throwable != null) {
Logger.i("模厅成员加载失败...");
if (page == 1) {
showNetworkErr();
}
} else {
int count = listMemberInfo.getCount();
setTvCount(count);
List<MemberInfo> list = listMemberInfo.getMembers();
if (list == null) {
list = new ArrayList<>();
}
if (list.size() == 0) {
noMoreData = true;
if (page == 1) {
showNoData();
}
} else {
noMoreData = false;
hideStatus();
if (page == 1) {
mGroupMemberListAdapter.setNewData(list);
} else {
mGroupMemberListAdapter.addData(list);
}
page ++;
}
mGroupMemberListAdapter.setmType(GroupMemberListAdapter.TYPE_REMOVE);
mGroupMemberListAdapter.notifyDataSetChanged();
}
});
}
private void setRightOption() {
mTitleBar.addAction(new TitleBar.ImageAction(R.drawable.ic_hall_member_search) {
@Override
public void performAction(View view) {
MemberSearchActivity.start(GroupMemberListActivity.this);
}
});
// mTitleBar.addAction(new TitleBar.ImageAction(R.drawable.ic_hall_member_more) {
// @Override
// public void performAction(View view) {
// moreOption(view, mAuthInfoList);
// }
// });
}
private int mCount;
private void setTvCount(int count) {
mCount = count;
tvCount.setText("总人数:" + mCount + "");
}
private void moreOption(View attachView, List<AuthInfo> authInfoList) {
if (authInfoList != null && authInfoList.size() > 0) {
HallMenuDialog dialog = new HallMenuDialog(this, attachView, authInfoList, true);
dialog.setOnMenuClickListener(new HallMenuDialog.OnMenuClickListener() {
@Override
public void callback(String code) {
jumpCode(code);
}
});
dialog.show();
} else {
toast("未分配权限");
}
}
private void jumpCode(String code) {
switch (code) {
case AuthInfo.AUTH_APPLY_HALL_EXIT:
showExitDialog();
break;
case AuthInfo.AUTH_MEMBER_JOIN_MANAGER:
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.EVENT_HALL_ADDMEMBERS_CLICK,
"添加成员-成员列表");
PwdCodeMgr.showShareCodeDialog(context);
break;
case AuthInfo.AUTH_MEMBER_EXIT_MANAGER:
mGroupMemberListAdapter.setmType(GroupMemberListAdapter.TYPE_REMOVE);
mGroupMemberListAdapter.notifyDataSetChanged();
break;
case AuthInfo.AUTH_HALL_MANAGER_SET:
AdminListActivity.start(GroupMemberListActivity.this);
break;
default:
Logger.e("本版本不能识别的权限");
break;
}
}
private void statusNone() {
mGroupMemberListAdapter.setmType(GroupMemberListAdapter.TYPE_NONE);
mGroupMemberListAdapter.notifyDataSetChanged();
}
@Override
public void onBackPressed() {
if (mGroupMemberListAdapter.getmType() == GroupMemberListAdapter.TYPE_REMOVE) {
statusNone();
} else
super.onBackPressed();
}
private void showExitDialog() {
CharSequence text = getMvpPresenter().getExitTips(this);
getDialogManager().showOkCancelDialog(text, new DialogManager.OkCancelDialogListener() {
@Override
public void onCancel() {
}
@Override
public void onOk() {
getMvpPresenter().quit();
}
});
}
private long mTargetUid;
private void showRemoveDialog(long targetUid, int targetRoleType, String targetNick) {
mTargetUid = targetUid;
SpannableString spannableString = getMvpPresenter().getRemoveTips(this, targetRoleType, targetNick);
getDialogManager().showOkCancelWithTitleDialog("提示", spannableString, "确定", "取消", new DialogManager.OkCancelDialogListener() {
@Override
public void onCancel() {
mTargetUid = -1;
statusNone();
}
@Override
public void onOk() {
getMvpPresenter().remove(targetUid);
}
});
}
@Override
protected void onLeftClickListener() {
onBackPressed();
}
@Override
public void getHallAuthsSuccess(List<AuthInfo> authInfoList) {
mAuthInfoList = authInfoList;
}
@Override
public void getHallAuthsFail(String message) {
}
@Override
public void quitSuccess(String message) {
toast(message);
}
@Override
public void quitFail(String message) {
toast(message);
}
@Override
public void getAllMembersSuccess(List<MemberInfo> memberInfoList) {
hideStatus();
mGroupMemberListAdapter.setNewData(memberInfoList);
}
@Override
public void getAllMembersFail(String message) {
hideStatus();
showNoData();
}
@Override
public void removeSuccess(String message) {
if (mTargetUid == -1)
return;
List<MemberInfo> memberInfoList = mGroupMemberListAdapter.getData();
if (memberInfoList.size() > 0) {
for (MemberInfo memberInfo : memberInfoList) {
if (memberInfo.getUid() == mTargetUid) {
memberInfoList.remove(memberInfo);
if (mCount > 0) {
mCount--;
setTvCount(mCount);
}
break;
}
}
}
statusNone();
mTargetUid = -1;
}
@Override
public void removeFail(String message) {
mTargetUid = -1;
toast(message);
}
}

View File

@@ -206,10 +206,11 @@ public class ModuleHallActivity extends BaseMvpActivity<IModuleHallView, ModuleH
loadHallList();
}
});
//如果用户只是个单纯的族长,不显示设置
//如果用户只是族长而且不是会长,隐藏设置
UserModel.get().getCurrentUserInfo()
.compose(bindToLifecycle())
.subscribe(userInfo -> setSettingOption(HallDataManager.get().isManager() || !userInfo.isUserIsClanElder()));
.subscribe(userInfo -> setSettingOption(userInfo.isUserIsClanElder() &&
HallDataManager.get().getRoleType() != RoleType.OWNER));
HallModel.get().getUserHallAndClan(AuthModel.get().getCurrentUid())
.compose(bindToLifecycle())
@@ -295,13 +296,13 @@ public class ModuleHallActivity extends BaseMvpActivity<IModuleHallView, ModuleH
/**
* 设置权限, 房主才展示
*
* @param hasOption true:房主
* @param gone true:隐藏
*/
private void setSettingOption(boolean hasOption) {
if (hasOption) {
ivSetting.setVisibility(View.VISIBLE);
} else {
private void setSettingOption(boolean gone) {
if (gone) {
ivSetting.setVisibility(View.GONE);
} else {
ivSetting.setVisibility(View.VISIBLE);
}
}

View File

@@ -4,11 +4,8 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
@@ -16,18 +13,20 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.coorchice.library.utils.LogUtils;
import com.orhanobut.logger.Logger;
import com.yizhuan.erban.R;
import com.yizhuan.erban.UIHelper;
import com.yizhuan.erban.base.BaseMvpActivity;
import com.yizhuan.erban.common.EmptyViewHelper;
import com.yizhuan.erban.common.widget.dialog.DialogManager;
import com.yizhuan.erban.module_hall.HallDataManager;
import com.yizhuan.erban.module_hall.hall.adapter.GroupMemberListAdapter;
import com.yizhuan.erban.module_hall.hall.presenter.GroupMemberPresenter;
import com.yizhuan.erban.module_hall.hall.view.IGroupMemberView;
import com.yizhuan.erban.module_hall.hall.presenter.RemoveMemberPresenter;
import com.yizhuan.erban.module_hall.hall.view.IRemoveMemberView;
import com.yizhuan.erban.ui.utils.RVDelegate;
import com.yizhuan.erban.ui.widget.TextWatcherSimple;
import com.yizhuan.xchat_android_core.module_hall.hall.HallModel;
import com.yizhuan.xchat_android_core.module_hall.hall.bean.AuthInfo;
import com.yizhuan.xchat_android_core.module_hall.hall.bean.MemberInfo;
import com.yizhuan.xchat_android_core.module_hall.income.event.UpdateMemberListEvent;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
@@ -45,9 +44,9 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
@CreatePresenter(GroupMemberPresenter.class)
public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView, GroupMemberPresenter>
implements IGroupMemberView{
@CreatePresenter(RemoveMemberPresenter.class)
public class RemoveMemberListActivity extends BaseMvpActivity<IRemoveMemberView, RemoveMemberPresenter>
implements IRemoveMemberView {
@BindView(R.id.srl_group)
SwipeRefreshLayout srlGroup;
@@ -55,32 +54,20 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
RecyclerView recyclerView;
@BindView(R.id.et_search)
EditText etSearch;
private static final int MSG_UPDATE_SEARCH_RESULT = 1001;
private GroupMemberListAdapter mGroupMemberListAdapter;
private List<MemberInfo> searchList = new ArrayList<>();
private List<MemberInfo> orignalList = new ArrayList<>();
private List<AuthInfo> mAuthInfoList;
private final List<MemberInfo> searchList = new ArrayList<>();
private final List<MemberInfo> orignalList = new ArrayList<>();
private RVDelegate<MemberInfo> rvDelegate;
private int page = 1;
private int pageSize = 50;
private boolean isLoading, noMoreData;
private final int pageSize = 20;
private CharSequence searchStr;
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case MSG_UPDATE_SEARCH_RESULT:
mGroupMemberListAdapter.setNewData(searchList);
mGroupMemberListAdapter.notifyDataSetChanged();
break;
}
}
};
private long mTargetUid;
public static void start(Context context) {
Intent intent = new Intent(context, RemoveMemberListActivity.class);
@@ -94,61 +81,34 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
ButterKnife.bind(this);
etSearch.addTextChangedListener(new SearchListener());
srlGroup.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
etSearch.addTextChangedListener(new TextWatcherSimple() {
@Override
public void onRefresh() {
if (isLoading) {
return;
}
page = 1;
loadMembers();
public void afterTextChanged(Editable s) {
searchStr = s;
}
});
srlGroup.setOnRefreshListener(() -> loadMembers(true));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mGroupMemberListAdapter = new GroupMemberListAdapter(this, null);
mGroupMemberListAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
List<MemberInfo> memberInfoList = mGroupMemberListAdapter.getData();
if (memberInfoList.size() > 0) {
MemberInfo memberInfo = memberInfoList.get(position);
int type = mGroupMemberListAdapter.getmType();
if (type == GroupMemberListAdapter.TYPE_REMOVE) {
if (view.getId() == R.id.iv_remove) {
showRemoveDialog(memberInfo.getUid(), memberInfo.getRoleType(), memberInfo.getNick());
}
} else {
UIHelper.showUserInfoAct(RemoveMemberListActivity.this, memberInfo.getUid());
}
}
mGroupMemberListAdapter.setmType(GroupMemberListAdapter.TYPE_REMOVE);
rvDelegate = new RVDelegate.Builder<MemberInfo>()
.setAdapter(mGroupMemberListAdapter)
.setLayoutManager(new LinearLayoutManager(this))
.setPageSize(pageSize)
.setEmptyView(EmptyViewHelper.createEmptyView(context, "暂无内容"))
.setRecyclerView(recyclerView)
.build();
mGroupMemberListAdapter.setOnLoadMoreListener(() -> loadMembers(false), recyclerView);
mGroupMemberListAdapter.setOnItemChildClickListener((adapter, view, position) -> {
MemberInfo memberInfo = mGroupMemberListAdapter.getItem(position);
if (memberInfo == null) return;
if (view.getId() == R.id.iv_remove) {
showRemoveDialog(memberInfo.getUid(), memberInfo.getRoleType(), memberInfo.getNick());
} else {
UIHelper.showUserInfoAct(RemoveMemberListActivity.this, memberInfo.getUid());
}
});
recyclerView.setAdapter(mGroupMemberListAdapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
if (isLoading || noMoreData) {
return;
}
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int lastfirst = manager.findLastVisibleItemPosition();
int itemCount = mGroupMemberListAdapter.getItemCount();
if (lastfirst >= itemCount - 2) {
loadMembers();
}
}
}
});
loadMembers();
getMvpPresenter().getHallAuths();
loadMembers(true);
EventBus.getDefault().register(this);
}
@@ -165,67 +125,28 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
@Override
public void onReloadDate() {
page = 1;
loadMembers();
loadMembers(true);
}
private void loadMembers() {
isLoading = true;
@SuppressLint("CheckResult")
private void loadMembers(boolean refresh) {
page = refresh ? 1 : (page + 1);
HallModel.get().getAllMembers(HallDataManager.get().getHallId(), page, pageSize)
.compose(RxHelper.bindActivity(this))
.subscribe((listMemberInfo, throwable) -> {
srlGroup.setRefreshing(false);
isLoading = false;
if (throwable != null) {
Logger.i("模厅成员加载失败...");
if (page == 1) {
showNetworkErr();
}
rvDelegate.loadErr(refresh);
} else {
List<MemberInfo> list = listMemberInfo.getMembers();
if (list == null) {
list = new ArrayList<>();
}
if (list.size() == 0) {
noMoreData = true;
if (page == 1) {
showNoData();
}
} else {
noMoreData = false;
hideStatus();
if (page == 1) {
mGroupMemberListAdapter.setNewData(list);
} else {
mGroupMemberListAdapter.addData(list);
}
page ++;
}
rvDelegate.loadData(listMemberInfo.getMembers(), refresh);
orignalList.clear();
orignalList.addAll(mGroupMemberListAdapter.getData());
mGroupMemberListAdapter.setmType(GroupMemberListAdapter.TYPE_REMOVE);
mGroupMemberListAdapter.notifyDataSetChanged();
}
});
}
private void statusNone() {
mGroupMemberListAdapter.setmType(GroupMemberListAdapter.TYPE_NONE);
mGroupMemberListAdapter.notifyDataSetChanged();
}
@Override
public void onBackPressed() {
if (mGroupMemberListAdapter.getmType() == GroupMemberListAdapter.TYPE_REMOVE) {
statusNone();
} else
super.onBackPressed();
}
private long mTargetUid;
private void showRemoveDialog(long targetUid, int targetRoleType, String targetNick) {
mTargetUid = targetUid;
SpannableString spannableString = getMvpPresenter().getRemoveTips(this, targetRoleType, targetNick);
@@ -234,7 +155,6 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
@Override
public void onCancel() {
mTargetUid = -1;
// statusNone();
}
@Override
@@ -246,7 +166,7 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
}
@SuppressLint("NonConstantResourceId")
@OnClick({R.id.iv_back,R.id.tv_search})
@OnClick({R.id.iv_back, R.id.tv_search})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.iv_back:
@@ -263,38 +183,6 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
onBackPressed();
}
@Override
public void getHallAuthsSuccess(List<AuthInfo> authInfoList) {
mAuthInfoList = authInfoList;
}
@Override
public void getHallAuthsFail(String message) {
}
@Override
public void quitSuccess(String message) {
toast(message);
}
@Override
public void quitFail(String message) {
toast(message);
}
@Override
public void getAllMembersSuccess(List<MemberInfo> memberInfoList) {
hideStatus();
mGroupMemberListAdapter.setNewData(memberInfoList);
}
@Override
public void getAllMembersFail(String message) {
hideStatus();
showNoData();
}
@Override
public void removeSuccess(String message) {
if (mTargetUid == -1)
@@ -302,15 +190,15 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
List<MemberInfo> memberInfoList = mGroupMemberListAdapter.getData();
if (memberInfoList.size() > 0) {
for (MemberInfo memberInfo : memberInfoList) {
for (int i = 0; i < memberInfoList.size(); i++) {
MemberInfo memberInfo = memberInfoList.get(i);
if (memberInfo.getUid() == mTargetUid) {
memberInfoList.remove(memberInfo);
mGroupMemberListAdapter.remove(i);
orignalList.remove(memberInfo);
break;
}
}
}
statusNone();
mTargetUid = -1;
}
@@ -320,56 +208,24 @@ public class RemoveMemberListActivity extends BaseMvpActivity<IGroupMemberView,
toast(message);
}
class SearchListener implements TextWatcher {
@Override
public void afterTextChanged(Editable s) {//表示最终内容
// Log.d("afterTextChanged", s.toString());
}
/**
*
* @param s
* @param start 开始的位置
* @param count 被改变的旧内容数
* @param after 改变后的内容数量
*/
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//这里的s表示改变之前的内容通常start和count组合可以在s中读取本次改变字段中被改变的内容。而after表示改变后新的内容的数量。
}
/**
*
* @param s
* @param start 开始位置
* @param before 改变前的内容数量
* @param count 新增数
*/
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//这里的s表示改变之后的内容通常start和count组合可以在s中读取本次改变字段中新的内容。而before表示被改变的内容的数量。
// doSearch(s);
searchStr = s;
}
}
private ArrayList<MemberInfo> mTempBeansList;
private void doSearch(CharSequence str) {
mTempBeansList = new ArrayList<>();
LogUtils.d(str.toString());
ArrayList<MemberInfo> mTempBeansList = new ArrayList<>();
// 如果需要排序考虑 Pair
for(int i=0;i<orignalList.size();i++){
if(orignalList.get(i).getNick().contains(str)
||String.valueOf(orignalList.get(i).getErbanNo()).contains(str)){
for (int i = 0; i < orignalList.size(); i++) {
if (orignalList.get(i).getNick().contains(str)
|| String.valueOf(orignalList.get(i).getErbanNo()).contains(str)) {
mTempBeansList.add(orignalList.get(i));
}
}
searchList.clear();
if (!ListUtils.isListEmpty(mTempBeansList)){
if (!ListUtils.isListEmpty(mTempBeansList)) {
searchList.addAll(mTempBeansList);
}else {
} else {
searchList.addAll(orignalList);
}
mHandler.sendEmptyMessage(MSG_UPDATE_SEARCH_RESULT);
mGroupMemberListAdapter.setNewData(searchList);
mTempBeansList.clear();
}
}

View File

@@ -74,8 +74,9 @@ public class GroupMemberListAdapter extends BaseQuickAdapter<MemberInfo, BaseVie
} else if (item.getRoleType() == RoleType.CLAN_HALL_OWNER) {
holder.setVisible(R.id.iv_type, true);
holder.setImageResource(R.id.iv_type, R.drawable.bg_clan_and_hall_owner);
} else
} else {
holder.setVisible(R.id.iv_type, false);
}
holder.setText(R.id.erban_no, context.getString(R.string.label_id_format, item.getErbanNo()));
if (item.getGender() == 1) {
@@ -103,27 +104,23 @@ public class GroupMemberListAdapter extends BaseQuickAdapter<MemberInfo, BaseVie
} else {
holder.setVisible(R.id.iv_user_level, false);
holder.setVisible(R.id.iv_user_charm_level, false);
}
holder.setVisible(R.id.iv_remove, mType == TYPE_REMOVE);
holder.addOnClickListener(R.id.iv_remove);
if (mType == TYPE_REMOVE)
if (mType == TYPE_REMOVE) {
setRemove(holder, item.getRoleType() > HallDataManager.get().getRoleType());
else if (mType == TYPE_NEXT)
holder.addOnClickListener(R.id.container);
} else if (mType == TYPE_NEXT) {
setNext(holder, true);
else if (mType == TYPE_CHECK)
} else if (mType == TYPE_CHECK) {
setCheck(holder, item.getRoleType() != 1, item.getRoleType() == 2);
else if (mType == TYPE_SEARCH) {
} else if (mType == TYPE_SEARCH) {
holder.addOnClickListener(R.id.container);
setRemove(holder, false);
setNext(holder, false);
setCheck(holder, false, false);
} else {
holder.addOnClickListener(R.id.container);
setRemove(holder, false);

View File

@@ -1,152 +0,0 @@
package com.yizhuan.erban.module_hall.hall.presenter;
import android.content.Context;
import androidx.core.content.ContextCompat;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import com.yizhuan.erban.R;
import com.yizhuan.erban.avroom.widget.MessageView;
import com.yizhuan.erban.base.BaseMvpPresenter;
import com.yizhuan.erban.module_hall.HallDataManager;
import com.yizhuan.erban.module_hall.hall.view.IGroupMemberView;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.module_hall.hall.bean.AuthInfo;
import com.yizhuan.xchat_android_core.module_hall.hall.HallModel;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
public class GroupMemberPresenter extends BaseMvpPresenter<IGroupMemberView> {
public void getHallAuths() {
HallModel.get().getHallAuths(AuthModel.get().getCurrentUid(),
HallDataManager.get().getRoleType())
.compose(bindToLifecycle())
.subscribe(new SingleObserver<List<AuthInfo>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(List<AuthInfo> authInfos) {
//对权限处理下
List<AuthInfo> showList = new ArrayList<>();
List<String> canHandle = AuthInfo.canHandleAuth();
for(AuthInfo info : authInfos) {
if (info == null) {
continue;
}
if (canHandle.contains(info.getCode()) && info.isOwnAuth()) {
showList.add(info);
}
}
getMvpView().getHallAuthsSuccess(showList);
}
@Override
public void onError(Throwable e) {
if (getMvpView() == null)
return;
getMvpView().getHallAuthsFail(e.getMessage());
}
});
}
public void quit() {
HallModel.get().quit(AuthModel.get().getCurrentUid())
.compose(bindToLifecycle())
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String s) {
getMvpView().quitSuccess(s);
}
@Override
public void onError(Throwable e) {
getMvpView().quitFail(e.getMessage());
}
});
}
public void remove(long targetUid) {
HallModel.get().removeFromHall(targetUid)
.compose(bindToLifecycle())
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String s) {
getMvpView().removeSuccess(s);
SingleToastUtil.showToast("成员已移出公会");
}
@Override
public void onError(Throwable e) {
if (getMvpView() == null) {
return;
}
getMvpView().removeFail(e.getMessage());
}
});
}
public CharSequence getExitTips(Context context) {
MessageView.SpannableBuilder builder = new MessageView.SpannableBuilder(null);
builder.append("退出将解除关系并")
.append("退出群聊", new ForegroundColorSpan(
ContextCompat.getColor(context, R.color.appColor)))
.append(", 此操作")
.append("需要厅主审核", new ForegroundColorSpan(
ContextCompat.getColor(context, R.color.appColor)))
.append(", 你真的要退出吗?");
return builder.build();
}
public SpannableString getRemoveTips(Context context, int targetRoleType, String targetNick) {
String message;
if (targetRoleType == 2) {
message = targetNick + "为高管,移除将清除数据和权限并退出群聊,确认移除吗?";
} else if (targetRoleType == 3) {
message = "移除" + targetNick + "将清除数据并退出群聊,\n确认移除吗?";
} else {
message = "";
}
SpannableString spannableString = new SpannableString(message);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.color_333333));
ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.appColor));
if (targetRoleType == 2) {
spannableString.setSpan(colorSpan1, 0, targetNick.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan, targetNick.length(), message.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (targetRoleType == 3) {
spannableString.setSpan(colorSpan, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan1, 2, 2 + targetNick.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan, 2 + targetNick.length(), message.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannableString;
}
}

View File

@@ -0,0 +1,76 @@
package com.yizhuan.erban.module_hall.hall.presenter;
import android.content.Context;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import androidx.core.content.ContextCompat;
import com.yizhuan.erban.R;
import com.yizhuan.erban.base.BaseMvpPresenter;
import com.yizhuan.erban.module_hall.hall.view.IRemoveMemberView;
import com.yizhuan.xchat_android_core.module_hall.hall.HallModel;
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
public class RemoveMemberPresenter extends BaseMvpPresenter<IRemoveMemberView> {
public void remove(long targetUid) {
HallModel.get().removeFromHall(targetUid)
.compose(bindToLifecycle())
.subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(String s) {
getMvpView().removeSuccess(s);
SingleToastUtil.showToast("成员已移出公会");
}
@Override
public void onError(Throwable e) {
if (getMvpView() == null) {
return;
}
getMvpView().removeFail(e.getMessage());
}
});
}
public SpannableString getRemoveTips(Context context, int targetRoleType, String targetNick) {
String message;
if (targetRoleType == 2) {
message = targetNick + "为高管,移除将清除数据和权限并退出群聊,确认移除吗?";
} else if (targetRoleType == 3) {
message = "移除" + targetNick + "将清除数据并退出群聊,\n确认移除吗?";
} else {
message = "";
}
SpannableString spannableString = new SpannableString(message);
ForegroundColorSpan colorSpan = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.color_333333));
ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.appColor));
if (targetRoleType == 2) {
spannableString.setSpan(colorSpan1, 0, targetNick.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan, targetNick.length(), message.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (targetRoleType == 3) {
spannableString.setSpan(colorSpan, 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan1, 2, 2 + targetNick.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(colorSpan, 2 + targetNick.length(), message.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return spannableString;
}
}

View File

@@ -1,21 +0,0 @@
package com.yizhuan.erban.module_hall.hall.view;
import com.yizhuan.xchat_android_core.module_hall.hall.bean.AuthInfo;
import com.yizhuan.xchat_android_core.module_hall.hall.bean.MemberInfo;
import com.yizhuan.xchat_android_library.base.IMvpBaseView;
import java.util.List;
public interface IGroupMemberView extends IMvpBaseView {
void getHallAuthsSuccess(List<AuthInfo> authInfoList);
void getHallAuthsFail(String message);
void quitSuccess(String message);
void quitFail(String message);
void getAllMembersSuccess(List<MemberInfo> memberInfoList);
void getAllMembersFail(String message);
void removeSuccess(String message);
void removeFail(String message);
}

View File

@@ -0,0 +1,8 @@
package com.yizhuan.erban.module_hall.hall.view;
import com.yizhuan.xchat_android_library.base.IMvpBaseView;
public interface IRemoveMemberView extends IMvpBaseView {
void removeSuccess(String message);
void removeFail(String message);
}

View File

@@ -1,11 +1,10 @@
package com.yizhuan.xchat_android_core.module_hall.hall.bean;
import com.yizhuan.xchat_android_core.level.UserLevelVo;
import com.yizhuan.xchat_android_core.user.bean.SimpleUserInfo;
import java.io.Serializable;
import java.util.Objects;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
@@ -25,4 +24,16 @@ public class MemberInfo extends SimpleUserInfo implements Serializable {
private String hallName;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MemberInfo that = (MemberInfo) o;
return erbanNo == that.erbanNo;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), erbanNo);
}
}