feat: app-module_super_admin

This commit is contained in:
eggmanQQQ2
2025-07-07 10:34:22 +08:00
parent 14b483b695
commit ac07463f78
11 changed files with 428 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
package com.chwl.app.sadmin;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.R;
import com.chwl.app.avroom.activity.RoomBlackListActivity;
import com.chwl.app.base.BaseViewBindingActivity;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.databinding.ActivityRoomSAdminManagerBinding;
import com.chwl.core.base.CancelNoToastException;
import com.chwl.core.kick.KickModel;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.model.AvRoomModel;
import com.chwl.core.super_admin.model.ISuperAdminModel;
import com.chwl.core.super_admin.model.SuperAdminModel;
import com.chwl.core.super_admin.util.SaAttachmentFactory;
import com.chwl.core.utils.net.DontWarnObserver;
import com.chwl.library.net.rxnet.callback.CallBack;
import com.chwl.library.utils.ResUtil;
import io.reactivex.Single;
import io.reactivex.SingleOnSubscribe;
/**
* 房间超管管理界面
* create by lvzebiao @2019/8/26
*/
public class RoomSAdminManagerActivity extends BaseViewBindingActivity<ActivityRoomSAdminManagerBinding>{
private ISuperAdminModel model = new SuperAdminModel();
private boolean isOpting = false;
public static void start(Context context) {
context.startActivity(new Intent(context, RoomSAdminManagerActivity.class));
}
@Override
public void init() {
initTitleBar(R.string.sa_label_room_super_a_manager);
initListener();
binding.switchHideRoom.setOn(AvRoomDataManager.get().isHideRoom());
//解除房间设置
binding.stvOpRemoveRoomLimit.setVisibility(
(AvRoomDataManager.get().isCpRoomLock() || AvRoomDataManager.get().isRoomLock()) ?
View.VISIBLE : View.GONE);
}
private void initListener() {
binding.stvOpBlackList.setOnClickListener(view -> RoomBlackListActivity.start(context));
binding.stvOpRemoveRoomLimit.setOnClickListener(view -> handleRoomPwd());
binding.stvOpCloseRoom.setOnClickListener(view -> handleRoomClose());
binding.viewClickHideRoom.setOnClickListener(view -> handleHideRoom(!AvRoomDataManager.get().isHideRoom()));
}
private void handleHideRoom(boolean isHide) {
if (isOpting) {
return;
}
isOpting = true;
Single.create((SingleOnSubscribe<String>) e -> {
if (isHide) {
getDialogManager().showOkCancelWithTitleDialog(
ResUtil.getString(R.string.erban_sadmin_roomsadminmanageractivity_01),
new DialogManager.OkCancelDialogListener() {
@Override
public void onOk() {
model.roomOperate(SuperAdminModel.HIDE_ROOM)
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
e.onSuccess("next");
}
@Override
public void onCancel() {
e.onError(new CancelNoToastException());
}
});
} else {
e.onSuccess("next");
}
})
.flatMap(s -> model.hideRoom(isHide ? 1 : 0))
.subscribe(new DontWarnObserver<String>() {
@Override
public void acceptThrowable(String s, Throwable throwable) {
super.acceptThrowable(s, throwable);
if (throwable != null) {
if (!(throwable instanceof CancelNoToastException)) {
toast(throwable.getMessage());
}
} else {
binding.switchHideRoom.setOn(isHide);
}
isOpting = false;
}
});
}
private void handleRoomPwd() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) {
return;
}
model.roomOperate(SuperAdminModel.REMOVE_ROOM_LIMIT)
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
model.removeLimit()
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe(new DontWarnObserver<String>() {
@Override
public void accept(String s, String error) {
super.accept(s, error);
if (error != null) {
toast(error);
return;
}
binding.stvOpRemoveRoomLimit.setVisibility(View.GONE);
ChatRoomMessage msg;
if (AvRoomDataManager.get().isCpRoom()) {
msg = SaAttachmentFactory.createRemoveLimitChatRoomMessage();
} else {
msg = SaAttachmentFactory.createRemoveRoomPwdChatRoomMessage();
}
IMNetEaseManager.get().sendChatRoomMessage(msg, false)
.doOnSuccess(chatRoomMessage ->
KickModel.get().onSendRoomMessageSuccess(chatRoomMessage))
.subscribe();
finish();
}
});
}
private void handleRoomClose() {
model.roomOperate(SuperAdminModel.CLOSE_ROOM)
.compose(bindUntilEvent(ActivityEvent.DESTROY))
.subscribe();
getDialogManager().showOkCancelWithTitleDialog(
ResUtil.getString(R.string.erban_sadmin_roomsadminmanageractivity_02),
new DialogManager.OkCancelDialogListener() {
@Override
public void onOk() {
AvRoomModel.get().quitRoomForOurService(AvRoomDataManager.get().getRoomUid(),
new CallBack<String>() {
@Override
public void onSuccess(String data) {
finish();
}
@Override
public void onFail(int code, String error) {
toast(error);
}
});
}
@Override
public void onCancel() {
}
});
}
}

View File

@@ -0,0 +1,89 @@
package com.chwl.app.sadmin.utils;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.widget.TextView;
import com.chwl.app.R;
import com.chwl.app.ui.widget.TextSpannableBuilder;
import com.chwl.core.im.custom.bean.CustomAttachment;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.super_admin.attachment.SuperAdminOpAttachment;
import com.chwl.core.super_admin.bean.SaOpInfo;
import com.chwl.library.utils.ResUtil;
/**
* 超管自定义消息 to 公屏消息
* create by lvzebiao @2019/8/21
*/
public class SaAttachmentToMsgUtil {
public static CharSequence formatSuperAdminInfo(CustomAttachment attachment, TextView tvContent,
int greyColor, int roomTipColor) {
if (!(attachment instanceof SuperAdminOpAttachment)) {
return null;
}
SuperAdminOpAttachment opAttachment = (SuperAdminOpAttachment) attachment;
SaOpInfo info = opAttachment.getInfo();
if (info == null) {
return null;
}
String opName = null;
TextSpannableBuilder text = new TextSpannableBuilder(tvContent);
text.append(AvRoomDataManager.get().isSuperAdmin(info.getHandleUid()) ? "" : ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_01), new ForegroundColorSpan(greyColor));
switch (opAttachment.getSecond()) {
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_KICK_DOWN_MIC:
if (!TextUtils.isEmpty(info.getTargetNick())) {
text.append(info.getTargetNick(), new ForegroundColorSpan(roomTipColor));
}
opName = ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_02);
break;
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_MUTE_MIC:
opName = getMicString(info.getMicNumber()) + ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_03);
break;
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_LOCK_MIC:
opName = getMicString(info.getMicNumber()) + ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_04);
break;
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_MARK_BLACK:
if (!TextUtils.isEmpty(info.getTargetNick())) {
text.append(info.getTargetNick(), new ForegroundColorSpan(roomTipColor));
}
opName = ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_05);
break;
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_KICK_OUT_ROOM:
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_KICK_OUT_ADMIN:
if (!TextUtils.isEmpty(info.getTargetNick())) {
text.append(info.getTargetNick(), new ForegroundColorSpan(roomTipColor));
}
opName = ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_06);
break;
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_REMOVE_CP_ROOM_LIMIT:
opName = ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_07);
break;
case CustomAttachment.CUSTOM_MSG_SUB_TYPE_SUPER_ADMIN_REMOVE_ROOM_PWD:
opName = ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_08);
break;
default:
return null;
}
if (!TextUtils.isEmpty(opName)) {
text.append(opName, new ForegroundColorSpan(greyColor));
}
return text.build();
}
private static String getMicString(int micNumber) {
String micString;
if (AvRoomDataManager.get().isHomeParty()) {
if (micNumber == -1) {
micString = ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_09);
} else {
micString = (micNumber + 1) + ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_010);
}
} else {
micString = (micNumber + 2) + ResUtil.getString(R.string.sadmin_utils_saattachmenttomsgutil_010);
}
return micString;
}
}

View File

@@ -0,0 +1,7 @@
package com.chwl.app.sadmin.utils;
/**
* create by lvzebiao @2019/8/26
*/
public class SuperAdminUiHelper {
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/ic_female_press"/>
<item android:state_checked="false" android:drawable="@drawable/ic_female_normal"/>
</selector>

View File

@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_FAFAFA">
<com.chwl.app.base.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">
</com.chwl.app.base.TitleBar>
<com.coorchice.library.SuperTextView
android:id="@+id/stv_op_hide_room"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_20"
app:corner="@dimen/dp_8"
app:solid="@color/color_white"
android:text="@string/sa_item_hide_room"
android:visibility="gone"
android:textSize="@dimen/sp_15"
android:textColor="@color/color_333333"
android:gravity="center_vertical"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_16"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_bar" />
<com.chwl.app.common.widget.TutuSwitchView
android:id="@+id/switch_hide_room"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/stv_op_hide_room"
app:layout_constraintTop_toTopOf="@id/stv_op_hide_room"
app:layout_constraintBottom_toBottomOf="@id/stv_op_hide_room"
android:layout_marginEnd="@dimen/dp_15"
android:layout_width="51dp"
android:layout_height="@dimen/dp_30" />
<View
android:id="@+id/view_click_hide_room"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/switch_hide_room"
app:layout_constraintTop_toTopOf="@id/switch_hide_room"
app:layout_constraintBottom_toBottomOf="@id/switch_hide_room"
app:layout_constraintStart_toStartOf="@id/switch_hide_room"
android:layout_width="51dp"
android:layout_height="@dimen/dp_30" />
<com.coorchice.library.SuperTextView
android:id="@+id/stv_op_black_list"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_20"
app:corner="@dimen/dp_8"
app:solid="@color/color_white"
android:text="@string/layout_activity_room_s_admin_manager_01"
android:textSize="@dimen/sp_15"
android:textColor="@color/color_333333"
android:gravity="center_vertical"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_15"
android:drawableEnd="@drawable/arrow_right"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/stv_op_hide_room" />
<com.coorchice.library.SuperTextView
android:id="@+id/stv_op_remove_room_limit"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_20"
app:corner="@dimen/dp_8"
app:solid="@color/color_white"
android:text="@string/layout_activity_room_s_admin_manager_02"
android:textSize="@dimen/sp_15"
android:textColor="@color/color_FE4C62"
android:gravity="center_vertical"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_12"
android:drawableEnd="@drawable/icon_sa_remove_room_limit"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/stv_op_black_list" />
<com.coorchice.library.SuperTextView
android:id="@+id/stv_op_close_room"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_marginStart="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_20"
app:corner="@dimen/dp_8"
app:solid="@color/color_white"
android:text="@string/layout_activity_room_s_admin_manager_03"
android:textSize="@dimen/sp_15"
android:textColor="@color/color_FE4C62"
android:gravity="center_vertical"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_12"
android:drawableEnd="@drawable/icon_sa_close_room"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/stv_op_remove_room_limit" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<com.coorchice.library.SuperTextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_marginEnd="8dp"
android:gravity="center"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:textColor="@color/white"
android:textSize="11sp"
app:corner="20dp"
app:solid="#4DFFFFFF" />

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="kick_mic_by_s_admin">النظام اكتشف انتهاك مشتبه به، لقد تمت إزالتك من الميكروفون</string>
<string name="add_to_room_black_list_by_s_admin">النظام اكتشف انتهاك مشتبه به، لقد تمت إضافتك إلى قائمة الحظر</string>
<string name="kick_out_room_by_s_admin">النظام اكتشف انتهاك مشتبه به، لقد تم طردك من الغرفة</string>
<string name="sa_label_room_super_a_manager">الإدارة الرسمية</string>
<string name="sa_item_hide_room">إخفاء الغرفة</string>
</resources>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="kick_mic_by_s_admin">系統檢測涉嫌違規,你被抱下麥</string>
<string name="add_to_room_black_list_by_s_admin">系統檢測涉嫌違規,你已被加入黑名單</string>
<string name="kick_out_room_by_s_admin"> 系統檢測涉嫌違規,你被請出房間</string>
<string name="sa_label_room_super_a_manager">官方管理</string>
<string name="sa_item_hide_room">隱藏房間</string>
</resources>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="kick_mic_by_s_admin">System detected suspected violation, you have been removed from the mic</string>
<string name="add_to_room_black_list_by_s_admin">System detected suspected violation, you have been added to the blacklist</string>
<string name="kick_out_room_by_s_admin">System detected suspected violation, you have been kicked out of the room</string>
<string name="sa_label_room_super_a_manager">Official Management</string>
<string name="sa_item_hide_room">Hide Room</string>
</resources>