贵族特权:防被踢功能

This commit is contained in:
huangjian
2022-04-28 15:26:57 +08:00
parent 4de7ede5a1
commit fa29b0d12b
14 changed files with 181 additions and 78 deletions

View File

@@ -22,6 +22,7 @@ import com.yizhuan.erban.ui.user.UserInfoActivity;
import com.yizhuan.erban.ui.widget.ButtonItem;
import com.yizhuan.erban.ui.widget.GiftDialog;
import com.yizhuan.erban.ui.widget.UserInfoDialog;
import com.yizhuan.erban.vip.VipHelper;
import com.yizhuan.tutu.room_chat.activity.RoomMsgActivity;
import com.yizhuan.xchat_android_core.auth.AuthModel;
import com.yizhuan.xchat_android_core.bean.RoomQueueInfo;
@@ -182,7 +183,7 @@ public class ButtonItemFactory {
}
if (kickOutRoom) {
buttonItems.add(createKickOutRoomItem(context, String.valueOf(currentRoom.getRoomId()),
buttonItems.add(createKickOutRoomItem(context, userInfo, String.valueOf(currentRoom.getRoomId()),
account, getNick(chatRoomMember, account)));
}
if (mark_manager) {
@@ -194,6 +195,7 @@ public class ButtonItemFactory {
if (mart_black) {
buttonItems.add(createMarkBlackListItem(
context,
userInfo,
String.valueOf(currentRoom.getRoomId()),
account,
getNick(chatRoomMember, account))
@@ -319,13 +321,24 @@ public class ButtonItemFactory {
/**
* 踢出房间: 先强制下麦,再踢出房间
*/
public static ViewItem createKickOutRoomItem(Context context, final String roomId,
public static ViewItem createKickOutRoomItem(Context context, UserInfo userInfo, final String roomId,
final String account, String nick) {
return new ViewItem("踢出房间", R.drawable.icon_dialog_kickout_room, new ViewItem.OnClickListener() {
@Override
public void onClick() {
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.data_card_kickout_room_click, "资料卡片-踢出房间");
new DialogManager(context).showOkCancelDialog((AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : "") + "是否要将此用户踢出房间?",
String tips = (AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : "") + "是否要将此用户踢出房间?";
if (VipHelper.notKick(userInfo)) {
if (AvRoomDataManager.get().isRoomOwner()) {
tips = "该用户为神皇贵族,确认是否要将其踢出?";
} else {
SingleToastUtil.showToast("该用户为神皇贵族,只有房主才可以踢出哦~");
return;
}
}
new DialogManager(context).showOkCancelDialog(tips,
true, new DialogManager.AbsOkDialogListener() {
@SuppressLint("CheckResult")
@Override
@@ -401,6 +414,7 @@ public class ButtonItemFactory {
//加入黑名单
public static ViewItem createMarkBlackListItem(final Context context,
UserInfo userInfo,
final String roomId,
final String account,
String nick) {
@@ -415,11 +429,20 @@ public class ButtonItemFactory {
new DialogManager(context).showOkDialog("当前已达到黑名单添加上限(" + roomBlackListSize + "人),如需继续添加请移除部分黑名单成员");
return;
}
new DialogManager(context).showOkCancelDialog(
"是否将" + nick + "加入黑名单?加入后他将无法进入此房间" +
(AvRoomDataManager.get().mCurrentRoomInfo != null && AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : ""), true,
() -> {
String tips = "是否将" + nick + "加入黑名单?加入后他将无法进入此房间" +
(AvRoomDataManager.get().mCurrentRoomInfo != null && AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : "");
if (VipHelper.notKick(userInfo)) {
if (AvRoomDataManager.get().isRoomOwner()) {
tips = "该用户为神皇贵族,确认是否要将其拉黑?";
} else {
SingleToastUtil.showToast("该用户为神皇贵族,只有房主才可以拉黑哦~");
return;
}
}
new DialogManager(context).showOkCancelDialog(tips, true,
() -> {
Single<String> single;
if (SuperAdminUtil.isSuperAdmin() || AvRoomDataManager.get().isSuperAdmin()) {
//超管拉黑

View File

@@ -141,6 +141,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
@Nullable
ImageView ivCharmLevelTag;
@Nullable
ImageView ivKickGuard;
RoomQueueInfo info;
int position = TYPE_INVALID;
@@ -155,6 +158,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
tvNick = itemView.findViewById(R.id.nick);
tvNumber = itemView.findViewById(R.id.tv_number);
ivCharmLevelTag = itemView.findViewById(R.id.iv_charm_level_tag);
ivKickGuard = itemView.findViewById(R.id.iv_kick_guard);
ivUpImage.setOnClickListener(this);
ivLockImage.setOnClickListener(this);
@@ -195,6 +199,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
if (ivCharmLevelTag != null) {
ivCharmLevelTag.setVisibility(View.GONE);
}
if (ivKickGuard != null) {
ivKickGuard.setVisibility(View.GONE);
}
setDefalutText(position);
return;
}
@@ -212,7 +219,10 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
// 加载贵族
updateNobleView(chatRoomMember);
//增加贵族昵称颜色
tvNick.setTextColor(StringExtensionKt.toColorInt(chatRoomMember.getMicNickColor(),"#FFFFFF"));
tvNick.setTextColor(StringExtensionKt.toColorInt(chatRoomMember.getMicNickColor(), "#FFFFFF"));
if (ivKickGuard != null) {
ivKickGuard.setVisibility(chatRoomMember.isPreventKick() ? View.VISIBLE : View.GONE);
}
} else {
clearHeadWear();
ivUpImage.setVisibility(View.VISIBLE);
@@ -220,6 +230,9 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
if (ivCharmLevelTag != null) {
ivCharmLevelTag.setVisibility(View.GONE);
}
if (ivKickGuard != null) {
ivKickGuard.setVisibility(View.GONE);
}
setDefalutText(position);
}
} else {
@@ -240,6 +253,12 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
ivAvatar.setVisibility(View.GONE);
ivLockImage.setVisibility(View.GONE);
}
if (ivCharmLevelTag != null) {
ivCharmLevelTag.setVisibility(View.GONE);
}
if (ivKickGuard != null) {
ivKickGuard.setVisibility(View.GONE);
}
setDefalutText(position);
}
@@ -267,7 +286,7 @@ public abstract class BaseMicroViewAdapter extends RecyclerView.Adapter<Recycler
}
protected void setSelectText(int index, String nick, int gender) {
tvNick.setText(StringExtensionKt.subAndReplaceDot(StringUtil.removeBlanks(nick),7));
tvNick.setText(StringExtensionKt.subAndReplaceDot(StringUtil.removeBlanks(nick), 7));
tvNick.setTextColor(context.getResources().getColor(R.color.white));
if (tvNumber != null) {

View File

@@ -182,8 +182,8 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
this.isInRoom = isInRoom;
}
public static void showNewUserInfoDialog(Context context, long uid){
showNewUserInfoDialog(context, uid,true,true,true,null);
public static void showNewUserInfoDialog(Context context, long uid) {
showNewUserInfoDialog(context, uid, true, true, true, null);
}
@SuppressLint("CheckResult")
@@ -193,7 +193,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
boolean isNeedGiftItem,
boolean isNeedRoomItem,
GiftDialog.OnGiftDialogBtnClickListener listener) {
CommonLoadingDialog loadingDialog = new CommonLoadingDialog(context, "loading...").showDialog();
CommonLoadingDialog loadingDialog = new CommonLoadingDialog(context, "loading...").showDialog();
UserModel.get().getUserInfo(uid)
.compose(RxHelper.bindContext(context))
.subscribe(userInfo -> {
@@ -719,7 +719,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
//如果没贵族信息,就加载头像作为背景
if (avatarBg == null || !avatarBg.equals(userInfo.getAvatar())) {
avatarBg = userInfo.getAvatar();
ImageLoadUtils.loadImageWithBlur(context, userInfo.getAvatar(), ivAvatarBg,10, 1);
ImageLoadUtils.loadImageWithBlur(context, userInfo.getAvatar(), ivAvatarBg, 10, 1);
}
return;
}
@@ -1243,8 +1243,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
return;
}
if (AvRoomDataManager.get().isQueuingMicro()) {
// Toast.makeText(getContext(), "排麦模式不可以锁麦哦!", Toast.LENGTH_SHORT).show();
SingleToastUtil.showToastShort("排麦模式不可以锁麦哦!");
SingleToastUtil.showToast("排麦模式不可以锁麦哦!");
return;
}
mSuperAdminModel.roomOperate(SuperAdminModel.LOCK_MIC).subscribe();
@@ -1264,13 +1263,11 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
return;
}
if (AvRoomDataManager.get().isQueuingMicro()) {
// Toast.makeText(getContext(), "排麦模式不可以解锁哦!", Toast.LENGTH_SHORT).show();
SingleToastUtil.showToastShort("排麦模式不可以解锁哦!");
SingleToastUtil.showToast("排麦模式不可以解锁哦!");
return;
}
if (AvRoomDataManager.get().isOpenPKMode()) {
// Toast.makeText(getContext(), "PK模式不可以解锁哦", Toast.LENGTH_SHORT).show();
SingleToastUtil.showToastShort("PK模式不可以解锁哦");
SingleToastUtil.showToast("PK模式不可以解锁哦");
return;
}
homePartyModel.unLockMicroPhone(micPosition, roomInfo.getUid() + "",
@@ -1353,6 +1350,19 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
textView.setOnClickListener(v -> {
StatisticManager.Instance().onEvent(StatisticsProtocol.Event.data_dard_takeOut_mic_click, "资料卡片-抱他下麦");
if (VipHelper.notKick(userInfo)) {
if (AvRoomDataManager.get().isRoomOwner()) {
new DialogManager(context).showOkCancelWithTitleDialog("该用户为神皇贵族,确认是否要将抱下麦?",
(DialogManager.LambdaOkDialogListener) () -> {
kickDownMicCode();
dismiss();
});
} else {
SingleToastUtil.showToast("该用户为神皇贵族,只有房主才可以抱下麦哦~");
}
return;
}
if (SuperAdminUtil.isSuperAdmin()) {
mSuperAdminModel.roomOperate(SuperAdminModel.TAKE_OUT_MIC, uid).subscribe();
kickDownMicCode();
@@ -1360,20 +1370,6 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
}
if (AvRoomDataManager.get().isOnMic(uid)) {
//皇帝不能T
RoomQueueInfo roomQueueInfo = AvRoomDataManager.get()
.getRoomQueueMemberInfoByAccount(String.valueOf(uid));
if (roomQueueInfo != null) {
String level = (String) NobleUtil.getResource(NobleResourceType.KEY_LEVEL, roomQueueInfo.mChatRoomMember);
String name = NobleUtil.getNobleName(level);
if (!NobleUtil.canKickMicroOrNot(level)) {
// 如果不能被踢下麦,则直接返回
// Toast.makeText(BasicConfig.INSTANCE.getAppContext(), "不能踢" + name + "陛下哦", Toast.LENGTH_SHORT).show();
SingleToastUtil.showToastShort("不能踢" + name + "陛下哦");
return;
}
}
if (AvRoomDataManager.get().isGamePlaying(uid)) {
new DialogManager(context).showOkCancelWithTitleDialog("抱Ta下麦后默认该玩家退出游戏,是否继续?",
(DialogManager.LambdaOkDialogListener) () -> {
@@ -1382,26 +1378,7 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
});
return;
}
//ktv模式下麦
if (AvRoomDataManager.get().isOpenKTV()) {
new DialogManager(context).showOkCancelWithTitleDialog("KTV模式下抱人下麦会删除ta演唱的歌,是否继续?",
(DialogManager.LambdaOkDialogListener) () -> {
int micPosition = AvRoomDataManager.get().getMicPosition(uid);
IMNetEaseManager.get().downMicroPhoneBySdk(micPosition, null);
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
UserModel.get().getUserInfo(uid).subscribe(userInfo -> {
String nick = userInfo != null ? RegexUtil.getPrintableString(userInfo.getNick()) : "";
IMNetEaseManager.get().kickMicroPhoneBySdk(uid, nick,
roomInfo.getRoomId()).subscribe(chatRoomMessage ->
KickModel.get().onSendRoomMessageSuccess(chatRoomMessage)
, Throwable::printStackTrace);
});
}
dismiss();
});
return;
}
if (GiftValueDialogUiHelper.get().isNeedKickDownMicDialog()) {
dismiss();
GiftValueDialogUiHelper.get().showGiftValueDialog(context, null,
@@ -1410,7 +1387,6 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
return;
}
kickDownMicCode();
}
});
return textView;
@@ -1420,29 +1396,24 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
private void kickDownMicCode() {
int micPosition = AvRoomDataManager.get().getMicPosition(uid);
IMNetEaseManager.get().downMicroPhoneBySdk(micPosition, null);
//noinspection ResultOfMethodCallIgnored
UserModel.get().getUserInfo(uid).subscribe(new Consumer<UserInfo>() {
@Override
public void accept(UserInfo userInfo) throws Exception {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null && userInfo != null) {
Single<ChatRoomMessage> single;
if (SuperAdminUtil.isSuperAdmin()) {
single = IMNetEaseManager.get().kickMicroBySdkBySAdmin(
uid, userInfo.getNick(), roomInfo.getRoomId());
} else {
single = IMNetEaseManager.get().kickMicroPhoneBySdk(uid, userInfo.getNick(),
roomInfo.getRoomId());
}
single.subscribe(
chatRoomMessage -> {
KickModel.get().onSendRoomMessageSuccess(chatRoomMessage);
dismiss();
},
Throwable::printStackTrace);
}
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null && userInfo != null) {
Single<ChatRoomMessage> single;
if (SuperAdminUtil.isSuperAdmin()) {
single = IMNetEaseManager.get().kickMicroBySdkBySAdmin(
uid, userInfo.getNick(), roomInfo.getRoomId());
} else {
single = IMNetEaseManager.get().kickMicroPhoneBySdk(uid, userInfo.getNick(),
roomInfo.getRoomId());
}
});
single.subscribe(
chatRoomMessage -> {
KickModel.get().onSendRoomMessageSuccess(chatRoomMessage);
dismiss();
},
Throwable::printStackTrace);
}
}
}

View File

@@ -43,4 +43,8 @@ public class VipHelper {
if (userInfo == null) return 0;
return userInfo.getUserVipInfoVO() == null ? 0 : userInfo.getUserVipInfoVO().getVipLevel();
}
public static boolean notKick(UserInfo userInfo) {
return userInfo != null && userInfo.getUserVipInfoVO() != null && userInfo.getUserVipInfoVO().getPreventKick();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -88,6 +88,18 @@
android:src="@drawable/icon_room_mute_micro"
android:visibility="invisible"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_kick_guard"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_gravity="center"
android:src="@drawable/ic_kick_guard"
android:visibility="gone"
tools:visibility="visible" />
</RelativeLayout>
</FrameLayout>

View File

@@ -148,6 +148,20 @@
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_kick_guard"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_kick_guard"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout

View File

@@ -177,6 +177,20 @@
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_kick_guard"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_marginStart="13dp"
android:layout_marginBottom="13dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_kick_guard"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView

View File

@@ -115,6 +115,20 @@
app:layout_constraintEnd_toEndOf="parent"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_kick_guard"
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginStart="6dp"
android:layout_marginBottom="6dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_kick_guard"
android:visibility="visible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout

View File

@@ -64,6 +64,18 @@
android:visibility="visible"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_kick_guard"
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginStart="6dp"
android:layout_marginBottom="3dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_kick_guard"
android:visibility="visible"
android:layout_gravity="start|bottom"
tools:visibility="visible" />
</FrameLayout>
<LinearLayout

View File

@@ -80,6 +80,18 @@
android:src="@drawable/icon_room_mute_micro"
android:visibility="invisible"
tools:visibility="gone" />
<ImageView
android:id="@+id/iv_kick_guard"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_gravity="center"
android:src="@drawable/ic_kick_guard"
android:visibility="gone"
tools:visibility="visible" />
</RelativeLayout>
</FrameLayout>

View File

@@ -285,8 +285,8 @@
<string name="no_empty_mic">没有空余坑位</string>
<string name="crowded_down">您已被挤下麦</string>
<string name="down_mic_text">下麦旁听</string>
<string name="add_black_list">您已被管理员加入黑名单</string>
<string name="kick_member_by_manager">您已被管理员踢出房间</string>
<string name="add_black_list">您已被房主或管理员加入黑名单</string>
<string name="kick_member_by_manager">您已被房主或管理员踢出房间</string>
<string name="set_manager">设置管理员</string>
<string name="remove_manager">移除管理员</string>

View File

@@ -48,6 +48,8 @@ import com.yizhuan.xchat_android_core.user.UserModel;
import com.yizhuan.xchat_android_core.user.bean.BaseInfo;
import com.yizhuan.xchat_android_core.user.bean.UserInfo;
import com.yizhuan.xchat_android_core.utils.net.RxHelper;
import com.yizhuan.xchat_android_core.vip.UserVipInfo;
import com.yizhuan.xchat_android_core.vip.VipInfo;
import com.yizhuan.xchat_android_library.net.rxnet.RxNet;
import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack;
import com.yizhuan.xchat_android_library.utils.JavaUtil;
@@ -625,6 +627,11 @@ public class RoomBaseModel extends BaseModel implements IRoomBaseModel {
contentJsonObj.put("micCircle", userInfo.getMicCircle());
}
UserVipInfo vipInfo = userInfo.getUserVipInfoVO();
if (vipInfo != null && vipInfo.getPreventKick()) {
contentJsonObj.put("preventKick", true);
}
NIMChatRoomSDK.getChatRoomService()
.updateQueueEx(roomId, String.valueOf(micPosition), contentJsonObj.toJSONString(), true)
.setCallback(new RequestCallback<Void>() {

View File

@@ -22,6 +22,7 @@ public class MicMemberInfo {
private String micNickColor;
private String micCircle;
private String headWearUrl;
private boolean preventKick;
/**
* 相亲模式使用