package com.xscm.modulemain.dialog; import static com.xscm.moduleutil.bean.room.RoomSettingBean.QXRoomSettingTypeRoomOrderMic; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.*; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentManager; import androidx.recyclerview.widget.GridLayoutManager; import com.alibaba.android.arouter.launcher.ARouter; import com.blankj.utilcode.util.GsonUtils; import com.blankj.utilcode.util.LogUtils; import com.chad.library.adapter.base.BaseQuickAdapter; import com.hjq.toast.ToastUtils; import com.xscm.modulemain.R; import com.xscm.modulemain.activity.room.activity.RoomActivity; import com.xscm.modulemain.activity.room.contacts.RoomSettingContacts; import com.xscm.modulemain.activity.room.fragment.RoomBackgroundDialogFragment; import com.xscm.modulemain.activity.room.presenter.RoomSettingPresenter; import com.xscm.modulemain.adapter.RoomSettingAdapter; import com.xscm.modulemain.databinding.DialogRoomSettingFragmentBinding; import com.xscm.modulemain.activity.WebViewActivity; import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.base.WebUrlConstants; import com.xscm.moduleutil.dialog.ConfirmDialog; import com.xscm.moduleutil.event.EffectEvent; import com.xscm.moduleutil.event.FloatingScreenEvent; import com.xscm.moduleutil.event.MusicEvent; import com.xscm.moduleutil.listener.MessageListenerSingleton; import com.xscm.moduleutil.base.BaseMvpDialogFragment; import com.xscm.moduleutil.bean.RoomMessageEvent; import com.xscm.moduleutil.bean.RoomSettingEvent; import com.xscm.moduleutil.bean.room.RoomInfoResp; import com.xscm.moduleutil.bean.room.RoomSettingBean; import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.SpUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; /** * @author qx * @data 2025/6/17 * @description: 房间设置弹框 */ public class RoomSettingFragment extends BaseMvpDialogFragment implements RoomSettingContacts.View { private String userId; private String roomId; RoomSettingAdapter adapter; List dataList; private RoomInfoResp roomInfoResp; private int read; private boolean isSelected; private boolean effectOn = false;//开启/关闭特效 private boolean floatingScreen = false;//开启/关闭飘屏 @Override protected RoomSettingPresenter bindPresenter() { return new RoomSettingPresenter(this, getActivity()); } public static RoomSettingFragment show(RoomInfoResp roomInfoResp, FragmentManager fragmentManager) { RoomSettingFragment dialogFragment = new RoomSettingFragment(); Bundle args = new Bundle(); args.putSerializable("roomInfoResp", roomInfoResp); dialogFragment.setArguments(args); dialogFragment.show(fragmentManager, "RoomSettingFragment"); return dialogFragment; } @Override public void onAttach(@NonNull Context context) { super.onAttach(context); // roomId=getArguments().getString("roomId"); roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp"); if (roomInfoResp==null){ ToastUtils.show("房间信息为空"); return; } roomId = roomInfoResp.getRoom_info().getRoom_id(); if (roomInfoResp.getUser_info().getIs_room_owner() != 0) { read = 1; } else if (roomInfoResp.getUser_info().getIs_management() != 0) { read = 2; } else if (roomInfoResp.getUser_info().getIs_host() != 0) { read = 3; } else { read = 4; } if (roomInfoResp.getUser_info().getPit_number() != 0) { isSelected = true; } else { isSelected = false; } } @Override protected void initDialogStyle(Window window) { super.initDialogStyle(window); window.setGravity(Gravity.BOTTOM); } @Override public void onStart() { super.onStart(); Window window = getDialog().getWindow(); if (window != null) { // 设置固定高度为 500dp window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); // 可选:设置动画样式(从底部弹出) window.setWindowAnimations(com.xscm.moduleutil.R.style.CommonShowDialogBottom); } } @Override public void onStop() { super.onStop(); } @Override protected void initData() { dataList = new ArrayList<>(); effectOn = SpUtil.getOpenEffect() == 1; floatingScreen = SpUtil.getFloatingScreen() == 1; boolean b = roomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1"); LogUtils.e("effectOn=" + effectOn); // 添加标题和对应的内容项 dataList.add(new RoomSettingBean("房间类型", null, null, null, -1, read, isSelected, false, false)); dataList.add(new RoomSettingBean("交友", "ic_sing", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeSing, read, isSelected, false, false)); dataList.add(new RoomSettingBean("拍卖", "ic_auction", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeAuction, read, isSelected, false, false)); // dataList.add(new RoomSettingBean("男神", "ic_boy", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeBoy, read, isSelected, false, false)); // dataList.add(new RoomSettingBean("女神", "ic_girl", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeGirl, read, isSelected, false, false)); dataList.add(new RoomSettingBean("点唱", "jiao_y", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy, read, isSelected, false, false));// 添加的新的房间类型 ,交友 ,是原来的男神女神类型 dataList.add(new RoomSettingBean("互娱", "ic_jiaoy", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeHUYU, read, isSelected, false, false)); //原交友,更改互娱 2025年9月19日11:18:01 dataList.add(new RoomSettingBean("练歌房", "ic_liang", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeLianG, read, isSelected, false, false)); //练歌房,原点歌房,同意的时候,走同意点歌的逻辑 dataList.add(new RoomSettingBean("常用工具", null, null, null, -1, read, isSelected, false, false)); dataList.add(new RoomSettingBean("房间补贴", "ic_subsidy", null, null, RoomSettingBean.QXRoomSettingTypeRoomSubsidy, read, isSelected, false, false)); dataList.add(new RoomSettingBean("主持设置", "ic_compere", null, null, RoomSettingBean.QXRoomSettingTypeRoomCompere, read, isSelected, false, false)); dataList.add(new RoomSettingBean("清空消息", "ic_clear_message", null, null, RoomSettingBean.QXRoomSettingTypeRoomClearMessage, read, isSelected, false, false)); dataList.add(new RoomSettingBean("排麦模式", "ic_order_mic", null, null, QXRoomSettingTypeRoomOrderMic, read, isSelected, false, roomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1")));//等于1的时候,是排麦模式,等于2的时候,是自由模式,这里判断是否是拍卖模式, dataList.add(new RoomSettingBean("背景音乐", "ic_bg_music", null, null, RoomSettingBean.QXRoomSettingTypeRoomBgMusic, read, isSelected, false, false)); dataList.add(new RoomSettingBean("背景图片", "ic_bg_image", null, null, RoomSettingBean.QXRoomSettingTypeRoomBgImage, read, isSelected, false, false)); dataList.add(new RoomSettingBean("更多操作", null, null, null, -1, read, isSelected, false, false)); dataList.add(new RoomSettingBean("发红包", "ic_red", null, null, RoomSettingBean.QXRoomSettingTypeRoomFloatingRed, read, isSelected, false, false)); // dataList.add(new RoomSettingBean("离开房间", "ic_leave", null, null, RoomSettingBean.QXRoomSettingTypeRoomLeave, read, isSelected, false, false)); // dataList.add(new RoomSettingBean("分享房间", "ic_share", null, null, RoomSettingBean.QXRoomSettingTypeRoomShare, read, isSelected, false, false)); // dataList.add(new RoomSettingBean("调音台", "ic_my_dress", null, null, RoomSettingBean.QXRoomSettingTypeRoomMyDress, read, isSelected, false, false)); dataList.add(new RoomSettingBean("房间设置", "ic_room_setting", null, null, RoomSettingBean.QXRoomSettingTypeRoomSetting, read, isSelected, false, false)); // dataList.add(new RoomSettingBean("房间欢迎语", "ic_welcome", null, null, RoomSettingBean.QXRoomSettingTypeRoomWelcome,read,isSelected, false)); dataList.add(new RoomSettingBean("关闭特效", "ic_close_effects", null, null, RoomSettingBean.QXRoomSettingTypeRoomCloseEffects, read, isSelected, false, effectOn)); dataList.add(new RoomSettingBean("关闭飘屏", "ic_close_floating_screen", null, null, RoomSettingBean.QXRoomSettingTypeRoomFloatingScreen, read, isSelected, false, floatingScreen)); dataList.add(new RoomSettingBean("举报", "ic_report", null, null, RoomSettingBean.QXRoomSettingTypeRoomReport, read, isSelected, false, false)); List filteredList = new ArrayList<>(); // 更新 itemType for (RoomSettingBean bean : dataList) { bean.setRead(read); bean.setSelected(isSelected); // 根据角色和状态设置 isVisible if (isItemVisible(bean)) { bean.setStatus(true); } else { bean.setStatus(false); } bean.updateItemType(); if (bean.isStatus()) { filteredList.add(bean); } } adapter = new RoomSettingAdapter(filteredList); mBinding.recycleView.setAdapter(adapter); // 动态设置 GridLayoutManager 的列数 GridLayoutManager layoutManager = new GridLayoutManager(getContext(), 6); // 默认每行 4 个 item layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { RoomSettingBean item = filteredList.get(position); if (item.getItemType() == RoomSettingBean.ITEM_TYPE_DEFAULT) { // 标题项占满一行 return layoutManager.getSpanCount(); } else { // 内容项默认每行 4 个 return 1; } } }); // 根据 itemType 动态调整列数 mBinding.recycleView.setLayoutManager(layoutManager); adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { RoomSettingBean bean = (RoomSettingBean) adapter.getItem(position); // 示例:切换选择状态 if (bean.getType() == QXRoomSettingTypeRoomOrderMic) { MvpPre.changeRoom(roomId, SpUtil.getUserId() + "", position, bean); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomClearMessage) { RoomMessageEvent.T t = new RoomMessageEvent.T(); t.setText("清空消息"); RoomMessageEvent roomMessageEvent = new RoomMessageEvent(123, roomId, t); EventBus.getDefault().post(roomMessageEvent); String json = GsonUtils.toJson(roomMessageEvent); // 转换为 byte[] byte[] binaryData = json.getBytes(StandardCharsets.UTF_8); // 创建自定义消息 MessageListenerSingleton.getInstance().sendCustomRoomMessage( roomId, binaryData ); if (getActivity() instanceof RoomActivity) { ((RoomActivity) getActivity()).clearData(); } } // else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomMyDress) { // TunerDialogFragment.show(roomId, getChildFragmentManager()); // } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomCompere) {//主持设置 RoomHostFragment.newInstance(roomId).show(getChildFragmentManager(), "RoomHostFragment"); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomBgImage) {//背景图片 RoomBackgroundDialogFragment.newInstance(roomId).show(getChildFragmentManager(), "RoomBackgroundDialogFragment"); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomCloseEffects) {//关闭特效 if (effectOn) { //关闭 effectOn = false; //保存到本地 SpUtil.setOpenEffect(0); EventBus.getDefault().post(new EffectEvent(false)); bean.setSelect(false); } else { //打开 effectOn = true; SpUtil.setOpenEffect(1); EventBus.getDefault().post(new EffectEvent(true)); bean.setSelect(true); } upAdapter(); // adapter.notifyItemChanged(position); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomBgMusic) { EventBus.getDefault().post(new MusicEvent()); dismiss(); } // else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomLeave) { // EventBus.getDefault().post(new RoomOutEvent()); // } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeSing) { // MvpPre.changeRoomType(roomId, "1"); queren("1"); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeAuction) { // MvpPre.changeRoomType(roomId, "2"); queren("2"); } // else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeBoy) { //// MvpPre.changeRoomType(roomId, "3"); // queren("3"); // } // else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeGirl) { //// MvpPre.changeRoomType(roomId, "4"); // queren("4"); // } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy) { // MvpPre.changeRoomType(roomId, "7"); queren("9"); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeHUYU) { queren("7"); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG){ queren("-1"); }else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomSetting) { if (roomInfoResp != null) { ARouter.getInstance().build(ARouteConstants.CREATED_ROOM).withSerializable("roomInfoResp", roomInfoResp).navigation(); } else { com.blankj.utilcode.util.ToastUtils.showShort("数据错误,请关闭重试"); } } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomReport) { if (roomId != null) { Intent intent = new Intent(getActivity(), WebViewActivity.class); intent.putExtra("url", String.format(WebUrlConstants.INSTANCE.getWEB_REPORT_URL(),SpUtil.getToken(),2, roomId)); startActivity(intent); }else { com.blankj.utilcode.util.ToastUtils.showShort("数据错误,请关闭重试"); } } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomSubsidy) { ARouter.getInstance().build(ARouteConstants.ROOM_ALLOWANCE).withString("from", "我的界面").withString("roomId", roomInfoResp.getRoom_info().getRoom_id() + "").navigation(); } else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomFloatingScreen) {//2025年9月22日14:10:25,添加飘屏关闭打开按钮 if (floatingScreen) { //关闭 floatingScreen = false; //保存到本地 SpUtil.setFloatingScreen(0); EventBus.getDefault().post(new FloatingScreenEvent(false)); bean.setSelect(false); } else { //打开 floatingScreen = true; SpUtil.setFloatingScreen(1); EventBus.getDefault().post(new FloatingScreenEvent(true)); bean.setSelect(true); } upAdapter(); } else if (bean.getType()==RoomSettingBean.QXRoomSettingTypeRoomFloatingRed){ if (getActivity() instanceof RoomActivity) { ((RoomActivity) getActivity()).redDialogView(); } dismiss(); } } }); } // TODO: 2025/8/29 房间切换提示框 private void queren(String type) { // 创建并显示确认对话框 new ConfirmDialog(getActivity(), "提示", "即将修改房间类型为" + (type.equals("1") ? "交友" : (type.equals("2") ? "拍卖" : (type.equals("3") ? "男神" : (type.equals("4") ? "女神" : (type.equals("7") ? "互娱" : (type.equals("9") ? "点唱" :(type.equals("-1") ? "练歌房" : ""))))))), "确认", "取消", v -> { if (type.equals("-1")) { MvpPre.agreeSong(roomId,"1"); } else // 点击“确认”按钮时执行删除操作 MvpPre.changeRoomType(roomId, type); }, v -> { // 点击“取消”按钮时什么都不做 }, false, 0).show(); } private void upAdapter() { adapter.notifyDataSetChanged(); } private boolean isItemVisible(RoomSettingBean bean) { int type = bean.getType(); int roleLevel = bean.getRead(); // 角色等级 boolean onMic = false; // 是否是特定房间 if ((roomInfoResp.getRoom_info().getType_id().equals("1") || roomInfoResp.getRoom_info().getType_id().equals("3") || roomInfoResp.getRoom_info().getType_id().equals("4") || roomInfoResp.getRoom_info().getType_id().equals("9")) && roomInfoResp.getRoom_info().getLabel_id().equals("2")) { onMic = true; } // 2025年9月22日14:18:50,因为声网sdk不对,和点唱有关系的所有,需要关闭 // 房主显示全部 if (roleLevel == 1) { if (onMic) { if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress ) { return false; } } else { if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress ) { return false; } } return true; } else if (roleLevel == 2 || roleLevel == 3) { // type == RoomSettingBean.QXRoomSettingTypeRoomTypeBoy || type == RoomSettingBean.QXRoomSettingTypeRoomTypeGirl || 2025年9月19日11:21:04,将男神女神合并成互娱,最总是新添加一个标签 if (type == RoomSettingBean.QXRoomSettingTypeRoomTypeSing || type == RoomSettingBean.QXRoomSettingTypeRoomTypeAuction || type == RoomSettingBean.QXRoomSettingTypeRoomTypeHUYU || type == RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy || type == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG || type == RoomSettingBean.QXRoomSettingTypeRoomClearMessage || type == QXRoomSettingTypeRoomOrderMic || type == RoomSettingBean.QXRoomSettingTypeRoomFloatingScreen || type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomBgImage || type == -1) { if (onMic) { if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress ) { return false; } } else { if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress ) { return false; } } // if (onMic) { // if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy // || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress /*|| type == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG*/) { // return false; // } // } else { // if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy // || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress /*|| type == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG*/) { // return false; // } // } return true; } if (type >= RoomSettingBean.QXRoomSettingTypeRoomLeave && type <= RoomSettingBean.QXRoomSettingTypeRoomReport || type == RoomSettingBean.QXRoomSettingTypeRoomFloatingRed) { return true; } else { if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress ) { return false; } // if (type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic || type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy // || type == RoomSettingBean.QXRoomSettingTypeRoomMyDress /*|| type == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG*/) { // return false; // } } return false; } else { // 普通用户只显示更多操作中的特定条目 return type == RoomSettingBean.QXRoomSettingTypeRoomLeave || type == RoomSettingBean.QXRoomSettingTypeRoomShare || type == RoomSettingBean.QXRoomSettingTypeRoomCloseEffects || type == RoomSettingBean.QXRoomSettingTypeRoomReport || type == RoomSettingBean.QXRoomSettingTypeRoomFloatingRed|| type == RoomSettingBean.QXRoomSettingTypeRoomFloatingScreen; } } @Override protected void initView() { mBinding.cl.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PublishCommentDialogFragment.show(roomId, getChildFragmentManager()); } }); } @Subscribe(threadMode = ThreadMode.MAIN) public void onRoomSettingEvent(RoomSettingEvent event) { if (event.getType() == 1014) { for (int i = 0; i < dataList.size(); i++) { RoomSettingBean bean = (RoomSettingBean) adapter.getItem(i); if (bean.getType() == QXRoomSettingTypeRoomOrderMic) { if (event.getRoom_up_pit_type() == 2) { bean.setStatus(true); adapter.notifyItemChanged(i); } else { bean.setStatus(false); adapter.notifyItemChanged(i); } return; } } } } @Override protected int getLayoutId() { return R.layout.dialog_room_setting_fragment; } @Override public void changeRoomSuccess(String s, int position, RoomSettingBean bean) { if (bean.isSelect()) { bean.setSelect(false); adapter.notifyItemChanged(position); } else { bean.setSelect(true); adapter.notifyItemChanged(position); } // if (bean.getName().contains("排麦")) { // bean.setName("自由模式"); // bean.setSelect(false); // adapter.notifyItemChanged(position); // } else { // bean.setName("排麦模式"); // bean.setSelect(true); // adapter.notifyItemChanged(position); // } } @Override public void changeRoomType(String s) { ToastUtils.show(s); dismiss(); } @Override public void agreeSong(String s) { ToastUtils.show(s); dismiss(); } }