点唱房功能

This commit is contained in:
2025-11-18 19:39:16 +08:00
parent 45923ae858
commit 88a94c7c10
160 changed files with 6801 additions and 355 deletions

View File

@@ -0,0 +1,161 @@
package com.xscm.modulemain.dialog;
import android.content.Context;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import com.blankj.utilcode.util.ScreenUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.TouchUtils;
import com.xscm.modulemain.R;
import com.xscm.modulemain.databinding.DialogCustomInputBinding;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.bean.SongPlaylist;
import com.xscm.moduleutil.event.GiftUserRefreshEvent;
import com.xscm.moduleutil.event.RoomGiftClickToEvent;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.widget.dialog.BaseDialog;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import io.reactivex.disposables.Disposable;
/**
* 自定义输入对话框
*/
public class CustomInputDialog extends BaseDialog<DialogCustomInputBinding> {
GiftSongDialog giftSongDialog;
private String mGiftId, mGiftNum;
private SongPlaylist.SongPlaylistBean mSongPlaylistBean;
private OnDialogDismissListener mListener;
public CustomInputDialog(@NonNull Context context) {
super(context);
}
// 设置监听器
public void setOnDialogDismissListener(OnDialogDismissListener listener) {
this.mListener = listener;
}
// 定义回调接口
public interface OnDialogDismissListener {
void onDialogDismiss(boolean dataChanged);
}
@Override
public int getLayoutId() {
return R.layout.dialog_custom_input;
}
@Override
public void initView() {
setCancelable(false);
setCanceledOnTouchOutside(false);
Window window = getWindow();
window.setLayout((int) (ScreenUtils.getScreenWidth() * 315.f / 375), WindowManager.LayoutParams.WRAP_CONTENT);
mBinding.ivClose.setOnClickListener(v -> dismiss());
}
@Override
public void initData() {
mBinding.ivClose.setOnClickListener(v -> {
dismiss();
// 通知Activity对话框关闭但数据未更改
if (mListener != null) {
mListener.onDialogDismiss(false);
}
});
mBinding.tvCancel.setOnClickListener(v -> {
dismiss();
// 通知Activity对话框关闭但数据未更改
if (mListener != null) {
mListener.onDialogDismiss(false);
}
});
mBinding.tvClickable.setOnClickListener(v -> {
giftSongDialog = new GiftSongDialog(getContext());
giftSongDialog.show();
giftSongDialog.setOnGiftConfirmListener(new GiftSongDialog.OnGiftConfirmListener() {
@Override
public void onGiftConfirm(String giftId, String name, String giftNum) {
mGiftId = giftId;
mGiftNum = giftNum;
mBinding.tvClickable.setText(name);
}
});
});
mBinding.tvConfirm.setOnClickListener(v -> {
if (mBinding.etInput.getText().toString().isEmpty()) {
ToastUtils.showLong("请输入歌曲名称");
return;
}
if (mBinding.tvClickable.getText().toString().isEmpty()) {
ToastUtils.showLong("请选择礼物");
return;
}
if (mSongPlaylistBean != null) {
RetrofitClient.getInstance().singerUpdateSong(mSongPlaylistBean.getId() + "", mBinding.etInput.getText().toString(), mGiftId, mGiftNum, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
dismiss();
// 通知Activity数据已更新
if (mListener != null) {
mListener.onDialogDismiss(true);
}
}
});
} else {
RetrofitClient.getInstance().singerAddSong(mBinding.etInput.getText().toString(), mGiftId, mGiftNum, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
dismiss();
// 通知Activity数据已更新
if (mListener != null) {
mListener.onDialogDismiss(true);
}
}
});
}
});
}
public void PlaylistBean(SongPlaylist.SongPlaylistBean songPlaylistBean) {
this.mSongPlaylistBean = songPlaylistBean;
setPlaylistBean();
}
private void setPlaylistBean() {
if (mSongPlaylistBean != null) {
mBinding.etInput.setText(mSongPlaylistBean.getSong_name());
mBinding.tvClickable.setText(mSongPlaylistBean.getGift_name());
mGiftId=mSongPlaylistBean.getGift_id();
mGiftNum=mSongPlaylistBean.getGift_num();
}
}
}

View File

@@ -0,0 +1,173 @@
package com.xscm.modulemain.dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import com.blankj.utilcode.util.ScreenUtils;
import com.xscm.modulemain.R;
import com.xscm.modulemain.databinding.DialogGiftSongBinding;
import com.xscm.moduleutil.adapter.GiftRoomAdapter;
import com.xscm.moduleutil.base.BaseFragment;
import com.xscm.moduleutil.base.CommonAppContext;
import com.xscm.moduleutil.bean.GiftNumBean;
import com.xscm.moduleutil.bean.RoonGiftModel;
import com.xscm.moduleutil.event.GiftUserRefreshEvent;
import com.xscm.moduleutil.event.RoomGiftClickToEvent;
import com.xscm.moduleutil.http.BaseObserver;
import com.xscm.moduleutil.http.RetrofitClient;
import com.xscm.moduleutil.widget.dialog.BaseDialog;
import com.xscm.moduleutil.widget.dialog.KeyboardPopupWindow;
import com.xscm.moduleutil.widget.dialog.SelectGiftNumPopupWindow;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;
/**
* 礼物歌曲对话框类
* 该类可能用于实现一个展示歌曲相关礼物的对话框界面
*/
public class GiftSongDialog extends BaseDialog<DialogGiftSongBinding> {
private GiftRoomAdapter roomAdapter;
private List<GiftNumBean> mGiftNumList;
private SelectGiftNumPopupWindow mSelectGiftNumPopupWindow;
private KeyboardPopupWindow mKeyboardPopupWindow;
private List<RoonGiftModel> giftList = new ArrayList<>();
private OnGiftConfirmListener onGiftConfirmListener;
public GiftSongDialog(@NonNull Context context) {
super(context, com.xscm.moduleutil.R.style.dialogBottom);
}
public interface OnGiftConfirmListener {
void onGiftConfirm(String giftId,String name, String giftNum);
}
public void setOnGiftConfirmListener(OnGiftConfirmListener listener) {
this.onGiftConfirmListener = listener;
}
@Override
public int getLayoutId() {
return R.layout.dialog_gift_song;
}
@Override
public void initView() {
EventBus.getDefault().register(this);
setCancelable(true);
setCanceledOnTouchOutside(true);
Window window = getWindow();
window.setGravity(Gravity.BOTTOM);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
mBinding.tvGiveCoinNum.setOnClickListener(this::onClick);
mBinding.tvGive.setOnClickListener(this::onClick);
}
private void onClick(View view1) {
if (view1.getId()== com.xscm.moduleutil.R.id.tv_give_coin_num){
if (mSelectGiftNumPopupWindow == null) {
mSelectGiftNumPopupWindow = new SelectGiftNumPopupWindow(getContext(), (adapter, view, position) -> {
GiftNumBean giftNumBean = (GiftNumBean) adapter.getItem(position);
if ("0".equals(giftNumBean.getNumber())) {//自定义
mKeyboardPopupWindow = new KeyboardPopupWindow(getContext(), getCurrentFocus());
mKeyboardPopupWindow.refreshKeyboardOutSideTouchable(false);//false开启键盘 true关闭键盘
mKeyboardPopupWindow.addRoomPasswordListener(new KeyboardPopupWindow.KeyboardCompleteListener() {//监听自定键盘的完成
@Override
public void inputComplete(String inputContent) {
mBinding.tvGiveCoinNum.setText(inputContent);
mKeyboardPopupWindow.releaseResources();
}
});
} else {
mBinding.tvGiveCoinNum.setText(giftNumBean.getNumber());
}
mSelectGiftNumPopupWindow.dismiss();
});
}
mSelectGiftNumPopupWindow.setData(mGiftNumList);
mSelectGiftNumPopupWindow.showAtLocation(mBinding.tvGiveCoinNum, Gravity.BOTTOM | Gravity.RIGHT, 100, 230);
}else if (view1.getId()== com.xscm.moduleutil.R.id.tv_give){
// 获取选中的礼物ID
String selectedGiftId = null;
String name="";
for (RoonGiftModel giftModel : giftList) {
if (giftModel.isChecked()) {
selectedGiftId = giftModel.getGift_id();
name=giftModel.getGift_name();
break;
}
}
// 获取礼物数量
String giftNum = mBinding.tvGiveCoinNum.getText().toString();
// 如果有选中的礼物,通过回调传递数据
if (selectedGiftId != null && onGiftConfirmListener != null) {
onGiftConfirmListener.onGiftConfirm(selectedGiftId,name, giftNum);
dismiss();
}
}
}
@Override
public void initData() {
mGiftNumList=new ArrayList<>();
mGiftNumList.add(new GiftNumBean("20", "x20"));
mGiftNumList.add(new GiftNumBean("15", "x15"));
mGiftNumList.add(new GiftNumBean("10", "x10"));
mGiftNumList.add(new GiftNumBean("5", "x5"));
mGiftNumList.add(new GiftNumBean("1", "x1"));
RetrofitClient.getInstance().getGiftList(0,"",new BaseObserver<List<RoonGiftModel>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(List<RoonGiftModel> roonGiftModels) {
giftList= roonGiftModels;
roomAdapter = new GiftRoomAdapter(CommonAppContext.getInstance(), roonGiftModels, 0, "0");
mBinding.rvGift.setAdapter(roomAdapter);
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftClicRoomkTEvent(RoomGiftClickToEvent event) {
String id = event.gift.getGift_id();
for (int i = 0; i < giftList.size(); i++) {
RoonGiftModel giftModel = giftList.get(i);
if (giftModel.getGift_id().equals(id)) {
if (giftModel.isChecked()) {
giftModel.setChecked(false);
} else {
giftModel.setChecked(true);
}
} else {
giftModel.setChecked(false);
}
}
if (event.adapter != null && event.adapter.get() != null) {
event.adapter.get().notifyDataSetChanged();
}
}
}

View File

@@ -136,12 +136,12 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
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_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.QXRoomSettingTypeRoomTypeHUYU, read, isSelected, false, false));// 添加的新的房间类型 ,交友 ,是原来的男神女神类型
dataList.add(new RoomSettingBean("互娱", "ic_jiaoy", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy, read, isSelected, false, false)); //原交友,更改互娱 2025年9月19日11:18:01
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)); //练歌房,原点歌房,同意的时候,走同意点歌的逻辑
@@ -278,9 +278,9 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
// }
else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeJiaoy) {
// MvpPre.changeRoomType(roomId, "7");
queren("7");
queren("9");
} else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeHUYU) {
queren("8");
queren("7");
} else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomTypeLianG){
queren("-1");
}else if (bean.getType() == RoomSettingBean.QXRoomSettingTypeRoomSetting) {
@@ -335,7 +335,7 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
// 创建并显示确认对话框
new ConfirmDialog(getActivity(),
"提示",
"即将修改房间类型为" + (type.equals("1") ? "点唱" : (type.equals("2") ? "拍卖" : (type.equals("3") ? "男神" : (type.equals("4") ? "女神" : (type.equals("7") ? "互娱" : (type.equals("8") ? "交友" :(type.equals("-1") ? "练歌房" : ""))))))),
"即将修改房间类型为" + (type.equals("1") ? "交友" : (type.equals("2") ? "拍卖" : (type.equals("3") ? "男神" : (type.equals("4") ? "女神" : (type.equals("7") ? "互娱" : (type.equals("9") ? "点唱" :(type.equals("-1") ? "练歌房" : ""))))))),
"确认",
"取消",
v -> {
@@ -361,7 +361,7 @@ public class RoomSettingFragment extends BaseMvpDialogFragment<RoomSettingPresen
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("8")) && roomInfoResp.getRoom_info().getLabel_id().equals("2")) {
|| 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不对和点唱有关系的所有需要关闭