pk房完成,剩余禁止对方麦未完成

拍卖房完成
点歌房完成,音乐播放需要测试
This commit is contained in:
2025-07-04 16:38:21 +08:00
parent 4c7e996706
commit 2d510ffe2a
640 changed files with 698375 additions and 163954 deletions

View File

@@ -46,9 +46,12 @@ dependencies {
androidTestImplementation libs.espresso.core
implementation project(':moduleUtil')
implementation project(':moduletablayout')
implementation 'com.alibaba:arouter-api:1.5.2'
//annotationProcessor
annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'
implementation 'com.github.JessYanCoding:AndroidAutoSize:v1.2.1'
}
apply plugin: 'com.alibaba.arouter' //

View File

@@ -3,13 +3,20 @@
package="com.example.moduleroom">
<application>
<meta-data
android:name="design_width_in_dp"
android:value="375" />
<meta-data
android:name="design_height_in_dp"
android:value="812" />
<activity
android:name=".activity.RoomActivity"
android:exported="false"
android:launchMode="singleInstance"
android:screenOrientation="portrait"
android:theme="@style/BaseAppTheme"
android:windowSoftInputMode="adjustPan" />
android:windowSoftInputMode="adjustPan"/>
</application>
</manifest>

View File

@@ -1,47 +1,364 @@
package com.example.moduleroom.activity;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.GsonUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RoomContacts;
import com.example.moduleroom.databinding.ActivityRoomBinding;
import com.example.moduleroom.dialog.ExitRoomBottomSheet;
import com.example.moduleroom.dialog.RequestDialogFragment;
import com.example.moduleroom.dialog.RoomOnlineDialogFragment;
import com.example.moduleroom.fragment.RoomChartsFragment;
import com.example.moduleroom.fragment.RoomNoticeDialogFragment;
import com.petterp.floatingx.assist.helper.FxScopeHelper;
import com.petterp.floatingx.listener.control.IFxControl;
import com.qxcm.moduleutil.base.CommonAppContext;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.bean.room.RoomOnline;
import com.qxcm.moduleutil.databinding.RoomDialogMusicWindowOpenBinding;
import com.qxcm.moduleutil.event.EffectEvent;
import com.qxcm.moduleutil.event.MusicEvent;
import com.qxcm.moduleutil.event.RoomOutEvent;
import com.qxcm.moduleutil.event.RoomWheatEvent;
import com.qxcm.moduleutil.interfaces.OnMusicItemClickListener;
import com.qxcm.moduleutil.listener.MessageListenerSingleton;
import com.qxcm.moduleutil.adapter.LikeUserAdapter;
import com.qxcm.moduleutil.bean.RoomCharmRankBean;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.RoomSettingEvent;
import com.qxcm.moduleutil.bean.room.RoomOnlineBean;
import com.example.moduleroom.fragment.RoomFragment;
import com.example.moduleroom.fragment.RoomPasswordSetDialogFragment;
import com.example.moduleroom.presenter.RoomPresenter;
import com.qxcm.moduleutil.activity.BaseMvpActivity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.adapter.CommonPageAdapter;
import com.qxcm.moduleutil.bean.room.RoomBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomOwnerBean;
import com.qxcm.moduleutil.bean.room.RoomPitBean;
import com.qxcm.moduleutil.bean.room.RoomUserBean;
import com.qxcm.moduleutil.dialog.ConfirmDialog;
import com.qxcm.moduleutil.event.RoomJoinMountModel;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.rtc.MusicPlayBean;
import com.qxcm.moduleutil.rtc.RtcCore;
import com.qxcm.moduleutil.utils.ARouteConstants;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.widget.CustomMusicFloatingView;
import com.qxcm.moduleutil.widget.MusicView;
import com.qxcm.moduleutil.widget.ViewUtils;
import com.tencent.imsdk.v2.V2TIMCallback;
import com.tencent.imsdk.v2.V2TIMManager;
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.agora.musiccontentcenter.Music;
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;
@Route(path = ARouteConstants.ROOM_DETAILS)
public class RoomActivity extends BaseMvpActivity<RoomPresenter, ActivityRoomBinding> implements RoomContacts.View {
public class RoomActivity extends BaseMvpActivity<RoomPresenter, ActivityRoomBinding> implements RoomContacts.View,
EasyPermissions.PermissionCallbacks {
private RoomFragment roomFragment;
CommonPageAdapter commonPageAdapter;
private RoomBean mRoomBean;
//房主信息
private RoomOwnerBean mRoomOwnerBean;
//房间用户信息
private RoomUserBean mRoomUserBean;
private List<RoomPitBean> mPitList = new ArrayList<>();
@Autowired
public String password;
@Autowired
public String roomId;
public static boolean sDestroied = false;
LikeUserAdapter<RoomOnlineBean> likeUserAdapter;
String[] permissions = {Manifest.permission.RECORD_AUDIO};
private RoomInfoResp mRoomInfoResp;
private boolean isSave = false;//活动是否将被系统回收
private IFxControl musicWindowControl;
private CustomMusicFloatingView customMusicFloatingView;
private int number = 0;
@Override
protected void onNewIntent(Intent intent) {
password = intent.getStringExtra("password");
String mRoomId = intent.getStringExtra("roomId");
if (roomId.equals(mRoomId) || TextUtils.isEmpty(mRoomId)) {
super.onNewIntent(intent);
sDestroied = false;
// MvpPre.getRoomIn(roomId, password);
// MvpPre.getRoomOnline(roomId, "1", "10");
} else {
releaseRoom();
startActivity(intent);
finish();
}
}
/**
* 释放当前房间
*/
private void releaseRoom() {
AgoraManager.getInstance(this).destroy();
// RtcManager.getInstance().leaveChannel(roomId);
// RtcManager.getInstance().setAudioUrl(null);
// EMqttService.cleanSubscribeRoom(roomId);
CommonAppContext.getInstance().isPlaying = false;
CommonAppContext.getInstance().isShow = false;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
isSave = false;
sDestroied = false;
// // 进入房间10s后检查是否显示提示上麦对话框
// new Handler(getMainLooper()).postDelayed(
// () -> EventBus.getDefault().post(new ShowOnWheatDialogEvent()),
// 10000);
}
@Override
protected void initData() {
if (!EasyPermissions.hasPermissions(this, permissions)) {
EasyPermissions.requestPermissions(this, "请开启录音使用权限",
1, permissions);
}
mBinding.roomTop.btnFollow.setOnClickListener(this::onClick);
mBinding.roomTop.btnNotice.setOnClickListener(this::onClick);
mBinding.roomTop.btnRanking.setOnClickListener(this::onClick);
mBinding.roomTop.btnCloseLive.setOnClickListener(this::onClick);
mBinding.roomTop.tvNum.setOnClickListener(this::onClick);
mBinding.roomTop.userRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
likeUserAdapter = new LikeUserAdapter<>();
mBinding.roomTop.userRecyclerView.setAdapter(likeUserAdapter);
likeUserAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
RoomOnlineDialogFragment.show(roomId, "", getSupportFragmentManager());
}
});
// onChatRoomViewCreation();
MessageListenerSingleton.getInstance().joinGroup(roomId);
SpUtil.saveMyRoomId(roomId);
MvpPre.getRoomIn(roomId, password);
MvpPre.getRoomOnline(roomId, "1", "10");
// customMusicFloatingView.initView();
// 使用 OnViewAttachListener 确保 View 已创建
// 设置监听器,等待 View 创建完成
// setMusicListener();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(RoomMessageEvent messageEvent) {
if (messageEvent.getMsgType() == 1005) {
mBinding.svgaGift.setSource(messageEvent.getText().getGiftInfo().getPlay_image(), 2);
} else if (messageEvent.getMsgType() == 123) {
EventBus.getDefault().post(new RoomSettingEvent());
} else if (messageEvent.getMsgType() == 1014) {
RoomSettingEvent roomSettingEvent = new RoomSettingEvent();
roomSettingEvent.setRoomId(messageEvent.getRoomId());
roomSettingEvent.setRoom_up_pit_type(messageEvent.getText().getRoom_up_pit_type());
roomSettingEvent.setType(messageEvent.getMsgType());
mRoomBean.setRoom_up_pit_type(messageEvent.getText().getRoom_up_pit_type() + "");
EventBus.getDefault().post(mRoomBean);
EventBus.getDefault().post(roomSettingEvent);
} else if (messageEvent.getMsgType() == 1013) {
int userid = messageEvent.getText().getFromUserInfo().getUser_id();
int userId2 = SpUtil.getUserId();
if (messageEvent.getText().getAction() == 1 && mRoomUserBean.getUser_id().equals(userId2 + "") && mRoomUserBean.getPit_number() == 9) {
queren(messageEvent.getText().getFromUserInfo().getNickname());
} else if (messageEvent.getText().getAction() == 4 && userid == userId2) {
queren1(messageEvent.getText().getFromUserInfo().getNickname());
} else if (messageEvent.getText().getAction() == 2) {
} else if (messageEvent.getText().getAction() == 3 && SpUtil.getUserId() == messageEvent.getText().getFromUserInfo().getUser_id()) {
}
} else if (messageEvent.getMsgType() == 1012) {
if (customMusicFloatingView != null) {
customMusicFloatingView.destroy();
}
AgoraManager.getInstance(RoomActivity.this).desMusic();
MvpPre.postRoomInfo(roomId);
} else if (messageEvent.getMsgType() == 124) {
RoomMessageEvent.text text = GsonUtils.fromJson(messageEvent.getText().getText(), RoomMessageEvent.text.class);
MusicPlayBean musicPlayBean = new MusicPlayBean();
musicPlayBean.setPosition(text.getPosition());
EventBus.getDefault().post(musicPlayBean);
} else if (messageEvent.getMsgType() == 1003) {//上麦操作
//
// RoomWheatEvent roomWheatEvent = new RoomWheatEvent();
// roomWheatEvent.setRoomId(roomId);
// roomWheatEvent.setOccupied(true);
// EventBus.getDefault().post(roomWheatEvent);
} else if (messageEvent.getMsgType() == 1004) {//下麦操作
// RoomWheatEvent roomWheatEvent = new RoomWheatEvent();
// roomWheatEvent.setRoomId(roomId);
// roomWheatEvent.setOccupied(false);
// EventBus.getDefault().post(roomWheatEvent);
} else if (messageEvent.getMsgType() == 1020) {
mRoomBean = messageEvent.getText().getRoomInfo();
EventBus.getDefault().post(mRoomBean);
changeBackgroundColor(mRoomBean.getRoom_background());
} else if (messageEvent.getMsgType() == 1011) {
if (messageEvent.getText().getFromUserInfo() != null) {
if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
MvpPre.quitRoom(roomId, SpUtil.getUserId() + "");
}
}
} else if (messageEvent.getMsgType() == 1001) {
number++;
mBinding.roomTop.tvNum.setText(number + "");
} else if (messageEvent.getMsgType() == 1002) {
number--;
mBinding.roomTop.tvNum.setText(number + "");
}else if (messageEvent.getMsgType() == 1029){
if (mRoomInfoResp.getUser_info().getPit_number()==9 && mRoomInfoResp.getUser_info().getUser_id().equals(SpUtil.getUserId() + "")){
querenPk(messageEvent.getText().getText(), messageEvent.getText().getPkId());
}
}
}
private void querenPk(String text,String pk_id) {
// 创建并显示确认对话框
new ConfirmDialog(this,
"温馨提示",
text,
"确认",
"拒绝",
v -> {
// 点击“确认”按钮时执行删除操作
MvpPre.acceptPk(pk_id, "1");
},
v -> {
MvpPre.acceptPk(pk_id, "2");
// 点击“取消”按钮时什么都不做
},true,10).show();
}
/**
* 修改背景图
*
* @param bjId
*/
public void changeBackgroundColor(String bjId) {
// 假设你的Activity有一个根布局例如 ConstraintLayout
// ImageUtils.loadHeadCC(bjId, mBinding.ivBg);
ImageUtils.loadImageWithCache(this, bjId, mBinding.ivBg);
}
public void changeBackground(int bjId) {
mBinding.ivBg.setImageDrawable(getResources().getDrawable(bjId));
}
public void setvisibTop(boolean is) {
mBinding.roomTop.getRoot().setVisibility(is ? VISIBLE : GONE);
}
/**
* 特效设置
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void setEffectSwitch(EffectEvent event) {
if (event.isEffectOn()) {//特效开启
mBinding.svgaGift.setVisibility(View.VISIBLE);
} else {
mBinding.svgaGift.closeEffect();
mBinding.svgaGift.setVisibility(View.GONE);
}
}
/**
* 坐骑进场特效
*
* @param roomJoinMountModel
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomJoinMount(RoomJoinMountModel roomJoinMountModel) {
if (!roomId.equals(roomJoinMountModel.getRoom_id())) {
return;
}
if (roomJoinMountModel.getShow_type() != 1) {
mBinding.svgaZuoji.setSource(roomJoinMountModel.getRide_url(), 2);
}
}
private void onClick(View view) {
int id = view.getId();
if (id == R.id.btn_follow) {
MvpPre.userGuanz(mRoomOwnerBean.getUser_id(), "2");
} else if (id == R.id.btn_notice) {
// RoomTipsView.show(this,view,"公告","公告内容");
RoomNoticeDialogFragment roomNoticeDialogFragment = new RoomNoticeDialogFragment(this);
roomNoticeDialogFragment.setTitle("公告");
roomNoticeDialogFragment.setContent(mRoomBean.getRoom_intro());
roomNoticeDialogFragment.show();
} else if (id == R.id.btn_ranking) {//排行榜
RoomChartsFragment.newInstance(roomId).show(getSupportFragmentManager(), "RoomChartsFragment");
} else if (id == R.id.btn_close_live) {
List<Fragment> fragments = new ArrayList<>();
roomFragment = RoomFragment.newInstance();
// fragments.add(RoomOnlineFragment.newInstance(resp));
fragments.add(roomFragment);
// fragments.add(RoomRankingFragment.newInstance(roomId));
commonPageAdapter = new CommonPageAdapter(getSupportFragmentManager(), fragments);
mBinding.vpRoomPager.setAdapter(commonPageAdapter);
mBinding.vpRoomPager.setCurrentItem(0);
if (commonPageAdapter != null && commonPageAdapter.getCount() < 3) {
// commonPageAdapter.addPage(0, RoomOnlineFragment.newInstance(roomId));
ExitRoomBottomSheet bottomSheet = ExitRoomBottomSheet.newInstance();
bottomSheet.setOnOptionSelectedListener(new ExitRoomBottomSheet.OnOptionSelectedListener() {
@Override
public void onMinimize() {
// 处理最小化逻辑,比如不销毁 Activity仅移至后台
CommonAppContext.getInstance().isShow = false;
// ARouter.getInstance().build(ARouteConstants.ME).navigation();//栈顶复用
moveTaskToBack(true);
}
@Override
public void onExitRoom() {
// 调用退出房间方法
MvpPre.quitRoom(roomId, SpUtil.getUserId() + "");
}
@Override
public void onCancel() {
// 用户点击取消,不做任何事
}
});
bottomSheet.show(getSupportFragmentManager(), "ExitRoomBottomSheet");
} else if (id == R.id.tv_num) {
RoomOnlineDialogFragment.show(roomId, "", getSupportFragmentManager());
}
}
@@ -50,9 +367,447 @@ public class RoomActivity extends BaseMvpActivity<RoomPresenter, ActivityRoomBin
return R.layout.activity_room;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomOut(RoomOutEvent roomOutEvent) {
MvpPre.quitRoom(roomId, SpUtil.getUserId() + "");
}
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, this);
}
public void upRoomInfo(RoomInfoResp resp) {
this.mRoomInfoResp=resp;
}
@Override
public void roomInfo(RoomInfoResp resp) {
this.mRoomInfoResp = resp;
RoomBean roomBean = resp.getRoom_info();
this.mRoomBean = roomBean;
this.mRoomUserBean = resp.getUser_info();
this.mRoomOwnerBean = resp.getRoom_owner();
this.mPitList = mRoomBean.getPit_list();
ImageUtils.loadHeadCC(resp.getRoom_info().getRoom_cover(), mBinding.roomTop.avatar);
mBinding.roomTop.name.setText(roomBean.getRoom_name());
mBinding.roomTop.idVal.setText("ID:" + roomBean.getRoom_number());
if (mRoomUserBean.getIs_room_owner() == 1) {
mBinding.roomTop.btnFollow.setVisibility(GONE);
} else {
mBinding.roomTop.btnFollow.setVisibility(VISIBLE);
if (resp.isCollect()) {
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.collected));
}
}
number = roomBean.getOnline_number();
mBinding.roomTop.tvNum.setText(number + "");
if (!isFinishing() && !isDestroyed()) {
if (roomFragment == null || !roomFragment.isAdded()) {
roomFragment = RoomFragment.newInstance(resp, "");
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.vp_room_pager, roomFragment)
.commitAllowingStateLoss();
} else {
roomFragment.refreshData(resp);
}
} else {
Log.e("Fragment", "Fragment transaction skipped due to state loss.");
}
// 更新引用
// roomFragment = newFragment;
if (!roomBean.getType_id().equals("6")) {
changeBackgroundColor(roomBean.getRoom_background());
} else {
changeBackground(com.qxcm.moduleutil.R.mipmap.cabin_bj);
}
CommonAppContext.getInstance().isPlaying = true;
CommonAppContext.getInstance().playId = roomId;
CommonAppContext.getInstance().playName = mRoomBean.getRoom_name();
CommonAppContext.getInstance().playCover = resp.getRoom_info().getRoom_cover();
CommonAppContext.getInstance().showSelf = resp.getIs_show_self() == 1;
if (mRoomUserBean.getIs_collect() == 1) {
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.yishouc));
} else {
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.collect));
}
if (roomBean.getType_id().equals("1") && roomBean.getLabel_id().equals("2")) {
AgoraManager.getInstance(this).setBjMusic(false);
} else {
AgoraManager.getInstance(this).setBjMusic(true);
}
AgoraManager.getInstance(this).stopMuisc();
initializeAudio();
}
/**
* @author qx
* @data 2025/6/27
* @description: 初始化音频,初始的时候,当是在麦上,将用户设置为主持,在麦下,设置为观众, 默认关闭麦克风
*/
public void initializeAudio() {
if (mRoomUserBean.getPit_number() != 0) {
AgoraManager.getInstance(this).ClientRole(true);
AgoraManager.getInstance(this).muteLocalAudioStream(false);
} else {
AgoraManager.getInstance(this).ClientRole(false);
AgoraManager.getInstance(this).muteLocalAudioStream(true);
}
AgoraManager.getInstance(this).setLocalAudioEnabled(false);
}
@Override
public void showPasswordDialog() {
RoomPasswordSetDialogFragment roomPasswordSetDialogFragment = RoomPasswordSetDialogFragment.newInstance(true, roomId);
roomPasswordSetDialogFragment.show(getSupportFragmentManager());
}
@Override
public void enterFail() {
releaseRoom();
finish();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void logOutEvent(MusicEvent musicEvent) {
// mBinding.musicView.setVisibility(VISIBLE);
// musicWindowControl.show(); // <<< 添加这行代码
xunf();
RequestDialogFragment.show(roomId, mRoomInfoResp, getSupportFragmentManager());
}
/**
* 背景音乐
*/
private void xunf() {
musicWindowControl = FxScopeHelper.builder()
.setLayout(com.qxcm.moduleutil.R.layout.room_dialog_music_window_open)
.build()
.toControl(this);
// 创建自定义悬浮窗包装类
customMusicFloatingView = new CustomMusicFloatingView(this, musicWindowControl);
customMusicFloatingView.setOnItemClickListener(new OnMusicItemClickListener() {
@Override
public void onMinimize() {
customMusicFloatingView.destroy();
AgoraManager.getInstance(RoomActivity.this).desMusic();
}
@Override
public void onOpenList() {
// 打开音乐列表
// ToastUtils.showShort("打开音乐列表");
RequestDialogFragment.show(roomId, mRoomInfoResp, getSupportFragmentManager());
}
@Override
public void onPause() {
// ToastUtils.showShort("暂停播放");
// 调用播放器或通知 MusicView
AgoraManager.getInstance(RoomActivity.this).pauseMusic();
}
@Override
public void onResume() {
// ToastUtils.showShort("恢复播放");
// 调用播放器或通知 MusicView
AgoraManager.getInstance(RoomActivity.this).resumeMusic();
}
@Override
public void onNext() {
// ToastUtils.showShort("下一首");
// 切换歌曲
// List<Music> musicSongBeans = AgoraManager.getInstance(RoomActivity.this).getMusicList();
AgoraManager.getInstance(RoomActivity.this).nextSong();
}
});
// customMusicFloatingView.initView();
customMusicFloatingView.show();
// 等待 View 创建完成后才绑定点击事件
ViewUtils.waitUntilViewReady(musicWindowControl, view -> {
customMusicFloatingView.initView(); // 这里 fxControl.getView() 不再为 null
customMusicFloatingView.updatePlayState(false);
});
}
@Override
protected void onResume() {
super.onResume();
CommonAppContext.getInstance().isShow = true;
CommonAppContext.getInstance().isPlaying = true;
}
@Override
public void getRoomOnline(RoomOnline onlineBean) {
if (onlineBean != null) {
if (onlineBean.getOn_pit().size() > 0) {
if (onlineBean.getOn_pit().size() > 5) {
likeUserAdapter.setNewData(onlineBean.getOn_pit().subList(0, 5));
} else {
likeUserAdapter.setNewData(onlineBean.getOn_pit());
}
} else if (onlineBean.getOff_pit().size() > 0) {
if (onlineBean.getOff_pit().size() > 5) {
likeUserAdapter.setNewData(onlineBean.getOff_pit().subList(0, 5));
} else {
likeUserAdapter.setNewData(onlineBean.getOff_pit());
}
}
}
}
@Override
public void applyPit() {
}
@Override
public void downPit() {
}
@Override
public void applySong() {
}
@Override
public void agreeSong() {
}
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
@Override
public void postRoomInfo(RoomInfoResp resp) {
RoomBean roomBean = resp.getRoom_info();
this.mRoomBean = roomBean;
this.mRoomUserBean = resp.getUser_info();
this.mRoomOwnerBean = resp.getRoom_owner();
this.mPitList = mRoomBean.getPit_list();
ImageUtils.loadHeadCC(resp.getRoom_info().getRoom_cover(), mBinding.roomTop.avatar);
mBinding.roomTop.name.setText(roomBean.getRoom_name());
mBinding.roomTop.idVal.setText(roomBean.getRoom_number());
if (mRoomUserBean.getIs_room_owner() == 1) {
mBinding.roomTop.btnFollow.setVisibility(GONE);
} else {
mBinding.roomTop.btnFollow.setVisibility(VISIBLE);
if (resp.isCollect()) {
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.collected));
}
}
if (!isFinishing() && !isDestroyed()) {
if (roomFragment == null || !roomFragment.isAdded()) {
roomFragment = RoomFragment.newInstance(resp, "");
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.vp_room_pager, roomFragment)
.commitAllowingStateLoss();
} else {
roomFragment.refreshData(resp);
}
} else {
Log.e("Fragment", "Fragment transaction skipped due to state loss.");
}
if (mRoomUserBean.getIs_collect() == 1) {
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.yishouc));
} else {
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.collect));
}
if (roomBean.getType_id().equals("1") && roomBean.getLabel_id().equals("2")) {
AgoraManager.getInstance(this).setBjMusic(false);
} else {
AgoraManager.getInstance(this).setBjMusic(true);
}
AgoraManager.getInstance(this).stopMuisc();
initializeAudio();
}
@Override
public void getCharmRank(List<RoomCharmRankBean> list) {
}
@Override
public void changeSong() {
}
@Override
public void hostUserPit() {
}
@Override
public void quitRoom() {
CommonAppContext.getInstance().isPlaying = false;
CommonAppContext.getInstance().isShow = false;
// AgoraManager.getInstance(this).destroy();
AgoraManager.getInstance(this).leaveRoom();
AgoraManager.getInstance(this).destroy();
V2TIMManager.getInstance().quitGroup("room" + roomId, new V2TIMCallback() {
@Override
public void onSuccess() {
// 退出群组成功
}
@Override
public void onError(int code, String desc) {
// 退出群组失败
}
});
finish();
}
@Override
public void userGuanzSuccess(String s) {
if (mRoomUserBean.getIs_collect() == 1) {
mRoomUserBean.setIs_collect(0);
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.collect));
} else {
mRoomUserBean.setIs_collect(1);
mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.yishouc));
}
}
@Override
public void acceptPk() {
}
private void queren1(String nickname) {
// 创建并显示确认对话框
new ConfirmDialog(this,
"温馨提示",
"您申请点歌模式被主持人拒绝",
"确认",
"取消",
v -> {
// 点击“确认”按钮时执行删除操作
},
v -> {
// 点击“取消”按钮时什么都不做
},false,0).show();
}
private void queren(String nickname) {
// 创建并显示确认对话框
new ConfirmDialog(this,
"温馨提示",
"亲爱的主持,您好!\n\n " + "\t" + nickname + "正在发起点唱申请,进入点唱模式后背景音乐将自动停止播放",
"确认",
"拒绝",
v -> {
// 点击“确认”按钮时执行
MvpPre.agreeSong(roomId, "1");
},
v -> {
// 点击“取消”按钮时什么都不做
MvpPre.agreeSong(roomId, "2");
},true,10).show();
}
@Override
protected void onDestroy() {
// 移除 EventBus 注册
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
MessageListenerSingleton.reset(roomId); // 主动清理
AgoraManager.getInstance(this).destroy(); // 确保释放 Agora 资源
if (customMusicFloatingView != null) {
customMusicFloatingView.destroy();
}
CommonAppContext.getInstance().isPlaying = false;
CommonAppContext.getInstance().isShow = false;
sDestroied = true;
SpUtil.setMusicName("");
if (isSave) {
finish();
}
super.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
isSave = true;
}
private static final String[] AUDIO_PERMISSIONS = {Manifest.permission.RECORD_AUDIO};
private void requestAudioPermission() {
if (!EasyPermissions.hasPermissions(getApplicationContext(), AUDIO_PERMISSIONS)) {
EasyPermissions.requestPermissions(
this,
"需要录音权限以使用语音功能",
1001,
AUDIO_PERMISSIONS
);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
if (perms.contains(Manifest.permission.RECORD_AUDIO)) {
Log.d("Permission", "录音权限已授权");
}
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
} else {
ToastUtils.showShort("需要录音权限才能继续");
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMusicEvent(Music event) {
if (customMusicFloatingView != null) {
customMusicFloatingView.onMusicEvent(event);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMusicPlay(MusicPlayBean musicPlayBean) {
if (customMusicFloatingView != null) {
customMusicFloatingView.updateProgress(Math.toIntExact(musicPlayBean.getPosition()));
}
}
}

View File

@@ -0,0 +1,282 @@
package com.example.moduleroom.adapter;
import android.annotation.SuppressLint;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.RoomAutionTimeBean;
import com.qxcm.moduleutil.bean.RoomAuctionABean;
import com.qxcm.moduleutil.bean.RoomRelationBean;
import com.qxcm.moduleutil.bean.RoonGiftModel;
import com.qxcm.moduleutil.bean.ViewItem;
import com.qxcm.moduleutil.bean.room.EMMessageInfo;
import com.qxcm.moduleutil.bean.room.RoomGiveGiftModel;
import com.qxcm.moduleutil.utils.ImageUtils;
import java.util.ArrayList;
import java.util.List;
public class CardRelationAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<ViewItem> viewItems = new ArrayList<>();
private int selectedRelationPosition = -1;
private int selectedTimePosition = -1;
private int selectedGiftPosition = -1;
public void submitList(List<ViewItem> items) {
viewItems.clear();
viewItems.addAll(items);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return viewItems.get(position).getType();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case ViewItem.TYPE_TEXT:
return new TextViewHolder(inflater.inflate(R.layout.item_text_view, parent, false));
case ViewItem.TYPE_RELATION:
return new RelationViewHolder(inflater.inflate(R.layout.item_relation, parent, false));
case ViewItem.TYPE_IMAGE_SELECTION:
return new RelationViewTimHolder(inflater.inflate(R.layout.item_relation, parent, false));
case ViewItem.TYPE_GIFT:
return new GiftViewHolder(inflater.inflate(R.layout.item_gift_card, parent, false));
default:
throw new IllegalArgumentException("Unknown view type");
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") int position) {
ViewItem item = viewItems.get(position);
switch (item.getType()) {
case ViewItem.TYPE_TEXT:
((TextViewHolder) holder).bind((String) item.getData());
break;
case ViewItem.TYPE_RELATION:
RoomRelationBean relationBean = (RoomRelationBean) item.getData();
((RelationViewHolder) holder).bind(relationBean);
holder.itemView.setOnClickListener(v -> {
// 取消之前选中的 item
if (selectedRelationPosition != -1) {
ViewItem oldItem = viewItems.get(selectedRelationPosition);
if (oldItem.getData() instanceof RoomRelationBean) {
((RoomRelationBean) oldItem.getData()).setSelected(false);
}
}
// 设置当前 item 为选中
relationBean.setSelected(true);
selectedRelationPosition = position;
notifyDataSetChanged();
});
break;
case ViewItem.TYPE_GIFT:
RoonGiftModel giftModel = (RoonGiftModel) item.getData();
((GiftViewHolder)holder).bind(giftModel);
holder.itemView.setOnClickListener(v -> {
// 取消之前选中的 item
if (selectedGiftPosition != -1) {
ViewItem oldItem = viewItems.get(selectedGiftPosition);
if (oldItem.getData() instanceof RoonGiftModel) {
((RoonGiftModel) oldItem.getData()).setSelected(false);
}
}
// 设置当前 item 为选中
giftModel.setSelected(true);
selectedGiftPosition = position;
notifyDataSetChanged();
});
break;
case ViewItem.TYPE_IMAGE_SELECTION:
RoomAutionTimeBean roomAutionTimeBean = (RoomAutionTimeBean) item.getData();
((RelationViewTimHolder)holder).bind(roomAutionTimeBean);
holder.itemView.setOnClickListener(v -> {
// 取消之前选中的 item
if (selectedTimePosition != -1) {
ViewItem oldItem = viewItems.get(selectedTimePosition);
if (oldItem.getData() instanceof RoomAutionTimeBean) {
((RoomAutionTimeBean) oldItem.getData()).setSelected(false);
}
}
// 设置当前 item 为选中
roomAutionTimeBean.setSelected(true);
selectedTimePosition = position;
notifyDataSetChanged();
});
break;
}
}
public interface OnItemSelectedListener {
void onItemSelected(int viewType, int position);
}
private OnItemSelectedListener listener;
public void setOnItemSelectedListener(OnItemSelectedListener listener) {
this.listener = listener;
}
public RoomRelationBean getSelectedRelation() {
if (selectedRelationPosition != -1) {
ViewItem item = viewItems.get(selectedRelationPosition);
if (item.getData() instanceof RoomRelationBean) {
return (RoomRelationBean) item.getData();
}
}
return null;
}
public RoomAutionTimeBean getSelectedTime() {
if (selectedTimePosition != -1) {
ViewItem item = viewItems.get(selectedTimePosition);
if (item.getData() instanceof RoomAutionTimeBean) {
return (RoomAutionTimeBean) item.getData();
}
}
return null;
}
public RoonGiftModel getSelectedGift() {
if (selectedGiftPosition != -1) {
ViewItem item = viewItems.get(selectedGiftPosition);
if (item.getData() instanceof RoonGiftModel) {
return (RoonGiftModel) item.getData();
}
}
return null;
}
@Override
public int getItemCount() {
return viewItems.size();
}
static class TextViewHolder extends RecyclerView.ViewHolder {
TextView textView;
TextViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.tv_name);
}
void bind(String text) {
textView.setText(text);
}
}
static class RelationViewHolder extends RecyclerView.ViewHolder {
TextView relationName;
RelationViewHolder(View itemView) {
super(itemView);
relationName = itemView.findViewById(R.id.tv_name);
}
void bind(RoomRelationBean bean) {
relationName.setText(bean.getName());
if (bean.isSelected()) {
relationName.setBackground(itemView.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.gx_xz_bj));
relationName.setTextColor(itemView.getResources().getColor(com.qxcm.moduleutil.R.color.color_FF333333));
} else {
relationName.setBackground(itemView.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.gux_bj));
relationName.setTextColor(itemView.getResources().getColor(com.qxcm.moduleutil.R.color.white));
}
}
}
static class RelationViewTimHolder extends RecyclerView.ViewHolder {
TextView relationName;
RelationViewTimHolder(View itemView) {
super(itemView);
relationName = itemView.findViewById(R.id.tv_name);
}
void bind(RoomAutionTimeBean bean) {
relationName.setText(bean.getDays()+"");
if (bean.isSelected()) {
relationName.setBackground(itemView.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.gx_xz_bj));
relationName.setTextColor(itemView.getResources().getColor(com.qxcm.moduleutil.R.color.color_FF333333));
} else {
relationName.setBackground(itemView.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.gux_bj));
relationName.setTextColor(itemView.getResources().getColor(com.qxcm.moduleutil.R.color.white));
}
}
}
static class GiftViewHolder extends RecyclerView.ViewHolder {
TextView tv_gift_name;
TextView tv_gift_price;
ImageView iv_gift_pic;
ConstraintLayout item_layout;
ImageView ivDownOn;
ConstraintLayout cl_iv_down_on;
GiftViewHolder(View itemView) {
super(itemView);
tv_gift_name = itemView.findViewById(R.id.tv_gift_name);
tv_gift_price = itemView.findViewById(R.id.tv_gift_price);
iv_gift_pic = itemView.findViewById(R.id.iv_gift_pic);
item_layout = itemView.findViewById(R.id.cl_gift);
ivDownOn = itemView.findViewById(R.id.iv_down_on);
cl_iv_down_on = itemView.findViewById(R.id.cl_iv_down_on);
}
void bind(RoonGiftModel bean) {
tv_gift_name.setText(bean.getGift_name());
//设置礼物价格
String surplusTxt = bean.getGift_price();
SpannableStringBuilder stringBuilder = new SpannableStringBuilder(surplusTxt);
//ForegroundColorSpan 为文字前景色BackgroundColorSpan为文字背景色
tv_gift_price.setText(stringBuilder);
// viewHolder.item_layout.setTag(R.id.id_gift_tag, giftModel);
//加载礼物图片
ImageUtils.loadImageView(bean.getBase_image(), iv_gift_pic);
//设置选中后的样式
if (bean.isSelected()) {//被选中
cl_iv_down_on.setBackgroundResource(com.qxcm.moduleutil.R.mipmap.room_gift_bjx);
ivDownOn.setVisibility(View.GONE);
} else {
ivDownOn.setVisibility(View.GONE);
cl_iv_down_on.setBackgroundResource(0);
}
}
}
}

View File

@@ -0,0 +1,507 @@
package com.example.moduleroom.adapter;
import static com.qxcm.moduleutil.utils.UtilConfig.getContext;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.vectordrawable.graphics.drawable.Animatable2Compat;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.ConvertUtils;
import com.blankj.utilcode.util.GsonUtils;
import com.blankj.utilcode.util.SpanUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.integration.webp.decoder.WebpDrawable;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.google.gson.reflect.TypeToken;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.room.EMMessageInfo;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.logger.Logger;
import com.qxcm.moduleutil.widget.NewView;
import com.qxcm.moduleutil.widget.NobilityView;
import com.qxcm.moduleutil.widget.RoleView;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author xf
*/
public class EaseChatAdapter extends BaseMultiItemQuickAdapter<EMMessageInfo, BaseViewHolder> {
// private int[] a = {R.drawable.random0s, R.drawable.random1s, R.drawable.random2s, R.drawable.random3s, R.drawable.random4s, R.drawable.random5s, R.drawable.random6s, R.drawable.random7s, R.drawable.random8s, R.drawable.random9s};
private int listShowType = 1;
public static int SHOW_TYPE_ALL = 1;
public static int SHOW_TYPE_USER = 2;
public static int SHOW_TYPE_SYSTEM = 3;
private List<EMMessageInfo> allMsgList;
private List<EMMessageInfo> userMsgList;
private List<EMMessageInfo> systemMsgList;
public EaseChatAdapter() {
super(null);
addItemType(1, com.qxcm.moduleutil.R.layout.ease_row_received_message_system);//系统消息、官方公告
addItemType(2, com.qxcm.moduleutil.R.layout.ease_row_received_message_user_send);//用户发送的消息
addItemType(3, com.qxcm.moduleutil.R.layout.ease_row_received_message_user_send);//加入房间 、赠送礼物、上下麦、禁言 2025年6月12日15:42:08让和聊天显示的是同一个额布局后面需要修改
// addItemType(3, com.qxcm.moduleutil.R.layout.ease_row_received_message_join_room);//加入房间 、赠送礼物、上下麦、禁言
addItemType(4, com.qxcm.moduleutil.R.layout.ease_row_received_message_new_user);//新用户注册
addItemType(5, com.qxcm.moduleutil.R.layout.ease_row_received_message_wagging);//摇签
addItemType(6, com.qxcm.moduleutil.R.layout.ease_row_received_message_expression);//表情
// addItemType(8, com.qxcm.moduleutil.R.layout.ease_row_received_message_game);//球球大作战
// addItemType(9, com.qxcm.moduleutil.R.layout.ease_row_received_message_demand);//派单需求
// addItemType(10, com.qxcm.moduleutil.R.layout.ease_row_received_message_red_rain);//红包雨消息
// addItemType(11, com.qxcm.moduleutil.R.layout.ease_row_received_message_red_rain);//红包雨消息结束
allMsgList = new ArrayList<>();
userMsgList = new ArrayList<>();
systemMsgList = new ArrayList<>();
}
public void setShowType(int type){
if (type == listShowType){
return;
}
listShowType = type;
List currData = new ArrayList();
if (type == SHOW_TYPE_ALL){
currData.addAll(allMsgList);
}else if(type == SHOW_TYPE_USER){
currData.addAll(userMsgList);
}else if(type == SHOW_TYPE_SYSTEM){
currData.addAll(systemMsgList);
}
setNewData(currData);
//notifyDataSetChanged();
}
@Override
protected void convert(BaseViewHolder helper, EMMessageInfo item) {
RoomMessageEvent emMessage = item.getEmMessage();
// EMTextMessageBody txtBody = (EMTextMessageBody) emMessage.getBody();
// Spanned spanned = Html.fromHtml(txtBody.getMessage());
// String message = txtBody.getMessage();
// Log.e("环信消息", message);
// SpanUtils spanUtils = new SpanUtils();
// String role = emMessage.getStringAttribute("role", "0");
// String userIsNew = emMessage.getStringAttribute("user_is_new", "0");
// String rankIcon = emMessage.getStringAttribute("rank_icon", "");
// String nobilityIcon = emMessage.getStringAttribute("nobility_icon", "");
// String nickname = emMessage.getStringAttribute("nickname", "");
// String type = emMessage.getStringAttribute("type", "");
// String charmIcon = emMessage.getStringAttribute("charm_icon", null);
// String user_title = emMessage.getStringAttribute("user_title", null);
// String emoji_special = emMessage.getStringAttribute("face_special", message);
// String userId = emMessage.getStringAttribute("user_id", null);
// Spanned spanned1 = null;
//
switch (helper.getItemViewType()) {
case 1:
// //如果等于空,隐藏
// if (TextUtils.isEmpty(type)) {
// helper.getView(R.id.tv_content).setVisibility(View.GONE);
// } else {
helper.getView(R.id.tv_content).setVisibility(View.VISIBLE);
// emMessage = message.replace("\n", "<br />");//解决不换行的问题
// spanned1 = Html.fromHtml(message);
helper.setText(R.id.tv_content, emMessage.getText().getText());
// if (spanned1.toString().contains("恭喜") && spanned1.toString().contains("获得")) {
// helper.itemView.setOnClickListener(view -> ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", userId).withBoolean("returnRoom", true).navigation());
// }
// }
//
break;
case 2:
ImageUtils.loadHeadCC(emMessage.getText().getFromUserInfo().getAvatar(), helper.getView(com.qxcm.moduleutil.R.id.avatar));
helper.setText(com.qxcm.moduleutil.R.id.tv_name, emMessage.getText().getFromUserInfo().getNickname());
helper.setText(com.qxcm.moduleutil.R.id.tv_content, emMessage.getText().getText());
List<String> images =emMessage.getText().getFromUserInfo().getIcon();
LinearLayout ll_images = helper.getView(com.qxcm.moduleutil.R.id.line);
ll_images.removeAllViews();
for (String url : images) {
if (url.contains("http")) {
ImageView imageView = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_14)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView.setLayoutParams(params);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView);
ll_images.addView(imageView);
}
}
break;
case 3:
// int paddingLeftValues3 = 0;//距离左边距(默认加上8dp间距)
// ivRole = helper.getView(R.id.iv_role);
// ivNew = helper.getView(R.id.iv_new);
// ivGrade = helper.getView(R.id.iv_grade);
// ivTitle = helper.getView(R.id.iv_title_label);
// ivNHobility = helper.getView(R.id.iv_nobility);
// TextView tvContent3 = helper.getView(R.id.tv_content);
// ivRole.setRole(Integer.parseInt(role));
// ivNew.setNew(Integer.parseInt(userIsNew));
// ivGrade.setGrade(rankIcon);
// ivTitle.setLabelView(user_title);
// ivTitle.setLabelView(user_title);
// ivNHobility.setNobility(nobilityIcon);
// ImageUtils.loadIcon(charmIcon, helper.getView(R.id.iv_charm));
// // ---------------------------- 获取 最终的padding值
// //爵位图标判断
// if (ivNHobility.getVisibility() == View.VISIBLE) {
// paddingLeftValues3 += 23;
// }
// //角色图标
// if (ivRole.getVisibility() == View.VISIBLE) {
// paddingLeftValues3 += 27;
// }
// //新人图标
// if (ivNew.getVisibility() == View.VISIBLE) {
// paddingLeftValues3 += 33;
// }
// //等级图标
// if (ivGrade.getVisibility() == View.VISIBLE) {
// paddingLeftValues3 += 33;
// }
//
// //称号图标
// try {
// if (user_title == null || user_title.isEmpty()){
// user_title = "";
// }
// String s = user_title.substring(user_title.lastIndexOf("=") + 1);
// if (TextUtils.isEmpty(s)){
// s = "1";
// }
// int mWidth = (int) (Float.parseFloat(s) * 20);
// int mHeight = 20;
// ViewGroup.LayoutParams layoutParams = ivTitle.getLayoutParams();
// layoutParams.width = ConvertUtils.dp2px(mWidth);
// layoutParams.height = ConvertUtils.dp2px(mHeight);
// ivTitle.setLayoutParams(layoutParams);
// if (ivTitle.getVisibility() == View.VISIBLE) {
// paddingLeftValues3 += (mWidth + 3);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// //魅力图标
// if (helper.getView(R.id.iv_charm).getVisibility() == View.VISIBLE) {
// paddingLeftValues3 += 23;
// }
// spanUtils.append(nickname + " ").setForegroundColor(mContext.getResources().getColor(R.color.color_FFFFBC00)).setFontSize(ResourceUtil.getDimen(R.dimen.sp_13))
// .append(spanned);
// tvContent3.setPadding(ResourceUtil.getDimen(String.valueOf(paddingLeftValues3)), 0, 0, 0);
// tvContent3.setText(spanUtils.create());
ImageUtils.loadHeadCC(emMessage.getText().getFromUserInfo().getAvatar(), helper.getView(com.qxcm.moduleutil.R.id.avatar));
helper.setText(com.qxcm.moduleutil.R.id.tv_name, emMessage.getText().getFromUserInfo().getNickname());
helper.setText(com.qxcm.moduleutil.R.id.tv_content, emMessage.getText().getText());
List<String> images1 =emMessage.getText().getFromUserInfo().getIcon();
LinearLayout ll_images1 = helper.getView(com.qxcm.moduleutil.R.id.line);
ll_images1.removeAllViews();
for (String url : images1) {
if (url.contains("http")) {
ImageView imageView = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_14)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView.setLayoutParams(params);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView);
ll_images1.addView(imageView);
}
}
break;
// case 4:
// TextView tvContent7 = helper.getView(R.id.tv_content);
// ivNew = helper.getView(R.id.new_view);
// ivNew.setNew(1);
// tvContent7.setText(new SpanUtils().append(spanned).create());
// break;
// //抽签
// case 5:
// String number = emMessage.getStringAttribute("number", "");
// ivRole = helper.getView(R.id.iv_role);
// ivNew = helper.getView(R.id.iv_new);
// ivGrade = helper.getView(R.id.iv_grade);
// ivTitle = helper.getView(R.id.iv_title_label);
// ivNHobility = helper.getView(R.id.iv_nobility);
// tvName = helper.getView(R.id.tv_name);
// TextView tvContent5 = helper.getView(R.id.tv_content);
// ivRole.setRole(Integer.parseInt(role));
// ivNew.setNew(Integer.parseInt(userIsNew));
// ivGrade.setGrade(rankIcon);
// //称号图标
// try {
// String s = user_title.substring(user_title.lastIndexOf("=") + 1);
// int mWidth = (int) (Float.parseFloat(s) * 20);
// int mHeight = 20;
// ViewGroup.LayoutParams layoutParams = ivTitle.getLayoutParams();
// layoutParams.width = ConvertUtils.dp2px(mWidth);
// layoutParams.height = ConvertUtils.dp2px(mHeight);
// ivTitle.setLayoutParams(layoutParams);
// } catch (Exception e) {
// e.printStackTrace();
// }
// ivTitle.setLabelView(user_title);
// ivNHobility.setNobility(nobilityIcon);
// ImageUtils.loadIcon(charmIcon, helper.getView(R.id.iv_charm));
// tvName.setText(String.format("%s:", nickname));
// tvContent5.setText(new SpanUtils().append(spanned).create());
// GlideApp.with(mContext).load(String.format("http://soundriver.oss-cn-hangzhou.aliyuncs.com/custom/random%ss.webp", number)).into(new SimpleTarget<Drawable>() {
// @Override
// public void onResourceReady(@NonNull Drawable drawable, @Nullable Transition<? super Drawable> transition) {
// if (drawable instanceof WebpDrawable) {
// AppCompatImageView imageView = helper.getView(R.id.iv_wagginh);
// imageView.setImageDrawable(drawable);
// ((WebpDrawable) drawable).start();
// ((WebpDrawable) drawable).setLoopCount(1);
// ((WebpDrawable) drawable).registerAnimationCallback(new Animatable2Compat.AnimationCallback() {
// @Override
// public void onAnimationEnd(Drawable drawable) {
// super.onAnimationEnd(drawable);
// helper.setImageResource(R.id.iv_wagginh, a[Integer.parseInt(number)]);
// }
// });
// }
// }
// });
// break;
// //表情
// case 6:
// ivRole = helper.getView(R.id.iv_role);
// ivNew = helper.getView(R.id.iv_new);
// ivGrade = helper.getView(R.id.iv_grade);
// ivTitle = helper.getView(R.id.iv_title_label);
// ivNHobility = helper.getView(R.id.iv_nobility);
// tvName = helper.getView(R.id.tv_name);
// ivRole.setRole(Integer.parseInt(role));
// ivNew.setNew(Integer.parseInt(userIsNew));
// ivGrade.setGrade(rankIcon);
// ivTitle.setLabelView(user_title);
// ivNHobility.setNobility(nobilityIcon);
// tvName.setText(Html.fromHtml(nickname));
// ImageUtils.loadIcon(charmIcon, helper.getView(R.id.iv_charm));
// ImageLoader.loadIcon(mContext, helper.getView(R.id.iv_expression), emoji_special);
//
// //称号图标
// try {
// String s = user_title.substring(user_title.lastIndexOf("=") + 1);
// int mWidth = (int) (Float.parseFloat(s) * 20);
// int mHeight = 20;
// ViewGroup.LayoutParams layoutParams = ivTitle.getLayoutParams();
// layoutParams.width = ConvertUtils.dp2px(mWidth);
// layoutParams.height = ConvertUtils.dp2px(mHeight);
// ivTitle.setLayoutParams(layoutParams);
// } catch (Exception e) {
// e.printStackTrace();
// }
// break;
// //球球大作战
// case 8:
// String first = emMessage.getStringAttribute("first", "");
// String second = emMessage.getStringAttribute("second", "");
// String third = emMessage.getStringAttribute("third", "");
//
// ivRole = helper.getView(R.id.iv_role);
// ivNew = helper.getView(R.id.iv_new);
// ivGrade = helper.getView(R.id.iv_grade);
// ivTitle = helper.getView(R.id.iv_title_label);
// ivNHobility = helper.getView(R.id.iv_nobility);
// tvName = helper.getView(R.id.tv_name);
// TextView tvContent8 = helper.getView(R.id.tv_content);
//
// ivRole.setRole(Integer.parseInt(role));
// ivNew.setNew(Integer.parseInt(userIsNew));
// ivGrade.setGrade(rankIcon);
// ivTitle.setLabelView(user_title);
// ivNHobility.setNobility(nobilityIcon);
// ImageUtils.loadIcon(charmIcon, helper.getView(R.id.iv_charm));
// tvName.setText(Html.fromHtml(nickname));
// if (emMessage.getIntAttribute("type", 0) == 6019) {//亮球
// helper.setVisible(R.id.iv_qiu1, true);
// helper.setVisible(R.id.iv_qiu2, true);
// helper.setVisible(R.id.iv_qiu3, true);
//
// try {
// helper.setImageResource(R.id.iv_qiu1, mContext.getResources().getIdentifier(first, "mipmap", mContext.getPackageName()));
// helper.setImageResource(R.id.iv_qiu2, mContext.getResources().getIdentifier(second, "mipmap", mContext.getPackageName()));
// helper.setImageResource(R.id.iv_qiu3, mContext.getResources().getIdentifier(third, "mipmap", mContext.getPackageName()));
// } catch (Exception e) {
// e.printStackTrace();
// }
//
// } else {
// helper.setVisible(R.id.iv_qiu1, false);
// helper.setVisible(R.id.iv_qiu2, false);
// helper.setVisible(R.id.iv_qiu3, false);
// }
// spanUtils.append(spanned);
// tvContent8.setText(spanUtils.create());
// break;
// case 10:
// TextView tv = helper.getView(R.id.tv_content);
// float height = tv.getTextSize();//获取字体高度
// String bell = "<img src=\"" + R.drawable.ease_message_bell + "\"/>"; //前面加一个铃铛
// Spanned sp = Html.fromHtml(bell + txtBody.getMessage(), source -> {
// Drawable drawable;
// drawable = mContext.getResources().getDrawable(Integer.parseInt(source));
// drawable.setBounds(0, 0, (int) (height * 36f / 42f), (int) height); //等比例设置铃铛大小
// return drawable;
// }, null);
// tv.setText(sp);
// helper.setGone(R.id.tv_red_rain_detail, false);
// break;
// case 11:
// TextView tv11 = helper.getView(R.id.tv_content);
// float height11 = tv11.getTextSize();//获取字体高度
// String bell11 = "<img src=\"" + R.drawable.ease_message_bell + "\"/>"; //前面加一个铃铛
// Spanned sp11 = Html.fromHtml(bell11 + txtBody.getMessage(), source -> {
// Drawable drawable;
// drawable = mContext.getResources().getDrawable(Integer.parseInt(source));
// drawable.setBounds(0, 0, (int) (height11 * 36f / 42f), (int) height11); //等比例设置铃铛大小
// return drawable;
// }, null);
// tv11.setText(sp11);
// helper.setGone(R.id.tv_red_rain_detail, true);
// helper.addOnClickListener(R.id.tv_red_rain_detail);
// break;
// default:
// helper.setText(R.id.tv_content, Html.fromHtml(txtBody.getMessage()));
// break;
}
}
@Override
public void onViewRecycled(@NonNull BaseViewHolder holder) {
Logger.e("onViewRecycled", "onViewRecycled");
ImageView ivEmoji = holder.getView(com.qxcm.moduleutil.R.id.iv_expression);
// ImageView ivGrade = holder.getView(com.qxcm.moduleutil.R.id.iv_grade);
ImageView ivNobility = holder.getView(com.qxcm.moduleutil.R.id.iv_nobility);
ImageView ivCharm = holder.getView(com.qxcm.moduleutil.R.id.iv_charm);
// ImageView ivTitle = holder.getView(com.qxcm.moduleutil.R.id.iv_title_label);
if (mContext instanceof Activity && (((Activity) mContext).isFinishing() || ((Activity) mContext).isDestroyed())) {
return;
}
try {
if (ivEmoji != null) {
ivEmoji.setImageDrawable(null);
Glide.with(ivEmoji.getContext()).clear(ivEmoji);
}
// if (ivGrade != null) {
// ivGrade.setImageDrawable(null);
// Glide.with(ivGrade.getContext()).clear(ivGrade);
// }
if (ivNobility != null) {
ivNobility.setImageDrawable(null);
Glide.with(ivNobility.getContext()).clear(ivNobility);
}
if (ivCharm != null) {
ivCharm.setImageDrawable(null);
Glide.with(ivCharm.getContext()).clear(ivCharm);
}
// if (ivTitle != null) {
// ivTitle.setImageDrawable(null);
// Glide.with(ivTitle.getContext()).clear(ivTitle);
// }
} catch (Exception e) {
e.printStackTrace();
}
super.onViewRecycled(holder);
}
/**
* 清除数据
*
* @param
*/
public void clearData() {
this.mData.clear();
userMsgList.clear();
systemMsgList.clear();
allMsgList.clear();
notifyDataSetChanged();
}
public void clearSomeData() {
if (this.mData != null && mData.size() > 500) {
List<EMMessageInfo> emMessageInfos = mData.subList(500, mData.size());
setNewData(emMessageInfos);
}
if (allMsgList.size() > 500){
allMsgList = allMsgList.subList(500,allMsgList.size());
}
if (userMsgList.size() > 500){
userMsgList = userMsgList.subList(500,userMsgList.size());
}
if (systemMsgList.size() > 500){
systemMsgList = systemMsgList.subList(500,systemMsgList.size());
}
}
@Override
public void addData(@NonNull EMMessageInfo data) {
// super.addData(data);
allMsgList.add(data);
if (data.getItemType() == 2 ){
userMsgList.add(data);
}else if (data.getItemType() == 3){
systemMsgList.add(data);
}
if (listShowType == SHOW_TYPE_ALL
|| ((data.getItemType() == 2 ) && listShowType == SHOW_TYPE_USER)
|| ((data.getItemType() == 3) && listShowType == SHOW_TYPE_SYSTEM)
){
super.addData(data);
}
}
@Override
public void addData(@NonNull Collection<? extends EMMessageInfo> newData) {
// super.addData(newData);
if (newData == null || newData.size() == 0){
return;
}
List<EMMessageInfo> list = new ArrayList<>();
list.addAll(newData);
for (int i = 0; i < list.size(); i++) {
addData(list.get(i));
}
}
}

View File

@@ -0,0 +1,174 @@
package com.example.moduleroom.adapter;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.bean.RewardUserBean;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.widget.BaseWheatView;
import java.util.ArrayList;
import java.util.List;
/**
* 项目名称 qipao-android
* 包名com.qpyy.room.adapter
* 创建人 黄强
* 创建时间 2020/8/6 14:48
* 描述 describe
*/
public class GiftUserAdapter extends BaseQuickAdapter<RewardUserBean, BaseViewHolder> {
private int ownerModel = 0;
public GiftUserAdapter() {
super(R.layout.room_rv_item_gift_wheat);
}
@Override
protected void convert(BaseViewHolder helper, RewardUserBean item) {
ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.riv_gift_wheat_head_pic));
ImageView rivPit = helper.getView(R.id.riv_pit);
rivPit.setVisibility(item.isSelect() ? View.VISIBLE : View.INVISIBLE);
if (TextUtils.isEmpty(item.getPit_number()) || "0".equals(item.getPit_number())) {
helper.setVisible(R.id.tv_pit, false);
} else {
helper.setVisible(R.id.tv_pit, true);
helper.setText(R.id.tv_pit, String.format("%s号麦", item.getPit_number()));
if (item.getPit_number().equals("8")){
helper.setText(R.id.tv_pit, "嘉宾");
}
if (BaseWheatView.WHEAT_HOST.equals(item.getPit_number())) {
if (2 == ownerModel || 0 == ownerModel) {
helper.setText(R.id.tv_pit, "主持人");
} else {
helper.setText(R.id.tv_pit, "房主");
}
}
}
if (item.isSelect()){
helper.getView(R.id.tv_pit).setBackgroundResource(com.qxcm.moduleutil.R.mipmap.gift_show);
}else {
helper.getView(R.id.tv_pit).setBackgroundResource(com.qxcm.moduleutil.R.mipmap.gift_show_b);
}
}
public boolean isAll() {
int count = 0;
List<RewardUserBean> data = getData();
for (RewardUserBean item : data) {
if (item.isSelect()) {
count++;
}
}
return count > 0 && count == data.size();
}
public void allElection(boolean b) {
List<RewardUserBean> data = getData();
for (RewardUserBean item : data) {
item.setSelect(b);
}
notifyDataSetChanged();
}
public int getSelectCount() {
int count = 1;
List<RewardUserBean> data = getData();
for (RewardUserBean item : data) {
if (item.isSelect()) {
count++;
}
}
return count;
}
public List<RewardUserBean> getSelectRoomPitUserModel() {
List<RewardUserBean> selects = getData();
List<RewardUserBean> data = getData();
for (RewardUserBean item : data) {
if (item.isSelect()) {
selects.add(item);
}
}
return selects;
}
public String getUserIdToString() {
List<RewardUserBean> data = getData();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.size(); i++) {
if (data.get(i).isSelect()) {
if (sb.length() > 0) {//该步即不会第一位有逗号,也防止最后一位拼接逗号!
sb.append(",");
}
sb.append(data.get(i).getUser_id());
}
}
return sb.toString();
}
public String getUserPitToString() {
List<RewardUserBean> data = getData();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.size(); i++) {
if (data.get(i).isSelect()) {
if (sb.length() > 0) {//该步即不会第一位有逗号,也防止最后一位拼接逗号!
sb.append(",");
}
sb.append(data.get(i).getPit_number());
}
}
return sb.toString();
}
public List<RewardUserBean> getGiftUser() {
List<RewardUserBean> data = getData();
List<RewardUserBean> giftUserList = new ArrayList<>();
for (RewardUserBean item : data) {
if (item.isSelect()) {
giftUserList.add(item);
}
}
return giftUserList;
}
/**
* 清除所有选中
*/
public List<String> clearAllSelected() {
List<String> ids = new ArrayList<>();
List<RewardUserBean> data = getData();
for (RewardUserBean item : data) {
if (item.isSelect()) {
ids.add(item.getUser_id());
}
item.setSelect(false);
}
notifyDataSetChanged();
return ids;
}
public void setOwnerModel(int ownerModel) {
this.ownerModel = ownerModel;
notifyDataSetChanged();
}
public List<String> getAllSelectedIds() {
List<String> ids = new ArrayList<>();
List<RewardUserBean> data = getData();
for (RewardUserBean item : data) {
if (item.isSelect()) {
ids.add(item.getUser_id());
}
}
return ids;
}
}

View File

@@ -0,0 +1,58 @@
package com.example.moduleroom.adapter;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.RoomAutionTimeBean;
import com.qxcm.moduleutil.bean.RoomRelationBean;
import com.qxcm.moduleutil.bean.ViewItem;
import java.util.ArrayList;
import java.util.List;
public class PkTimeAdapter extends BaseQuickAdapter<RoomAutionTimeBean, BaseViewHolder> {
private int selectedRelationPosition = -1;
private List<RoomAutionTimeBean> viewItems = new ArrayList<>();
public PkTimeAdapter() {
super(R.layout.item_relation);
}
@Override
protected void convert(BaseViewHolder helper, RoomAutionTimeBean item) {
TextView relationName = helper.getView(R.id.tv_name);
relationName.setText( item.getDays()+"分钟");
if (item.isSelected()) {
relationName.setBackground(helper.itemView.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.pk_time_t));
relationName.setTextColor(helper.itemView.getResources().getColor(com.qxcm.moduleutil.R.color.color_0DFFB9));
} else {
relationName.setBackground(helper.itemView.getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.pk_time_f));
relationName.setTextColor(helper.itemView.getResources().getColor(com.qxcm.moduleutil.R.color.color_FF333333));
}
helper.itemView.setOnClickListener(v -> {
int currentPosition = helper.getLayoutPosition();
if (selectedRelationPosition == currentPosition) return; // 避免重复点击
if (selectedRelationPosition != -1) {
getData().get(selectedRelationPosition).setSelected(false);
notifyItemChanged(selectedRelationPosition);
}
item.setSelected(true);
selectedRelationPosition = currentPosition;
notifyItemChanged(currentPosition);
});
}
public RoomAutionTimeBean getSelectedTime() {
if (selectedRelationPosition != -1 && selectedRelationPosition < getData().size()) {
return getData().get(selectedRelationPosition);
}
return null;
}
}

View File

@@ -0,0 +1,87 @@
package com.example.moduleroom.adapter;
import static com.qxcm.moduleutil.utils.UtilConfig.getContext;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.bean.CharmRankingResp;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.logger.Logger;
import com.qxcm.moduleutil.widget.BeautifulNameView;
import java.util.List;
public class RankingAutcionAdapter extends BaseQuickAdapter<RoomAuction.AuctionListBean, BaseViewHolder> {
private static String GG = "0";
private static String MM = "1";
public RankingAutcionAdapter() {
super(R.layout.item_ranking_auction);
}
@Override
public void onViewRecycled(@NonNull BaseViewHolder holder) {
Logger.e("onViewRecycled", "onViewRecycled");
ImageView ivEmoji = holder.getView(R.id.room_item_head);
ImageView ivGrade = holder.getView(R.id.room_item_grade);
ImageView ivNobility = holder.getView(R.id.room_item_rank);
if (ivEmoji != null) {
ivEmoji.setImageDrawable(null);
Glide.with(ivEmoji.getContext()).clear(ivEmoji);
}
if (ivGrade != null) {
ivGrade.setImageDrawable(null);
Glide.with(ivGrade.getContext()).clear(ivGrade);
}
if (ivNobility != null) {
ivNobility.setImageDrawable(null);
Glide.with(ivNobility.getContext()).clear(ivNobility);
}
super.onViewRecycled(holder);
}
@Override
protected void convert(BaseViewHolder helper, RoomAuction.AuctionListBean item) {
helper.setText(R.id.room_item_seq, String.valueOf(helper.getAdapterPosition() + 4));//从第四个开始设置值
helper.setText(R.id.room_item_name, item.getNickname());
helper.setText(R.id.room_item_pop, item.getGift_price());
ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.room_item_head));
helper.addOnClickListener(R.id.room_item_head);
LinearLayout llContainer =helper.getView(R.id.lli);
llContainer.removeAllViews(); // 清空旧的 ImageView
List<String> images = item.getIcon(); // 获取图片列表
for (String url : images) {
if (url.contains("http")) {
ImageView imageView1 = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_15)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView1.setLayoutParams(params);
imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView1);
llContainer.addView(imageView1);
}
}
}
}

View File

@@ -0,0 +1,96 @@
package com.example.moduleroom.adapter;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.bean.CharmRankingResp;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.logger.Logger;
import com.qxcm.moduleutil.widget.BeautifulNameView;
/**
* 项目名称 qipao-android
* 包名com.qpyy.room.adapter
* 创建人 黄强
* 创建时间 2020/7/25 10:37
* 描述 describe
*/
public class RankingCharmListAdapter extends BaseQuickAdapter<CharmRankingResp.ListsBean, BaseViewHolder> {
private static String GG = "0";
private static String MM = "1";
public RankingCharmListAdapter() {
super(R.layout.room_rv_item_ranking);
}
@Override
protected void convert(BaseViewHolder helper, CharmRankingResp.ListsBean item) {
//数据绑定赋值
helper.setText(R.id.room_item_seq, String.valueOf(helper.getAdapterPosition() + 4));//从第四个开始设置值
helper.setText(R.id.room_item_name, item.getNickname());
// ((BeautifulNameView) helper.getView(R.id.bnv_rank_list_room)).setText(String.format(mContext.getResources().getString(R.string.common_id_formatter), item.getUser_code()));
// ((BeautifulNameView) helper.getView(R.id.bnv_rank_list_room)).setTextColor(!TextUtils.isEmpty(item.getId_color()) ? Color.parseColor(item.getId_color()) : mContext.getResources().getColor(R.color.color_FFCCCCCC));
((BeautifulNameView) helper.getView(R.id.bnv_rank_list_room)).setPlay(!TextUtils.isEmpty(item.getId_color()));
((BeautifulNameView) helper.getView(R.id.bnv_rank_list_room)).setImgVisible("1".equals(item.getGood_number()));
helper.setText(R.id.room_item_pop, item.getNumber_format());
// if (GG.equals(item.getSex())) {
// helper.setBackgroundRes(R.id.room_item_pop, R.mipmap.room_bg_wheat_charm_gg_sr);
// } else {
// helper.setBackgroundRes(R.id.room_item_pop, R.mipmap.room_bg_wheat_charm_mm_sr);
// }
ImageUtils.loadHeadCC(item.getHead_picture(), helper.getView(R.id.room_item_head));
String nobility = item.getLevel_icon();//等级
String status = item.getNobility_icon();//爵位
ImageUtils.loadImageView(item.getNobility_icon(), helper.getView(R.id.room_item_rank));
ImageUtils.loadImageView(item.getLevel_icon(), helper.getView(R.id.room_item_grade));
if (TextUtils.isEmpty(nobility)) {
helper.getView(R.id.room_item_grade).setVisibility(View.GONE);
} else {
helper.getView(R.id.room_item_grade).setVisibility(View.VISIBLE);
}
if (TextUtils.isEmpty(status)) {
helper.getView(R.id.room_item_rank).setVisibility(View.GONE);
} else {
helper.getView(R.id.room_item_rank).setVisibility(View.VISIBLE);
}
TextView textView = helper.getView(R.id.room_item_pop);
if (helper.getAdapterPosition() % 2 == 1) {
helper.getView(R.id.room_item_bg).setVisibility(View.GONE);//隔开隐藏背景
} else {
helper.getView(R.id.room_item_bg).setVisibility(View.VISIBLE);
}
helper.addOnClickListener(R.id.room_item_head);
}
@Override
public void onViewRecycled(@NonNull BaseViewHolder holder) {
Logger.e("onViewRecycled", "onViewRecycled");
ImageView ivEmoji = holder.getView(R.id.room_item_head);
ImageView ivGrade = holder.getView(R.id.room_item_grade);
ImageView ivNobility = holder.getView(R.id.room_item_rank);
if (ivEmoji != null) {
ivEmoji.setImageDrawable(null);
Glide.with(ivEmoji.getContext()).clear(ivEmoji);
}
if (ivGrade != null) {
ivGrade.setImageDrawable(null);
Glide.with(ivGrade.getContext()).clear(ivGrade);
}
if (ivNobility != null) {
ivNobility.setImageDrawable(null);
Glide.with(ivNobility.getContext()).clear(ivNobility);
}
super.onViewRecycled(holder);
}
}

View File

@@ -0,0 +1,86 @@
package com.example.moduleroom.adapter;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.bumptech.glide.Glide;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.bean.WealthRankingResp;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.logger.Logger;
import com.qxcm.moduleutil.widget.BeautifulNameView;
/**
* 项目名称 qipao-android
* 包名com.qpyy.room.adapter
* 创建人 黄强
* 创建时间 2020/7/25 10:37
* 描述 describe
*/
public class RankingWealthListAdapter extends BaseQuickAdapter<WealthRankingResp.ListsBean, BaseViewHolder> {
public RankingWealthListAdapter() {
super(R.layout.room_rv_item_ranking_rich);
}
@Override
protected void convert(BaseViewHolder helper, WealthRankingResp.ListsBean item) {
//数据绑定赋值
helper.setText(R.id.room_item_seq, String.valueOf(helper.getAdapterPosition() + 4));//从第四个开始设置值
helper.setText(R.id.room_item_name, item.getNickname());
// ((BeautifulNameView) helper.getView(R.id.bnv_rank_list_rich)).setText(String.format(mContext.getResources().getString(R.string.common_id_formatter), item.getUser_code()));
// ((BeautifulNameView) helper.getView(R.id.bnv_rank_list_rich)).setTextColor(!TextUtils.isEmpty(item.getId_color()) ? Color.parseColor(item.getId_color()) : mContext.getResources().getColor(R.color.color_FFCCCCCC));
((BeautifulNameView) helper.getView(R.id.bnv_rank_list_rich)).setPlay(!TextUtils.isEmpty(item.getId_color()));
((BeautifulNameView) helper.getView(R.id.bnv_rank_list_rich)).setImgVisible("1".equals(item.getGood_number()));
helper.setText(R.id.room_item_pop, item.getNumber_format());
ImageUtils.loadHeadCC(item.getHead_picture(), helper.getView(R.id.room_item_head));
String nobility = item.getLevel_icon();//等级
String status = item.getNobility_icon();//爵位
ImageUtils.loadImageView(item.getNobility_icon(), helper.getView(R.id.room_item_rank));
ImageUtils.loadImageView(item.getLevel_icon(), helper.getView(R.id.room_item_grade));
if (TextUtils.isEmpty(nobility)) {
helper.getView(R.id.room_item_grade).setVisibility(View.GONE);
} else {
helper.getView(R.id.room_item_grade).setVisibility(View.VISIBLE);
}
if (TextUtils.isEmpty(status)) {
helper.getView(R.id.room_item_rank).setVisibility(View.GONE);
} else {
helper.getView(R.id.room_item_rank).setVisibility(View.VISIBLE);
}
if (helper.getAdapterPosition() % 2 == 1) {
helper.getView(R.id.room_item_bg).setVisibility(View.GONE);//隔开隐藏背景
} else {
helper.getView(R.id.room_item_bg).setVisibility(View.VISIBLE);//隔开隐藏背景
}
helper.addOnClickListener(R.id.room_item_head);
}
@Override
public void onViewRecycled(@NonNull BaseViewHolder holder) {
Logger.e("onViewRecycled", "onViewRecycled");
ImageView ivEmoji = holder.getView(R.id.room_item_head);
ImageView ivGrade = holder.getView(R.id.room_item_grade);
ImageView ivNobility = holder.getView(R.id.room_item_rank);
if (ivEmoji != null) {
ivEmoji.setImageDrawable(null);
Glide.with(ivEmoji.getContext()).clear(ivEmoji);
}
if (ivGrade != null) {
ivGrade.setImageDrawable(null);
Glide.with(ivGrade.getContext()).clear(ivGrade);
}
if (ivNobility != null) {
ivNobility.setImageDrawable(null);
Glide.with(ivNobility.getContext()).clear(ivNobility);
}
super.onViewRecycled(holder);
}
}

View File

@@ -0,0 +1,54 @@
package com.example.moduleroom.adapter;
import android.view.View;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.bean.RelationshipBean;
import com.qxcm.moduleutil.bean.TopRoom;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.zhpan.bannerview.BaseBannerAdapter;
import com.zhpan.bannerview.BaseViewHolder;
public class RelationshipAdapter extends BaseBannerAdapter<RelationshipBean> {
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.onItemClickListener = listener;
}
@Override
protected void bindData(BaseViewHolder<RelationshipBean> holder, RelationshipBean data, int position, int pageSize) {
ImageUtils.loadHeadCC(data.getAvatar(), holder.itemView.findViewById(R.id.user_nav1));
ImageUtils.loadHeadCC(data.getAvatar2(), holder.itemView.findViewById(R.id.user_nav2));
holder.setText(R.id.tv_nickname, data.getNickname());
holder.setText(R.id.tv_nickname2, data.getNickname2());
holder.setText(R.id.tv_relation, data.getRelation());
holder.setText(R.id.tv_time, data.getTime());
// TextView textView= holder.itemView.findViewById(R.id.tv_num);
// TextView textView2= holder.itemView.findViewById(R.id.tv_room_name);
//
// textView.setText(data.getUser_list().size()+"人");
// textView2.setText(data.getRoom_name());
// ImageView iv = holder.itemView.findViewById(R.id.iv_play);
// ImageUtils.loadRes(com.qxcm.moduleutil.R.drawable.voice_play, iv);
//// }
//
// // 设置点击事件
// holder.itemView.setOnClickListener(v -> {
// if (onItemClickListener != null) {
// onItemClickListener.onItemClick(holder.itemView, data, position);
// }
// });
}
@Override
public int getLayoutId(int viewType) {
return R.layout.item_relationship;
}
public interface OnItemClickListener {
void onItemClick(View view, TopRoom data, int position);
}
}

View File

@@ -0,0 +1,121 @@
package com.example.moduleroom.adapter;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static com.qxcm.moduleutil.utils.UtilConfig.getContext;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.dialog.RoomUserInfoFragment;
import com.qxcm.moduleutil.bean.details.BaseMultiItemEntity;
import com.qxcm.moduleutil.bean.room.RoomOnline;
import com.qxcm.moduleutil.bean.room.RoomOnlineBean;
import com.qxcm.moduleutil.utils.ImageUtils;
import java.util.List;
/**
* @author qx
* @data 2025/6/23
* @description: 在线列表适配器
*/
public class RoomOnlineAdapter extends BaseQuickAdapter<RoomOnlineBean, BaseViewHolder> {
public RoomOnlineAdapter() {
super(R.layout.item_onlie_room);
}
// 接口定义
public interface OnJoinButtonClickListener {
void onJoinButtonClick(RoomOnlineBean item);
void onUserInfoClick(RoomOnlineBean item);
}
private OnJoinButtonClickListener listener;
public void setListener(OnJoinButtonClickListener listener) {
this.listener = listener;
}
@Override
protected void convert(BaseViewHolder helper, RoomOnlineBean item) {
ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.like_avatar));
helper.setText(R.id.tv_nickname, item.getNickname());
ImageView imageView = helper.getView(R.id.im_i);
TextView textView = helper.getView(R.id.tv_status);
imageView.setVisibility(VISIBLE);
if (item.getRole().equals("1")) {
imageView.setImageResource(com.qxcm.moduleutil.R.mipmap.fangz);
} else if (item.getRole().equals("2")) {
imageView.setImageResource(com.qxcm.moduleutil.R.mipmap.gly);
} else if (item.getRole().equals("3")) {
imageView.setImageResource(com.qxcm.moduleutil.R.mipmap.zc);
} else if (item.getRole().equals("4")) {
helper.getView(R.id.im_i).setVisibility(GONE);
// imageView.setImageResource(com.qxcm.moduleutil.R.mipmap.jb);
} else {
helper.getView(R.id.im_i).setVisibility(GONE);
}
// if (item.getType() == 1){
//
// }
if (item.getType() == 2 && item.getType_pit() == 1){
textView.setVisibility(GONE);
}else {
textView.setVisibility(VISIBLE);
}
// else if (item.getType() == 2 && item.getType_pit() == 2){
// textView.setVisibility(VISIBLE);
// }else if (item.getType() == 1 && item.getType_pit() == 0){
// textView.setVisibility(GONE);
// }
textView.setText(item.getPit_number() != 0 ? item.getPit_number() + "号麦" : "抱麦");
LinearLayout llContainer = helper.getView(R.id.line);
llContainer.removeAllViews(); // 清空旧的 ImageView
List<String> images = item.getIcon(); // 获取图片列表
for (String url : images) {
if (url.contains("http")) {
ImageView imageView1 = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_15)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView1.setLayoutParams(params);
imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView1);
llContainer.addView(imageView1);
}
}
helper.getView(R.id.tv_status).setOnClickListener(v -> {
if (textView.getText().toString().equals("抱麦")) {
if (listener != null) {
listener.onJoinButtonClick(item);
}
}
});
helper.itemView.setOnClickListener(v -> {
if (listener != null){
listener.onUserInfoClick(item);
}
});
}
}

View File

@@ -0,0 +1,79 @@
package com.example.moduleroom.adapter;
import android.graphics.drawable.Drawable;
import android.view.View;
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.bean.room.RoomSettingBean;
import java.util.List;
public class RoomSettingAdapter extends BaseMultiItemQuickAdapter<RoomSettingBean, BaseViewHolder> {
public RoomSettingAdapter(List<RoomSettingBean> data) {
super(data);
addItemType(RoomSettingBean.ITEM_TYPE_DEFAULT, R.layout.item_title);
addItemType(RoomSettingBean.ITEM_TYPE_WITH_ICON, R.layout.item_setting);
}
@Override
protected void convert(BaseViewHolder holder, RoomSettingBean item) {
if (item.getItemType() == RoomSettingBean.ITEM_TYPE_DEFAULT){
holder.setVisible(R.id.tv_title, true);
holder.setText(R.id.tv_title, item.getName());
}else {
holder.setText(R.id.tv_name, item.getName());
holder.setImageResource(R.id.iv_icon, getIconResId(item.getType(),item.isStatus()));
}
}
// 根据 type 获取对应的图标资源 ID
private int getIconResId(int type,boolean isSelected) {
boolean b=isSelected;
switch (type) {
case RoomSettingBean.QXRoomSettingTypeRoomTypeSing:
return com.qxcm.moduleutil.R.mipmap.ic_sing;
case RoomSettingBean.QXRoomSettingTypeRoomTypeAuction:
return com.qxcm.moduleutil.R.mipmap.ic_auction;
case RoomSettingBean.QXRoomSettingTypeRoomTypeBoy:
return com.qxcm.moduleutil.R.mipmap.ic_boy;
case RoomSettingBean.QXRoomSettingTypeRoomTypeGirl:
return com.qxcm.moduleutil.R.mipmap.ic_girl;
// 常用工具
case RoomSettingBean.QXRoomSettingTypeRoomSubsidy:
return com.qxcm.moduleutil.R.mipmap.ic_subsidy;
case RoomSettingBean.QXRoomSettingTypeRoomCompere:
return com.qxcm.moduleutil.R.mipmap.ic_compere;
case RoomSettingBean.QXRoomSettingTypeRoomClearMessage:
return com.qxcm.moduleutil.R.mipmap.ic_clear_message;
case RoomSettingBean.QXRoomSettingTypeRoomOrderMic:
return b ? com.qxcm.moduleutil.R.mipmap.ic_order_mic_selected : com.qxcm.moduleutil.R.mipmap.ic_order_mic;
case RoomSettingBean.QXRoomSettingTypeRoomBgMusic:
return com.qxcm.moduleutil.R.mipmap.ic_bg_music;
case RoomSettingBean.QXRoomSettingTypeRoomBgImage:
return com.qxcm.moduleutil.R.mipmap.ic_bg_image;
// 更多操作
case RoomSettingBean.QXRoomSettingTypeRoomLeave:
return com.qxcm.moduleutil.R.mipmap.ic_leave;
case RoomSettingBean.QXRoomSettingTypeRoomShare:
return com.qxcm.moduleutil.R.mipmap.ic_share;
case RoomSettingBean.QXRoomSettingTypeRoomMyDress:
return com.qxcm.moduleutil.R.mipmap.tiaoyint;
case RoomSettingBean.QXRoomSettingTypeRoomSetting:
return com.qxcm.moduleutil.R.mipmap.ic_room_setting;
case RoomSettingBean.QXRoomSettingTypeRoomWelcome:
return com.qxcm.moduleutil.R.mipmap.ic_welcome;
case RoomSettingBean.QXRoomSettingTypeRoomCloseEffects:
return b?com.qxcm.moduleutil.R.mipmap.ic_close_effects:com.qxcm.moduleutil.R.mipmap.ic_open_effects;
case RoomSettingBean.QXRoomSettingTypeRoomReport:
return com.qxcm.moduleutil.R.mipmap.ic_report;
default:
return 0;
}
}
}

View File

@@ -0,0 +1,67 @@
package com.example.moduleroom.adapter;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.TextView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.makeramen.roundedimageview.RoundedImageView;
import com.qxcm.moduleutil.bean.MixerResp;
import com.qxcm.moduleutil.utils.ImageUtils;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/22
*@description: 混响选择
*/
public class TunerListAdapter extends BaseQuickAdapter<MixerResp, BaseViewHolder> {
private int index = 0;
private SparseBooleanArray selectedPositions = new SparseBooleanArray();
private final List<Integer> mSelectedPositions = new ArrayList<>();
int type;
public TunerListAdapter(int type) {
super(R.layout.room_rv_item_tuner);
this.type = type;
}
public void setIndex(int index) {
this.index = index;
notifyDataSetChanged();
// setIndex(0); // 默认选择第一个项
}
@Override
protected void convert(BaseViewHolder helper, MixerResp item) {
int position = helper.getLayoutPosition();
RoundedImageView rivPit = helper.getView(R.id.iv_tuner_pic);
RoundedImageView rivPit2 = helper.getView(R.id.iv_tuner_pic2);
View checkbox = helper.getView(R.id.v_checkbox);
TextView tvName = helper.getView(R.id.name);
boolean isSelected = index == helper.getLayoutPosition();
checkbox.setSelected(isSelected);
if (type==1){
tvName.setVisibility(View.GONE);
rivPit.setVisibility(View.VISIBLE);
rivPit.setImageResource(item.getImgUrtl());
rivPit2.setVisibility(View.GONE);
}else {
tvName.setVisibility(View.VISIBLE);
tvName.setText(item.getName());
rivPit.setVisibility(View.GONE);
rivPit2.setVisibility(View.VISIBLE);
rivPit2.setImageResource(item.getImgUrtl());
}
// 判断当前项是否被选中
}
}

View File

@@ -0,0 +1,113 @@
package com.example.moduleroom.adapter;
import android.util.SparseBooleanArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.moduleroom.R;
import com.makeramen.roundedimageview.RoundedImageView;
import com.qxcm.moduleutil.bean.room.RoomApplyListBean;
import com.qxcm.moduleutil.utils.ImageUtils;
import java.util.ArrayList;
import java.util.List;
public class WheatFeedingSelectAdapter extends RecyclerView.Adapter<WheatFeedingSelectAdapter.ViewHolder> {
private final List<RoomApplyListBean.Special> mData;
private final List<Integer> mSelectedPositions = new ArrayList<>();
private SparseBooleanArray selectedPositions = new SparseBooleanArray();
public WheatFeedingSelectAdapter(List<RoomApplyListBean.Special> data) {
this.mData = data;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_wheat_feeding_select, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
RoomApplyListBean.Special item = mData.get(position);
boolean isSelected = selectedPositions.get(position, false);
holder.nickname.setText(item.getNickname());
holder.jin_e.setText(item.getRank_value());
ImageUtils.loadHeadCC(item.getAvatar(), holder.userAvatar);
holder.checkbox.setSelected(isSelected);
holder.checkbox.setOnClickListener(v -> {
boolean newState = !isSelected;
selectedPositions.put(position, newState);
holder.checkbox.setSelected(newState);
notifyItemChanged(position); // 刷新当前项
if (newState) {
mSelectedPositions.add(position);
} else {
mSelectedPositions.remove(position);
}
});
holder.tv_bm.setOnClickListener(v -> {
if (onItemClickListener != null) {
onItemClickListener.onTvBmClick(item,position);
}
});
// holder.itemView.setOnClickListener(v -> toggleSelection(position));
}
public interface OnItemClickListener {
void onTvBmClick(RoomApplyListBean.Special item,int position);
}
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.onItemClickListener = listener;
}
public void toggleSelection(int position) {
if (mSelectedPositions.contains(position)) {
mSelectedPositions.remove(Integer.valueOf(position));
} else {
mSelectedPositions.add(position);
}
notifyItemChanged(position);
}
public List<String> getSelectedItems() {
List<String> selected = new ArrayList<>();
for (int pos : mSelectedPositions) {
selected.add(mData.get(pos).getUser_id());
}
return selected;
}
@Override
public int getItemCount() {
return mData.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
RoundedImageView userAvatar;
TextView nickname;
TextView jin_e;
TextView tv_bm;
View checkbox ;
public ViewHolder(@NonNull View itemView) {
super(itemView);
userAvatar = itemView.findViewById(R.id.user_avatar);
nickname = itemView.findViewById(R.id.nick_name);
jin_e = itemView.findViewById(R.id.jin_e);
tv_bm = itemView.findViewById(R.id.tv_bm);
checkbox = itemView.findViewById(R.id.v_checkbox);
}
}
}

View File

@@ -0,0 +1,27 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.CharmRankingResp;
import com.qxcm.moduleutil.bean.RoomAuctionABean;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import java.util.List;
public class BidListContacts {
public interface View extends IView<Activity> {
void roomAuctionList(List<RoomAuction.AuctionListBean> auctionListBean);
void setNo1(RoomAuction.AuctionListBean listsBean);
void setNo2(RoomAuction.AuctionListBean listsBean);
void setNo3(RoomAuction.AuctionListBean listsBean);
void setCharmEmpty();
}
public interface IRoomPre extends IPresenter {
void roomAuctionList(String auction_id);
}
}

View File

@@ -0,0 +1,29 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.RoomRelationBean;
import com.qxcm.moduleutil.bean.RoomTime;
import com.qxcm.moduleutil.bean.RoonGiftModel;
import com.qxcm.moduleutil.bean.room.AuctionBean;
import java.util.List;
public class CardRelationshipContacts {
public interface View extends IView<Activity> {
void roomRelationList(List<RoomRelationBean> roomRelationBeans);
void setGiftList(List<RoonGiftModel> roonGiftModels);
void roomAuction(AuctionBean auctionBean);
void roomAuctionTime(RoomTime roomTime);
}
public interface IRoomPre extends IPresenter {
void roomRelationList(String type);
void getGiftList(String id);
void roomAuction(String roomId, String userId,String giftId, String relation_id, String auction_type, String time_day);
void roomAuctionTime(String gift_id);
}
}

View File

@@ -0,0 +1,50 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.CharmRankingResp;
import com.qxcm.moduleutil.bean.WealthRankingResp;
import java.util.List;
/**
*@author qx
*@data 2025/6/10
*@description: 排行榜对应的接口
*/
public class DataListContacts {
public interface View extends IView<Activity> {
//榜一更新
void setNo1(CharmRankingResp.ListsBean listsBean);
void setNo1(WealthRankingResp.ListsBean listsBean);
//榜二更新
void setNo2(CharmRankingResp.ListsBean listsBean);
void setNo2(WealthRankingResp.ListsBean listsBean);
//榜三更新
void setNo3(CharmRankingResp.ListsBean listsBean);
void setNo3(WealthRankingResp.ListsBean listsBean);
//魅力榜和魅力榜界面更新
void setCharmView(List<CharmRankingResp.ListsBean> listsBeans);
void setWealthView(List<WealthRankingResp.ListsBean> listsBeans);
void setCharmEmpty();
void setWealthEmpty();
}
public interface IRoomDataListPre extends IPresenter {
//定义魅力榜数据访问接口
void getCharmListInfo(String roomId,int type);
//定义财富榜数据访问接口
void getWealthListInfo(String roomId,int type);
}
}

View File

@@ -0,0 +1,16 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
public class PkTimeContract {
public interface View extends IView<Activity> {
void startPk();
}
public interface IRoomPre extends IPresenter {
void startPk(String pk_id,String pk_times);
}
}

View File

@@ -0,0 +1,15 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
public class PublishCommentContacts {
public interface View extends IView<Activity> {
}
public interface IRoomPre extends IPresenter {
}
}

View File

@@ -0,0 +1,30 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.MusicSongBean;
import com.qxcm.moduleutil.bean.SongMusicBean;
import java.util.List;
import io.agora.musiccontentcenter.Music;
public class RequestContacts {
public interface View extends IView<Activity> {
void songList(List<MusicSongBean> musicSongBeans);
void upSong(String s);
void song(List<SongMusicBean> music);
}
public interface IRoomPre extends IPresenter {
void songList(String roomId);
void upSong(String did,String type);
void song(String roomId,String user_id,String song_code,String song_name,String singer,String poster,String duration);
}
}

View File

@@ -0,0 +1,33 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.RoomTime;
import com.qxcm.moduleutil.bean.room.AuctionBean;
public class RoomAuctionContacts {
public interface View extends IView<Activity> {
void applyPit();
void roomAuction(AuctionBean auctionBean);
void auctionDelay();
void auctionEnd();
void auctionMode();
}
public interface IRoomDataListPre extends IPresenter {
void applyPit(String roomId, String pitNumber);
void roomAuction(String roomId, String userId,String giftId, String relation_id, String auction_type, String time_day);
void auctionDelay(String auctionId);
void auctionEnd(String auctionId);
void auctionMode(String roomId,String labelId);
}
}

View File

@@ -0,0 +1,29 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.RoomBgBean;
import java.io.File;
import java.util.List;
public class RoomBackgroundContacts {
public interface View extends IView<Activity> {
void getBackgroundList(RoomBgBean list);
void upLoadSuccess(String url, int type, int index, int total);
void uploadBgImage();
void editRoom();
}
public interface RoomBackgroudPre extends IPresenter {
void getBackgroundList();
void uploadFile(File file, int type, int index, int sice);
void uploadBgImage(String id, String image_url);
void editRoom(String room_id, String room_name, String room_cover, String room_intro,String room_background_id);
}
}

View File

@@ -0,0 +1,18 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
public class RoomCabinContacts {
public interface View extends IView<Activity> {
void quitRoom();
}
public interface IRoomPre extends IPresenter {
void quitRoom(String roomId, String userId);
}
}

View File

@@ -4,8 +4,64 @@ import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.RoomCharmRankBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomOnline;
import com.qxcm.moduleutil.bean.room.RoomOnlineBean;
import java.util.List;
public class RoomContacts {
public interface View extends IView<Activity> {}
public interface IRoomPre extends IPresenter {}
public interface View extends IView<Activity> {
void roomInfo(RoomInfoResp resp);
void showPasswordDialog();
void enterFail();
void getRoomOnline(RoomOnline onlineBean);
void applyPit();
void downPit();
void applySong();
void agreeSong();
void postRoomInfo(RoomInfoResp resp);
void getCharmRank(List<RoomCharmRankBean> list);
void changeSong();
void hostUserPit();
void quitRoom();
void userGuanzSuccess(String s);
void acceptPk();
}
public interface IRoomPre extends IPresenter {
void getRoomIn(String roomId, String password);//加入房间
void getRoomOnline(String roomId,String page, String page_limit);
void applyPit(String roomId, String pitNumber);
void downPit(String roomId, String pitNumber);
void applySong(String roomId);
void agreeSong(String roomId,String type);//申请点唱模式 type1同意 2拒绝
void endSong(String roomId);
void postRoomInfo(String roomId);
void getCharmRank(String roomId);
void changeSong(String roomId,String now_did);
void hostUserPit(String roomId,String pitNumber,String userId,String type);
void quitRoom(String roomId,String userId);
void userGuanz(String userId,String type);
void acceptPk(String pkId,String type);
}
}

View File

@@ -0,0 +1,40 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.HostBean;
import com.qxcm.moduleutil.bean.RoomHostUserBean;
import com.qxcm.moduleutil.bean.RoomSearchResp;
import java.util.List;
public class RoomHostContacts {
public interface View extends IView<Activity> {
void setHostrList(List<HostBean> list);
void getUserHostList(List<RoomSearchResp> list);
void postHostAdd(String s,String type,String is_add);
void postPresidedRatio(String s);
void postPresidedDel(String s);
void doDismiss();
}
public interface IRoomToolPre extends IPresenter {
void clearHostList(String roomId,String type);
void setUserHostList(String roomId,String type);
void setPresidedRatio(String room_id,String id, String ratio);
void postHostAdd(String roomId, String userId,String type,String is_add);
// void presidedDel(String id);
}
}

View File

@@ -0,0 +1,19 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
public final class RoomPasswordSetContacts {
public interface View extends IView<Activity> {
void roomPasswordSettingSuccess();
}
public interface IRoomPasswordSetPre extends IPresenter {
void setRoomPassword(String roomId, String password);
}
}

View File

@@ -0,0 +1,25 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.room.RoomBean;
import java.util.List;
public class RoomPkContacts {
public interface View extends IView<Activity> {
void searchPkRoom(List<RoomBean> roomBeans);
void sendPk();
void refusePk();
}
public interface IRoomPre extends IPresenter {
void searchPkRoom(String roomId,String page,String limit);
void sendPk(String roomIda,String createUserId, String roomIdb);
void refusePk(String roomId,String is_pk);
}
}

View File

@@ -0,0 +1,22 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.room.RoomSettingBean;
public class RoomSettingContacts {
public interface View extends IView<Activity> {
void changeRoomSuccess(String s,int position,RoomSettingBean bean);
void changeRoomType(String s);
}
public interface IRoomPre extends IPresenter {
void changeRoom(String roomId, String userId, int position, RoomSettingBean bean);
void changeRoomType(String roomId,String type);//修改房间类型 type1点唱、2拍卖、3男神、4女神
}
}

View File

@@ -0,0 +1,42 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.UserInfo;
public class RoomUserContacts {
public interface View extends IView<Activity> {
void getRoomUserInfo(UserInfo userInfo);
void downPit();
void kickOutRoom();
void postHostAdd(String s,String type,String is_add);
void setMutePit(String pitNumber, String is_mute);
void addBlackList();
void userGuanzSuccess(String s);
void hostUserPit();
}
public interface IEmotionRoomPre extends IPresenter {
void getRoomUserInfo(String roomId,String userId);
void downPit(String roomId, String pitNumber);//下麦
void kickOutRoom(String roomId, String userId);
void postHostAdd(String roomId, String userId,String type,String is_add);
void setMutePit(String roomId, String pitNumber,String is_mute);// 禁言 禁麦 \解禁
void addBlackList(String userId);
void userGuanz(String userId,String type);
void hostUserPit(String roomId,String pitNumber,String userId,String type);
}
}

View File

@@ -4,13 +4,29 @@ import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
public class SingSongContacts {
public interface View extends IView<Activity> {
void applyPit();
void setMutePit(String pitNumber, String is_mute);
void setLockPit(String pitNumber, String is_lock);
void postRoomInfo(RoomInfoResp resp);
void postRoomInfoPk(RoomInfoResp resp);
void endPk();
}
public interface IEmotionRoomPre extends IPresenter {
void applyPit(String roomId, String pitNumber);
void setMutePit(String roomId, String pitNumber,String is_mute);//禁麦
void setLockPit(String roomId, String pitNumber, String is_lock);
void postRoomInfo(String roomId,String number,int type);
void endPk(String pk_id,String type,String user_id);
}
}

View File

@@ -0,0 +1,32 @@
package com.example.moduleroom.contacts;
import android.app.Activity;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.activity.IView;
import com.qxcm.moduleutil.bean.room.RoomApplyListBean;
import java.util.List;
public class WheatContacts {
public interface View extends IView<Activity> {
void roomApplyListBean(RoomApplyListBean roomApplyListBeans);
void clearApply();
void agreePit();
void applyPit();
}
public interface IRoomPre extends IPresenter {
void roomApplyListBean(String roomId);
void clearApply(String roomId);//清空申请上面列表
void agreePit(String roomId,String userId);//同意上麦
void refusePit(String roomId,String userId);//拒绝上麦
void helpApply(String roomId,String userId);
void applyPit(String roomId, String pitNumber);
}
}

View File

@@ -0,0 +1,177 @@
package com.example.moduleroom.dialog;
import static com.qxcm.moduleutil.utils.UtilConfig.getContext;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RankingAutcionAdapter;
import com.example.moduleroom.adapter.RankingCharmListAdapter;
import com.example.moduleroom.contacts.BidListContacts;
import com.example.moduleroom.databinding.DialogRoomBidListBinding;
import com.example.moduleroom.fragment.RoomChartsFragment;
import com.example.moduleroom.presenter.BidListPresenter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import com.qxcm.moduleutil.utils.ImageUtils;
import java.util.List;
/**
*@author qx
*@data 2025/6/28
*@description: 出价榜单
*/
public class BidListDialogFragment extends BaseMvpDialogFragment<BidListPresenter, DialogRoomBidListBinding> implements BidListContacts.View {
private RankingAutcionAdapter cAdapter;//魅力适配器
@Override
protected BidListPresenter bindPresenter() {
return new BidListPresenter( this, getActivity());
}
public static BidListDialogFragment newInstance(String auction_id) {
BidListDialogFragment roomRankingFragment = new BidListDialogFragment();
Bundle bundle = new Bundle();
bundle.putString("auction_id", auction_id);
roomRankingFragment.setArguments(bundle);
return roomRankingFragment;
}
@Override
protected void initData() {
MvpPre.roomAuctionList(getArguments().getString("auction_id"));
}
@Override
protected void initView() {
cAdapter = new RankingAutcionAdapter();
mBinding.rankRecycleView.setLayoutManager(new LinearLayoutManager(getContext()));
mBinding.rankRecycleView.setAdapter(cAdapter);
cAdapter.bindToRecyclerView(mBinding.rankRecycleView);
}
@Override
protected int getLayoutId() {
return R.layout.dialog_room_bid_list;
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams lp = window.getAttributes();
lp.dimAmount = 0.4f;
int screenHeight = getResources().getDisplayMetrics().heightPixels;
lp.height = (int) (screenHeight * 0.8f); // 80% 高度
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度撑满
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
@Override
public void roomAuctionList(List<RoomAuction.AuctionListBean> auctionListBean) {
cAdapter.setNewData(auctionListBean);
}
@Override
public void setNo1(RoomAuction.AuctionListBean listsBean) {
ImageUtils.loadHeadCC(listsBean.getAvatar(), mBinding.roomRankTop1HeadIcon);
mBinding.roomTop1Name.setText(listsBean.getNickname());
LinearLayout llContainer =mBinding.llVip1;
llContainer.removeAllViews(); // 清空旧的 ImageView
List<String> images = listsBean.getIcon(); // 获取图片列表
for (String url : images) {
if (url.contains("http")) {
ImageView imageView1 = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_15)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView1.setLayoutParams(params);
imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView1);
llContainer.addView(imageView1);
}
}
mBinding.roomHeadTop1Label.setText(listsBean.getGift_price());
}
@Override
public void setNo2(RoomAuction.AuctionListBean listsBean) {
ImageUtils.loadHeadCC(listsBean.getAvatar(), mBinding.roomRankTop2HeadIcon);
mBinding.roomTop2Name.setText(listsBean.getNickname());
LinearLayout llContainer =mBinding.llVip2;
llContainer.removeAllViews(); // 清空旧的 ImageView
List<String> images = listsBean.getIcon(); // 获取图片列表
for (String url : images) {
if (url.contains("http")) {
ImageView imageView1 = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_15)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView1.setLayoutParams(params);
imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView1);
llContainer.addView(imageView1);
}
}
mBinding.roomHeadTop2Label.setText(listsBean.getGift_price());
}
@Override
public void setNo3(RoomAuction.AuctionListBean listsBean) {
ImageUtils.loadHeadCC(listsBean.getAvatar(), mBinding.roomRankTop3HeadIcon);
mBinding.roomTop3Name.setText(listsBean.getNickname());
LinearLayout llContainer =mBinding.llVip3;
llContainer.removeAllViews(); // 清空旧的 ImageView
List<String> images = listsBean.getIcon(); // 获取图片列表
for (String url : images) {
if (url.contains("http")) {
ImageView imageView1 = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_15)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView1.setLayoutParams(params);
imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView1);
llContainer.addView(imageView1);
}
}
mBinding.roomHeadTop3Label.setText(listsBean.getGift_price());
}
@Override
public void setCharmEmpty() {
}
}

View File

@@ -0,0 +1,238 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.CardRelationAdapter;
import com.example.moduleroom.contacts.CardRelationshipContacts;
import com.example.moduleroom.databinding.DialogCardRelationBinding;
import com.example.moduleroom.presenter.CardRelationshipPresenter;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.RoomAutionTimeBean;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.RoomAuctionABean;
import com.qxcm.moduleutil.bean.RoomRelationBean;
import com.qxcm.moduleutil.bean.RoomTime;
import com.qxcm.moduleutil.bean.RoonGiftModel;
import com.qxcm.moduleutil.bean.ViewItem;
import com.qxcm.moduleutil.bean.room.AuctionBean;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/28
*@description: 卡关系弹框
*/
public class CardRelationshipFragment extends BaseMvpDialogFragment<CardRelationshipPresenter, DialogCardRelationBinding> implements CardRelationshipContacts.View{
private String type;
private String roomId;
private String userId;
private CardRelationAdapter adapter;
private List<ViewItem> viewItems = new ArrayList<>();
private RoomAuctionABean roomAuctionABean;
RoomRelationBean roomRelationBean;
RoomAutionTimeBean roomAutionTimeBean;
RoonGiftModel roonGiftModel;
@Override
protected CardRelationshipPresenter bindPresenter() {
return new CardRelationshipPresenter(this, getActivity());
}
public static void show(String roomId, String userId,String type, FragmentManager fragmentManager) {
CardRelationshipFragment dialogFragment = new CardRelationshipFragment();
Bundle args = new Bundle();
args.putString("roomId", roomId);
args.putString("userId", userId);
args.putString("type", type);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "PublishCommentDialogFragment");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
type = getArguments().getString("type");
roomId = getArguments().getString("roomId");
userId = getArguments().getString("userId");
}
@Override
protected void initData() {
MvpPre.roomRelationList(type);
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);;
int heightInPx = (int) heightInDp;
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInPx);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
setStyle(DialogFragment.STYLE_NORMAL, com.qxcm.moduleutil.R.style.CustomDialogFragmentTheme);
}
@Override
protected void initView() {
RecyclerView recyclerView = mBinding.recycleView;
GridLayoutManager layoutManager = new GridLayoutManager(requireContext(), 4); // 最大支持 4 列
recyclerView.setLayoutManager(layoutManager);
// 设置 SpanSizeLookup 控制不同 item 占据的列数
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int viewType = adapter.getItemViewType(position);
switch (viewType) {
case ViewItem.TYPE_TEXT: // 文本占满整行
return 4;
case ViewItem.TYPE_RELATION: // 每行 2 个
return 1;
case ViewItem.TYPE_GIFT: // 每行 3 个
return 1; // 3 个时,总列数 3则每项占 1 列;若总列数为 4则需调整
case ViewItem.TYPE_IMAGE_SELECTION: // 每行 4 个
return 1;
default:
return 1;
}
}
});
adapter = new CardRelationAdapter();
recyclerView.setAdapter(adapter);
roomAuctionABean=new RoomAuctionABean();
// 模拟从网络获取 RoomAuctionABean 数据
// 构建 ViewItem 列表
mBinding.tvWheatQd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
roomRelationBean = adapter.getSelectedRelation();
roomAutionTimeBean = adapter.getSelectedTime();
roonGiftModel = adapter.getSelectedGift();
if (type.equals("2")){
if (roomRelationBean != null && roomAutionTimeBean != null && roonGiftModel != null) {
// 创建一个 RoomAuctionABean 对象
MvpPre.roomAuction(roomId, userId, roonGiftModel.getGift_id(), roomRelationBean.getRelation_id(), "2", roomAutionTimeBean.getHours()+"");
}else {
ToastUtils.show("请选择竞拍信息");
}
}else {
if (roomRelationBean != null&& roonGiftModel != null){
MvpPre.roomAuctionTime(roonGiftModel.getGift_id());
}else {
ToastUtils.show("请选择竞拍信息");
}
}
}
});
}
@Override
protected int getLayoutId() {
return R.layout.dialog_card_relation;
}
@Override
public void roomRelationList(List<RoomRelationBean> roomRelationBeans) {
if (roomRelationBeans!=null) {
roomAuctionABean.setRoomRelationBeanList(roomRelationBeans);
MvpPre.getGiftList("99");
}else {
ToastUtils.show("数据接口错误");
}
}
@Override
public void setGiftList(List<RoonGiftModel> roonGiftModels) {
if (roonGiftModels!=null) {
roomAuctionABean.setRoomGiftBeanList(roonGiftModels);
upList();
}
}
@Override
public void roomAuction(AuctionBean auctionBean) {
dismiss();
}
@Override
public void roomAuctionTime(RoomTime roomTime) {
MvpPre.roomAuction(roomId, userId, roonGiftModel.getGift_id(), roomRelationBean.getRelation_id(), "1", roomTime.getTime_day());
}
private void upList(){
if (roomAuctionABean != null) {
// 添加文本项
viewItems.add(new ViewItem(ViewItem.TYPE_TEXT, "选择关系"));
// 添加关系列表
for (RoomRelationBean bean : roomAuctionABean.getRoomRelationBeanList()) {
viewItems.add(new ViewItem(ViewItem.TYPE_RELATION, bean));
}
if (type.equals("2")){
viewItems.add(new ViewItem(ViewItem.TYPE_TEXT, "选择时长"));
for (RoomAutionTimeBean bean : getDefaultTimeOptions()) {
viewItems.add(new ViewItem(ViewItem.TYPE_IMAGE_SELECTION, bean));
}
}
viewItems.add(new ViewItem(ViewItem.TYPE_TEXT, "选择礼物"));
// 添加礼物列表
for (RoonGiftModel bean : roomAuctionABean.getRoomGiftBeanList()) {
viewItems.add(new ViewItem(ViewItem.TYPE_GIFT, bean));
}
adapter.submitList(viewItems);
}
}
public static List<RoomAutionTimeBean> getDefaultTimeOptions() {
List<RoomAutionTimeBean> list = new ArrayList<>();
list.add(new RoomAutionTimeBean(1));
list.add(new RoomAutionTimeBean(3));
list.add(new RoomAutionTimeBean(5));
list.add(new RoomAutionTimeBean(10));
list.add(new RoomAutionTimeBean(15));
list.add(new RoomAutionTimeBean(20));
list.add(new RoomAutionTimeBean(25));
list.add(new RoomAutionTimeBean(30));
return list;
}
}

View File

@@ -0,0 +1,100 @@
package com.example.moduleroom.dialog;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.widget.GifAvatarOvalView;
public class CustomCenterDialogFragment extends DialogFragment {
private int animStyle = com.qxcm.moduleutil.R.anim.anim_scale_in; // 默认使用透明度动画
RoomAuction.AuctionListBean recipient;
RoomAuction.AuctionUserBean auction_user;
private OnDialogActionListener listener;
GifAvatarOvalView avatar1;
GifAvatarOvalView avatar2;
private TextView tv_tname;
private TextView tv_name1;
private TextView tv_name2;
public interface OnDialogActionListener {
void onKnowClicked();
}
public static void show(RoomAuction.AuctionListBean recipient,RoomAuction.AuctionUserBean auction_user, FragmentManager fragmentManager) {
CustomCenterDialogFragment fragment = new CustomCenterDialogFragment();
Bundle args = new Bundle();
args.putSerializable("recipient", recipient);
args.putSerializable("auction_user", auction_user);
fragment.setArguments(args);
fragment.show(fragmentManager, "CustomCenterDialogFragment");
}
public void setAnimationStyle(int animStyle) {
this.animStyle = animStyle;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
recipient = (RoomAuction.AuctionListBean) getArguments().getSerializable("recipient");
auction_user = (RoomAuction.AuctionUserBean) getArguments().getSerializable("auction_user");
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(requireContext());
dialog.setContentView(R.layout.dialog_room_auction);
Window window = dialog.getWindow();
if (window != null) {
window.setLayout(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.setGravity(Gravity.CENTER);
}
avatar1= dialog.findViewById(R.id.avatar1);
avatar2= dialog.findViewById(R.id.avatar2);
tv_name1= dialog.findViewById(R.id.tv_name1);
tv_name2= dialog.findViewById(R.id.tv_name2);
tv_tname= dialog.findViewById(R.id.tv_tname);
ImageUtils.loadHeadCC(recipient.getAvatar(),avatar1);
ImageUtils.loadHeadCC(auction_user.getAvatar(),avatar2);
tv_name1.setText(recipient.getNickname());
tv_name2.setText(auction_user.getNickname());
tv_tname.setText(auction_user.getRelation_name()+"关系竞拍成功");
return dialog;
}
@Override
public void onResume() {
super.onResume();
Window window = getDialog().getWindow();
if (window != null) {
Animation animation = AnimationUtils.loadAnimation(requireContext(), animStyle);
window.getDecorView().startAnimation(animation);
}
}
}

View File

@@ -0,0 +1,67 @@
package com.example.moduleroom.dialog;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.example.moduleroom.R;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
/**
*@author qx
*@data 2025/6/26
*@description: 底部弹框,退出房间选择
*/
public class ExitRoomBottomSheet extends BottomSheetDialogFragment {
public interface OnOptionSelectedListener {
void onMinimize(); // 最小化
void onExitRoom(); // 退出房间
void onCancel(); // 取消
}
private OnOptionSelectedListener listener;
public static ExitRoomBottomSheet newInstance() {
return new ExitRoomBottomSheet();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NORMAL, com.qxcm.moduleutil.R.style.AppBottomSheetDialogTheme); // 自定义样式(可选)
setCancelable(true); // 点击外部可关闭
}
@SuppressLint("MissingInflatedId")
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_exit_room_bottom_sheet, container, false);
view.findViewById(R.id.tv_minimize).setOnClickListener(v -> {
if (listener != null) listener.onMinimize();
dismiss();
});
view.findViewById(R.id.tv_exit_room).setOnClickListener(v -> {
if (listener != null) listener.onExitRoom();
dismiss();
});
view.findViewById(R.id.tv_cancel).setOnClickListener(v -> {
if (listener != null) listener.onCancel();
dismiss();
});
return view;
}
public void setOnOptionSelectedListener(OnOptionSelectedListener listener) {
this.listener = listener;
}
}

View File

@@ -0,0 +1,87 @@
package com.example.moduleroom.dialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.CompoundButton;
import android.widget.Switch;
import androidx.annotation.NonNull;
import com.example.moduleroom.R;
/**
*@author qx
*@data 2025/7/3
*@description: 直播对战设置
*/
public class LiveBattleSettingsDialog extends Dialog {
private Switch switchFriendInvitation;
private Switch switchRecommendInvitation;
private OnSettingsChangeListener listener;
private int is_pk;
public LiveBattleSettingsDialog(@NonNull Context context,int is_pk, OnSettingsChangeListener listener) {
super(context);
this.listener = listener;
this.is_pk = is_pk;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); // 隐藏标题栏
setContentView(R.layout.dialog_live_battle_settings);
// 初始化视图
switchFriendInvitation = findViewById(R.id.switch_friend_invitation);
switchRecommendInvitation = findViewById(R.id.switch_recommend_invitation);
// 设置初始状态(根据需要)
switchFriendInvitation.setChecked(false);
switchRecommendInvitation.setChecked(false);
if (is_pk==1){
switchFriendInvitation.setChecked(true);
}else {
switchFriendInvitation.setChecked(false);
}
// 添加开关监听器
switchFriendInvitation.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (listener != null) {
listener.onFriendInvitationChanged(isChecked);
}
}
});
switchRecommendInvitation.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (listener != null) {
listener.onRecommendInvitationChanged(isChecked);
}
}
});
}
@Override
public void show() {
Window window = getWindow();
if (window != null) {
window.setGravity(Gravity.CENTER); // 居中显示
window.setBackgroundDrawableResource(com.qxcm.moduleutil.R.drawable.bg_r16_fff); // 透明背景
}
super.show();
}
public interface OnSettingsChangeListener {
void onFriendInvitationChanged(boolean isChecked);
void onRecommendInvitationChanged(boolean isChecked);
}
}

View File

@@ -0,0 +1,66 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.view.View;
import androidx.annotation.NonNull;
import com.example.moduleroom.R;
import com.example.moduleroom.databinding.FragmentPkResultDialogBinding;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.widget.dialog.BaseDialog;
/**
*@author qx
*@data 2025/7/4
*@description: pk结果弹窗
*/
public class PkResultDialogFragment extends BaseDialog<FragmentPkResultDialogBinding> {
private RoomMessageEvent messageEvent;
public PkResultDialogFragment(@NonNull Context context, RoomMessageEvent messageEvent) {
super(context);
this.messageEvent = messageEvent;
}
@Override
public int getLayoutId() {
return R.layout.fragment_pk_result_dialog;
}
@Override
public void initView() {
}
@Override
public void initData() {
if (messageEvent != null){
if(messageEvent.getText().getType()==0){
mBinding.clPk.setBackgroundResource(com.qxcm.moduleutil.R.mipmap.pk_sb);
ImageUtils.loadHeadCC(messageEvent.getText().getDefeated_cover(),mBinding.userAvatar1);
ImageUtils.loadHeadCC(messageEvent.getText().getVictory_cover(),mBinding.userAvatar2);
mBinding.tvName1.setText(messageEvent.getText().getDefeated_name());
mBinding.tvName2.setText(messageEvent.getText().getVictory_name());
mBinding.ivStart1.setImageResource(com.qxcm.moduleutil.R.mipmap.fail);
mBinding.ivStart2.setImageResource(com.qxcm.moduleutil.R.mipmap.victory);
}else if (messageEvent.getText().getType()==1){
mBinding.clPk.setBackgroundResource(com.qxcm.moduleutil.R.mipmap.pk_sl);
ImageUtils.loadHeadCC(messageEvent.getText().getDefeated_cover(),mBinding.userAvatar2);
ImageUtils.loadHeadCC(messageEvent.getText().getVictory_cover(),mBinding.userAvatar1);
mBinding.tvName1.setText(messageEvent.getText().getVictory_name());
mBinding.tvName2.setText(messageEvent.getText().getDefeated_name());
mBinding.ivStart1.setImageResource(com.qxcm.moduleutil.R.mipmap.victory);
mBinding.ivStart2.setImageResource(com.qxcm.moduleutil.R.mipmap.fail);
}else if (messageEvent.getText().getType()==2){
mBinding.clPk.setBackgroundResource(com.qxcm.moduleutil.R.mipmap.pk_pj);
ImageUtils.loadHeadCC(messageEvent.getText().getDefeated_cover(),mBinding.userAvatar2);
ImageUtils.loadHeadCC(messageEvent.getText().getVictory_cover(),mBinding.userAvatar1);
mBinding.tvName1.setText(messageEvent.getText().getVictory_name());
mBinding.tvName2.setText(messageEvent.getText().getDefeated_name());
mBinding.ivStart1.setVisibility(View.GONE);
mBinding.ivStart2.setVisibility(View.GONE);
}
}
}
}

View File

@@ -0,0 +1,138 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.PkTimeAdapter;
import com.example.moduleroom.contacts.PkTimeContract;
import com.example.moduleroom.databinding.FragmentPkTimeFragmentBinding;
import com.example.moduleroom.presenter.PkTimePresenter;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.RoomAutionTimeBean;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/7/3
*@description: pk点击开始选择时间
*/
public class PkTimeDialogFragment extends BaseMvpDialogFragment<PkTimePresenter, FragmentPkTimeFragmentBinding> implements PkTimeContract.View {
private String pk_id;
private PkTimeAdapter mAdapter;
@Override
protected PkTimePresenter bindPresenter() {
return new PkTimePresenter(this, getActivity());
}
public static void show(String pk_id, FragmentManager fragmentManager) {
PkTimeDialogFragment dialogFragment = new PkTimeDialogFragment();
Bundle args = new Bundle();
args.putString("pk_id", pk_id);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "PkTimeDialogFragment");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
pk_id = getArguments().getString("pk_id");
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);
;
int heightInPx = (int) heightInDp;
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInPx);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
setStyle(DialogFragment.STYLE_NORMAL, com.qxcm.moduleutil.R.style.CustomDialogFragmentTheme);
}
@Override
protected void initData() {
}
@Override
protected void initView() {
RecyclerView recyclerView = mBinding.recycleView;
GridLayoutManager layoutManager = new GridLayoutManager(requireContext(), 4); // 最大支持 4 列
recyclerView.setLayoutManager(layoutManager);
mAdapter = new PkTimeAdapter();
recyclerView.setAdapter(mAdapter);
mAdapter.setNewData(getDefaultTimeOptions());
mBinding.tvWheatQd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RoomAutionTimeBean roomAutionTimeBean = mAdapter.getSelectedTime();
if (roomAutionTimeBean != null) {
MvpPre.startPk(pk_id, roomAutionTimeBean.getDays() + "");
dismiss();
}else {
ToastUtils.show("请选择时间");
}
}
});
mBinding.tvWheatCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
}
@Override
protected int getLayoutId() {
return R.layout.fragment_pk_time_fragment;
}
public static List<RoomAutionTimeBean> getDefaultTimeOptions() {
List<RoomAutionTimeBean> list = new ArrayList<>();
list.add(new RoomAutionTimeBean(5));
list.add(new RoomAutionTimeBean(10));
list.add(new RoomAutionTimeBean(15));
list.add(new RoomAutionTimeBean(20));
list.add(new RoomAutionTimeBean(25));
list.add(new RoomAutionTimeBean(30));
list.add(new RoomAutionTimeBean(35));
list.add(new RoomAutionTimeBean(40));
return list;
}
@Override
public void startPk() {
dismiss();
}
}

View File

@@ -0,0 +1,68 @@
package com.example.moduleroom.dialog;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import androidx.fragment.app.FragmentManager;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.PublishCommentContacts;
import com.example.moduleroom.databinding.DialogPublishCommentBinding;
import com.example.moduleroom.presenter.PublishCommentPresenter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
/**
*@author qx
*@data 2025/6/27
*@description: 发布头条的弹出框
*/
public class PublishCommentDialogFragment extends BaseMvpDialogFragment<PublishCommentPresenter, DialogPublishCommentBinding> implements PublishCommentContacts.View{
@Override
protected PublishCommentPresenter bindPresenter() {
return new PublishCommentPresenter(this, getActivity());
}
public static void show( FragmentManager fragmentManager) {
PublishCommentDialogFragment dialogFragment = new PublishCommentDialogFragment();
Bundle args = new Bundle();
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "PublishCommentDialogFragment");
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
// int heightInPx = (int) (heightInDp * getResources().getDisplayMetrics().density);
window.setLayout(WindowManager.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
// 可选:设置动画样式(从底部弹出)
// window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.CENTER);
}
@Override
protected void initData() {
}
@Override
protected void initView() {
}
@Override
protected int getLayoutId() {
return R.layout.dialog_publish_comment;
}
}

View File

@@ -0,0 +1,200 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import com.blankj.utilcode.util.ToastUtils;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RoomOnlineAdapter;
import com.example.moduleroom.contacts.RequestContacts;
import com.example.moduleroom.contacts.RoomContacts;
import com.example.moduleroom.databinding.FragmentRequestDialogBinding;
import com.example.moduleroom.databinding.FragmentRoomOnlineDialogBinding;
import com.example.moduleroom.fragment.MusicSongListFragment;
import com.example.moduleroom.fragment.RankingChildFragment;
import com.example.moduleroom.fragment.RequestFragment;
import com.example.moduleroom.presenter.RequestPresenter;
import com.example.moduleroom.presenter.RoomPresenter;
import com.google.android.material.tabs.TabLayoutMediator;
import com.qxcm.moduleutil.adapter.MyFragmentPagerAdapter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.MusicSongBean;
import com.qxcm.moduleutil.bean.SongMusicBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.utils.SpUtil;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import io.agora.musiccontentcenter.Music;
/**
*@author qx
*@data 2025/6/10
*@description: 点唱选歌弹框
*/
public class RequestDialogFragment extends BaseMvpDialogFragment<RequestPresenter, FragmentRequestDialogBinding> implements
RequestContacts.View {
private int page;
private static String roomId;
private RoomInfoResp roomInfoResp;
@Override
protected RequestPresenter bindPresenter() {
return new RequestPresenter(this, getActivity());
}
public static void show(String id,RoomInfoResp roomInfoResp, FragmentManager fragmentManager) {
RequestDialogFragment dialogFragment = new RequestDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
args.putSerializable("roomInfo", roomInfoResp);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RequestDialogFragment");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomId=getArguments().getString("roomId");
roomInfoResp= (RoomInfoResp) getArguments().getSerializable("roomInfo");
}
@Override
protected void initData() {
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);;
int heightInPx = (int) heightInDp;
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInPx);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
// 强制支持 adjustResize 行为
// window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
setStyle(DialogFragment.STYLE_NORMAL, com.qxcm.moduleutil.R.style.CustomDialogFragmentTheme);
}
}
@Override
public void onStop() {
super.onStop();
}
@Override
protected void initView() {
String[] title = new String[]{"点歌", "已点"};
List<Fragment> fragments = new ArrayList<>();
// 创建子 Fragment 并设置回调监听器
RequestFragment dataFragment = RequestFragment.newInstance(roomId, RequestFragment.TYPE_DATA);
dataFragment.setOnRequestFragmentListener(new RequestFragment.OnRequestFragmentListener() {
@Override
public void onCloseDialog(Music musicSongBean) {
// AgoraManager.getInstance(getContext()).isPreload(musicSongBean.getSongCode(),1);
MvpPre.song(roomId, SpUtil.getUserId()+"", musicSongBean.getSongCode()+"", musicSongBean.getName(), musicSongBean.getSinger(), musicSongBean.getPoster(), String.valueOf(musicSongBean.getDurationS()));
}
});
MusicSongListFragment weekFragment = MusicSongListFragment.newInstance(roomId,roomInfoResp, RequestFragment.TYPE_WEEK);
weekFragment.setOnRequestFragmentListener(() -> dismiss());
fragments.add(dataFragment);
fragments.add(weekFragment);
mBinding.vpRequest.setAdapter(new MyFragmentPagerAdapter(getActivity(), title,roomId,roomInfoResp));
// 绑定 TabLayout
new TabLayoutMediator(mBinding.slidingTabLayout, mBinding.vpRequest,
(tab, position) -> tab.setText(title[position])
).attach();
}
public interface Refreshable {
void refresh();
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
setStyle(DialogFragment.STYLE_NORMAL, com.qxcm.moduleutil.R.style.CustomDialogFragmentTheme);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_request_dialog;
}
@Override
public void songList(List<MusicSongBean> musicSongBeans) {
}
@Override
public void upSong(String S) {
com.hjq.toast.ToastUtils.show(S);
}
@Override
public void song(List<SongMusicBean> music) {
com.hjq.toast.ToastUtils.show("操作成功");
}
private static class MyFragmentPagerAdapter extends FragmentStateAdapter {
private String[] list;
private String roomId;
private RoomInfoResp roomInfoResp;
public MyFragmentPagerAdapter(@NonNull FragmentActivity fragmentActivity, String[] list,String roomId,RoomInfoResp roomInfoResp) {
super(fragmentActivity);
this.list = list;
this.roomId=roomId;
this.roomInfoResp=roomInfoResp;
}
public CharSequence getPageTitle(int position) {
return list[position];
}
@NonNull
@Override
public Fragment createFragment(int position) {
if (position == 1)
return MusicSongListFragment.newInstance(roomId,roomInfoResp, RequestFragment.TYPE_WEEK);
else {
return RequestFragment.newInstance(roomId, RequestFragment.TYPE_DATA);
}
}
@Override
public int getItemCount() {
return list.length;
}
}
}

View File

@@ -0,0 +1,461 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.GiftUserAdapter;
import com.example.moduleroom.databinding.RoomGiftDialogBinding;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.adapter.GiftTwoDetailsFragment;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.GiftLabelBean;
import com.qxcm.moduleutil.bean.GiftNumBean;
import com.qxcm.moduleutil.bean.RewardUserBean;
import com.qxcm.moduleutil.bean.RoonGiftModel;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.bean.WalletBean;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomPitBean;
import com.qxcm.moduleutil.dialog.RechargeDialogFragment;
import com.qxcm.moduleutil.event.GiftDoubleClickEvent;
import com.qxcm.moduleutil.event.GiftUserRefreshEvent;
import com.qxcm.moduleutil.event.RoomGiftGiveEvent;
import com.qxcm.moduleutil.presenter.RewardGiftContacts;
import com.qxcm.moduleutil.presenter.RewardGiftPresenter;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.widget.dialog.KeyboardPopupWindow;
import com.qxcm.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.LinkedList;
import java.util.List;
/**
* @author qx
* @data 2025/6/16
* @description: 送礼物的dialog
*/
public class RoomGiftDialogFragment extends BaseMvpDialogFragment<RewardGiftPresenter, RoomGiftDialogBinding> implements RewardGiftContacts.View {
private GiftUserAdapter gifyuseradapter;
private SelectGiftNumPopupWindow mSelectGiftNumPopupWindow;
private KeyboardPopupWindow mKeyboardPopupWindow;
private List<GiftNumBean> mGiftNumList;
private RoonGiftModel roonGiftModel = null;
private RoomInfoResp roomInfoResp;
private String label_id;
List<RewardUserBean> rewardUserBeanList;
private List<Fragment> fragmentList = new ArrayList<>();
private UserInfo userInfo;
private boolean all = false;
private String roomId;
private final List<String> oldSelectedIds = new LinkedList<>();
@Override
protected RewardGiftPresenter bindPresenter() {
return new RewardGiftPresenter(this, getActivity());
}
public static void show(RoomInfoResp roomInfoResp, UserInfo userInfo, String roomId, FragmentManager fragmentManager) {
RoomGiftDialogFragment dialogFragment = new RoomGiftDialogFragment();
Bundle args = new Bundle();
args.putSerializable("roomInfoResp", roomInfoResp);
args.putSerializable("userInfo", userInfo);
args.putString("roomId", roomId);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RewardGiftDialogFragment");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp");
userInfo = (UserInfo) getArguments().getSerializable("userInfo");
roomId = getArguments().getString("roomId");
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
protected void initData() {
// MvpPre.getRewardList("1", 1, 10);
MvpPre.getGiftLabel("1");
MvpPre.wallet();
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"));
rewardUserBeanList = new ArrayList<>();
if (roomInfoResp == null) {
RewardUserBean rewardUserBean = new RewardUserBean();
rewardUserBean.setUser_id(userInfo.getUser_id() + "");
rewardUserBean.setNickname(userInfo.getNickname());
rewardUserBean.setAvatar(userInfo.getAvatar());
rewardUserBean.setPit_number(userInfo.getPit_number());
rewardUserBean.setSelect(true);
rewardUserBeanList.add(rewardUserBean);
} else {
rewardUserBeanList = getSortedRewardUserList(roomInfoResp.getRoom_info().getPit_list(), "9", "10");
// for (int i = 0; i < roomInfoResp.getRoom_info().getPit_list().size(); i++) {
// if (!(SpUtil.getUserId() + "").equals(roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id()) && !roomInfoResp.getRoom_info().getPit_list().get(i).getPit_number().equals("0") && !roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id().equals("0")) {
// RewardUserBean rewardUserBean = new RewardUserBean();
// rewardUserBean.setUser_id(roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id());
// rewardUserBean.setNickname(roomInfoResp.getRoom_info().getPit_list().get(i).getNickname());
// rewardUserBean.setAvatar(roomInfoResp.getRoom_info().getPit_list().get(i).getAvatar());
// rewardUserBean.setPit_number(roomInfoResp.getRoom_info().getPit_list().get(i).getPit_number());
// rewardUserBeanList.add(rewardUserBean);
// }
// }
}
mBinding.rvGiftUser.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
gifyuseradapter = new GiftUserAdapter();
mBinding.rvGiftUser.setAdapter(gifyuseradapter);
gifyuseradapter.setNewData(rewardUserBeanList);
gifyuseradapter.setOnItemClickListener((adapter, view, position) -> {
RewardUserBean item = (RewardUserBean) adapter.getItem(position);
if (item != null) {
item.setSelect(!item.isSelect());
}
// mBinding.tvOneKeyAllGive.setVisibility(currentPage == 1 && giftUserAdapter.getSelectCount() == 1 ?
// View.VISIBLE : View.INVISIBLE);//选中了两个以上麦位,一键送礼隐藏
all = gifyuseradapter.isAll();
if (all) {
mBinding.tvAllWheat.setVisibility(View.GONE);
} else {
mBinding.tvAllWheat.setVisibility(View.VISIBLE);
}
gifyuseradapter.notifyItemChanged(position, item);
oldSelectedIds.clear();
oldSelectedIds.addAll(gifyuseradapter.getAllSelectedIds());
});
}
private List<RewardUserBean> getSortedRewardUserList(List<RoomPitBean> pitList, String... priorityPits) {
List<RewardUserBean> result = new ArrayList<>();
List<String> added = new ArrayList<>();
// 优先添加指定麦位
for (String targetPit : priorityPits) {
for (RoomPitBean bean : pitList) {
if (bean.getPit_number().equals(targetPit) &&
!bean.getUser_id().equals("0") && !bean.getUser_id().equals("") &&
!bean.getUser_id().equals(SpUtil.getUserId())) {
RewardUserBean rewardUserBean = new RewardUserBean();
rewardUserBean.setUser_id(bean.getUser_id());
rewardUserBean.setNickname(bean.getNickname());
rewardUserBean.setAvatar(bean.getAvatar());
rewardUserBean.setPit_number(bean.getPit_number());
result.add(rewardUserBean);
added.add(bean.getPit_number());
}
}
}
// 添加剩余的
for (RoomPitBean bean : pitList) {
String pitNumber = bean.getPit_number();
if (!added.contains(pitNumber) &&
!bean.getUser_id().equals("0") && !bean.getUser_id().equals("") &&
!bean.getUser_id().equals(SpUtil.getUserId())) {
RewardUserBean rewardUserBean = new RewardUserBean();
rewardUserBean.setUser_id(bean.getUser_id());
rewardUserBean.setNickname(bean.getNickname());
rewardUserBean.setAvatar(bean.getAvatar());
rewardUserBean.setPit_number(bean.getPit_number());
result.add(rewardUserBean);
}
}
return result;
}
@Override
protected void initView() {
// mBinding.rvGiftUser.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
// adapter = new BaseQuickAdapter<RewardUserBean, BaseViewHolder>(com.qxcm.moduleutil.R.layout.item_reward, null) {
// @Override
// protected void convert(BaseViewHolder helper, RewardUserBean item) {
// ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(com.qxcm.moduleutil.R.id.im_reward));
// }
// };
mBinding.tvGiveCoinNum.setOnClickListener(this::onClisk);
mBinding.tvGive.setOnClickListener(this::onClisk);
mBinding.cz.setOnClickListener(this::onClisk);
mBinding.tvAllWheat.setOnClickListener(this::onClisk);
}
private void onClisk(View view1) {
if (view1.getId() == R.id.tv_give_coin_num) {
if (mSelectGiftNumPopupWindow == null) {
mSelectGiftNumPopupWindow = new SelectGiftNumPopupWindow(getSelfActivity(), (adapter, view, position) -> {
GiftNumBean giftNumBean = (GiftNumBean) adapter.getItem(position);
if ("0".equals(giftNumBean.getNumber())) {//自定义
mKeyboardPopupWindow = new KeyboardPopupWindow(getSelfActivity(), getView());
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.getText());
}
mSelectGiftNumPopupWindow.dismiss();
});
}
mSelectGiftNumPopupWindow.setData(mGiftNumList);
mSelectGiftNumPopupWindow.showAtLocation(mBinding.tvGiveCoinNum, Gravity.BOTTOM | Gravity.RIGHT, 100, 230);
} else if (view1.getId() == R.id.tv_give) {
for (int i = 0; i < mGiftNumList.size(); i++) {
if (mBinding.tvGiveCoinNum.getText().toString().equals(mGiftNumList.get(i).getText())) {
giftNumber = mGiftNumList.get(i).getNumber();
}
}
giveGift(giftNumber);
} else if (view1.getId() == R.id.cz) {
RechargeDialogFragment.show(roomId, getActivity().getSupportFragmentManager());
} else if (view1.getId() == R.id.tv_all_wheat) {//全麦
if (all) {
gifyuseradapter.allElection(false);
// mBinding.tvAllWheat.setVisibility(View.VISIBLE);
} else {
gifyuseradapter.allElection(true);
// mBinding.tvAllWheat.setVisibility(View.GONE);
}
all = !all;
oldSelectedIds.clear();
oldSelectedIds.addAll(gifyuseradapter.getAllSelectedIds());
}
}
private String giftNumber = "";
private RoomGiftGiveEvent roomGiftGiveEvent;
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftDoubleClickEvent(GiftDoubleClickEvent event) {
getSelectedGift();
giveGift("1");
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void userRefresh(GiftUserRefreshEvent event) {
roonGiftModel = event.gift;
}
private int getSelectedGift() {
int currentItem = mBinding.viewPager.getCurrentItem();
// if (currentItem < 1) { //比2小是才是礼物
GiftTwoDetailsFragment fragment = (GiftTwoDetailsFragment) fragmentList.get(currentItem);
roonGiftModel = fragment.getGiftList();
// }
// else {
// GiftFragment fragment = (GiftFragment) fragmentList.get(currentItem);
// giftModel = fragment.getmData();
// }
return currentItem;
}
private void giveGift(String num) {
getSelectedGift();
int currentItem = mBinding.viewPager.getCurrentItem();
String userId = gifyuseradapter.getUserIdToString();
String pit = gifyuseradapter.getUserPitToString();
if (currentItem < 1) {
if (roonGiftModel == null) {
ToastUtils.show("请选择礼物");
return;
}
int count = gifyuseradapter.getSelectCount();
if (count <= 0) {
ToastUtils.show("请选择打赏对象");
return;
}
if (TextUtils.isEmpty(num)) {
ToastUtils.show("请选择打赏礼物数量");
return;
}
if (Integer.valueOf(num) <= 0) {
ToastUtils.show("请选择打赏礼物数量");
return;
}
} else {
if (roonGiftModel == null) {
ToastUtils.show("请选择礼物");
return;
}
int count = gifyuseradapter.getSelectCount();
if (count <= 0) {
ToastUtils.show("请选择打赏对象");
return;
}
if (TextUtils.isEmpty(num)) {
ToastUtils.show("请选择打赏礼物数量");
return;
}
if (Integer.valueOf(num) <= 0) {
ToastUtils.show("请选择打赏礼物数量");
return;
}
}
if (currentItem == 0) {
//礼物打赏
giftNumber = num;
roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 0, null, roonGiftModel);
if (userInfo!=null) {
if (userInfo.getPit_number() != null && userInfo.getPit_number().equals("888") || userInfo.getPit_number().equals("")) {
if (userInfo.getPit_number().isEmpty()) {
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", pit);
} else {
MvpPre.roomAuctionJoin(userInfo.getAuction_id(), userInfo.getUser_id() + "", roonGiftModel.getGift_id(), num, "1");
}
}else {
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", pit);
}
}
else {
MvpPre.roomGift(roomId, roonGiftModel.getGift_id(), giftNumber, userId, "1", pit);
}
} else {
//背包礼物打赏
// giftNumber = num;
// roomGiftGiveEvent = new RoomGiftGiveEvent(userId, roomId, pit, num, 1, giftModel, null);
//
// MvpPre.giveBackGift(userId, giftModel.getGift_id(), roomId, pit, num, giftModel, 1);
}
}
@Override
protected int getLayoutId() {
return R.layout.room_gift_dialog;
}
@Override
public void getRewardList(List<RewardUserBean> rewardUserBeanList) {
if (rewardUserBeanList != null && !rewardUserBeanList.isEmpty()) {
mBinding.rvGiftUser.setVisibility(View.VISIBLE);
int limit = Math.min(rewardUserBeanList.size(), 6);
List<RewardUserBean> limitedList = rewardUserBeanList.subList(0, limit);
gifyuseradapter.setNewData(limitedList);
} else {
gifyuseradapter.setNewData(null);
mBinding.rvGiftUser.setVisibility(View.INVISIBLE);
}
}
@Override
public void getGiftLabel(List<GiftLabelBean> giftLabelBeans) {
mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), giftLabelBeans, fragmentList));
mBinding.slidingTabLayout.setViewPager(mBinding.viewPager);
mBinding.slidingTabLayout.setCurrentTab(0);
}
@Override
public void setGiftList(List<RoonGiftModel> roonGiftModels, int type) {
}
@Override
public void giveGift() {
// dismiss();
}
@Override
public void wallet(WalletBean walletBean) {
mBinding.tvRewardGift.setText(walletBean.getCoin());
}
@Override
public void reward_zone() {
com.blankj.utilcode.util.ToastUtils.showShort("打赏成功");
}
@Override
public void roomAuctionJoin(RoomAuction.AuctionListBean auctionListBean) {
com.blankj.utilcode.util.ToastUtils.showShort("竞拍成功");
dismiss();
}
private static class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private List<GiftLabelBean> list;
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(FragmentManager fm, List<GiftLabelBean> list, List<Fragment> fragmentList) {
super(fm);
this.list = list;
this.fragmentList = fragmentList;
}
@Override
public Fragment getItem(int position) {
GiftLabelBean model = list.get(position);
Fragment fragment = GiftTwoDetailsFragment.newInstance(model.getId(), 1);
fragmentList.add(fragment); // 保存 Fragment 实例
return fragment;
}
@Override
public int getCount() {
return list.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
GiftLabelBean model = list.get(position);
return model.getName();
}
}
}

View File

@@ -0,0 +1,243 @@
package com.example.moduleroom.dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.blankj.utilcode.util.StringUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RoomHostContacts;
import com.example.moduleroom.databinding.RoomHostAddFragmentBinding;
import com.example.moduleroom.presenter.RoomHostPresenter;
import com.hjq.toast.ToastUtils;
import com.lihang.ShadowLayout;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.HostBean;
import com.qxcm.moduleutil.bean.RefreshEvent;
import com.qxcm.moduleutil.bean.RoomHostUserBean;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.RoomSearchResp;
import com.qxcm.moduleutil.utils.ImageUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
*@author qx
*@data 2025/6/21
*@description: 设置主持人
*/
public class RoomHostAddFragment extends BaseMvpDialogFragment<RoomHostPresenter, RoomHostAddFragmentBinding> implements RoomHostContacts.View {
private String mRoomId ;
private BaseQuickAdapter<RoomSearchResp, BaseViewHolder> mAdapter;
// TODO: Customize parameter initialization
@SuppressWarnings("unused")
public static RoomHostAddFragment newInstance(String roomId) {
RoomHostAddFragment fragment = new RoomHostAddFragment();
Bundle args = new Bundle();
args.putString("roomId", roomId);
fragment.setArguments(args);
return fragment;
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
mRoomId = arguments.getString("roomId");
}
// TODO: 2025/3/7 固定dialog显示的位置和大小
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams lp = window.getAttributes();
lp.dimAmount = 0.4f;
// 固定对话框的宽度和高度
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度设置为屏幕宽度
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; // 高度设置为内容高度
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
@Override
protected RoomHostPresenter bindPresenter() {
return new RoomHostPresenter(this, getContext());
}
@Override
protected void initData() {
mBinding.editQuery.addTextChangedListener(new TextWatcher() {
private Handler handler = new Handler();
private final long DELAY = 1500; // 1秒延迟
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
handler.removeCallbacksAndMessages(null);
}
@Override
public void afterTextChanged(Editable editable) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
String keyWord = editable.toString();
if (!StringUtils.isEmpty(keyWord)) {
MvpPre.setUserHostList(keyWord,"1");
}
}
}, DELAY);
}
});
}
@Override
protected void initView() {
mBinding.rvHostAdd.setLayoutManager(new LinearLayoutManager(getContext()));
mAdapter = new BaseQuickAdapter<RoomSearchResp, BaseViewHolder>(R.layout.room_host_add_item, null) {
@Override
protected void convert(BaseViewHolder helper, RoomSearchResp item) {
helper.setText(R.id.tv_name, item.getName());
ImageUtils.loadHeadCC(item.getPictrue(), helper.getView(R.id.image));
helper.setText(R.id.tv_id, item.getCode());
// if (item.getSex().equals("1")){
// helper.setBackgroundRes(R.id.tv_gender, com.qxcm.moduleutil.R.mipmap.boyb);
// }else {
// helper.setBackgroundRes(R.id.tv_gender, com.qxcm.moduleutil.R.mipmap.girl);
// }
// helper.setText(R.id.tv_gender, item.getAge()+"");
// ImageUtils.loadImageView(item.getLevel_icon(), helper.getView(R.id.iv_rd));
LinearLayout llContainer = helper.getView(R.id.ll);
llContainer.removeAllViews(); // 清空旧的 ImageView
if (!item.getIcon().isEmpty()||item.getIcon().size()>0){
for (String url : item.getIcon()) {
if (url.contains("http")) {
ImageView imageView = new ImageView(getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_37),
getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_15)
);
params.setMargins(0, 0, getContext().getResources().getDimensionPixelSize(com.qxcm.moduleutil.R.dimen.dp_5), 0); // 右边距
imageView.setLayoutParams(params);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
// 使用 Glide 加载图片
ImageUtils.loadHeadCC(url, imageView);
llContainer.addView(imageView);
}
}
}
ShadowLayout layout = helper.getView(R.id.shadow_layout);
// layout.setShadowColor(R.color.picture_color_fa632d);
layout.setShadowHiddenBottom(false);
layout.setShadowHidden(false);
layout.setShadowOffsetY(1);
layout.setShadowOffsetX(1);
helper.getView(R.id.iv_add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: 2025/3/17 添加主持人
MvpPre.postHostAdd(mRoomId, item.getId(), "1", "1");
}
});
}
};
mBinding.rvHostAdd.setAdapter(mAdapter);
mAdapter.bindToRecyclerView(mBinding.rvHostAdd);
}
@Override
protected int getLayoutId() {
return R.layout.room_host_add_fragment;
}
@Override
public void setHostrList(List<HostBean> list) {
// mAdapter.setNewData(list);
}
@Override
public void getUserHostList(List<RoomSearchResp> list) {
mAdapter.setNewData(list);
}
@Override
public void postHostAdd(String s, String type, String is_add) {
ToastUtils.show("添加成功");
}
// @Override
// public void getUserHostList(List<RoomHostUserBean> list) {
// mAdapter.setNewData(list);
// }
// @Override
// public void postHostAdd(String s) {
// Logger.d("@@@@",s);
// ToastUtils.showShort("添加成功");
//
// }
// @Override
// public void setHostrList(List<HostBean> list) {
//
// }
@Override
public void postPresidedRatio(String s) {
}
@Override
public void postPresidedDel(String s) {
}
@Override
public void doDismiss() {
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
EventBus.getDefault().post(new RefreshEvent(mRoomId)); // 发送刷新事件
}
}

View File

@@ -0,0 +1,221 @@
package com.example.moduleroom.dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.blankj.utilcode.util.ToastUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RoomHostContacts;
import com.example.moduleroom.databinding.RoomFragmentItemListBinding;
import com.example.moduleroom.presenter.RoomHostPresenter;
import com.lihang.ShadowLayout;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.HostBean;
import com.qxcm.moduleutil.bean.RefreshEvent;
import com.qxcm.moduleutil.bean.RoomHostUserBean;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.RoomSearchResp;
import com.qxcm.moduleutil.utils.ImageUtils;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
* A fragment representing a list of Items.
* 主持弹窗
*/
public class RoomHostFragment extends BaseMvpDialogFragment<RoomHostPresenter, RoomFragmentItemListBinding> implements RoomHostContacts.View {
private String mRoomId;
private BaseQuickAdapter<HostBean, BaseViewHolder> mAdapter;
// TODO: Customize parameter initialization
@SuppressWarnings("unused")
public static RoomHostFragment newInstance(String roomId) {
RoomHostFragment fragment = new RoomHostFragment();
Bundle bundle = new Bundle();
bundle.putString("roomId", roomId);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
mRoomId = arguments.getString("roomId");
}
// TODO: 2025/3/7 固定dialog显示的位置和大小
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams lp = window.getAttributes();
lp.dimAmount = 0.4f;
// 固定对话框的宽度和高度
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度设置为屏幕宽度
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; // 高度设置为内容高度
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
@Override
protected RoomHostPresenter bindPresenter() {
return new RoomHostPresenter(this, getContext());
}
@Override
protected void initData() {
EventBus.getDefault().register(this); // 注册EventBus
// MvpPre.clearHostList(mRoomId, "1");
}
@Override
protected void initView() {
mBinding.tvTj.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: 2025/3/7 点击弹出设置主持人模式
RoomHostAddFragment.newInstance(mRoomId).show(getChildFragmentManager(), "RoomHostAddFragment");
}
});
mBinding.rvHostList.setLayoutManager(new LinearLayoutManager(getContext()));
mAdapter = new BaseQuickAdapter<HostBean, BaseViewHolder>(R.layout.room_fragment_item, null) {
@Override
protected void convert(BaseViewHolder helper, HostBean item) {
helper.setText(R.id.tv_name, item.getNickname());
ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.image));
if (item.getRatio() == null || item.getRatio().isEmpty()) {
helper.setText(R.id.tv_proportion, "未设置");
} else {
helper.setText(R.id.tv_proportion, item.getRatio() + "%");
}
helper.setText(R.id.tv_shouyi,item.getEarnings()!=null&&!item.getEarnings().isEmpty()?item.getEarnings():"0.00");
// helper.setText(R.id.tv_income, "¥" + item.getEarnings());
ShadowLayout layout = helper.getView(R.id.shadow_layout);
// layout.setShadowColor(R.color.picture_color_fa632d);
layout.setShadowHiddenBottom(false);
layout.setShadowHidden(false);
layout.setShadowOffsetY(1);
layout.setShadowOffsetX(1);
helper.getView(R.id.tv_yc).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: 2025/3/7 点击移除主持人
MvpPre.postHostAdd(mRoomId, item.getUser_id(), "1", "2");
}
});
helper.getView(R.id.tv_sz).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO: 2025/3/7 点击设置收益比例
RoomHostIncomeDialog dialog = new RoomHostIncomeDialog(getContext());
dialog.setListener(new RoomHostIncomeDialog.OnConfirmClickListener() {
@Override
public void onConfirm(String proportion) {
MvpPre.setPresidedRatio(item.getRoom_id(),item.getUser_id(), proportion);
}
});
dialog.show();
// dialog.setListener(new RoomHostIncomeDialog.OnConfirmClickListener() {
// @Override
// public void onConfirm(String proportion) {
// // TODO: 2025/3/7 提交数据
// MvpPre.setPresidedRatio(item.getRoom_id(),item.getId(), proportion);
// }
// });
// dialog.show();
}
});
}
};
mBinding.rvHostList.setAdapter(mAdapter);
mAdapter.bindToRecyclerView(mBinding.rvHostList);
}
@Override
protected int getLayoutId() {
return R.layout.room_fragment_item_list;
}
@Override
public void setHostrList(List<HostBean> list) {
mAdapter.setNewData(list);
}
@Override
public void getUserHostList(List<RoomSearchResp> list) {
}
@Override
public void postHostAdd(String s, String type, String is_add) {
MvpPre.clearHostList(mRoomId,"1");
}
@Override
public void postPresidedRatio(String s) {
ToastUtils.showShort("设置成功");
// MvpPre.clearHostList(mRoomId);
MvpPre.clearHostList(mRoomId,"1");
}
@Override
public void postPresidedDel(String s) {
ToastUtils.showShort("移除成功");
// MvpPre.clearHostList(mRoomId);
}
@Override
public void doDismiss() {
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshEvent(RefreshEvent refreshEvent) {
// MvpPre.clearHostList(refreshEvent.getRoomId());
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this); // 取消注册EventBus
}
@Override
public void onResume() {
super.onResume();
MvpPre.clearHostList(mRoomId,"1");
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void refreshEvent(RoomMessageEvent event) {
if (event.getMsgType() == 1007){
MvpPre.clearHostList(mRoomId,"1");
}
}
}

View File

@@ -0,0 +1,62 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.view.View;
import android.widget.RadioGroup;
import androidx.annotation.NonNull;
import com.blankj.utilcode.util.ScreenUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.example.moduleroom.R;
import com.example.moduleroom.databinding.RoomHostIncomeDialogBinding;
import com.qxcm.moduleutil.widget.dialog.BaseDialog;
import lombok.Setter;
@Setter
public class RoomHostIncomeDialog extends BaseDialog<RoomHostIncomeDialogBinding> {
public RoomHostIncomeDialog(@NonNull Context context) {
super(context);
}
public void setListener(OnConfirmClickListener listener) {
this.listener = listener;
}
@Override
public int getLayoutId() {
return R.layout.room_host_income_dialog;
}
@Override
public void initView() {
getWindow().setLayout((int) (ScreenUtils.getScreenWidth() / 375.0 * 341), RadioGroup.LayoutParams.WRAP_CONTENT);
mBinding.btnAction.setOnClickListener(this::onViewClicked);
}
@Override
public void initData() {
}
public OnConfirmClickListener listener;
public void onViewClicked(View view) {
if (listener != null) {
if (mBinding.edRoomName.getText().toString().trim().isEmpty()){
ToastUtils.showShort("请输入收益比例");
}else {
listener.onConfirm(mBinding.edRoomName.getText().toString().trim());
}
}
dismiss();
}
public interface OnConfirmClickListener {
void onConfirm(String proportion);
}
}

View File

@@ -0,0 +1,272 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import com.blankj.utilcode.util.ToastUtils;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RoomOnlineAdapter;
import com.example.moduleroom.contacts.RoomContacts;
import com.example.moduleroom.databinding.FragmentRoomOnlineDialogBinding;
import com.example.moduleroom.presenter.RoomPresenter;
import com.qxcm.moduleutil.adapter.LikeListAdapter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.CircleListBean;
import com.qxcm.moduleutil.bean.RoomCharmRankBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomOnline;
import com.qxcm.moduleutil.bean.room.RoomOnlineBean;
import com.qxcm.moduleutil.databinding.FragmentCommentDialogBinding;
import com.qxcm.moduleutil.presenter.CommentContacts;
import com.qxcm.moduleutil.presenter.CommentPresenter;
import com.qxcm.moduleutil.widget.dialog.CommentDialogFragment;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import java.util.List;
/**
*@author qx
*@data 2025/6/10
*@description: 在线列表弹框
*/
public class RoomOnlineDialogFragment extends BaseMvpDialogFragment<RoomPresenter, FragmentRoomOnlineDialogBinding> implements
RoomContacts.View {
private int page;
private RoomOnlineAdapter roomOnlineAdapter;
private RoomOnlineAdapter roomOnlineAdapter2;
private String roomId;
private String pit_number;
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getActivity());
}
public static void show(String id,String pit_number, FragmentManager fragmentManager) {
RoomOnlineDialogFragment dialogFragment = new RoomOnlineDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
args.putString("pit_number", pit_number);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RoomOnlineDialogFragment");
}
@Override
protected void initData() {
MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);;
// int heightInPx = (int) (heightInDp * getResources().getDisplayMetrics().density);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInDp);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomId=getArguments().getString("roomId");
pit_number=getArguments().getString("pit_number");
}
@Override
protected void initView() {
mBinding.srl.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
page++;
MvpPre.getRoomOnline(getArguments().getString("roomId"), page+"", "10");
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
// EventBus.getDefault().post(new BannerRefreshEvent());
page = 1;
MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
}
});
mBinding.rvComment.setLayoutManager(new LinearLayoutManager(getActivity()));
roomOnlineAdapter = new RoomOnlineAdapter();
mBinding.rvComment.setAdapter(roomOnlineAdapter);
mBinding.rvComment2.setLayoutManager(new LinearLayoutManager(getActivity()));
roomOnlineAdapter2 = new RoomOnlineAdapter();
mBinding.rvComment2.setAdapter(roomOnlineAdapter2);
roomOnlineAdapter.setListener(new RoomOnlineAdapter.OnJoinButtonClickListener() {
@Override
public void onJoinButtonClick(RoomOnlineBean item) {
MvpPre.hostUserPit(roomId,pit_number,item.getUser_id()+"","1");
}
@Override
public void onUserInfoClick(RoomOnlineBean item) {
RoomUserInfoFragment.show(roomId, item.getUser_id()+"",pit_number,getHostUser(item),false, getChildFragmentManager());
}
});
roomOnlineAdapter2.setListener(new RoomOnlineAdapter.OnJoinButtonClickListener() {
@Override
public void onJoinButtonClick(RoomOnlineBean item) {
MvpPre.hostUserPit(roomId,pit_number,item.getUser_id()+"","1");
}
@Override
public void onUserInfoClick(RoomOnlineBean item) {
RoomUserInfoFragment.show(roomId, item.getUser_id()+"",pit_number,0,false, getChildFragmentManager());
}
});
}
private int getHostUser(RoomOnlineBean item){
if (item.getPit_number()==9){
if (item.getRole().equals("1")){
return 1;
}else if (item.getRole().equals("2")){
return 2;
}else {
return 3;
}
}
return 0;
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room_online_dialog;
}
@Override
public void roomInfo(RoomInfoResp resp) {
}
@Override
public void showPasswordDialog() {
}
@Override
public void enterFail() {
}
@Override
public void getRoomOnline(RoomOnline onlineBean) {
int type_pit;
if (pit_number.isEmpty()){
type_pit=1;
}else {
type_pit=2;
}
if (onlineBean.getOn_pit()!=null && onlineBean.getOn_pit().size()>0){
for (RoomOnlineBean roomOnlineBean : onlineBean.getOn_pit()){
roomOnlineBean.setType(1);
roomOnlineBean.setType_pit(0);
}
roomOnlineAdapter.setNewData(onlineBean.getOn_pit());
}
if (onlineBean.getOff_pit()!=null && onlineBean.getOff_pit().size()>0){
for (RoomOnlineBean roomOnlineBean : onlineBean.getOff_pit()){
roomOnlineBean.setType(2);
roomOnlineBean.setType_pit(type_pit);
}
roomOnlineAdapter2.setNewData(onlineBean.getOff_pit());
}
int total = onlineBean.getOn_pit().size()+onlineBean.getOff_pit().size();
mBinding.tvNum.setText("在线用户("+total+")人");
}
// @Override
// public void getRoomOnline(List<RoomOnlineBean> onlineBean) {
// roomOnlineAdapter.setNewData(onlineBean);
// mBinding.tvNum.setText("在线用户("+onlineBean.size()+")人");
// }
@Override
public void applyPit() {
}
@Override
public void downPit() {
}
@Override
public void applySong() {
}
@Override
public void agreeSong() {
}
@Override
public void postRoomInfo(RoomInfoResp resp) {
}
@Override
public void getCharmRank(List<RoomCharmRankBean> list) {
}
@Override
public void changeSong() {
}
@Override
public void hostUserPit() {
ToastUtils.showShort("抱麦成功");
}
@Override
public void quitRoom() {
}
@Override
public void userGuanzSuccess(String s) {
}
@Override
public void acceptPk() {
}
}

View File

@@ -0,0 +1,223 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.blankj.utilcode.util.StringUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RoomPkContacts;
import com.example.moduleroom.databinding.FragmentRoomPkBinding;
import com.example.moduleroom.presenter.RoomPkPresenter;
import com.lihang.ShadowLayout;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.RoomSearchResp;
import com.qxcm.moduleutil.bean.room.RoomBean;
import com.qxcm.moduleutil.dialog.ConfirmDialog;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import java.util.List;
/**
* @author qx
* @data 2025/7/3
* @description:
*/
public class RoomPkDialogFragment extends BaseMvpDialogFragment<RoomPkPresenter, FragmentRoomPkBinding> implements RoomPkContacts.View {
private int page = 1;
private String keyWord = "";
private String mRoomId;
private String mUserId;
private int is_pk;
private BaseQuickAdapter<RoomBean, BaseViewHolder> mAdapter;
@Override
protected RoomPkPresenter bindPresenter() {
return new RoomPkPresenter(this, getActivity());
}
public static RoomPkDialogFragment newInstance(String roomId,String userId,int is_pk) {
RoomPkDialogFragment fragment = new RoomPkDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", roomId);
args.putString("userId", userId);
args.putInt("is_pk", is_pk);
fragment.setArguments(args);
return fragment;
}
@Override
protected void initData() {
MvpPre.searchPkRoom(keyWord, page + "", "15");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mRoomId = getArguments().getString("roomId");
mUserId = getArguments().getString("userId");
is_pk = getArguments().getInt("is_pk");
}
@Override
protected void initView() {
mBinding.editQuery.addTextChangedListener(new TextWatcher() {
private Handler handler = new Handler();
private final long DELAY = 1500; // 1秒延迟
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
handler.removeCallbacksAndMessages(null);
}
@Override
public void afterTextChanged(Editable editable) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
keyWord = editable.toString();
if (!StringUtils.isEmpty(keyWord)) {
MvpPre.searchPkRoom(keyWord, "1", "15");
}
}
}, DELAY);
}
});
mBinding.srl.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
page++;
MvpPre.searchPkRoom(keyWord, page + "", "15");
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
// EventBus.getDefault().post(new BannerRefreshEvent());
page = 1;
MvpPre.searchPkRoom(keyWord, "1", "15");
}
});
mBinding.rvPkAdd.setLayoutManager(new LinearLayoutManager(getContext()));
mAdapter = new BaseQuickAdapter<RoomBean, BaseViewHolder>(R.layout.room_host_add_item, null) {
@Override
protected void convert(BaseViewHolder helper, RoomBean item) {
helper.setText(R.id.tv_name, item.getRoom_name());
ImageUtils.loadHeadCC(item.getRoom_cover(), helper.getView(R.id.image));
helper.setText(R.id.tv_id, item.getRoom_number());
LinearLayout llContainer = helper.getView(R.id.ll);
llContainer.removeAllViews(); // 清空旧的 ImageView
ImageView ivAdd = helper.getView(R.id.iv_add);
ivAdd.setImageResource(com.qxcm.moduleutil.R.mipmap.yq_pk);
ShadowLayout layout = helper.getView(R.id.shadow_layout);
// layout.setShadowColor(R.color.picture_color_fa632d);
layout.setShadowHiddenBottom(false);
layout.setShadowHidden(false);
layout.setShadowOffsetY(1);
layout.setShadowOffsetX(1);
helper.getView(R.id.iv_add).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//发起邀请
MvpPre.sendPk(mRoomId, mUserId, item.getRoom_id());
}
});
}
};
mBinding.rvPkAdd.setAdapter(mAdapter);
mAdapter.bindToRecyclerView(mBinding.rvPkAdd);
mBinding.tvSz.setOnClickListener(v -> {
LiveBattleSettingsDialog settingsDialog = new LiveBattleSettingsDialog(getActivity(),is_pk, new LiveBattleSettingsDialog.OnSettingsChangeListener() {
@Override
public void onFriendInvitationChanged(boolean isChecked) {
// 处理好友邀请开关状态变化
handleFriendInvitationChange(isChecked);
}
@Override
public void onRecommendInvitationChanged(boolean isChecked) {
// 处理推荐邀请开关状态变化
handleRecommendInvitationChange(isChecked);
}
});
settingsDialog.show();
});
}
private void handleFriendInvitationChange(boolean isChecked) {
// 根据 isChecked 的值更新相关逻辑,并传递参数给服务器
// 例如:
// MvpPre.updateFriendInvitationSetting(isChecked);
if (isChecked){
MvpPre.refusePk(mRoomId, "1");
}else {
MvpPre.refusePk(mRoomId, "2");
}
}
private void handleRecommendInvitationChange(boolean isChecked) {
// 根据 isChecked 的值更新相关逻辑,并传递参数给服务器
// 例如:
// MvpPre.updateRecommendInvitationSetting(isChecked);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room_pk;
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams lp = window.getAttributes();
lp.dimAmount = 0.6f;
// 固定对话框的宽度和高度
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度设置为屏幕宽度
lp.height = WindowManager.LayoutParams.WRAP_CONTENT; // 高度设置为内容高度
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
@Override
public void searchPkRoom(List<RoomBean> roomBeans) {
mAdapter.setNewData(roomBeans);
}
@Override
public void sendPk() {
dismiss();
}
@Override
public void refusePk() {
}
}

View File

@@ -0,0 +1,340 @@
package com.example.moduleroom.dialog;
import static com.qxcm.moduleutil.bean.room.RoomSettingBean.QXRoomSettingTypeRoomOrderMic;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.GridLayoutManager;
import com.blankj.utilcode.util.GsonUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RoomSettingAdapter;
import com.example.moduleroom.contacts.RoomSettingContacts;
import com.example.moduleroom.databinding.DialogRoomSettingFragmentBinding;
import com.example.moduleroom.fragment.RoomBackgroundDialogFragment;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.event.EffectEvent;
import com.qxcm.moduleutil.event.MusicEvent;
import com.qxcm.moduleutil.event.RoomOutEvent;
import com.qxcm.moduleutil.listener.MessageListenerSingleton;
import com.example.moduleroom.presenter.RoomSettingPresenter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.RoomSettingEvent;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomSettingBean;
import com.qxcm.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<RoomSettingPresenter, DialogRoomSettingFragmentBinding> implements RoomSettingContacts.View{
private String userId;
private String roomId;
RoomSettingAdapter adapter;
List<RoomSettingBean> dataList;
private RoomInfoResp roomInfoResp;
private int read;
private boolean isSelected;
private boolean effectOn = false;//开启/关闭特效
@Override
protected RoomSettingPresenter bindPresenter() {
return new RoomSettingPresenter(this, getActivity());
}
public static void show(RoomInfoResp roomInfoResp, FragmentManager fragmentManager) {
RoomSettingFragment dialogFragment = new RoomSettingFragment();
Bundle args = new Bundle();
args.putSerializable("roomInfoResp", roomInfoResp);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RoomSettingFragment");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
// roomId=getArguments().getString("roomId");
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp");
roomId= roomInfoResp.getRoom_info().getRoom_id();
if (roomInfoResp.getUser_info().getIs_room_owner()!=0){
read=1;
}else if (roomInfoResp.getUser_info().getIs_host()!=0){
read=3;
}else if (roomInfoResp.getUser_info().getIs_management()!=0){
read=2;
}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();
EventBus.getDefault().register(this);
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);;
// int heightInPx = (int) (heightInDp * getResources().getDisplayMetrics().density);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
protected void initData() {
dataList = new ArrayList<>();
effectOn = (SpUtil.getOpenEffect() == 1) ? true : false;
// 添加标题和对应的内容项
dataList.add(new RoomSettingBean("房间类型", null, null, null, -1,read,isSelected,false));
dataList.add(new RoomSettingBean("点唱", "ic_sing", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeSing,read,isSelected, false));
dataList.add(new RoomSettingBean("拍卖", "ic_auction", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeAuction,read,isSelected, false));
dataList.add(new RoomSettingBean("男神", "ic_boy", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeBoy,read,isSelected, false));
dataList.add(new RoomSettingBean("女神", "ic_girl", null, null, RoomSettingBean.QXRoomSettingTypeRoomTypeGirl,read,isSelected, false));
dataList.add(new RoomSettingBean("常用工具", null, null, null, -1,read,isSelected, false));
dataList.add(new RoomSettingBean("房间补贴", "ic_subsidy", null, null, RoomSettingBean.QXRoomSettingTypeRoomSubsidy,read,isSelected, false));
dataList.add(new RoomSettingBean("主持设置", "ic_compere", null, null, RoomSettingBean.QXRoomSettingTypeRoomCompere,read,isSelected, false));
dataList.add(new RoomSettingBean("清空消息", "ic_clear_message", null, null, RoomSettingBean.QXRoomSettingTypeRoomClearMessage,read,isSelected, false));
dataList.add(new RoomSettingBean("排麦模式", "ic_order_mic", null, null, QXRoomSettingTypeRoomOrderMic,read,isSelected, !roomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1")));
dataList.add(new RoomSettingBean("背景音乐", "ic_bg_music", null, null, RoomSettingBean.QXRoomSettingTypeRoomBgMusic,read,isSelected, false));
dataList.add(new RoomSettingBean("背景图片", "ic_bg_image", null, null, RoomSettingBean.QXRoomSettingTypeRoomBgImage,read,isSelected, false));
dataList.add(new RoomSettingBean("更多操作", null, null, null, -1,read,isSelected, false));
dataList.add(new RoomSettingBean("离开房间", "ic_leave", null, null, RoomSettingBean.QXRoomSettingTypeRoomLeave,read,isSelected, false));
dataList.add(new RoomSettingBean("分享房间", "ic_share", null, null, RoomSettingBean.QXRoomSettingTypeRoomShare,read,isSelected, false));
dataList.add(new RoomSettingBean("调音台", "ic_my_dress", null, null, RoomSettingBean.QXRoomSettingTypeRoomMyDress,read,isSelected, false));
dataList.add(new RoomSettingBean("房间设置", "ic_room_setting", null, null, RoomSettingBean.QXRoomSettingTypeRoomSetting,read,isSelected, false));
// dataList.add(new RoomSettingBean("房间欢迎语", "ic_welcome", null, null, RoomSettingBean.QXRoomSettingTypeRoomWelcome,read,isSelected, false));
dataList.add(new RoomSettingBean(effectOn ? "关闭特效" : "打开特效", "ic_close_effects", null, null, RoomSettingBean.QXRoomSettingTypeRoomCloseEffects,read,isSelected, effectOn));
dataList.add(new RoomSettingBean("意见反馈", "ic_report", null, null, RoomSettingBean.QXRoomSettingTypeRoomReport,read,isSelected, false));
List<RoomSettingBean> 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
);
} 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.setStatus(true);
} else {
//打开
effectOn = true;
SpUtil.setOpenEffect(1);
EventBus.getDefault().post(new EffectEvent(true));
bean.setStatus(false);
}
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");
}else if (bean.getType()==RoomSettingBean.QXRoomSettingTypeRoomTypeAuction){
MvpPre.changeRoomType(roomId, "2");
}else if (bean.getType()==RoomSettingBean.QXRoomSettingTypeRoomTypeBoy){
}else if (bean.getType()==RoomSettingBean.QXRoomSettingTypeRoomTypeGirl){
}
}
});
}
private boolean isItemVisible(RoomSettingBean bean) {
int type = bean.getType();
int roleLevel = bean.getRead(); // 角色等级
boolean onMic = bean.isSelected(); // 是否在麦位上
// 房主显示全部
if (roleLevel == 1 ) {
if (!onMic && type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic ){
return false;
}
return true;
}else if (roleLevel == 3 && onMic) {// 主持且在麦位上
if (type == RoomSettingBean.QXRoomSettingTypeRoomSubsidy ||
type == RoomSettingBean.QXRoomSettingTypeRoomClearMessage ||
type == QXRoomSettingTypeRoomOrderMic ||
type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic) {
return true;
}
// 更多操作条目也显示
if (type >= RoomSettingBean.QXRoomSettingTypeRoomLeave &&
type <= RoomSettingBean.QXRoomSettingTypeRoomReport) {
return true;
}
return false;
}else if (roleLevel == 3 && !onMic && type == RoomSettingBean.QXRoomSettingTypeRoomBgMusic) { // 主持但不在麦位上时,隐藏背景音乐
return false;
}else { // 普通用户只显示更多操作中的特定条目
return type == RoomSettingBean.QXRoomSettingTypeRoomLeave ||
type == RoomSettingBean.QXRoomSettingTypeRoomShare ||
type == RoomSettingBean.QXRoomSettingTypeRoomMyDress ||
type == RoomSettingBean.QXRoomSettingTypeRoomCloseEffects ||
type == RoomSettingBean.QXRoomSettingTypeRoomReport;
}
}
@Override
protected void initView() {
mBinding.cl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PublishCommentDialogFragment.show(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);
}
}
}
}
}
@Override
protected int getLayoutId() {
return R.layout.dialog_room_setting_fragment;
}
@Override
public void changeRoomSuccess(String s, int position, RoomSettingBean bean) {
// if (bean.getName().contains("排麦")){
// bean.setName("自由模式");
// bean.setStatus( true);
// adapter.notifyItemChanged(position);
// }else {
// bean.setName("排麦模式");
// bean.setStatus( false);
// adapter.notifyItemChanged(position);
// }
}
@Override
public void changeRoomType(String s) {
ToastUtils.show(s);
dismiss();
}
}

View File

@@ -0,0 +1,437 @@
package com.example.moduleroom.dialog;
import static android.view.View.GONE;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RoomUserContacts;
import com.example.moduleroom.databinding.FragmentRoomUserInfoBinding;
import com.example.moduleroom.fragment.RelationshipFragment;
import com.example.moduleroom.fragment.RequestFragment;
import com.example.moduleroom.fragment.RoomChartsFragment;
import com.example.moduleroom.fragment.RoomFragment;
import com.example.moduleroom.presenter.RoomUserPresenter;
import com.example.zhouwei.library.CustomPopWindow;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.adapter.MyFragmentPagerAdapter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.tencent.imsdk.v2.V2TIMConversation;
import com.tencent.qcloud.tuicore.TUIConstants;
import com.tencent.qcloud.tuikit.tuichat.classicui.page.TUIC2CChatActivity;
import org.greenrobot.eventbus.EventBus;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author qx
* @data 2025/6/13
* @description: 点击房间用户展示
*/
public class RoomUserInfoFragment extends BaseMvpDialogFragment<RoomUserPresenter, FragmentRoomUserInfoBinding> implements RoomUserContacts.View {
private String room_id, user_id, pit_number;
private UserInfo userInfo;
CustomPopWindow mCustomPopWindow;
private String is_room_owner;//是否是房主
private String is_host;//是否是主持
private String is_management;//是否是管理
private int type;//1房主并且是在支持麦 2管理员并且在支持麦 3主持并且在支持麦 4普通用户
private String value;
private View contentView;
boolean isPk;
@Override
protected RoomUserPresenter bindPresenter() {
return new RoomUserPresenter(this, getActivity());
}
public static void show(String room_id, String user_id, String pit_number, int type,boolean isPk, FragmentManager fragmentManager) {
RoomUserInfoFragment dialogFragment = new RoomUserInfoFragment();
Bundle args = new Bundle();
args.putString("roomId", room_id); // 可选:传递参数
args.putString("userId", user_id);
args.putString("pit_number", pit_number);
args.putInt("type", type);
args.putBoolean("isPk", isPk);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RoomUserInfoFragment");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
room_id = getArguments().getString("roomId");
user_id = getArguments().getString("userId");
pit_number = getArguments().getString("pit_number");
type = getArguments().getInt("type");
value = getArguments().getString("value");
isPk = getArguments().getBoolean("isPk");
if (isPk){
type=4;
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
}
@Override
protected void initData() {
MvpPre.getRoomUserInfo(room_id, user_id);
if (type == 0) {
mBinding.roomDian.setVisibility(GONE);
} else {
mBinding.roomDian.setVisibility(View.VISIBLE);
}
}
@SuppressLint("UseCompatLoadingForDrawables")
@Override
protected void initView() {
String[] title = new String[]{"关系卡", "关系位"};
List<Fragment> fragments = new ArrayList<>();
fragments.add(RelationshipFragment.newInstance());
fragments.add(RelationshipFragment.newInstance());
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(fragments, getChildFragmentManager());
mBinding.vpRelationship.setAdapter(myFragmentPagerAdapter);
mBinding.slidingTabLayout.setViewPager(mBinding.vpRelationship, title);
mBinding.roomMCz.setOnClickListener(this::onClick);
mBinding.roomDian.setOnClickListener(this::onClick);
mBinding.imRoomT.setOnClickListener(this::onClick);
mBinding.imRoomLt.setOnClickListener(this::onClick);
mBinding.imRoomGz.setOnClickListener(this::onClick);
mBinding.imRoomSl.setOnClickListener(this::onClick);
mBinding.roomLh.setOnClickListener(this::onClick);
}
private void onClick(View view) {
int id = view.getId();
if (id == R.id.room_m_cz) {
if (mBinding.roomMCz.getText().equals("上麦")) {
} else {
MvpPre.hostUserPit(room_id, pit_number, user_id, "2");
}
} else if (id == R.id.room_dian) {
contentView = LayoutInflater.from(getContext()).inflate(R.layout.pop_menu, null);
//处理popWindow 显示内容
handleLogic(contentView);
//创建并显示popWindow
mCustomPopWindow = new CustomPopWindow.PopupWindowBuilder(getContext())
.setView(contentView)
.create()
.showAsDropDown(mBinding.roomMCz, 0, 20);
} else if (id == R.id.im_room_t) {
EventBus.getDefault().post(userInfo);
dismiss();
} else if (id == R.id.im_room_lt) {
Intent intent=new Intent(getActivity(), TUIC2CChatActivity.class);
intent.putExtra(TUIConstants.TUIChat.CHAT_ID, "u"+userInfo.getUser_id());
intent.putExtra(TUIConstants.TUIChat.CHAT_TYPE, V2TIMConversation.V2TIM_C2C);
startActivity(intent);
} else if (id == R.id.im_room_gz) {
MvpPre.userGuanz(user_id, "1");
}else if (id == R.id.im_room_sl){
userInfo.setPit_number(pit_number);
RoomGiftDialogFragment.show( null,userInfo, room_id,getParentFragmentManager());
dismiss();
}else if (id == R.id.room_lh){
MvpPre.addBlackList(user_id);
}
}
/**
* 处理弹出显示内容、点击事件等逻辑
*
* @param contentView
*/
private void handleLogic(View contentView) {
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mCustomPopWindow != null) {
mCustomPopWindow.dissmiss();
}
String showContent = "";
int id = v.getId();
if (id == R.id.action_set_manager) {
if (userInfo.getIs_manager().equals("1")) {
MvpPre.postHostAdd(room_id, user_id, "2", "2");
} else {
MvpPre.postHostAdd(room_id, user_id, "2", "1");
}
} else if (id == R.id.action_set_host) {
if (userInfo.getIs_host().equals("1")) {
MvpPre.postHostAdd(room_id, user_id, "1", "2");
} else {
MvpPre.postHostAdd(room_id, user_id, "1", "1");
}
} else if (id == R.id.action_mute) {
if (userInfo.getIs_mute_pit().equals("1")) {
MvpPre.setMutePit(room_id, user_id, "4");
} else {
MvpPre.setMutePit(room_id, user_id, "2");
}
} else if (id == R.id.action_kick_out) {
MvpPre.kickOutRoom(room_id, user_id);
} else if (id == R.id.action_ban) {
if (userInfo.getIs_mute().equals("1")) {
MvpPre.setMutePit(room_id, user_id, "3");
} else {
MvpPre.setMutePit(room_id, user_id, "1");
}
} else if (id == R.id.action_report) {
showContent = "点击 Item菜单6";
} else if (id == R.id.action_blacklist) {
MvpPre.addBlackList(user_id);
}
ToastUtils.show(showContent);
mCustomPopWindow.dissmiss();
}
};
((TextView) contentView.findViewById(R.id.action_set_manager)).setText(getValue(type, "is_manager"));
((TextView) contentView.findViewById(R.id.action_set_host)).setText(getValue(type, "is_host"));
((TextView) contentView.findViewById(R.id.action_mute)).setText(getValue(type, "is_mute"));
((TextView) contentView.findViewById(R.id.action_ban)).setText(getValue(type, "is_mute_pit"));
contentView.findViewById(R.id.action_set_manager).setOnClickListener(listener);
contentView.findViewById(R.id.action_set_host).setOnClickListener(listener);
contentView.findViewById(R.id.action_mute).setOnClickListener(listener);
contentView.findViewById(R.id.action_kick_out).setOnClickListener(listener);
contentView.findViewById(R.id.action_ban).setOnClickListener(listener);
contentView.findViewById(R.id.action_report).setOnClickListener(listener);
contentView.findViewById(R.id.action_blacklist).setOnClickListener(listener);
if (type != 1) {
contentView.findViewById(R.id.action_set_manager).setVisibility(GONE);
}
if (type != 1 && type != 2) {
contentView.findViewById(R.id.action_set_host).setVisibility(GONE);
}
}
private String getValue(int type, String key) {
Map<String, String> textMap = new HashMap<>();
textMap.put("is_manager", userInfo.getIs_manager().equals("1") ? "取消管理" : "设为管理");
textMap.put("is_host", userInfo.getIs_host().equals("1") ? "取消主持" : "设为主持");
textMap.put("is_mute", userInfo.getIs_mute().equals("1") ? "开麦" : "禁麦");
textMap.put("is_mute_pit", userInfo.getIs_mute_pit().equals("1") ? "解除禁言" : "禁言");
switch (type) {
case 1:
if ("is_manager".equals(key)) return textMap.get("is_manager");
if ("is_host".equals(key)) return textMap.get("is_host");
if ("is_mute".equals(key)) return textMap.get("is_mute");
if ("is_mute_pit".equals(key)) return textMap.get("is_mute_pit");
break;
case 2:
if ("is_host".equals(key)) return textMap.get("is_host");
if ("is_mute".equals(key)) return textMap.get("is_mute");
if ("is_mute_pit".equals(key)) return textMap.get("is_mute_pit");
break;
default:
if ("is_mute".equals(key)) return textMap.get("is_mute");
if ("is_mute_pit".equals(key)) return textMap.get("is_mute_pit");
break;
}
return "";
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room_user_info;
}
@Override
public void getRoomUserInfo(UserInfo userInfo1) {
userInfo = userInfo1;
// ImageUtils.loadHeadCC(userInfo.getAvatar(), mBinding.ivAvatar);
mBinding.ivAvatar.setData(userInfo.getAvatar(), "", userInfo.getSex() + "");
mBinding.tvName.setText(userInfo.getNickname());
mBinding.tvId.setText("ID:" + userInfo.getUser_id());
if (userInfo.getIs_in_pit() == 1) {
mBinding.roomMCz.setText("下麦");
} else {
mBinding.roomMCz.setText("上麦");
}
if(userInfo.getIs_follow()==1){
mBinding.imRoomGz.setImageDrawable(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.room_ygz));
}else {
mBinding.imRoomGz.setImageDrawable(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.room_gz));
}
// if (userInfo.getRoom_id().equals(room_id)){
// mBinding.imGs.setVisibility(GONE);
// }else {
// mBinding.imGs.setVisibility(View.VISIBLE);
// }
updateUIBasedOnTypeAndUser();
}
private void updateUIBasedOnTypeAndUser() {
int userId= SpUtil.getUserId();
boolean isSelf =userId==userInfo.getUser_id();
switch (type) {
case 1: // 房主
case 2: // 管理员
case 3: // 主持
if (isSelf) {
mBinding.roomDian.setVisibility(View.GONE);
mBinding.roomJb.setVisibility(View.GONE);
mBinding.roomLh.setVisibility(View.GONE);
mBinding.roomBo.setVisibility(View.GONE);
} else {
mBinding.roomDian.setVisibility(View.VISIBLE);
mBinding.roomJb.setVisibility(View.GONE);
mBinding.roomLh.setVisibility(View.GONE);
mBinding.roomBo.setVisibility(View.VISIBLE);
}
break;
case 4: // 普通用户
mBinding.roomDian.setVisibility(View.GONE);
if (isSelf) {
mBinding.roomJb.setVisibility(View.GONE);
mBinding.roomLh.setVisibility(View.GONE);
mBinding.roomBo.setVisibility(View.GONE);
mBinding.roomMCz.setVisibility(View.VISIBLE);
} else {
mBinding.roomJb.setVisibility(View.VISIBLE);
mBinding.roomLh.setVisibility(View.VISIBLE);
mBinding.roomBo.setVisibility(View.VISIBLE);
mBinding.roomMCz.setVisibility(View.GONE);
}
break;
case 0:
mBinding.roomDian.setVisibility(View.GONE);
if (isSelf) {
mBinding.roomJb.setVisibility(View.GONE);
mBinding.roomLh.setVisibility(View.GONE);
mBinding.roomBo.setVisibility(View.GONE);
mBinding.roomMCz.setVisibility(View.VISIBLE);
} else {
mBinding.roomJb.setVisibility(View.VISIBLE);
mBinding.roomLh.setVisibility(View.VISIBLE);
mBinding.roomBo.setVisibility(View.VISIBLE);
mBinding.roomMCz.setVisibility(View.GONE);
}
default:
// 默认处理
break;
}
}
@Override
public void downPit() {
dismiss();
}
@Override
public void kickOutRoom() {
dismiss();
}
@Override
public void postHostAdd(String s, String type, String is_add) {
if (type.equals("2")) {
if (is_add.equals("1")) {
userInfo.setIs_manager("1");
ToastUtils.show("添加管理员成功");
handleLogic(contentView);
} else {
userInfo.setIs_manager("0");
ToastUtils.show("取消管理员");
handleLogic(contentView);
}
} else if (type.equals("1")) {
if (is_add.equals("1")) {
userInfo.setIs_host("1");
ToastUtils.show("添加主持人成功");
handleLogic(contentView);
} else {
userInfo.setIs_host("0");
ToastUtils.show("取消主持人成功");
handleLogic(contentView);
}
}
}
@Override
public void setMutePit(String user_id, String is_mute) {
if (is_mute.equals("1")) {
userInfo.setIs_mute("1");
} else if (is_mute.equals("3")) {
userInfo.setIs_mute("0");
} else if (is_mute.equals("2")) {
userInfo.setIs_mute_pit("1");
} else if (is_mute.equals("4")) {
userInfo.setIs_mute_pit("0");
}
}
@Override
public void addBlackList() {
dismiss();
}
@Override
public void userGuanzSuccess(String s) {
if (userInfo.getIs_follow()==1){
userInfo.setIs_follow(0);
mBinding.imRoomGz.setImageDrawable(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.room_gz));
}else {
userInfo.setIs_follow(1);
mBinding.imRoomGz.setImageDrawable(getResources().getDrawable(com.qxcm.moduleutil.R.mipmap.room_ygz));
}
}
@Override
public void hostUserPit() {
dismiss();
}
}

View File

@@ -0,0 +1,232 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.GiftUserAdapter;
import com.example.moduleroom.databinding.DialogRoomWheatGiftBinding;
import com.example.moduleroom.databinding.RoomGiftDialogBinding;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.adapter.GiftTwoDetailsFragment;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.GiftLabelBean;
import com.qxcm.moduleutil.bean.GiftNumBean;
import com.qxcm.moduleutil.bean.RewardUserBean;
import com.qxcm.moduleutil.bean.RoomWheatEvent;
import com.qxcm.moduleutil.bean.RoonGiftModel;
import com.qxcm.moduleutil.bean.WalletBean;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.dialog.RechargeDialogFragment;
import com.qxcm.moduleutil.event.GiftDoubleClickEvent;
import com.qxcm.moduleutil.event.GiftUserRefreshEvent;
import com.qxcm.moduleutil.event.RoomGiftGiveEvent;
import com.qxcm.moduleutil.presenter.RewardGiftContacts;
import com.qxcm.moduleutil.presenter.RewardGiftPresenter;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.widget.dialog.KeyboardPopupWindow;
import com.qxcm.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;
/**
*@author qx
*@data 2025/6/17
*@description: 设置插队礼物
*/
public class RoomWheatGiftSettingFragment extends BaseMvpDialogFragment<RewardGiftPresenter, DialogRoomWheatGiftBinding> implements RewardGiftContacts.View {
private RoonGiftModel roonGiftModel = null;
private List<Fragment> fragmentList = new ArrayList<>();
private List<GiftNumBean> mGiftNumList;
private String roomId;
@Override
protected RewardGiftPresenter bindPresenter() {
return new RewardGiftPresenter(this, getActivity());
}
public static void show(String id, FragmentManager fragmentManager) {
RoomWheatGiftSettingFragment dialogFragment = new RoomWheatGiftSettingFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RewardGiftDialogFragment");
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomId = getArguments().getString("roomId");
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
protected void initData() {
// MvpPre.getRewardList("1", 1, 10);
mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), fragmentList));
}
@Override
protected void initView() {
mBinding.tvWheatQx.setOnClickListener(this::onClisk);
mBinding.tvWheatQd.setOnClickListener(this::onClisk);
}
private void onClisk(View view1) {
if (view1.getId() == R.id.tv_wheat_qd) {
giveGift("1");
} else if (view1.getId() == R.id.tv_wheat_qx) {
dismiss();
}
}
private String giftNumber = "";
private RoomGiftGiveEvent roomGiftGiveEvent;
@Subscribe(threadMode = ThreadMode.MAIN)
public void onGiftDoubleClickEvent(GiftDoubleClickEvent event) {
getSelectedGift();
giveGift("1");
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void userRefresh(GiftUserRefreshEvent event) {
roonGiftModel = event.gift;
}
private int getSelectedGift() {
int currentItem = mBinding.viewPager.getCurrentItem();
GiftTwoDetailsFragment fragment = (GiftTwoDetailsFragment) fragmentList.get(currentItem);
roonGiftModel = fragment.getGiftList();
return currentItem;
}
private void giveGift(String num) {
getSelectedGift();
int currentItem = mBinding.viewPager.getCurrentItem();
if (currentItem < 1) {
if (roonGiftModel == null) {
ToastUtils.show("请选择礼物");
return;
}
} else {
if (roonGiftModel == null) {
ToastUtils.show("请选择礼物");
return;
}
}
if (currentItem == 0) {
//礼物打赏
giftNumber = num;
MvpPre.setRoomApply(roomId, roonGiftModel.getGift_id(),roonGiftModel.getGift_price());
}
}
@Override
protected int getLayoutId() {
return R.layout.dialog_room_wheat_gift;
}
@Override
public void getRewardList(List<RewardUserBean> rewardUserBeanList) {
}
@Override
public void getGiftLabel(List<GiftLabelBean> giftLabelBeans) {
}
@Override
public void setGiftList(List<RoonGiftModel> roonGiftModels, int type) {
}
@Override
public void giveGift() {
// dismiss();
}
@Override
public void wallet(WalletBean walletBean) {
}
@Override
public void reward_zone() {
EventBus.getDefault().post(new RoomWheatEvent());
dismiss();
}
@Override
public void roomAuctionJoin(RoomAuction.AuctionListBean auctionListBean) {
}
private static class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragmentList;
public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = GiftTwoDetailsFragment.newInstance("5", 1);
fragmentList.add(fragment); // 保存 Fragment 实例
return fragment;
}
@Override
public int getCount() {
return 1;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return null;
}
}
}

View File

@@ -0,0 +1,230 @@
package com.example.moduleroom.dialog;
import static com.qxcm.moduleutil.utils.ImageUtils.copyAssetToFile;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentManager;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RoomOnlineAdapter;
import com.example.moduleroom.contacts.WheatContacts;
import com.example.moduleroom.databinding.FragmentSoundDialogBinding;
import com.example.moduleroom.databinding.FragmentWheatFeedingDialogBinding;
import com.example.moduleroom.presenter.WheatPresenter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.room.RoomApplyListBean;
import com.qxcm.moduleutil.rtc.AgoraManager;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/17
*@description: 音效弹框
*/
public class SoundEffectsDialogFragment extends BaseMvpDialogFragment<WheatPresenter, FragmentSoundDialogBinding> implements
WheatContacts.View {
private int page;
private RoomOnlineAdapter roomOnlineAdapter;
@Override
protected WheatPresenter bindPresenter() {
return new WheatPresenter(this, getActivity());
}
public static void show(String id, FragmentManager fragmentManager) {
SoundEffectsDialogFragment dialogFragment = new SoundEffectsDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "SoundEffectsDialogFragment");
}
@Override
protected void initData() {
// MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.4f);;
// int heightInPx = (int) (heightInDp * getResources().getDisplayMetrics().density);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInDp);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
// 用于记录选中的位置
private int selectedPosition = -1;
// 所有点击项的集合
private final List<View> clickableViews = new ArrayList<>();
// 背景资源
private static final int BG_DEFAULT = com.qxcm.moduleutil.R.mipmap.suound_bj;
private static final int BG_SELECTED = com.qxcm.moduleutil.R.mipmap.suound_bjs;
private static final int BTN_BG_SELECTED = com.qxcm.moduleutil.R.mipmap.y_won;
private static final int BTN_BG_DEFAULT = com.qxcm.moduleutil.R.mipmap.y_w;
private static final int TEXT_COLOR_SELECTED = com.qxcm.moduleutil.R.color.color_FF333333;
private static final int TEXT_COLOR_DEFAULT = com.qxcm.moduleutil.R.color.white;
private final List<Button> buttonList = new ArrayList<>();
private final List<TextView> textViewList = new ArrayList<>();
@Override
protected void initView() {
// 添加所有点击项到集合中
clickableViews.add(mBinding.cl1);
clickableViews.add(mBinding.cl2);
clickableViews.add(mBinding.cl3);
clickableViews.add(mBinding.cl4);
clickableViews.add(mBinding.cl5);
// 初始化 Button 和 TextView 列表
buttonList.add(mBinding.bottom1);
buttonList.add(mBinding.bottom2);
buttonList.add(mBinding.bottom3);
buttonList.add(mBinding.bottom4);
buttonList.add(mBinding.bottom5);
textViewList.add(mBinding.tv1);
textViewList.add(mBinding.tv2);
textViewList.add(mBinding.tv3);
textViewList.add(mBinding.tv4);
textViewList.add(mBinding.tv5);
// 设置统一点击监听
for (int i = 0; i < clickableViews.size(); i++) {
final int position = i;
clickableViews.get(i).setOnClickListener(v -> handleItemClick(position));
}
mBinding.tvSure.setOnClickListener(v -> {
if (selectedPosition != -1){
if (selectedPosition == 0){
AgoraManager.getInstance(getActivity()).potexao(new File(getSavePath() + "xs.mp3").getPath());
}else if (selectedPosition == 1){
AgoraManager.getInstance(getActivity()).potexao(new File(getSavePath() + "hh.mp3").getPath());
}else if (selectedPosition == 2){
AgoraManager.getInstance(getActivity()).potexao(new File(getSavePath() + "gg.mp3").getPath());
}else if (selectedPosition == 3){
AgoraManager.getInstance(getActivity()).potexao(new File(getSavePath() + "zs.mp3").getPath());
}else if (selectedPosition == 4){
AgoraManager.getInstance(getActivity()).potexao(new File(getSavePath() + "mmd.mp3").getPath());
}
}
});
copyAssetToFile("gg.mp3", getSavePath(), "gg.mp3");
copyAssetToFile("hh.mp3", getSavePath(), "hh.mp3");
copyAssetToFile("mmd.mp3", getSavePath(), "mmd.mp3");
copyAssetToFile("xs.mp3", getSavePath(), "xs.mp3");
copyAssetToFile("zs.mp3", getSavePath(), "zs.mp3");
}
private String getSavePath() {
String path;
if (Build.VERSION.SDK_INT > 29) {
path = getActivity().getExternalFilesDir(null).getAbsolutePath() + "/app/effects/";
} else {
path = Environment.getExternalStorageDirectory().getPath() + "/app/effects/";
}
return path;
}
/**
* 处理点击事件
*/
private void handleItemClick(int position) {
if (selectedPosition == position) {
// 再次点击已选项,取消选择
selectedPosition = -1;
resetBackgrounds();
} else {
// 更新选中项
selectedPosition = position;
updateBackgrounds(position);
}
}
/**
* 更新所有项的背景状态
*/
private void updateBackgrounds(int selectedPos) {
for (int i = 0; i < clickableViews.size(); i++) {
View view = clickableViews.get(i);
Button btn = buttonList.get(i);
TextView tv = textViewList.get(i);
if (i == selectedPos) {
view.setBackgroundResource(BG_SELECTED);
btn.setBackgroundResource(BTN_BG_SELECTED);
tv.setTextColor(ContextCompat.getColor(requireContext(), TEXT_COLOR_SELECTED));
} else {
view.setBackgroundResource(BG_DEFAULT);
btn.setBackgroundResource(BTN_BG_DEFAULT);
tv.setTextColor(ContextCompat.getColor(requireContext(), TEXT_COLOR_DEFAULT));
}
}
}
/**
* 恢复所有项为默认背景
*/
private void resetBackgrounds() {
for (int i = 0; i < clickableViews.size(); i++) {
View view = clickableViews.get(i);
Button btn = buttonList.get(i);
TextView tv = textViewList.get(i);
view.setBackgroundResource(BG_DEFAULT);
btn.setBackgroundResource(BTN_BG_DEFAULT);
tv.setTextColor(ContextCompat.getColor(requireContext(), TEXT_COLOR_DEFAULT));
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_sound_dialog;
}
@Override
public void roomApplyListBean(RoomApplyListBean roomApplyListBeans) {
}
@Override
public void clearApply() {
}
@Override
public void agreePit() {
}
@Override
public void applyPit() {
}
}

View File

@@ -0,0 +1,274 @@
package com.example.moduleroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.SearchEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.CompoundButton;
import android.widget.SeekBar;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.GridLayoutManager;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.TunerListAdapter;
import com.example.moduleroom.contacts.WheatContacts;
import com.example.moduleroom.databinding.RoomDialogTunerBinding;
import com.example.moduleroom.presenter.WheatPresenter;
import com.luck.picture.lib.decoration.GridSpacingItemDecoration;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.MixerResp;
import com.qxcm.moduleutil.bean.room.RoomApplyListBean;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.rtc.RtcConstants;
import com.qxcm.moduleutil.rtc.RtcManager;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.widget.dialog.BaseDialog;
import java.util.ArrayList;
import java.util.List;
import io.agora.rtc2.Constants;
/**
* 调音台弹窗
*/
public class TunerDialogFragment extends BaseMvpDialogFragment<WheatPresenter, RoomDialogTunerBinding> implements WheatContacts.View {
private static final String TAG = "TunerSheetDialog";
private Context mContext;
private String roomId;
private int tunerType;
private TunerListAdapter tunerAdapter;
private TunerListAdapter tunerAdapter2;
public static void show(String id, FragmentManager fragmentManager) {
TunerDialogFragment dialogFragment = new TunerDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "SoundEffectsDialogFragment");
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);;
// int heightInPx = (int) (heightInDp * getResources().getDisplayMetrics().density);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInDp);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
public int getLayoutId() {
return R.layout.room_dialog_tuner;
}
@Override
public void initView() {
// mBinding.rvEffectStyleList.setLayoutManager(new GridLayoutManager(mContext, 4));
// mBinding.rvEffectStyleList.setAdapter(tunerAdapter = new TunerListAdapter());
// mBinding.rvEffectStyleList.addItemDecoration(new GridSpacingItemDecoration(4, 30, true));
// tunerAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
// @Override
// public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
// MixerResp item = tunerAdapter.getItem(position);
// tunerAdapter.setIndex(position);
// MvpPre.setUserMixer(roomId, item.getId());
// RtcManager.getInstance().setTone(item.getId());
// }
// });
mBinding.swMonitoring.setChecked(SpUtil.getAuricularBack() == 1 ? true : false);//设置耳返开启还是关闭
mBinding.swMonitoring.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
AgoraManager.getInstance(getContext()).enableHeadphoneMonitor(b);
//耳返设置完保存本地
SpUtil.setAuricularBack(b ? 1 : 0);
}
});
// 设置 seekBar1 的默认进度为 100
mBinding.seekBar1.setProgress(100);
// 更新对应的 TextView 显示内容
mBinding.tvSeekbarValue.setText("人声100%");
mBinding.seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mBinding.tvSeekbarValue.setText("人声" + progress + "%");
AgoraManager.getInstance(getContext()).setMusicVolume(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
// 设置 seekBar1 的默认进度为 100
mBinding.seekBar2.setProgress(100);
// 更新对应的 TextView 显示内容
mBinding.tvSeekbarValue2.setText("伴奏100%");
mBinding.seekBar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mBinding.tvSeekbarValue2.setText("伴奏" + progress + "%");
AgoraManager.getInstance(getContext()).settPlayoutVolume(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
mBinding.rvEffectStyleList.setLayoutManager(new GridLayoutManager(mContext, 5));
mBinding.rvEffectStyleList.setAdapter(tunerAdapter = new TunerListAdapter(1));
mBinding.rvEffectStyleList.addItemDecoration(new GridSpacingItemDecoration(5, 11, true));
tunerAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
// 取消之前选中的项
// if (tunerAdapter.get() >= 0) {
// tunerAdapter.notifyItemChanged(tunerAdapter.getIndex());
// }
// 设置当前项为选中状态
tunerAdapter.setIndex(position);
tunerAdapter.notifyItemChanged(position);
// 执行选中项的操作
MixerResp item = tunerAdapter.getItem(position);
// MvpPre.setUserMixer(roomId, item.getId());
// RtcManager.getInstance().setTone(item.getId());
AgoraManager.getInstance(mContext).setTone(item.getId());
}
});
mBinding.rvEffectStyleList2.setLayoutManager(new GridLayoutManager(mContext, 5));
mBinding.rvEffectStyleList2.setAdapter(tunerAdapter2 = new TunerListAdapter(2));
mBinding.rvEffectStyleList2.addItemDecoration(new GridSpacingItemDecoration(5, 20, true));
tunerAdapter2.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
// 取消之前选中的项
// if (tunerAdapter.get() >= 0) {
// tunerAdapter.notifyItemChanged(tunerAdapter.getIndex());
// }
// 设置当前项为选中状态
tunerAdapter2.setIndex(position);
tunerAdapter2.notifyItemChanged(position);
// 设置当前项为选中状态
// 执行选中项的操作
MixerResp item = tunerAdapter2.getItem(position);
AgoraManager.getInstance(mContext).setTone(item.getId());
// MvpPre.setUserMixer(roomId, item.getId());
// RtcManager.getInstance().setTone(item.getId());
}
});
}
@Override
protected WheatPresenter bindPresenter() {
return new WheatPresenter(this, getActivity());
}
@Override
public void initData() {
// roomId = getArguments().getString("roomId");
// tunerType = getArguments().getInt("tunerType");
List<MixerResp> mixerResps = new ArrayList<>();
mixerResps.add(new MixerResp(RtcConstants.AUDIO_EFFECT_OFF, "原生", com.qxcm.moduleutil.R.mipmap.yuansheng));
mixerResps.add(new MixerResp(RtcConstants.AUDIO_EFFECT_CPJ, "唱片机", com.qxcm.moduleutil.R.mipmap.changpian));
mixerResps.add(new MixerResp(RtcConstants.AUDIO_EFFECT_3W, "3维声音", com.qxcm.moduleutil.R.mipmap.sanwei));
mixerResps.add(new MixerResp(RtcConstants.AUDIO_EFFECT_XN, "虚拟环绕", com.qxcm.moduleutil.R.mipmap.xuni));
mixerResps.add(new MixerResp(RtcConstants.AUDIO_EFFECT_KTV, "KTV", com.qxcm.moduleutil.R.mipmap.ktv));
tunerAdapter.setNewData(mixerResps);
tunerAdapter.setIndex(0);
List<MixerResp> mixerResps2 = new ArrayList<>();
mixerResps2.add(new MixerResp(RtcConstants.SOUNDEFFECTTYPE_CHANGE_VOICE1, "老人", com.qxcm.moduleutil.R.mipmap.laoren));
mixerResps2.add(new MixerResp(RtcConstants.SOUNDEFFECTTYPE_CHANGE_VOICE2, "猪八戒", com.qxcm.moduleutil.R.mipmap.zubj));
mixerResps2.add(new MixerResp(RtcConstants.SOUNDEFFECTTYPE_CHANGE_VOICE3, "叔叔", com.qxcm.moduleutil.R.mipmap.dashu));
mixerResps2.add(new MixerResp(RtcConstants.SOUNDEFFECTTYPE_CHANGE_VOICE4, "姐姐", com.qxcm.moduleutil.R.mipmap.yujie));
mixerResps2.add(new MixerResp(RtcConstants.SOUNDEFFECTTYPE_CHANGE_VOICE5, "女孩", com.qxcm.moduleutil.R.mipmap.nvhai));
tunerAdapter2.setNewData(mixerResps2);
}
@Override
public void roomApplyListBean(RoomApplyListBean roomApplyListBeans) {
}
@Override
public void clearApply() {
}
@Override
public void agreePit() {
}
@Override
public void applyPit() {
}
// @Override
// protected void initDialogStyle(Window window) {
// super.initDialogStyle(window);
// window.setGravity(Gravity.BOTTOM);
// WindowManager.LayoutParams lp = window.getAttributes();
// lp.dimAmount = 0.4f;
// window.setAttributes(lp);
// window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
// }
// @Override
// public void setMixerData(List<MixerResp> mixerResps) {
// tunerAdapter.setNewData(mixerResps);
// tunerAdapter.setIndex(tunerType);
// }
}

View File

@@ -0,0 +1,266 @@
package com.example.moduleroom.dialog;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.blankj.utilcode.util.ToastUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RoomOnlineAdapter;
import com.example.moduleroom.adapter.WheatFeedingSelectAdapter;
import com.example.moduleroom.contacts.RoomContacts;
import com.example.moduleroom.contacts.WheatContacts;
import com.example.moduleroom.databinding.FragmentRoomOnlineDialogBinding;
import com.example.moduleroom.databinding.FragmentWheatFeedingDialogBinding;
import com.example.moduleroom.presenter.RoomPresenter;
import com.example.moduleroom.presenter.WheatPresenter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.HeatedBean;
import com.qxcm.moduleutil.bean.RoomWheatEvent;
import com.qxcm.moduleutil.bean.room.RoomApplyListBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomOnlineBean;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.widget.floatingView.IFloatingView;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
/**
* @author qx
* @data 2025/6/10
* @description: 上麦申请dialog弹框等待申请
*/
public class WheatFeedingDialogFragment extends BaseMvpDialogFragment<WheatPresenter, FragmentWheatFeedingDialogBinding> implements
WheatContacts.View {
private int page;
private int displayMode; // 用于决定显示模式的参数
WheatFeedingSelectAdapter mSpecialAdapter;
WheatFeedingSelectAdapter mRegularAdapter;
private String roomId;
@Override
protected WheatPresenter bindPresenter() {
return new WheatPresenter(this, getActivity());
}
public static void show(String id, int displayMode, FragmentManager fragmentManager) {
WheatFeedingDialogFragment dialogFragment = new WheatFeedingDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
args.putInt("displayMode", displayMode);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "WheatFeedingDialogFragment");
}
@Override
protected void initData() {
// 从 Bundle 中获取 displayMode 参数
displayMode = getArguments().getInt("displayMode", 2); // 默认值为 0
// 根据 displayMode 显示不同的控件
updateViewBasedOnDisplayMode();
roomId = getArguments().getString("roomId");
MvpPre.roomApplyListBean(roomId);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRoomApplyListEvent(RoomWheatEvent event) {
MvpPre.roomApplyListBean(roomId);
}
private void updateViewBasedOnDisplayMode() {
switch (displayMode) {
case 1: // 模式房主或者主持模式
mBinding.tvLjsq.setVisibility(GONE);
mBinding.tvQk.setVisibility(VISIBLE);
mBinding.tvWheatRefuse.setVisibility(VISIBLE);
mBinding.tvWheatAccept.setVisibility(VISIBLE);
mBinding.tvWheatSq.setVisibility(VISIBLE);
mBinding.tv3.setText("设置");
// ... 设置其他控件的可见性
break;
case 2: // 模式 2//观众模式
mBinding.tvQk.setVisibility(GONE);
mBinding.tvWheatRefuse.setVisibility(GONE);
mBinding.tvWheatAccept.setVisibility(GONE);
mBinding.tvWheatSq.setVisibility(GONE);
mBinding.tvLjsq.setVisibility(VISIBLE);
mBinding.tv3.setText("赠送");
break;
// ... 其他模式
}
}
public void updateDisplayMode(int newDisplayMode) {
if (newDisplayMode == displayMode) {
return; // 如果新旧模式相同,直接返回
}
displayMode = newDisplayMode;
updateViewBasedOnDisplayMode();
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);
;
// int heightInPx = (int) (heightInDp * getResources().getDisplayMetrics().density);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInDp);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
protected void initView() {
mBinding.tv3.setOnClickListener(this::onClick);
mBinding.tvWheatAccept.setOnClickListener(this::onClick);
mBinding.tvWheatRefuse.setOnClickListener(this::onClick);
mBinding.tvWheatSq.setOnClickListener(this::onClick);
mBinding.tvLjsq.setOnClickListener(this::onClick);
mBinding.tvQk.setOnClickListener(this::onClick);
mBinding.recycleView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));
mBinding.recycleView2.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
private void onClick(View view) {
int id = view.getId();
if (id == R.id.tv_3) {
RoomWheatGiftSettingFragment.show(roomId, getChildFragmentManager());
} else if (id == R.id.tv_wheat_accept) {
// MvpPre.agreePit(roomId,);
up(1);
} else if (id == R.id.tv_wheat_refuse) {
// MvpPre.refusePit(roomId,);
up(2);
} else if (id == R.id.tv_wheat_sq) {
ToastUtils.showShort("点击了申请");
} else if (id == R.id.tv_ljsq) {
MvpPre.applyPit(roomId,"");
} else if (id == R.id.tv_qk) {
MvpPre.clearApply(roomId);
}
}
/**
* @param type 1:同意上麦 2拒绝上麦
*/
private void up(int type) {
List<String> stringList=new ArrayList<>();
List<String> selectedTopics = mSpecialAdapter.getSelectedItems();
List<String> selectedRegular = mRegularAdapter.getSelectedItems();
// 返回结果给调用页面(可使用接口或 onActivityResult 等方式)
Log.d("Selected Topics", selectedTopics.toString());
if (selectedTopics.size()>0){
stringList.addAll(selectedTopics);
}
if (selectedRegular.size()>0){
stringList.addAll(selectedRegular);
}
if (selectedTopics.size()==0&&selectedRegular.size()==0){
ToastUtils.showShort("未选择需要上麦人员");
return;
}
String string=TextUtils.join(",", stringList);
if (type==1) {
MvpPre.agreePit(roomId, string);
}else if (type==2){
MvpPre.refusePit(roomId, string);
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_wheat_feeding_dialog;
}
@Override
public void roomApplyListBean(RoomApplyListBean roomApplyListBeans) {
if (roomApplyListBeans.getSpecial() != null || !roomApplyListBeans.getSpecial().isEmpty()) {
mBinding.tv1.setText("优先通道(" + roomApplyListBeans.getSpecial().size() + "/20)");
mSpecialAdapter = new WheatFeedingSelectAdapter(roomApplyListBeans.getSpecial());
mBinding.recycleView.setAdapter(mSpecialAdapter);
mSpecialAdapter.setOnItemClickListener(new WheatFeedingSelectAdapter.OnItemClickListener() {
@Override
public void onTvBmClick(RoomApplyListBean.Special item, int position) {
MvpPre.helpApply(roomId, item.getUser_id());
}
});
}
if (roomApplyListBeans.getRegular() != null || !roomApplyListBeans.getRegular().isEmpty()) {
mBinding.tv4.setText("普通通道(" + roomApplyListBeans.getRegular().size() + "/20)");
mRegularAdapter = new WheatFeedingSelectAdapter(roomApplyListBeans.getRegular());
mBinding.recycleView2.setAdapter(mRegularAdapter);
mRegularAdapter.setOnItemClickListener(new WheatFeedingSelectAdapter.OnItemClickListener() {
@Override
public void onTvBmClick(RoomApplyListBean.Special item, int position) {
MvpPre.helpApply(roomId, item.getUser_id());
}
});
}
if (roomApplyListBeans.getGift_info() != null) {
mBinding.tv2.setText("" + roomApplyListBeans.getGift_info().getGift_name() + "礼物插队");
ImageUtils.loadHeadCC(roomApplyListBeans.getGift_info().getBase_image(), mBinding.im1);
}
}
@Override
public void clearApply() {
MvpPre.roomApplyListBean(roomId);
}
@Override
public void agreePit() {
MvpPre.roomApplyListBean(roomId);
}
@Override
public void applyPit() {
MvpPre.roomApplyListBean(roomId);
}
}

View File

@@ -0,0 +1,270 @@
package com.example.moduleroom.fragment;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RequestContacts;
import com.example.moduleroom.databinding.FragmentMuiscSongBinding;
import com.example.moduleroom.databinding.FragmentRequestBinding;
import com.example.moduleroom.presenter.RequestPresenter;
import com.qxcm.moduleutil.base.BaseMvpFragment;
import com.qxcm.moduleutil.bean.MusicSongBean;
import com.qxcm.moduleutil.bean.SongMusicBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.rtc.MusicBean;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.utils.TimeUtils;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
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.agora.musiccontentcenter.Music;
/**
*@author qx
*@data 2025/6/19
*@description: 点唱已点歌曲
*/
public class MusicSongListFragment extends BaseMvpFragment<RequestPresenter, FragmentMuiscSongBinding> implements RequestContacts.View {
public static final int TYPE_DATA = 1;//点歌
public static final int TYPE_WEEK = 2;//已点
private int type;
private String roomId;
private RoomInfoResp roomInfoResp;
BaseQuickAdapter<MusicSongBean, BaseViewHolder> adapter;
private int page=1;
int status;
@Override
public void songList(List<MusicSongBean> musicSongBeans) {
if (roomInfoResp.getUser_info().getUser_id().equals(SpUtil.getUserId() + "") && roomInfoResp.getUser_info().getIs_host() == 1 && roomInfoResp.getUser_info().getPit_number() == 9) {
status = 1;
}
if (musicSongBeans != null) {
for (MusicSongBean musicSongBean : musicSongBeans) {
musicSongBean.setIs_hot(status);
}
}
// if (page==1){
adapter.setNewData(musicSongBeans);
// }else {
// adapter.addData(musicSongBeans);
// }
}
@Override
public void upSong(String S) {
ToastUtils.showShort(S);
MvpPre.songList(roomId);
}
@Override
public void song(List<SongMusicBean> music) {
com.hjq.toast.ToastUtils.show("操作成功");
}
public interface OnRequestFragmentListener {
void onCloseDialog();
}
private OnRequestFragmentListener listener;
// 绑定监听器
public void setOnRequestFragmentListener(OnRequestFragmentListener listener) {
this.listener = listener;
}
public static MusicSongListFragment newInstance(String roomId,RoomInfoResp roomInfoResp,int type) {
Bundle args = new Bundle();
MusicSongListFragment fragment = new MusicSongListFragment();
args.putString("roomId", roomId);
args.putInt("type", type);
args.putSerializable("roomInfoResp", roomInfoResp);
fragment.setArguments(args);
return fragment;
}
@Override
public void onStart() {
super.onStart();
// if (!EventBus.getDefault().isRegistered( this)) {
// EventBus.getDefault().register(this);
// }
}
@Override
public void onStop() {
super.onStop();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
@Override
protected RequestPresenter bindPresenter() {
return new RequestPresenter(this, getActivity());
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomId = getArguments().getString("roomId");
type = getArguments().getInt("type");
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp");
}
@Override
protected void initData() {
boolean b= AgoraManager.getInstance(getContext()).isBjMusic();
if (b) {
List<MusicSongBean> musicSongBeans = new ArrayList<>();
List<Music> music = AgoraManager.getInstance(getContext()).getMusicList();
if (music != null && music.size() > 0) {
for (int i = 0; i < music.size(); i++) {
MusicSongBean musicSongBean = new MusicSongBean();
musicSongBean.setSong_code(String.valueOf(music.get(i).getSongCode()));
musicSongBean.setSong_name(music.get(i).getName());
musicSongBean.setSinger(music.get(i).getSinger());
musicSongBean.setPoster(music.get(i).getPoster());
musicSongBean.setDuration(music.get(i).getDurationS() + "");
musicSongBeans.add(musicSongBean);
}
adapter.setNewData(musicSongBeans);
}
}else {
MvpPre.songList(roomId);
}
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
}
@Override
protected void initView() {
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
page++;
// AgoraManager.getInstance(getContext()).searchMusic( mBinding.editQuery.getText().toString(),page);
MvpPre.songList(roomId);
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
// EventBus.getDefault().post(new BannerRefreshEvent());
page = 1;
// AgoraManager.getInstance(getContext()).searchMusic( mBinding.editQuery.getText().toString(),page);
MvpPre.songList(roomId);
}
});
mBinding.recycleView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
adapter = new BaseQuickAdapter<MusicSongBean, BaseViewHolder>(R.layout.item_song_list, null) {
@Override
protected void convert(BaseViewHolder helper, MusicSongBean item) {
LogUtils.e("@@@",item);
// 获取当前 item 的 position
int position = helper.getLayoutPosition();
ImageView muisSy=helper.getView(R.id.muis_sy);
TextView muisPrice=helper.getView(R.id.muis_price);
if(position == 0){
helper.setText(R.id.muis_price, "结束");
muisSy.setVisibility(View.GONE);
}
else if (position==1){
muisSy.setVisibility(View.GONE);
muisPrice.setVisibility(View.GONE);
}else {
muisPrice.setVisibility(View.VISIBLE);
helper.setText(R.id.muis_price, "置顶");
muisSy.setVisibility(View.VISIBLE);
}
helper.setText(R.id.muis_name, item.getSong_name());
if (item.getDuration().isEmpty()){
helper.setText(R.id.muis_desc, "00:00");
}else {
helper.setText(R.id.muis_desc, TimeUtils.formatDuration(Long.parseLong(item.getDuration())*1000));
}
helper.setText(R.id.muis_set, "\t"+item.getSinger());
helper.setText(R.id.muis_nickname, item.getNickname());
ImageUtils.loadHeadCC(item.getPoster(), helper.getView(R.id.muis_avatar));
helper.getView(R.id.muis_price).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView textView = helper.getView(R.id.muis_price);
if (textView.getText().toString().equals("置顶")){
MvpPre.upSong(item.getDid(), "2");
}else {
}
if (listener != null) {
listener.onCloseDialog(); // 触发关闭 DialogFragment
}
}
});
helper.getView(R.id.muis_sy).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MvpPre.upSong(item.getDid(), "1");
}
});
if (item.getIs_hot()==1){
helper.setVisible(R.id.muis_sy, true);
helper.setVisible(R.id.muis_price, true);
}else {
helper.setVisible(R.id.muis_sy, false);
helper.setVisible(R.id.muis_price, false);
}
}
};
mBinding.recycleView.setAdapter(adapter);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_muisc_song;
}
}

View File

@@ -0,0 +1,328 @@
package com.example.moduleroom.fragment;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.launcher.ARouter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RankingCharmListAdapter;
import com.example.moduleroom.adapter.RankingWealthListAdapter;
import com.example.moduleroom.contacts.DataListContacts;
import com.example.moduleroom.databinding.RoomRankingChildBinding;
import com.example.moduleroom.presenter.DataListPresenter;
import com.qxcm.moduleutil.base.BaseMvpFragment;
import com.qxcm.moduleutil.bean.CharmRankingResp;
import com.qxcm.moduleutil.bean.WealthRankingResp;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.widget.CommonEmptyView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
*@author qx
*@data 2025/6/10
*@description:
*/
public class RankingChildFragment extends BaseMvpFragment<DataListPresenter, RoomRankingChildBinding> implements DataListContacts.View {
private static final String TAG = "RankingChildFragment";
public static final int TYPE_DATA = 1;//日榜
public static final int TYPE_WEEK = 2;//周榜
public static final int TYPE_MON = 3;//月榜
private String roomId;
private int dataType;
private int rankType = 1;
private RankingCharmListAdapter cAdapter;//魅力适配器
private RankingWealthListAdapter wAdapter;//财富适配器
private CommonEmptyView commonEmptyView;
/**
* newInstance 初始化fragment
*
* @return
*/
public static RankingChildFragment newInstance(String roomId, int dataType, int rankType) {
RankingChildFragment rankingChildFragment = new RankingChildFragment();
Bundle bundle = new Bundle();
bundle.putString("roomId", roomId);
bundle.putInt("dataType", dataType);
bundle.putInt("rankType", rankType);
rankingChildFragment.setArguments(bundle);
return rankingChildFragment;
}
@Override
protected DataListPresenter bindPresenter() {
return new DataListPresenter(this, getActivity());
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
roomId = getArguments().getString("roomId");
dataType = getArguments().getInt("dataType");
rankType = getArguments().getInt("rankType");
}
@Override
protected void initData() {
if (rankType == 1) {
cAdapter = new RankingCharmListAdapter();
mBinding.rankRecycleView.setLayoutManager(new LinearLayoutManager(getContext()));
mBinding.rankRecycleView.setAdapter(cAdapter);
cAdapter.bindToRecyclerView(mBinding.rankRecycleView);
} else {
wAdapter = new RankingWealthListAdapter();
mBinding.rankRecycleView.setLayoutManager(new LinearLayoutManager(getContext()));
mBinding.rankRecycleView.setAdapter(wAdapter);
wAdapter.bindToRecyclerView(mBinding.rankRecycleView);
}
// onRefreshEvent(null);
}
@Override
protected void initView() {
if (rankType == 1) {
setSexBg(mBinding.roomHeadTop1Label, "1");
setSexBg(mBinding.roomHeadTop2Label, "1");
setSexBg(mBinding.roomHeadTop3Label, "1");
}
commonEmptyView = new CommonEmptyView(getContext());
commonEmptyView.setEmptyText("暂无上榜");
}
/**
* 初始化监听
*/
@Override
protected void initListener() {
super.initListener();
if (rankType == 1) {
cAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
if (view.getId() == R.id.room_item_head) {
CharmRankingResp.ListsBean item = cAdapter.getItem(position);
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", item.getUser_id()).withBoolean("returnRoom", true).navigation();
}
}
});
} else {
wAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
if (view.getId() == R.id.room_item_head) {
WealthRankingResp.ListsBean item = wAdapter.getItem(position);
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", item.getUser_id()).withBoolean("returnRoom", true).navigation();
}
}
});
}
}
@Override
protected int getLayoutId() {
Log.d(TAG, "(Start)启动了===========================RankingChildFragment");
return R.layout.room_ranking_child;
}
@Override
public void setNo1(CharmRankingResp.ListsBean listsBean) {//魅力排行榜一数据设值
ImageUtils.loadHeadCC(listsBean.getHead_picture(), mBinding.roomRankTop1HeadIcon);
setSexBg(mBinding.roomHeadTop1Label, listsBean.getSex());
mBinding.roomTop1Name.setText(listsBean.getNickname());
// mBinding.bnvFirst.setText(String.format(getString(R.string.room_rank_list_id_formatter), listsBean.getUser_code()));
// mBinding.bnvFirst.setTextColor(!TextUtils.isEmpty(listsBean.getId_color()) ? Color.parseColor(listsBean.getId_color()) : getResources().getColor(R.color.color_white));
mBinding.bnvFirst.setPlay(!TextUtils.isEmpty(listsBean.getId_color()));
mBinding.bnvFirst.setImgVisible("1".equals(listsBean.getGood_number()));
mBinding.roomHeadTop1Label.setText(listsBean.getNumber_format());
mBinding.roomTop1Label.setVisibility(TextUtils.isEmpty(listsBean.getLevel_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getLevel_icon(), mBinding.roomTop1Label);
mBinding.roomTop1Grade.setVisibility(TextUtils.isEmpty(listsBean.getNobility_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getNobility_icon(), mBinding.roomTop1Grade);
mBinding.roomRankTop1HeadIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", listsBean.getUser_id()).withBoolean("returnRoom", true).navigation();
}
});
}
@Override
public void setNo1(WealthRankingResp.ListsBean listsBean) {//财富排行榜一数据设值
ImageUtils.loadHeadCC(listsBean.getHead_picture(), mBinding.roomRankTop1HeadIcon);
mBinding.roomTop1Name.setText(listsBean.getNickname());
// mBinding.bnvFirst.setText(String.format(getString(R.string.room_rank_list_id_formatter), listsBean.getUser_code()));
// mBinding.bnvFirst.setTextColor(!TextUtils.isEmpty(listsBean.getId_color()) ? Color.parseColor(listsBean.getId_color()) : getResources().getColor(R.color.color_white));
mBinding.bnvFirst.setPlay(!TextUtils.isEmpty(listsBean.getId_color()));
mBinding.bnvFirst.setImgVisible("1".equals(listsBean.getGood_number()));
mBinding.roomHeadTop1Label.setText(listsBean.getNumber_format());
mBinding.roomTop1Label.setVisibility(TextUtils.isEmpty(listsBean.getLevel_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getLevel_icon(), mBinding.roomTop1Label);
mBinding.roomTop1Grade.setVisibility(TextUtils.isEmpty(listsBean.getNobility_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getNobility_icon(), mBinding.roomTop1Grade);
mBinding.roomRankTop1HeadIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", listsBean.getUser_id()).withBoolean("returnRoom", true).navigation();
}
});
}
@Override
public void setNo2(CharmRankingResp.ListsBean listsBean) {//魅力榜二
ImageUtils.loadHeadCC(listsBean.getHead_picture(), mBinding.roomRankTop2HeadIcon);
setSexBg(mBinding.roomHeadTop2Label, listsBean.getSex());
mBinding.roomTop2Name.setText(listsBean.getNickname());
// mBinding.bnvSecond.setText(String.format(getString(R.string.room_rank_list_id_formatter), listsBean.getUser_code()));
// mBinding.bnvSecond.setTextColor(!TextUtils.isEmpty(listsBean.getId_color()) ? Color.parseColor(listsBean.getId_color()) : getResources().getColor(R.color.color_white));
mBinding.bnvSecond.setPlay(!TextUtils.isEmpty(listsBean.getId_color()));
mBinding.bnvSecond.setImgVisible("1".equals(listsBean.getGood_number()));
mBinding.roomHeadTop2Label.setText(listsBean.getNumber_format());
mBinding.roomTop2Label.setVisibility(TextUtils.isEmpty(listsBean.getLevel_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getLevel_icon(), mBinding.roomTop2Label);
mBinding.roomTop2Grade.setVisibility(TextUtils.isEmpty(listsBean.getNobility_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getNobility_icon(), mBinding.roomTop2Grade);
mBinding.roomRankTop2HeadIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", listsBean.getUser_id()).withBoolean("returnRoom", true).navigation();
}
});
}
@Override
public void setNo2(WealthRankingResp.ListsBean listsBean) {//财富榜二
ImageUtils.loadHeadCC(listsBean.getHead_picture(), mBinding.roomRankTop2HeadIcon);
mBinding.roomTop2Name.setText(listsBean.getNickname());
// mBinding.bnvSecond.setText(String.format(getString(R.string.room_rank_list_id_formatter), listsBean.getUser_code()));
// mBinding.bnvSecond.setTextColor(!TextUtils.isEmpty(listsBean.getId_color()) ? Color.parseColor(listsBean.getId_color()) : getResources().getColor(R.color.color_white));
mBinding.bnvSecond.setPlay(!TextUtils.isEmpty(listsBean.getId_color()));
mBinding.bnvSecond.setImgVisible("1".equals(listsBean.getGood_number()));
mBinding.roomHeadTop2Label.setText(listsBean.getNumber_format());
mBinding.roomTop2Label.setVisibility(TextUtils.isEmpty(listsBean.getLevel_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getLevel_icon(), mBinding.roomTop2Label);
mBinding.roomTop2Grade.setVisibility(TextUtils.isEmpty(listsBean.getNobility_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getNobility_icon(), mBinding.roomTop2Grade);
mBinding.roomRankTop2HeadIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", listsBean.getUser_id()).withBoolean("returnRoom", true).navigation();
}
});
}
@Override
public void setNo3(CharmRankingResp.ListsBean listsBean) {//魅力榜三
ImageUtils.loadHeadCC(listsBean.getHead_picture(), mBinding.roomRankTop3HeadIcon);
setSexBg(mBinding.roomHeadTop3Label, listsBean.getSex());
mBinding.roomTop3Name.setText(listsBean.getNickname());
// mBinding.bnvThird.setText(String.format(getString(R.string.room_rank_list_id_formatter), listsBean.getUser_code()));
// mBinding.bnvThird.setTextColor(!TextUtils.isEmpty(listsBean.getId_color()) ? Color.parseColor(listsBean.getId_color()) : getResources().getColor(R.color.color_white));
mBinding.bnvThird.setPlay(!TextUtils.isEmpty(listsBean.getId_color()));
mBinding.bnvThird.setImgVisible("1".equals(listsBean.getGood_number()));
mBinding.roomHeadTop3Label.setText(listsBean.getNumber_format());
mBinding.roomTop3Label.setVisibility(TextUtils.isEmpty(listsBean.getLevel_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getLevel_icon(), mBinding.roomTop3Label);
mBinding.roomTop3Grade.setVisibility(TextUtils.isEmpty(listsBean.getNobility_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getNobility_icon(), mBinding.roomTop3Grade);
mBinding.roomRankTop3HeadIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", listsBean.getUser_id()).withBoolean("returnRoom", true).navigation();
}
});
}
@Override
public void setNo3(WealthRankingResp.ListsBean listsBean) {//财富榜三
ImageUtils.loadHeadCC(listsBean.getHead_picture(), mBinding.roomRankTop3HeadIcon);
mBinding.roomTop3Name.setText(listsBean.getNickname());
// mBinding.bnvThird.setText(String.format(getString(R.string.room_rank_list_id_formatter), listsBean.getUser_code()));
// mBinding.bnvThird.setTextColor(!TextUtils.isEmpty(listsBean.getId_color()) ? Color.parseColor(listsBean.getId_color()) : getResources().getColor(R.color.color_white));
mBinding.bnvThird.setPlay(!TextUtils.isEmpty(listsBean.getId_color()));
mBinding.bnvThird.setImgVisible("1".equals(listsBean.getGood_number()));
mBinding.roomHeadTop3Label.setText(listsBean.getNumber_format());
mBinding.roomTop3Label.setVisibility(TextUtils.isEmpty(listsBean.getLevel_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getLevel_icon(), mBinding.roomTop3Label);
mBinding.roomTop3Grade.setVisibility(TextUtils.isEmpty(listsBean.getNobility_icon()) ? View.GONE : View.VISIBLE);
ImageUtils.loadImageView(listsBean.getNobility_icon(), mBinding.roomTop3Grade);
mBinding.roomRankTop3HeadIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", listsBean.getUser_id()).withBoolean("returnRoom", true).navigation();
}
});
}
@Override
public void setCharmView(List<CharmRankingResp.ListsBean> listsBeans) {
cAdapter.setNewData(listsBeans);
}
@Override
public void setWealthView(List<WealthRankingResp.ListsBean> listsBeans) {
wAdapter.setNewData(listsBeans);
}
@Override
public void setCharmEmpty() {
cAdapter.setEmptyView(commonEmptyView);
}
@Override
public void setWealthEmpty() {
wAdapter.setEmptyView(commonEmptyView);
}
/**
* 设置头像男神女神热度背景
*/
private void setSexBg(View view, String sex) {
// view.setBackgroundResource(UserBean.MALE.equals(sex) ? R.mipmap.room_bg_wheat_charm_gg_sr : R.mipmap.room_bg_wheat_charm_mm_sr);
}
/**
* 根据性别设置字体颜色
*/
private void setSexColor(TextView view, String sex) {
// view.setTextColor(UserBean.MALE.equals(sex) ? getContext().getResources().getColor(R.color.color_FF0091FF) : getContext().getResources().getColor(R.color.color_FFFA447D));
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// EventBus.getDefault().register(this);
}
@Override
public void onDestroyView() {
// EventBus.getDefault().unregister(this);
super.onDestroyView();
}
// @Subscribe(threadMode = ThreadMode.MAIN)
// public void onRefreshEvent(RankingRefreshEvent event) {
// if (rankType == 1) {
// MvpPre.getCharmListInfo(roomId, dataType);
// } else {
// MvpPre.getWealthListInfo(roomId, dataType);
// }
// }
}

View File

@@ -0,0 +1,74 @@
package com.example.moduleroom.fragment;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import com.example.moduleroom.R;
import com.example.moduleroom.databinding.RoomRankingParentBinding;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.adapter.MyFragmentPagerAdapter;
import com.qxcm.moduleutil.base.BaseMvpFragment;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/10
*@description:
*/
public class RankingParentFragment extends BaseMvpFragment<IPresenter, RoomRankingParentBinding> {
//成员变量 + 全局变量
public static final int TYPE_DATA = 1;//日榜
public static final int TYPE_WEEK = 2;//周榜
public static final int TYPE_MON = 3;//月榜
private static String mRoomId;//房间ID
private static int rankType = 1;//统计类型(魅力 / 财富)
// private static int dataType = 1;//统计周期(日/周/月)
public static RankingParentFragment newInstance(String roomId,int rankType) {
Bundle args = new Bundle();
args.putString("roomId", roomId);
args.putInt("rankType", rankType);
RankingParentFragment fragment = new RankingParentFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
mRoomId = arguments.getString("roomId");
rankType = arguments.getInt("rankType");
}
@Override
protected IPresenter bindPresenter() {
return null;
}
@Override
protected void initData() {
List<Fragment> fragments = new ArrayList<>();
fragments.add(RankingChildFragment.newInstance(mRoomId, TYPE_DATA, rankType));
fragments.add(RankingChildFragment.newInstance(mRoomId, TYPE_WEEK, rankType));
fragments.add(RankingChildFragment.newInstance(mRoomId, TYPE_MON, rankType));
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(fragments, getChildFragmentManager());
mBinding.vpRankChild.setAdapter(myFragmentPagerAdapter);
String[] title = new String[]{"日榜", "周榜", "月榜"};
mBinding.slidingTabLayout.setViewPager(mBinding.vpRankChild, title);
}
@Override
protected void initView() {
}
@Override
protected int getLayoutId() {
return R.layout.room_ranking_parent;
}
}

View File

@@ -0,0 +1,73 @@
package com.example.moduleroom.fragment;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.moduleroom.R;
import com.example.moduleroom.adapter.RelationshipAdapter;
import com.example.moduleroom.databinding.FragmentRelationshipBinding;
import com.qxcm.moduleutil.base.BaseFragment;
import com.qxcm.moduleutil.bean.RelationshipBean;
import com.zhpan.bannerview.constants.PageStyle;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/13
*@description: 关系卡和关系位的fragemnt
*/
public class RelationshipFragment extends BaseFragment<FragmentRelationshipBinding> {
RelationshipAdapter adapter;
public static RelationshipFragment newInstance() {
Bundle args = new Bundle();
RelationshipFragment fragment = new RelationshipFragment();
fragment.setArguments(args);
return fragment;
}
@Override
protected void initData() {
List<RelationshipBean> list=new ArrayList<>();
for (int i = 0; i < 3; i++){
RelationshipBean relationshipBean=new RelationshipBean();
relationshipBean.setAvatar("https://img2.baidu.com/it/u=3879116093,1671048885&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500");
relationshipBean.setAvatar2("https://img2.baidu.com/it/u=3879116093,1671048885&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500");
relationshipBean.setNickname("名称1");
relationshipBean.setNickname2("名称2");
relationshipBean.setRelation("兄弟");
relationshipBean.setTime("5天");
list.add(relationshipBean);
}
adapter=new RelationshipAdapter();
mBinding.bannerViewPager
.setScrollDuration(0)
.setOrientation(ViewPager2.ORIENTATION_VERTICAL)
.setAutoPlay(false)
.setAdapter(adapter);
mBinding.bannerViewPager.setIndicatorVisibility(View.GONE);
mBinding.bannerViewPager.create(list);
}
@Override
protected void initView() {
}
@Override
protected int getLayoutId() {
return R.layout.fragment_relationship;
}
}

View File

@@ -0,0 +1,245 @@
package com.example.moduleroom.fragment;
import android.content.Context;
import android.graphics.Rect;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.os.Handler;
import android.os.Looper;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import com.blankj.utilcode.util.LogUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RequestContacts;
import com.example.moduleroom.databinding.FragmentRequestBinding;
import com.example.moduleroom.presenter.RequestPresenter;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.base.BaseMvpFragment;
import com.qxcm.moduleutil.bean.MusicSongBean;
import com.qxcm.moduleutil.bean.SongMusicBean;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.rtc.MusicBean;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.utils.TimeUtils;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
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.agora.musiccontentcenter.Music;
/**
* @author qx
* @data 2025/6/10
* @description: 点唱viwPage的fragment
*/
public class RequestFragment extends BaseMvpFragment<RequestPresenter, FragmentRequestBinding> implements RequestContacts.View {
public static final int TYPE_DATA = 1;//点歌
public static final int TYPE_WEEK = 2;//已点
private int type;
private String roomId;
BaseQuickAdapter<Music, BaseViewHolder> adapter;
private int page = 1;
String input="";
@Override
public void songList(List<MusicSongBean> musicSongBeans) {
}
@Override
public void upSong(String S) {
com.hjq.toast.ToastUtils.show(S);
}
@Override
public void song(List<SongMusicBean> music) {
com.hjq.toast.ToastUtils.show("操作成功");
}
public interface OnRequestFragmentListener {
void onCloseDialog(Music musicSongBean);
}
private OnRequestFragmentListener listener;
// 绑定监听器
public void setOnRequestFragmentListener(OnRequestFragmentListener listener) {
this.listener = listener;
}
public static RequestFragment newInstance(String roomId, int type) {
Bundle args = new Bundle();
RequestFragment fragment = new RequestFragment();
args.putString("roomId", roomId);
args.putInt("type", type);
fragment.setArguments(args);
return fragment;
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
protected RequestPresenter bindPresenter() {
return new RequestPresenter(this, getActivity());
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomId = getArguments().getString("roomId");
type = getArguments().getInt("type");
}
@Override
protected void initData() {
// mBinding.editQuery.setOnFocusChangeListener((v, hasFocus) ->{
// if (hasFocus) {
// new Handler(Looper.getMainLooper()).postDelayed(() -> {
// if ( mBinding.scrollView != null) {
// mBinding.scrollView.post(() -> mBinding.scrollView.fullScroll(View.FOCUS_DOWN)); // 滚动到底部
// }
// }, 200);
// }
// });
mBinding.editQuery.setText(SpUtil.getMusicName());
mBinding.editQuery.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// SharedViewModel viewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
// onMusicSearchResultEvent(viewModel.getMusicBean());
}
@Override
public void afterTextChanged(Editable s) {
input = s.toString();
SpUtil.setMusicName( input);
AgoraManager.getInstance(getContext()).searchMusic(input, 1);
}
});
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);/**/
}
@Override
protected void initView() {
mBinding.smartRefreshLayout.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
page++;
AgoraManager.getInstance(getContext()).searchMusic(mBinding.editQuery.getText().toString(), page);
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
// EventBus.getDefault().post(new BannerRefreshEvent());
page = 1;
AgoraManager.getInstance(getContext()).searchMusic(mBinding.editQuery.getText().toString(), page);
}
});
mBinding.recycleView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
adapter = new BaseQuickAdapter<Music, BaseViewHolder>(R.layout.item_reward, null) {
@Override
protected void convert(BaseViewHolder helper, Music item) {
LogUtils.e("@@@", item);
helper.setText(R.id.muis_name, item.getName());
helper.setText(R.id.muis_desc, TimeUtils.formatDuration(item.getReleaseTime().isEmpty() ? 0 : Long.parseLong(item.getReleaseTime())));
helper.setText(R.id.muis_desc, "\t" + item.getSinger());
ImageUtils.loadHeadCC(item.getPoster(), helper.getView(R.id.muis_avatar));
helper.getView(R.id.muis_price).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!AgoraManager.getInstance(getContext()).isBjMusic()) {
MvpPre.song(roomId, SpUtil.getUserId() + "", item.getSongCode() + "", item.getName(), item.getSinger(), item.getPoster(), String.valueOf(item.getDurationS()));
} else {
if (AgoraManager.getInstance(getContext()).getMusicList()==null) {
// AgoraManager.getInstance(getContext()).isPreload2(item.getSongCode(), 1);
List<Music> music = new ArrayList<>();
music.add(item);
AgoraManager.getInstance(getContext()).setMusicList(music);
EventBus.getDefault().post(item);
AgoraManager.getInstance(getContext()).nextSong();
} else {
List<Music> music = AgoraManager.getInstance(getContext()).getMusicList();
music.add(item);
AgoraManager.getInstance(getContext()).setMusicList(music);
}
// AgoraManager.getInstance(getContext()).isPreload(item.getSongCode(), 1);
}
ToastUtils.show("添加成功");
}
});
}
};
mBinding.recycleView.setAdapter(adapter);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMusicSearchResultEvent(MusicBean music) {
if (music.getMusicList() != null) {
if (music.getPage() == 1) {
adapter.setNewData(music.getMusicList());
} else {
adapter.addData(music.getMusicList());
}
}
}
@Override
protected int getLayoutId() {
return R.layout.fragment_request;
}
}

View File

@@ -0,0 +1,746 @@
package com.example.moduleroom.fragment;
import static android.view.View.GONE;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewStub;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.example.moduleroom.R;
import com.example.moduleroom.activity.RoomActivity;
import com.example.moduleroom.contacts.RoomAuctionContacts;
import com.example.moduleroom.databinding.FragmentRoomAuctionBinding;
import com.example.moduleroom.dialog.BidListDialogFragment;
import com.example.moduleroom.dialog.CardRelationshipFragment;
import com.example.moduleroom.dialog.CustomCenterDialogFragment;
import com.example.moduleroom.dialog.RoomGiftDialogFragment;
import com.example.moduleroom.dialog.RoomOnlineDialogFragment;
import com.example.moduleroom.dialog.RoomUserInfoFragment;
import com.example.moduleroom.presenter.RoomAuctionPresenterTow;
import com.hjq.toast.ToastUtils;
import com.orhanobut.logger.Logger;
import com.qxcm.moduleutil.base.BaseMvpFragment;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.RoomTime;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.bean.room.AuctionBean;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import com.qxcm.moduleutil.bean.room.RoomBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomPitBean;
import com.qxcm.moduleutil.dialog.ConfirmDialog;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.widget.RoomMakeWheatView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
* @author qx
* @data 2025/6/27
* @description: 拍卖房
*/
public class RoomAuctionFragment extends BaseMvpFragment<RoomAuctionPresenterTow, FragmentRoomAuctionBinding>
implements RoomAuctionContacts.View {
private RoomInfoResp roomInfoResp;
private RoomAuction roomAuction;
private RoomBean roomBean;
RoomMakeWheatView wheatView;
RoomMakeWheatView wheatView2;
CountDownTimer mCountDownTimer;
private long remainingTime;
private String auctionId = "";
private RoomAuction.AuctionUserBean auctionUserBean;
private List<RoomAuction.AuctionListBean> auctionList;
private ImageView imActionJs, imActionYs;
private ViewStub stub;
private boolean isButtonsInflated = false;
private int type;
public static RoomAuctionFragment newInstance(RoomInfoResp roomInfoResp, int type) {
Bundle args = new Bundle();
RoomAuctionFragment fragment = new RoomAuctionFragment();
args.putSerializable("roomInfo", roomInfoResp);
args.putInt("type", type);
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfo");
type = getArguments().getInt("type");
}
@Override
protected RoomAuctionPresenterTow bindPresenter() {
return new RoomAuctionPresenterTow(this, getActivity());
}
public void initOverlayButtons() {
if (isButtonsInflated) return;
ViewStub stub = requireActivity().findViewById(R.id.stub_buttons);
if (stub != null) {
View inflated = stub.inflate();
imActionJs = inflated.findViewById(R.id.im_action_ys);
imActionYs = inflated.findViewById(R.id.im_action_js);
if (imActionJs != null && imActionYs != null) {
// 设置点击事件
imActionJs.setOnClickListener(this::onChock);
imActionYs.setOnClickListener(this::onChock);
isButtonsInflated = true;
} else {
// 报错提示:说明 top_overlay_buttons.xml 中没有定义这些 id
throw new IllegalStateException("im_action_js or im_action_ys not found in overlay layout");
}
}
}
@Override
protected void initData() {
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setvisibTop(true);
}
RoomPitBean roomPitBean = roomInfoResp.getRoom_info().getPit_list().get(0);
if (roomPitBean.getUser_id() != null && !roomPitBean.getUser_id().isEmpty() && !roomPitBean.getUser_id().equals("0")) {
wheatView.setData(roomPitBean);
}
roomAuction = roomInfoResp.getRoom_auction();
if (roomAuction != null) {
if (roomAuction.getAuction_user() != null) {
auctionUserBean = roomAuction.getAuction_user();
RoomPitBean roomPitBean1 = new RoomPitBean();
roomPitBean1.setUser_id(auctionUserBean.getUser_id());
roomPitBean1.setNickname(auctionUserBean.getNickname());
roomPitBean1.setAvatar(auctionUserBean.getAvatar());
roomPitBean1.setDress(auctionUserBean.getDress());
roomPitBean1.setSex(auctionUserBean.getSex());
roomPitBean1.setPit_number("888");
wheatView2.setData(roomPitBean1);
countDownTime(auctionUserBean.getDuration());
if (auctionUserBean.getUser_id() != null && auctionUserBean.getUser_id().equals(SpUtil.getUserId() + "")) {
mBinding.ivJp.setVisibility(INVISIBLE);
} else {
if(wheatView.pitBean!=null){
if (wheatView.pitBean.getUser_id().equals(SpUtil.getUserId() + "")) {
imActionJs.setVisibility(VISIBLE);
imActionYs.setVisibility(VISIBLE);
} else {
imActionJs.setVisibility(INVISIBLE);
imActionYs.setVisibility(INVISIBLE);
}
}else {
imActionJs.setVisibility(INVISIBLE);
imActionYs.setVisibility(INVISIBLE);
}
mBinding.ivJp.setVisibility(VISIBLE);
}
gengv();
auctionId = auctionUserBean.getAuction_id();
SpUtil.setAuctionId(auctionId);
}
if (roomAuction.getAuction_list() != null && roomAuction.getAuction_list().size() > 0) {
auctionList = roomAuction.getAuction_list();
// for (int i=0; i < roomAuction.getAuction_list().size(); i++){
// int j=i++;
// RoomAuction.AuctionListBean auctionListBean=roomAuction.getAuction_list().get(i);
// RoomPitBean pitBean=new RoomPitBean();
// pitBean.setUser_id(auctionListBean.getUser_id());
// pitBean.setNickname(auctionListBean.getNickname());
// pitBean.setAvatar(auctionListBean.getAvatar());
// pitBean.setPit_number(j+"");
// if (j==1) {
// RoomMakeWheatView wheatView = mBinding.ivAuction1;
// wheatView.setData(pitBean);
// }else if (j==2){
// RoomMakeWheatView wheatView = mBinding.ivAuction2;
// wheatView.setData(pitBean);
// }else if (j==3){
// RoomMakeWheatView wheatView = mBinding.ivAuction3;
// wheatView.setData(pitBean);
// }else if (j==4){
// ImageUtils.loadHeadCC(auctionListBean.getAvatar(), mBinding.avatar4);
// }else if (j==5){
// ImageUtils.loadHeadCC(auctionListBean.getAvatar(), mBinding.avatar5);
// }else if (j==6){
// ImageUtils.loadHeadCC(auctionListBean.getAvatar(), mBinding.avatar6);
// }
//
// }
gexList();
}
} else {
RoomPitBean roomPitBean1 = new RoomPitBean();
roomPitBean1.setPit_number("888");
roomPitBean1.setSex("");
roomPitBean1.setUser_id("");
roomPitBean1.setNickname("");
roomPitBean1.setAvatar("");
wheatView2.setData(roomPitBean1);
auctionId = "";
SpUtil.setAuctionId("");
}
}
@Override
protected void initView() {
wheatView = mBinding.roomMakeWheat;
wheatView2 = mBinding.roomMakeWheat2;
mBinding.ivJp.setOnClickListener(this::onChock);
mBinding.roomMakeWheat.setOnClickListener(this::onChock);
mBinding.roomMakeWheat2.setOnClickListener(this::onChock);
mBinding.bangdan.setOnClickListener(this::onChock);
// imActionJs=mBinding.imActionJs;
// imActionYs=mBinding.imActionYs;
// imActionJs.setOnClickListener(this::onChock);
// imActionYs.setOnClickListener(this::onChock);
getTextView();
initOverlayButtons();
}
private void onChock(View view) {
int id = view.getId();
if (id == R.id.iv_jp) {
// RoomAuction.AuctionUserBean auctionUserBean = roomInfoResp.getRoom_auction().getAuction_user();
// CardRelationshipFragment.show(roomInfoResp.getRoom_info().getRoom_id(), auctionUserBean.getUser_id(), type, getActivity().getSupportFragmentManager());
UserInfo userInfo = new UserInfo();
userInfo.setUser_id(Integer.parseInt(roomInfoResp.getRoom_auction().getAuction_user().getUser_id()));
userInfo.setNickname(roomInfoResp.getRoom_auction().getAuction_user().getNickname());
userInfo.setAvatar(roomInfoResp.getRoom_auction().getAuction_user().getAvatar());
userInfo.setAuction_id(roomInfoResp.getRoom_auction().getAuction_user().getAuction_id());
userInfo.setPit_number("888");
RoomGiftDialogFragment.show(null, userInfo, roomInfoResp.getRoom_info().getRoom_id(), getParentFragmentManager());
} else if (id == R.id.room_make_wheat) {
if (!wheatView.getUserId().equals("")) {
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), wheatView.getUserId(), wheatView.pitNumber, getHostUser(),false, getChildFragmentManager());
} else {
MvpPre.applyPit(roomInfoResp.getRoom_info().getRoom_id(), "9");
}
} else if (id == R.id.room_make_wheat2) {
if (wheatView2.getUserId().equals("")) {
RoomOnlineDialogFragment.show(roomInfoResp.getRoom_info().getRoom_id(), 888 + "", getChildFragmentManager());
} else {
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), wheatView2.getUserId(), wheatView2.pitNumber, getHostUser(),false, getChildFragmentManager());
}
} else if (id == R.id.im_action_ys) {
MvpPre.auctionDelay(SpUtil.getauctionId());
} else if (id == R.id.im_action_js) {
MvpPre.auctionEnd(SpUtil.getauctionId());
}else if (id == R.id.bangdan){
BidListDialogFragment.newInstance(SpUtil.getauctionId()).show(getChildFragmentManager(), "BidListDialogFragment");
}
}
private void getTextView() {
int defaultColor = ContextCompat.getColor(requireContext(), com.qxcm.moduleutil.R.color.color_0DFFB9); // 原亲密拍颜色
int selectedColor = Color.WHITE; // 原真爱拍颜色
float defaultSize = 24f; // 亲密拍默认字体大小
float selectedSize = 16f; // 真爱拍默认字体大小
// if (type == 2) {
toggleTextStyles(mBinding.qinmi, mBinding.zhenai, defaultColor, selectedColor, defaultSize, selectedSize,type);
// } else if (type == 1) {
// toggleTextStyles( mBinding.zhenai,mBinding.qinmi, defaultColor, selectedColor, defaultSize, selectedSize);
// }
mBinding.zhenai.setOnClickListener(v -> {
// type = 1;
// toggleTextStyles(mBinding.qinmi, mBinding.zhenai, defaultColor, selectedColor, defaultSize, selectedSize);
if (wheatView.getUserId().equals(SpUtil.getUserId()+"")) {
// 判断 wheatView2 是否有人
if (wheatView2 != null && wheatView2.getUserId() != null && !wheatView2.getUserId().isEmpty()) {
// 显示提示:竞拍进行中
// showAlertDialog("提示", "竞拍正在进行中,请稍后再操作");
ToastUtils.show("竞拍正在进行中,请稍后再操作");
} else {
// 显示确认对话框
// showConfirmDialog(1);
queren(1);
}
}else {
ToastUtils.show("请联系主持进行切换");
}
});
mBinding.qinmi.setOnClickListener(v -> {
if (wheatView.getUserId().equals(SpUtil.getUserId()+"")) {
if (wheatView2 != null && wheatView2.getUserId() != null && !wheatView2.getUserId().isEmpty()) {
// 显示提示:竞拍进行中
// showAlertDialog("提示", "竞拍正在进行中,请稍后再操作");
ToastUtils.show("竞拍正在进行中,请稍后再操作");
} else {
// 显示确认对话框
// showConfirmDialog(2);
queren(2);
}
}else{
ToastUtils.show("请联系主持进行切换");
}
});
}
private void queren(int newType) {
// 创建并显示确认对话框
new ConfirmDialog(requireContext(),
"温馨提示",
newType==1?"确定要切换为真爱拍吗":"确认切换为亲密拍吗",
"确认",
"取消",
v -> {
// 点击“确认”按钮时执行
// MvpPre.agreeSong(roomId, "1");
MvpPre.auctionMode(roomInfoResp.getRoom_info().getRoom_id(), newType == 1 ? "1" : "2");
// type = newType;
// toggleTextStyles(mBinding.qinmi, mBinding.zhenai,
// ContextCompat.getColor(requireContext(), com.qxcm.moduleutil.R.color.color_0DFFB9),
// Color.WHITE, 24f, 16f);
},
v -> {
// 点击“取消”按钮时什么都不做
// MvpPre.agreeSong(roomId, "2");
},false,0).show();
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room_auction;
}
/* 这是判断当前用户是否是麦上房主、管理员、主持,不在主持麦的都是不同用户
* @return
*/
private int getHostUser() {
if (roomInfoResp.getUser_info().getPit_number() == 9) {
if (roomInfoResp.getUser_info().getIs_room_owner() == 1) {
return 1;
} else if (roomInfoResp.getUser_info().getIs_management() == 1) {
return 2;
} else {
return 3;
}
}
return 0;
}
@Override
public void applyPit() {
}
@Override
public void roomAuction(AuctionBean auctionBean) {
}
@Override
public void auctionDelay() {
}
@Override
public void auctionEnd() {
}
@Override
public void auctionMode() {
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(RoomMessageEvent messageEvent) {
if (messageEvent.getMsgType() == 1003) {//上麦
if (messageEvent.getText().getPit_number().equals("9")) {
wheatView.setData(getPitBean(messageEvent));
imActionJs.setVisibility(View.VISIBLE);
imActionYs.setVisibility(View.VISIBLE);
}
} else if (messageEvent.getMsgType() == 1004) {
if (messageEvent.getText().getPit_number().equals("9")) {
wheatView.setData(getPitBean2(messageEvent));
imActionJs.setVisibility(GONE);
imActionYs.setVisibility(GONE);
} else if (messageEvent.getText().getPit_number().equals("888")) {
wheatView2.setData(getPitBean2(messageEvent));
}
} else if (messageEvent.getMsgType() == 1022) {
if (messageEvent.getText().getType() == 1) {
if (messageEvent.getText().getPit_number().equals("888")) {
wheatView2.setData(getPitBean(messageEvent));
imActionJs.setVisibility(GONE);
imActionYs.setVisibility(GONE);
}
if (messageEvent.getText().getFromUserInfo().getUser_id() == SpUtil.getUserId()) {
// RoomAuction.AuctionUserBean auctionUserBean =messageEvent.getText().getAuction_user();
CardRelationshipFragment.show(roomInfoResp.getRoom_info().getRoom_id(), SpUtil.getUserId() + "", type + "", getActivity().getSupportFragmentManager());
}
} else if (messageEvent.getText().getType() == 2) {
if (messageEvent.getText().getPit_number().equals("9")) {
wheatView.setData(getPitBean2(messageEvent));
}else if (messageEvent.getText().getPit_number().equals("888")) {
wheatView2.setData(getPitBean2(messageEvent));
}
yinc();
}
} else if (messageEvent.getMsgType() == 1023) {//开始竞拍
mBinding.ivJp.setVisibility(VISIBLE);
if (wheatView.pitBean.getUser_id().equals(SpUtil.getUserId() + "")) {
imActionYs.setVisibility(VISIBLE);
imActionYs.setVisibility(VISIBLE);
}else {
imActionJs.setVisibility(GONE);
imActionYs.setVisibility(GONE);
}
if (messageEvent.getText().getAuction_user().getUser_id().equals(SpUtil.getUserId() + "")) {
mBinding.ivJp.setVisibility(INVISIBLE);
}
roomInfoResp.getRoom_auction().setAuction_user(messageEvent.getText().getAuction_user());
auctionId = messageEvent.getText().getAuction_user().getAuction_id();
SpUtil.setAuctionId(auctionId);
countDownTime(messageEvent.getText().getAuction_user().getDuration());
auctionUserBean = messageEvent.getText().getAuction_user();
gengv();
} else if (messageEvent.getMsgType() == 1024) {//竞拍,拍卖列表变化
auctionList = messageEvent.getText().getAuction_list();
gexList();
} else if (messageEvent.getMsgType() == 1025) {//结束
if (messageEvent.getText().getRecipient() != null) {//成功
CustomCenterDialogFragment.show(messageEvent.getText().getRecipient(), messageEvent.getText().getAuction_user(), getActivity().getSupportFragmentManager());
} else {//失败
showCountDownDialog(getContext());
}
SpUtil.setAuctionId("");
mBinding.ivJp.setVisibility(INVISIBLE);
imActionYs.setVisibility(INVISIBLE);
imActionJs.setVisibility(INVISIBLE);
releaseCountDownTimer();
auctionList = null;
gexList();
} else if (messageEvent.getMsgType() == 1026) {//主持延迟
countDownTime(messageEvent.getText().getDuration());
}else if (messageEvent.getMsgType() == 1027){
type=messageEvent.getText().getType();
getTextView();
}
}
private void gengv() {
if (auctionUserBean != null) {
mBinding.tvRelation.setText(auctionUserBean.getRelation_name());
mBinding.tvTime.setText(auctionUserBean.getTime_day());
mBinding.tvGift.setText(auctionUserBean.getGift_name());
ImageUtils.loadHeadCC(auctionUserBean.getBase_image(), mBinding.btnGift);
// auctionId=auctionUserBean.getAuction_id();
SpUtil.setAuctionId(auctionUserBean.getAuction_id());
Logger.d("@@@",mBinding.tvTime.getText());
}
}
private void yinc() {
mBinding.ivJp.setVisibility(INVISIBLE);
imActionJs.setVisibility(INVISIBLE);
imActionYs.setVisibility(INVISIBLE);
mBinding.tvDjTime.setVisibility(INVISIBLE);
mBinding.tvRelation.setText("关系");
mBinding.tvTime.setText("时间");
mBinding.tvGift.setText("礼物");
mBinding.btnGift.setImageResource(com.qxcm.moduleutil.R.mipmap.liwu);
}
private void gexList() {
if (auctionList != null && auctionList.size() > 0) {
for (int i = 0; i < auctionList.size(); i++) {
int j = 0;
j++;
RoomAuction.AuctionListBean auctionListBean = auctionList.get(i);
RoomPitBean pitBean = new RoomPitBean();
pitBean.setUser_id(auctionListBean.getUser_id());
pitBean.setNickname(auctionListBean.getNickname());
pitBean.setAvatar(auctionListBean.getAvatar());
if (j == 1) {
pitBean.setPit_number("111");
RoomMakeWheatView wheatView = mBinding.ivAuction1;
wheatView.setData(pitBean);
} else if (j == 2) {
pitBean.setPit_number("222");
RoomMakeWheatView wheatView = mBinding.ivAuction2;
wheatView.setData(pitBean);
} else if (j == 3) {
pitBean.setPit_number("333");
RoomMakeWheatView wheatView = mBinding.ivAuction3;
wheatView.setData(pitBean);
} else if (j == 4) {
ImageUtils.loadHeadCC(auctionListBean.getAvatar(), mBinding.avatar4);
} else if (j == 5) {
ImageUtils.loadHeadCC(auctionListBean.getAvatar(), mBinding.avatar5);
} else if (j == 6) {
ImageUtils.loadHeadCC(auctionListBean.getAvatar(), mBinding.avatar6);
}
}
} else {
RoomMakeWheatView wheatView = mBinding.ivAuction1;
wheatView.setData(getPitBean2(null));
RoomMakeWheatView wheatView2 = mBinding.ivAuction2;
wheatView2.setData(getPitBean2(null));
RoomMakeWheatView wheatView3 = mBinding.ivAuction3;
wheatView3.setData(getPitBean2(null));
// mBinding.ivAuction1.setData(getPitBean2(null));
// mBinding.ivAuction2.setData(getPitBean2(null));
// mBinding.ivAuction3.setData(getPitBean2(null));
}
}
// TODO: 2025/6/30 竞拍失败的dialog
public void showCountDownDialog(Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
View dialogView = getLayoutInflater().inflate(R.layout.dialog_with_countdown, null);
builder.setView(dialogView);
TextView btnKnow = dialogView.findViewById(R.id.btn_know);
TextView tvCountDown = dialogView.findViewById(R.id.tv_countdown);
final AlertDialog dialog = builder.create();
dialog.setCancelable(false); // 防止点击外部取消
final CountDownTimer countDownTimer = new CountDownTimer(3000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
int secondsRemaining = (int) (millisUntilFinished / 1000);
tvCountDown.setText(String.valueOf(secondsRemaining));
}
@Override
public void onFinish() {
dialog.dismiss(); // 倒计时结束自动关闭
}
};
btnKnow.setOnClickListener(v -> {
countDownTimer.cancel(); // 取消倒计时
dialog.dismiss(); // 手动关闭对话框
});
dialog.show();
countDownTimer.start(); // 开始倒计时
//设置 Dialog 最大宽度(例如屏幕宽度的 80%
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = (int) (context.getResources().getDisplayMetrics().widthPixels * 0.9f); // 80% 屏幕宽度
int maxHeightDp = 200; // 最大高度 200dp
int maxHeightPx = (int) (maxHeightDp * context.getResources().getDisplayMetrics().density);
// lp.height = Math.min(
// maxHeightPx,
// context.getResources().getDisplayMetrics().heightPixels * 3 / 5
// ); // 取较小值
dialog.getWindow().setAttributes(lp);
}
public void countDownTime(long time) {
try {
if (time <= 0) {
setTime(0);
releaseCountDownTimer();
return;
}
releaseCountDownTimer();
// 获取当前时间的毫秒值
long currentTime = System.currentTimeMillis() / 1000L;
// 计算倒计时的总秒数
long countDownTime = (time - currentTime);
Logger.d("@@@", "countDownTime = " + countDownTime);
if (countDownTime <= 0) {
setTime(0);
releaseCountDownTimer();
return;
}
mCountDownTimer = new CountDownTimer(countDownTime * 1000L, 1000L) {
@Override
public void onTick(long millisUntilFinished) {
int time1 = (int) (millisUntilFinished / 1000);
setTime(time1);
remainingTime = time1;
// if (time1 <= 10) {
// mBinding.tvDjs.setVisibility(View.VISIBLE);
// mBinding.tvDjs.setText(time1 + "");
//// mBinding.tvDjs.setVisibility(GONE);
// } else {
// mBinding.tvDjs.setVisibility(GONE);
// }
}
@Override
public void onFinish() {
setTime(0);
remainingTime = 0;
}
};
mCountDownTimer.start();
} catch (Exception e) {
Logger.e("countDownTime", e);
}
}
private String formatTime(int totalSeconds) {
int hours = totalSeconds / 3600;
int minutes = (totalSeconds % 3600) / 60;
int seconds = totalSeconds % 60;
// return String.format("%02d:%02d", minutes, seconds);
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
}
@SuppressLint("DefaultLocale")
public void setTime(int seconds) {
mBinding.tvDjTime.setVisibility(VISIBLE);
if (seconds == 0) {
mBinding.tvDjTime.setText("倒计时00:00");
}
String formattedTime = formatTime(seconds);
mBinding.tvDjTime.setText("倒计时:" + formattedTime);
}
// TODO: 2025/3/19 释放倒计时器
private void releaseCountDownTimer() {
if (mCountDownTimer != null) {
mCountDownTimer.cancel();
mCountDownTimer = null;
mBinding.tvDjTime.setVisibility(GONE);
}
}
// TODO: 2025/6/30 上麦,麦位变化
private RoomPitBean getPitBean(RoomMessageEvent messageEvent) {
RoomPitBean pitBean = new RoomPitBean();
pitBean.setPit_number(messageEvent.getText().getPit_number());
pitBean.setUser_id(messageEvent.getText().getFromUserInfo().getUser_id() + "");
pitBean.setAvatar(messageEvent.getText().getFromUserInfo().getAvatar());
pitBean.setNickname(messageEvent.getText().getFromUserInfo().getNickname());
pitBean.setSex(messageEvent.getText().getFromUserInfo().getSex() + "");
pitBean.setCharm(messageEvent.getText().getFromUserInfo().getCharm());
return pitBean;
}
// TODO: 2025/6/30 下麦麦位变化
private RoomPitBean getPitBean2(RoomMessageEvent messageEvent) {
RoomPitBean pitBean = new RoomPitBean();
pitBean.setPit_number(messageEvent.getText().getPit_number());
pitBean.setUser_id("");
pitBean.setAvatar("");
pitBean.setNickname("");
pitBean.setSex("");
pitBean.setCharm("");
return pitBean;
}
@Override
public void onStart() {
super.onStart();
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
/**
* 切换两个 TextView 的样式
*
* @param qinmi 亲密拍 TextView
* @param zhenai 真爱拍 TextView
* @param defaultColor 默认颜色(如亲密拍原本颜色)
* @param selectedColor 点击后选中颜色(如真爱拍原本颜色)
* @param defaultSize 默认字体大小sp
* @param selectedSize 点击后选中字体大小sp
*/
public void toggleTextStyles(TextView qinmi, TextView zhenai,
int defaultColor, int selectedColor,
float defaultSize, float selectedSize,int type) {
boolean isDefaultState = qinmi.getCurrentTextColor() == defaultColor;
if (type==1) {
// 切换到真爱拍样式
qinmi.setTextColor(selectedColor);
qinmi.setTextSize(TypedValue.COMPLEX_UNIT_SP, selectedSize);
zhenai.setTextColor(defaultColor);
zhenai.setTextSize(TypedValue.COMPLEX_UNIT_SP, defaultSize);
} else {
// 切换回默认样式
qinmi.setTextColor(defaultColor);
qinmi.setTextSize(TypedValue.COMPLEX_UNIT_SP, defaultSize);
zhenai.setTextColor(selectedColor);
zhenai.setTextSize(TypedValue.COMPLEX_UNIT_SP, selectedSize);
}
}
}

View File

@@ -0,0 +1,354 @@
package com.example.moduleroom.fragment;
import static android.app.Activity.RESULT_OK;
import static com.blankj.utilcode.util.SnackbarUtils.dismiss;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RoomBackgroundContacts;
import com.example.moduleroom.databinding.RoomFragementDialogRoomBackgroundBinding;
import com.example.moduleroom.presenter.RoomBackgroundPresenter;
import com.luck.picture.lib.basic.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.entity.LocalMedia;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.bean.RoomBgBean;
import com.qxcm.moduleutil.dialog.ConfirmDialog;
import com.qxcm.moduleutil.utils.GlideEngine;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.widget.Constants;
import org.greenrobot.eventbus.EventBus;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/24
*@description: 更换房间背景
*/
public class RoomBackgroundDialogFragment extends BaseMvpDialogFragment<RoomBackgroundPresenter, RoomFragementDialogRoomBackgroundBinding> implements RoomBackgroundContacts.View {
private MyAdapter mAdapter;
private String roomId;
private String picture;
private boolean pictureChanged;
private List<RoomBgBean.RoomBg> publicBgList = new ArrayList<>();
private List<RoomBgBean.RoomBg> myBgList = new ArrayList<>();
public static RoomBackgroundDialogFragment newInstance(String roomId) {
RoomBackgroundDialogFragment fragment = new RoomBackgroundDialogFragment();
Bundle bundle = new Bundle();
bundle.putString("roomId", roomId);
fragment.setArguments(bundle);
return fragment;
}
@Override
protected void initData() {
mBinding.recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
mAdapter = new MyAdapter();
mAdapter.setCheckedPicture(picture);
mBinding.recyclerView.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void onAddImageClick() {
// 处理“添加图片”点击逻辑(例如打开相册)
startChoosePhoto(1, PictureConfig.REQUEST_CAMERA, false, 1);
}
@Override
public void onBackgroundClick(RoomBgBean.RoomBg item) {
queren1(item);
}
});
}
private void queren1(RoomBgBean.RoomBg item) {
// 创建并显示确认对话框
new ConfirmDialog(getContext(),
"温馨提示",
"是否选择当前图片为背景图片",
"确认",
"取消",
v -> {
// 点击“确认”按钮时执行删除操作
MvpPre.editRoom(roomId, "", "", "", item.getImage_url());
},
v -> {
// 点击“取消”按钮时什么都不做
},false,0).show();
}
private void startChoosePhoto(int mimeType, int requestCode, boolean isVideo, int type) {
PictureSelector.create(this)
.openGallery(mimeType)
.isGif(isVideo)
.setImageEngine(GlideEngine.createGlideEngine())
.setMaxSelectNum(type)
.isPreviewImage(true)
.isDisplayCamera(true)
.setOutputCameraDir(Constants.FILE_PATH)
.isOriginalSkipCompress(true)
.forResult(requestCode); //结果回调onActivityResult code
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null) {
switch (requestCode) {
case PictureConfig.REQUEST_CAMERA:
List<LocalMedia> localMediaList = PictureSelector.obtainSelectorList(data);
List<LocalMedia> localMedia1 = PictureSelector.obtainSelectorList(data);
if (localMedia1 != null && localMedia1.size() != 0) {
LocalMedia imgMedia = localMedia1.get(0);
String url;
if (imgMedia.isCompressed()) {
url = imgMedia.getCompressPath();
} else {
url = imgMedia.getRealPath();
}
MvpPre.uploadFile(new File(url), 1, 1, 1);
}
break;
}
}
}
@Override
public void upLoadSuccess(String url, int type, int index, int total) {
MvpPre.uploadBgImage("", url);
}
@Override
public void uploadBgImage() {
MvpPre.getBackgroundList();
}
@Override
public void editRoom() {
}
@Override
protected void initView() {
mBinding.tvTitle.setOnClickListener(this::onViewClicked);
mBinding.tvTitle2.setOnClickListener(this::onViewClicked);
// 设置默认样式(可选)
resetBackgroundTextStyles();
}
private void setTextViewStyle(TextView tv, String colorHex, int textSizeSp) {
tv.setTextColor(Color.parseColor(colorHex));
tv.setTextSize(textSizeSp);
}
private void resetBackgroundTextStyles() {
setTextViewStyle(mBinding.tvTitle, "#333333", 16);
setTextViewStyle(mBinding.tvTitle2, "#999999", 12);
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
roomId = arguments.getString("roomId");
picture = arguments.getString("picture");
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
if (window != null) {
// 设置固定高度为 500dp
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int heightInDp = (int) (screenHeight * 0.6f);
;
// int heightInPx = (int) (heightInDp * getResources().getDisplayMetrics().density);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInDp);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.qxcm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
// window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
setCancelable(true);
}
@Override
protected int getLayoutId() {
return R.layout.room_fragement_dialog_room_background;
}
@Override
protected RoomBackgroundPresenter bindPresenter() {
return new RoomBackgroundPresenter(this, getActivity());
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
pictureChanged = false;
}
@Override
public void onDetach() {
if (!pictureChanged) {
EventBus.getDefault().post(new RoomBgBean());
}
super.onDetach();
}
@Override
public void onResume() {
super.onResume();
MvpPre.getBackgroundList();
}
public void onViewClicked(View view) {
if (view.getId() == R.id.tv_title2) {
// 点击“我的背景”
setTextViewStyle(mBinding.tvTitle2, "#333333", 16);
setTextViewStyle(mBinding.tvTitle, "#999999", 12);
List<RoomBgBean.RoomBg> listWithAddBtn = new ArrayList<>();
RoomBgBean.RoomBg addBg = new RoomBgBean.RoomBg();
addBg.setAddButton(true);
addBg.setImage_url(null); // 可选:设为空图 URL
// 插入到顶部
listWithAddBtn.add(addBg);
listWithAddBtn.addAll(myBgList);
mAdapter.setNewData(listWithAddBtn);
} else if (view.getId() == R.id.tv_title) {
// 点击“公共背景”
setTextViewStyle(mBinding.tvTitle, "#333333", 16); // 当前项大字体、深色
setTextViewStyle(mBinding.tvTitle2, "#999999", 12);
mAdapter.setNewData(publicBgList);
}
// MvpPre.setBg(roomId, mAdapter.getCheckedPicture());
}
@Override
public void showLoadings(String content) {
}
@Override
public void getBackgroundList(RoomBgBean list) {
publicBgList = list.getPublic_bg();
myBgList = list.getPrivate_bg();
// 如果当前正在显示“我的背景”,则刷新 RecyclerView
if (mBinding.tvTitle2.getCurrentTextColor() == Color.parseColor("#333333")) {
List<RoomBgBean.RoomBg> listWithAddBtn = new ArrayList<>();
RoomBgBean.RoomBg addBg = new RoomBgBean.RoomBg();
addBg.setAddButton(true);
listWithAddBtn.add(addBg);
listWithAddBtn.addAll(myBgList);
mAdapter.setNewData(listWithAddBtn); // 更新 adapter 数据并刷新
}
}
private static class MyAdapter extends BaseQuickAdapter<RoomBgBean.RoomBg, BaseViewHolder> {
public interface OnItemClickListener {
void onAddImageClick(); // 点击“添加图片”按钮时触发
void onBackgroundClick(RoomBgBean.RoomBg item); // 点击普通背景项时触发
}
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener listener) {
this.onItemClickListener = listener;
}
MyAdapter() {
super(R.layout.room_rv_item_room_bg);
}
private String checkedPicture;
public void setCheckedPicture(String checkedPicture) {
this.checkedPicture = checkedPicture;
}
String getCheckedPicture() {
return checkedPicture;
}
@Override
protected void convert(BaseViewHolder helper, RoomBgBean.RoomBg item) {
if (item.isAddButton()) {
// “添加图片”按钮样式
helper.setImageResource(R.id.iv_bg, com.qxcm.moduleutil.R.mipmap.add_img); // 添加图片图标
helper.itemView.setOnClickListener(v -> {
if (onItemClickListener != null) {
onItemClickListener.onAddImageClick();
}
});
} else {
// 普通图片项
ImageUtils.loadHeadCC(item.getImage_url(), helper.getView(R.id.iv_bg));
helper.itemView.setOnClickListener(v -> {
if (onItemClickListener != null) {
onItemClickListener.onBackgroundClick(item);
}
});
}
// // 设置点击事件
// helper.itemView.setOnClickListener(v -> {
// if (item.isAddButton()) {
// // 跳转选择图片(比如打开系统相册)
// chooseImage();
// } else {
// // 选择某张图片作为背景
// checkedPicture = item.getImage_url();
// EventBus.getDefault().post(new RoomBgBean());
// notifyDataSetChanged();
// }
// });
}
}
public void closeDialog(View view) {
dismiss();
}
}

View File

@@ -0,0 +1,414 @@
package com.example.moduleroom.fragment;
import static com.blankj.utilcode.util.ServiceUtils.startService;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.alibaba.android.arouter.facade.annotation.Autowired;
import com.alibaba.android.arouter.launcher.ARouter;
import com.blankj.utilcode.util.ObjectUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.activity.RoomActivity;
import com.example.moduleroom.contacts.RoomCabinContacts;
import com.example.moduleroom.databinding.RoomCabinFragmentBinding;
import com.example.moduleroom.dialog.ExitRoomBottomSheet;
import com.example.moduleroom.dialog.RoomGiftDialogFragment;
import com.example.moduleroom.presenter.RoomCabinPresenter;
import com.orhanobut.logger.Logger;
import com.qxcm.moduleutil.base.BaseRoomFragment;
import com.qxcm.moduleutil.base.CommonAppContext;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.bean.room.RoomCpUserBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomPitBean;
import com.qxcm.moduleutil.event.RoomBeckoningEvent;
import com.qxcm.moduleutil.http.FloatingWindowService;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.widget.dialog.CommonDialog;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.io.Serializable;
import java.util.List;
/**
*@author qx
*@data 2025/7/1
*@description: 电影房
*/
public class RoomCabinFragment extends BaseRoomFragment<RoomCabinPresenter, RoomCabinFragmentBinding> implements RoomCabinContacts.View {
protected String roomId;
protected String pitNumber;//当前点击的麦序
protected CommonDialog commonDialog;
CountDownTimer mCountDownTimer;
private RoomInfoResp roomInfoResp;
private int remainingTime;
private boolean isShow = false;
private RoomCpUserBean cpUserBean;
public static RoomCabinFragment newInstance(RoomInfoResp roomInfoResp) {
Bundle args = new Bundle();
args.putSerializable("roomInfoResp", (Serializable) roomInfoResp);
RoomCabinFragment fragment = new RoomCabinFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
roomInfoResp = (RoomInfoResp) arguments.getSerializable("roomInfoResp");
if (roomInfoResp.getCp_user() != null) {
cpUserBean = roomInfoResp.getCp_user();
}
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).changeBackground(com.qxcm.moduleutil.R.mipmap.cabin_bj);
}
}
@Override
protected RoomCabinPresenter bindPresenter() {
return new RoomCabinPresenter(this, getActivity());
}
@Override
protected void initData() {
mBinding.ivExit.setOnClickListener(this::onHeartLineClicked);
// 获取当前用户 ID
String currentUserId = SpUtil.getUserId() + "";
// 定义两个 RoomPitBean 对象,分别用于显示在 roomMakeWheat1 和 roomMakeWheat2
RoomPitBean selfBean = new RoomPitBean(); // 自己的 bean
RoomPitBean otherBean = new RoomPitBean(); // 另一个用户的 bean
boolean isSelfFirst = false;
// 判断当前用户是 user_id 还是 user_id1
if (currentUserId.equals(cpUserBean.getUser_id())) {
// 当前用户是 user_id
selfBean.setUser_id(cpUserBean.getUser_id());
selfBean.setUser_code(cpUserBean.getUser_code());
selfBean.setNickname(cpUserBean.getNickname());
selfBean.setAvatar(cpUserBean.getAvatar());
selfBean.setDress(cpUserBean.getDress());
selfBean.setPit_number("0");
otherBean.setUser_id(cpUserBean.getUser_id1());
otherBean.setUser_code(cpUserBean.getUser_code1());
otherBean.setNickname(cpUserBean.getNickname1());
otherBean.setAvatar(cpUserBean.getAvatar1());
otherBean.setDress(cpUserBean.getDress1());
otherBean.setPit_number("0");
} else if (currentUserId.equals(cpUserBean.getUser_id1())) {
// 当前用户是 user_id1则交换位置
selfBean.setUser_id(cpUserBean.getUser_id1());
selfBean.setUser_code(cpUserBean.getUser_code1());
selfBean.setNickname(cpUserBean.getNickname1());
selfBean.setAvatar(cpUserBean.getAvatar1());
selfBean.setDress(cpUserBean.getDress1());
selfBean.setPit_number("0");
otherBean.setUser_id(cpUserBean.getUser_id());
otherBean.setUser_code(cpUserBean.getUser_code());
otherBean.setNickname(cpUserBean.getNickname());
otherBean.setAvatar(cpUserBean.getAvatar());
otherBean.setDress(cpUserBean.getDress());
otherBean.setPit_number("0");
}
// 不论谁是自己,始终将自己放在 roomMakeWheat1
mBinding.roomMakeWheat1.setData(selfBean);
// 将另一个用户的数据放在 roomMakeWheat2
mBinding.roomMakeWheat2.setData(otherBean);
// ImageUtils.loadHeadCC(cpUserBean.getAvatar(), mBinding.rivRoom);
// ImageUtils.loadHeadCC(cpUserBean.getAvatar1(), mBinding.rivRoom2);
// mBinding.userName.setText(cpUserBean.getNickname());
// mBinding.userName2.setText(cpUserBean.getNickname1());
mBinding.tvMainTitle.setText(roomInfoResp.getRoom_info().getRoom_name());
mBinding.tvHeartValue2.setText(roomInfoResp.getRoom_info().getHot_value());
countDownTime(Long.parseLong(cpUserBean.getTime_day()));
}
@Override
protected void initView() {
super.initView();
mBinding.im1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isShow) {
switchMic(2);
} else {
switchMic(1);
}
}
});
mBinding.im2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RoomPitBean roomPitBean = mBinding.roomMakeWheat2.pitBean;
UserInfo userInfo = new UserInfo();
userInfo.setUser_id(Integer.parseInt(roomPitBean.getUser_id()));
userInfo.setNickname(roomPitBean.getNickname());
userInfo.setAvatar(roomPitBean.getAvatar());
userInfo.setPit_number("");
RoomGiftDialogFragment.show(null, userInfo, roomInfoResp.getRoom_info().getRoom_id(), getParentFragmentManager());
}
});
// RtcManager.getInstance().applyWheat(String.format("%s_%s", roomId, SpUtils.getUserId()));
// mBinding.im1.setImageResource(R.mipmap.close_m);
// RtcManager.getInstance().muteLocalAudioStream(false);
// RtcManager.getInstance().startPublishingStream();
isShow=false;
switchMic(1);
}
public void switchMic(int type) {
if (type == 1) {
mBinding.im1.setImageResource(com.qxcm.moduleutil.R.mipmap.close_m);
AgoraManager.getInstance( getActivity()).ClientRole( true);
AgoraManager.getInstance(getActivity()).muteLocalAudioStream(false);
AgoraManager.getInstance(getActivity()).setLocalAudioEnabled(true);
isShow=false;
} else {
mBinding.im1.setImageResource(com.qxcm.moduleutil.R.mipmap.op_m);
AgoraManager.getInstance( getActivity()).ClientRole( false);
AgoraManager.getInstance(getActivity()).muteLocalAudioStream(true);
AgoraManager.getInstance(getActivity()).setLocalAudioEnabled(false);
isShow=true;
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(RoomMessageEvent messageEvent) {
if (messageEvent.getMsgType()==1028){
mBinding.tvHeartValue2.setText(messageEvent.getText().getHot_value());
}
}
private void onHeartLineClicked(View view) {
if (view.getId() == R.id.iv_exit) {
// EventBus.getDefault().post(new RoomOutEvent());
// ARouter.getInstance().build(ARouteConstants.LIVE_ROOM).withString("form","首页热门列表").withString("roomId", item.getRoom_id()).navigation();
ExitRoomBottomSheet bottomSheet = ExitRoomBottomSheet.newInstance();
bottomSheet.setOnOptionSelectedListener(new ExitRoomBottomSheet.OnOptionSelectedListener() {
@Override
public void onMinimize() {
// 处理最小化逻辑,比如不销毁 Activity仅移至后台
// CommonAppContext.getInstance().isShow = false;
// ARouter.getInstance().build(ARouteConstants.ME).navigation();//栈顶复用
if (getActivity() instanceof RoomActivity) {
//// ((RoomActivity) getActivity()).changeBackground(com.qxcm.moduleutil.R.mipmap.cabin_bj);
((RoomActivity) getActivity()).moveTaskToBack(true);
// ((RoomActivity) getActivity()).setvisibTop( false);
}
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// requireActivity().startForegroundService(new Intent(requireActivity(), FloatingWindowService.class));
// } else {
// requireActivity().startService(new Intent(requireActivity(), FloatingWindowService.class));
// }
}
@Override
public void onExitRoom() {
// 调用退出房间方法
MvpPre.quitRoom(roomInfoResp.getRoom_info().getRoom_id(), SpUtil.getUserId() + "");
}
@Override
public void onCancel() {
// 用户点击取消,不做任何事
}
});
bottomSheet.show(getChildFragmentManager(), "ExitRoomBottomSheet");
}
}
// TODO: 2025/3/12 倒计时
public void countDownTime(long time) {
try {
if (time <= 0) {
setTime(0);
releaseCountDownTimer();
return;
}
releaseCountDownTimer();
// 获取当前时间的毫秒值
long currentTime = System.currentTimeMillis() / 1000L;
// 计算倒计时的总秒数
long countDownTime = (time - currentTime);
Logger.d("小黑屋", "countDownTime = " + countDownTime);
if (countDownTime <= 0) {
setTime(0);
releaseCountDownTimer();
return;
}
mCountDownTimer = new CountDownTimer(countDownTime * 1000L, 1000L) {
@Override
public void onTick(long millisUntilFinished) {
int time1 = (int) (millisUntilFinished / 1000);
// pitBean.setCount_down(time1);
setTime(time1);
remainingTime = time1;
}
@Override
public void onFinish() {
setTime(0);
remainingTime = 0;
}
};
mCountDownTimer.start();
} catch (Exception e) {
Logger.e("countDownTime", e);
}
}
private String formatTime(int totalSeconds) {
int days = totalSeconds / (24 * 3600);
int remaining = totalSeconds % (24 * 3600);
int hours = remaining / 3600;
remaining %= 3600;
int minutes = remaining / 60;
int seconds = remaining % 60;
StringBuilder sb = new StringBuilder();
if (days > 0) {
sb.append(days).append("");
}
if (hours > 0 || days > 0) {
sb.append(hours).append("小时");
}
if (minutes > 0 || hours > 0 || days > 0) {
sb.append(minutes).append("");
}
sb.append(seconds).append("");
return sb.toString();
}
@SuppressLint("DefaultLocale")
public void setTime(int time) {
if (time == 0) {
mBinding.datingTime.setText("00:00:00");
}
String formattedTime = formatTime(time);
mBinding.datingTime.setText("到期时间:"+formattedTime);
mBinding.datingTime.setVisibility(View.VISIBLE);
}
private void releaseCountDownTimer() {
if (mCountDownTimer != null) {
mCountDownTimer.cancel();
mCountDownTimer = null;
}
}
protected void updateWheatData() {
if (!ObjectUtils.isEmpty(roomInfoResp.getRoom_info().getPit_list())) {
for (RoomPitBean bean : roomInfoResp.getRoom_info().getPit_list()) {
EventBus.getDefault().post(bean);
}
}
RoomBeckoningEvent event = new RoomBeckoningEvent(roomId, roomInfoResp.getRoom_info().getCardiac() == 1);
EventBus.getDefault().post(event);
}
@Override
protected int getLayoutId() {
return R.layout.room_cabin_fragment;
}
@Override
public void roomInfoUpdate(RoomInfoResp resp) {
roomInfoResp = resp;
// updateWheatData();
}
@Override
public void registerWheatViews() {
}
@Override
public void unRegisterWheatViews() {
}
@Override
protected void initListener() {
super.initListener();
}
@Override
public void hideAllWheatMaozi() {
}
@Override
public void showWheatMaoziHuangguan(int wheat) {
}
@Override
public void showWheatMaoziBianbian(int... wheats) {
}
@Override
public int[] collectCurrentCardiacValues() {
int[] cvs = new int[8];
return cvs;
}
@Override
public void quitRoom() {
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).quitRoom();
}
}
}

View File

@@ -0,0 +1,149 @@
package com.example.moduleroom.fragment;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import com.blankj.utilcode.util.FragmentUtils;
import com.example.moduleroom.R;
import com.example.moduleroom.databinding.FragmentRoomChartsBinding;
import com.example.moduletablayout.listener.CustomTabEntity;
import com.example.moduletablayout.listener.OnTabSelectListener;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.adapter.MyFragmentPagerAdapter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import java.util.ArrayList;
import java.util.List;
/**
*@author qx
*@data 2025/6/10
*@description: 房间排行榜
*/
public class RoomChartsFragment extends BaseMvpDialogFragment<IPresenter, FragmentRoomChartsBinding> {
private String mRoomId;
public static final int TYPE_CHARM = 1;//魅力榜
public static final int TYPE_WEALTH = 2;//财富榜
private int type = TYPE_CHARM;
private int childType = RankingChildFragment.TYPE_DATA;
public static RoomChartsFragment newInstance(String roomId) {
RoomChartsFragment roomRankingFragment = new RoomChartsFragment();
Bundle bundle = new Bundle();
bundle.putString("roomId", roomId);
roomRankingFragment.setArguments(bundle);
return roomRankingFragment;
}
@Override
protected IPresenter bindPresenter() {
return null;
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
window.setGravity(Gravity.BOTTOM);
WindowManager.LayoutParams lp = window.getAttributes();
lp.dimAmount = 0.4f;
int screenHeight = getResources().getDisplayMetrics().heightPixels;
lp.height = (int) (screenHeight * 0.8f); // 80% 高度
lp.width = WindowManager.LayoutParams.MATCH_PARENT; // 宽度撑满
window.setAttributes(lp);
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
@Override
protected void initData() {
mRoomId = getArguments().getString("roomId");
// FragmentUtils.add(getChildFragmentManager(), RankingChildFragment.newInstance(mRoomId, childType, type), R.id.fl_content);
}
@Override
protected void initView() {
mBinding.slidingTabLayout.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelect(int position) {
childType = ++position;
refresh();
}
@Override
public void onTabReselect(int position) {
}
});
// ArrayList<CustomTabEntity> tabItems = new ArrayList<>();
// tabItems.add(new TabItem("小时榜"));
// tabItems.add(new TabItem("日榜"));
// tabItems.add(new TabItem("周榜"));
String[] title = new String[]{"小时榜", "日榜", "周榜"};
// mBinding.slidingTabLayout.setViewPager(mBinding.vpRankChild, title);
List<Fragment> fragments = new ArrayList<>();
fragments.add(RankingChildFragment.newInstance(mRoomId, childType, type));
fragments.add(RankingChildFragment.newInstance(mRoomId, childType, type));
fragments.add(RankingChildFragment.newInstance(mRoomId, childType, type));
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(fragments, getChildFragmentManager());
mBinding.vpRankChild.setAdapter(myFragmentPagerAdapter);
mBinding.slidingTabLayout.setViewPager(mBinding.vpRankChild, title);
mBinding.tvCharm.setOnClickListener(this::onViewClicked);
mBinding.tvWealth.setOnClickListener(this::onViewClicked);
}
private void refresh() {
// FragmentUtils.replace(getChildFragmentManager(), RankingChildFragment.newInstance(mRoomId, childType, type), R.id.fl_content);
}
public static class TabItem implements CustomTabEntity {
private String title;
public TabItem(String title) {
this.title = title;
}
@Override
public String getTabTitle() {
return title;
}
@Override
public int getTabSelectedIcon() {
return 0;
}
@Override
public int getTabUnselectedIcon() {
return 0;
}
}
public void onViewClicked(View view) {
int id = view.getId();
if (id == R.id.tv_charm) {
type = TYPE_CHARM;//工会
mBinding.tvCharm.setTextColor(getResources().getColor(com.qxcm.moduleutil.R.color.white));
mBinding.tvWealth.setTextColor(getResources().getColor(com.qxcm.moduleutil.R.color.color_DADADA));
mBinding.tvCharm.setTextSize(18);
mBinding.tvWealth.setTextSize(16);
} else {
type = TYPE_WEALTH;//财富
mBinding.tvWealth.setTextColor(getResources().getColor(com.qxcm.moduleutil.R.color.white));
mBinding.tvCharm.setTextColor(getResources().getColor(com.qxcm.moduleutil.R.color.color_DADADA));
mBinding.tvWealth.setTextSize(18);
mBinding.tvCharm.setTextSize(16);
}
refresh();
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room_charts;
}
}

View File

@@ -3,72 +3,542 @@ package com.example.moduleroom.fragment;
import android.Manifest;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import com.blankj.utilcode.util.FragmentUtils;
import com.blankj.utilcode.util.LogUtils;
import com.example.moduleroom.R;
import com.example.moduleroom.activity.RoomActivity;
import com.example.moduleroom.contacts.RoomContacts;
import com.example.moduleroom.databinding.FragmentRoomBinding;
import com.example.moduleroom.dialog.RequestDialogFragment;
import com.example.moduleroom.dialog.RoomGiftDialogFragment;
import com.example.moduleroom.dialog.RoomPkDialogFragment;
import com.example.moduleroom.dialog.RoomSettingFragment;
import com.example.moduleroom.dialog.SoundEffectsDialogFragment;
import com.example.moduleroom.dialog.WheatFeedingDialogFragment;
import com.example.moduleroom.presenter.RoomPresenter;
import com.qxcm.moduleutil.activity.IPresenter;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.base.BaseMvpFragment;
import com.qxcm.moduleutil.bean.RoomCharmRankBean;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.bean.room.RoomBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomOnline;
import com.qxcm.moduleutil.bean.room.RoomPitBean;
import com.qxcm.moduleutil.dialog.ConfirmDialog;
import com.qxcm.moduleutil.event.RoomWheatEvent;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.utils.SpUtil;
import pub.devrel.easypermissions.EasyPermissions;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
/**
*@author qx
*@data 2025/6/9
*@description:
* @author qx
* @data 2025/6/9
* @description:房间fragment
*/
public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBinding> implements RoomContacts.View {
// public static RoomFragment newInstance(RoomInfoResp roomInfo, String password) {
// Bundle args = new Bundle();
// args.putSerializable("roomInfo", roomInfo);
// args.putString("password", password);
// RoomFragment fragment = new RoomFragment();
// fragment.setArguments(args);
// return fragment;
// }
private RoomInfoResp mRoomInfoResp;
String[] permissions = {Manifest.permission.RECORD_AUDIO};
public static RoomFragment newInstance() {
public static RoomFragment newInstance(RoomInfoResp roomInfo, String password) {
Bundle args = new Bundle();
args.putSerializable("roomInfo", roomInfo);
args.putString("password", password);
RoomFragment fragment = new RoomFragment();
fragment.setArguments(args);
return fragment;
}
private RoomInfoResp mRoomInfoResp;
private String password;
private String roomId;
private int role;
private boolean isSwith;
private boolean aBoolean = true;//上下麦按钮
private boolean voive = false;//声音开关
String[] permissions = {Manifest.permission.RECORD_AUDIO};
private WheatFeedingDialogFragment wheatFeedingDialogFragment;
@Override
public void initArgs(Bundle arguments) {
mRoomInfoResp = new RoomInfoResp();
mRoomInfoResp = (RoomInfoResp) arguments.getSerializable("roomInfo");
password = arguments.getString("password");
roomId = mRoomInfoResp.getRoom_info().getRoom_id();
role = mRoomInfoResp.getRoom_info().getRole();
roomInfo(mRoomInfoResp);
super.initArgs(arguments);
}
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getContext());
}
@Override
public void onDestroy() {
super.onDestroy();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
@Override
public void onStart() {
super.onStart();
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
@Override
protected void initData() {
if (!EasyPermissions.hasPermissions(getActivity(), permissions)) {
EasyPermissions.requestPermissions(this, "请开启录音使用权限",
1, permissions);
}
RoomBean roomBean = mRoomInfoResp.getRoom_info();
// if (!EasyPermissions.hasPermissions(getActivity(), permissions)) {
// EasyPermissions.requestPermissions(this, "请开启录音使用权限",
// 1, permissions);
// }
// if (mRoomInfoResp.getRoom_info().getType_id().equals("1")) {
// if (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) {
// FragmentUtils.add(getChildFragmentManager(), SingSongFragment.newInstance(mRoomInfoResp), R.id.container);
// } else if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")) {
// FragmentUtils.add(getChildFragmentManager(), RoomKtvFragment.newInstance(mRoomInfoResp), R.id.container);
// }
// }
loadSubFragment();
}
// 定义一个可被外部调用的方法
public void refreshData(RoomInfoResp resp) {
// 使用传入的参数刷新界面或逻辑
mRoomInfoResp = new RoomInfoResp();
mRoomInfoResp = resp;
loadSubFragment();
}
private void loadSubFragment() {
if (mRoomInfoResp == null || mRoomInfoResp.getRoom_info() == null) return;
if (mRoomInfoResp.getRoom_info().getType_id().equals("1")) {
if (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) {
replaceNestedFragment(SingSongFragment.newInstance(mRoomInfoResp), R.id.container);
// replaceNestedFragment(RoomPkFragment.newInstance(mRoomInfoResp), R.id.container);
} else if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")) {
replaceNestedFragment(RoomKtvFragment.newInstance(mRoomInfoResp), R.id.container);
}
} else if (mRoomInfoResp.getRoom_info().getType_id().equals("2")) {
if (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) {
replaceNestedFragment(RoomAuctionFragment.newInstance(mRoomInfoResp, 1), R.id.container);
} else if (mRoomInfoResp.getRoom_info().getLabel_id().equals("2")) {
replaceNestedFragment(RoomAuctionFragment.newInstance(mRoomInfoResp, 2), R.id.container);
}
} else if (mRoomInfoResp.getRoom_info().getType_id().equals("6")) {
replaceNestedFragment(RoomCabinFragment.newInstance(mRoomInfoResp), R.id.container);
setviewyc();
}
// FragmentUtils.add(getChildFragmentManager(), PublicScreenEaseChatFragment.newInstance(mRoomInfoResp), R.id.ease_container);
replaceNestedFragment(PublicScreenEaseChatFragment.newInstance(mRoomInfoResp), R.id.ease_container);
// FragmentUtils.add(getChildFragmentManager(), PublicScreenEaseChatFragment.newInstance(mRoomInfoResp), R.id.ease_container);
mBinding.inputMenu1.performClick();
instView();
if (mRoomInfoResp.getUser_info().getPit_number() != 0) {
AgoraManager.getInstance(getActivity()).muteLocalAudioStream(false);
} else {
AgoraManager.getInstance(getActivity()).muteLocalAudioStream(true);
}
}
public void setviewyc() {
mBinding.ivSoundEffects.setVisibility(View.GONE);
mBinding.ivWheatFeeding.setVisibility(View.GONE);
}
public void replaceNestedFragment(@NonNull Fragment newFragment, int containerId) {
String tag = newFragment.getClass().getSimpleName(); // 使用类名作为 tag
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
// 查找当前容器中的 Fragment可选
Fragment currentFragment = getChildFragmentManager().findFragmentById(containerId);
if (currentFragment != null) {
if (tag.equals(currentFragment.getClass().getSimpleName())) {
return; // 跳过相同类型替换
}
transaction.remove(currentFragment); // 先移除旧 Fragment
}
// 添加新 Fragment 并带上 tag
transaction.add(containerId, newFragment, tag)
.commitAllowingStateLoss();
// transaction.add(containerId, newFragment, tag)
// .addToBackStack(tag) // 可选:加入回退栈
// .commitAllowingStateLoss();
}
public void updateWheatStatus(RoomPitBean roomPitBean, int pit, boolean isOccupied, boolean isMine) {
mRoomInfoResp.getRoom_info().getPit_list().set(pit - 1, roomPitBean);
if (isOccupied && isMine) {//上麦,并且是自己
mRoomInfoResp.getUser_info().setPit_number(pit);
switchMic(2);
} else if (!isOccupied && isMine) { //下麦,并且是自己
mRoomInfoResp.getUser_info().setPit_number(0);
}
if (isMine) {
instView();
}
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).upRoomInfo(mRoomInfoResp);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(RoomBean messageEvent) {
mRoomInfoResp.setRoom_info(messageEvent);
}
private void instView() {
if (mRoomInfoResp.getUser_info().getPit_number() != 0) {
aBoolean = false;
mBinding.ivWheatFeeding.setImageResource(com.qxcm.moduleutil.R.mipmap.room_wheat_feeding_up);
} else {
aBoolean = true;
mBinding.ivWheatFeeding.setImageResource(com.qxcm.moduleutil.R.mipmap.room_wheat_feeding);
}
setRoleType(mRoomInfoResp.getUser_info().getPit_number() == 9 ?
(mRoomInfoResp.getUser_info().getIs_room_owner() != 0 ? 1 :
mRoomInfoResp.getUser_info().getIs_host() != 0 ? 2 : 0)
: 0, mRoomInfoResp.getUser_info().getPit_number());
// for (RoomPitBean roomPitBean : mRoomInfoResp.getRoom_info().getPit_list()){
if (mRoomInfoResp.getUser_info().getPit_number() == 9) {
mBinding.ivSoundEffects.setVisibility(View.VISIBLE);
} else {
mBinding.ivSoundEffects.setVisibility(View.GONE);
}
// }
if (mRoomInfoResp.getUser_info().getUser_id().equals(SpUtil.getUserId() + "") && mRoomInfoResp.getUser_info().getPit_number() ==9
&&mRoomInfoResp.getRoom_info().getType_id().equals("1") && mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) {
mBinding.rlMore.setVisibility(View.VISIBLE);
}else {
mBinding.rlMore.setVisibility(View.GONE);
}
FragmentUtils.add(getChildFragmentManager(), SingSongFragment.newInstance(mRoomInfoResp), R.id.container);
}
@Override
protected void initView() {
mBinding.ivChat.setOnClickListener(this::onViewClicked);
mBinding.llInput.setOnClickListener(this::onViewClicked);
mBinding.rlMisc.setOnClickListener(this::onViewClicked);
mBinding.rlGift.setOnClickListener(this::onViewClicked);
mBinding.ivSoundEffects.setOnClickListener(this::onViewClicked);
mBinding.ivWheatFeeding.setOnClickListener(this::onViewClicked);
mBinding.rlMic.setOnClickListener(this::onViewClicked);
mBinding.rlSett.setOnClickListener(this::onViewClicked);
mBinding.rlVoive.setOnClickListener(this::onViewClicked);
mBinding.rlMore.setOnClickListener(this::onViewClicked);
}
private void onViewClicked(View view) {
int id = view.getId();
if (id == R.id.iv_chat) {
if (mRoomInfoResp.getUser_info().getIs_mute().equals("1")) {
ToastUtils.show("您已经被禁言");
} else {
mBinding.llInput.setVisibility(View.VISIBLE);
mBinding.inputMenu1.bringToFront(); // 强制将该 View 置于最上层
mBinding.inputMenu1.show();
}
} else if (id == R.id.ll_input) {
mBinding.llInput.setVisibility(View.GONE);
mBinding.inputMenu1.dismiss();
} else if (id == R.id.rl_misc) {//设置点歌
if (mRoomInfoResp.getRoom_info().getLabel_id().equals("1")) {
queren();
} else {
RequestDialogFragment.show(roomId, mRoomInfoResp, getChildFragmentManager());
}
} else if (id == R.id.rl_gift) {
RoomGiftDialogFragment.show(mRoomInfoResp, null, roomId, getChildFragmentManager());
} else if (id == R.id.iv_sound_effects) {
SoundEffectsDialogFragment.show(roomId, getChildFragmentManager());
} else if (id == R.id.iv_wheat_feeding) {
if (mRoomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1")) {
// WheatFeedingDialogFragment.show(roomId, getChildFragmentManager());
showWheatFeedingDialog(roomId, mRoomInfoResp.getUser_info().getPit_number() == 9 || mRoomInfoResp.getUser_info().getIs_room_owner() == 1 ? 1 : 2);
} else {
if (aBoolean) {
mBinding.ivWheatFeeding.setImageResource(com.qxcm.moduleutil.R.mipmap.room_wheat_feeding_up);
MvpPre.applyPit(roomId, "");
aBoolean = false;
} else {
mBinding.ivWheatFeeding.setImageResource(com.qxcm.moduleutil.R.mipmap.room_wheat_feeding);
MvpPre.downPit(roomId, "");
aBoolean = true;
}
}
} else if (id == R.id.rl_mic) {
if (mRoomInfoResp.getUser_info().getIs_mute_pit().equals("1")) {
ToastUtils.show("您被禁麦了");
} else {
if (isSwith) {
switchMic(1);
} else {
switchMic(2);
}
}
} else if (id == R.id.rl_sett) {//房间设置
RoomSettingFragment.show(mRoomInfoResp, getChildFragmentManager());
} else if (id == R.id.rl_voive) {
if (voive) {
mBinding.imVoive.setImageResource(com.qxcm.moduleutil.R.mipmap.room_voice_g);
voive = false;
} else {
mBinding.imVoive.setImageResource(com.qxcm.moduleutil.R.mipmap.room_voice_kg);
voive = true;
}
AgoraManager.getInstance(getActivity()).muteSpeaker(!voive);
}else if (id == R.id.rl_more){//点击PK
RoomPkDialogFragment.newInstance(roomId,SpUtil.getUserId()+"",mRoomInfoResp.getRoom_info().getIs_pk()).show(getChildFragmentManager(),"RoomPkDialogFragment");
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(RoomWheatEvent messageEvent) {
if (messageEvent.getRoomId().equals(roomId)) {
if (messageEvent.isOccupied()) {
mBinding.ivWheatFeeding.setImageResource(com.qxcm.moduleutil.R.mipmap.room_wheat_feeding_up);
aBoolean = false;
} else {
mBinding.ivWheatFeeding.setImageResource(com.qxcm.moduleutil.R.mipmap.room_wheat_feeding);
aBoolean = true;
}
}
}
private void queren() {
// 创建并显示确认对话框
new ConfirmDialog(getActivity(),
"提示",
"您将要发起点歌申请?",
"确认",
"取消",
v -> {
// 点击“确认”按钮时执行删除操作
MvpPre.applySong(roomId);
},
v -> {
// 点击“取消”按钮时什么都不做
},false,0).show();
}
public void showWheatFeedingDialog(String roomId, int displayMode) {
wheatFeedingDialogFragment = new WheatFeedingDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", roomId);
args.putInt("displayMode", displayMode);
wheatFeedingDialogFragment.setArguments(args);
wheatFeedingDialogFragment.show(getChildFragmentManager(), "WheatFeedingDialogFragment");
}
public void updateWheatFeedingDisplayMode(int newDisplayMode) {
if (wheatFeedingDialogFragment != null && wheatFeedingDialogFragment.isVisible()) {
wheatFeedingDialogFragment.updateDisplayMode(newDisplayMode);
}
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room;
}
@Override
public void roomInfo(RoomInfoResp resp) {
mRoomInfoResp = resp;
}
@Override
public void showPasswordDialog() {
}
@Override
public void enterFail() {
}
@Override
public void getRoomOnline(RoomOnline onlineBean) {
}
@Override
public void applyPit() {
}
@Override
public void downPit() {
}
@Override
public void applySong() {
}
@Override
public void agreeSong() {
}
@Override
public void postRoomInfo(RoomInfoResp resp) {
LogUtils.e("@@@@", resp);
}
@Override
public void getCharmRank(List<RoomCharmRankBean> list) {
}
@Override
public void changeSong() {
}
@Override
public void hostUserPit() {
}
@Override
public void quitRoom() {
}
@Override
public void userGuanzSuccess(String s) {
}
@Override
public void acceptPk() {
}
public void setRoleType(int roleType, int pit_number) {
RelativeLayout rl_voive = mBinding.rlVoive;
RelativeLayout rl_mic = mBinding.rlMic;
RelativeLayout rl_more = mBinding.rlMore;
RelativeLayout rl_misc = mBinding.rlMisc;
// 默认隐藏所有按钮
rl_voive.setVisibility(View.GONE);//声音
rl_more.setVisibility(View.GONE);//PK
rl_misc.setVisibility(View.GONE); //音乐
rl_mic.setVisibility(View.GONE); // 麦克风
switch (roleType) {
case 2: // 主持人
rl_voive.setVisibility(View.VISIBLE);
rl_mic.setVisibility(pit_number != 0 ? View.VISIBLE : View.GONE);
rl_more.setVisibility(pit_number == 9 ? View.VISIBLE : View.GONE);
rl_misc.setVisibility(View.VISIBLE);
break;
case 1: // 房主
rl_voive.setVisibility(View.VISIBLE);
rl_mic.setVisibility(pit_number != 0 ? View.VISIBLE : View.GONE);
rl_more.setVisibility(pit_number == 9 ? View.VISIBLE : View.GONE);
rl_misc.setVisibility(View.VISIBLE);
break;
case 0: // 观众
rl_voive.setVisibility(View.VISIBLE);
rl_mic.setVisibility(pit_number != 0 ? View.VISIBLE : View.GONE);
rl_misc.setVisibility(View.VISIBLE);
break;
default:
break;
}
}
/**
* 设置是否打开麦克风
*
* @param type
*/
// @Override
public void switchMic(int type) {
// mRoomInfoResp.getUser_info().setVoice(type);
if (type == 1) {
mBinding.ivMic.setImageResource(com.qxcm.moduleutil.R.mipmap.room_microphone);
AgoraManager.getInstance(getContext()).setLocalAudioEnabled(true);
isSwith = false;
AgoraManager.getInstance(getActivity()).muteLocalAudioStream(false);
// AgoraManager.getInstance(getActivity()).setLocalAudioEnabled( true);
} else {
mBinding.ivMic.setImageResource(com.qxcm.moduleutil.R.mipmap.room_microphone_off);
AgoraManager.getInstance(getContext()).setLocalAudioEnabled(false);
AgoraManager.getInstance(getActivity()).muteLocalAudioStream(false);
isSwith = true;
// AgoraManager.getInstance(getActivity()).muteLocalAudioStream(true);
// AgoraManager.getInstance(getActivity()).setLocalAudioEnabled( false);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(RoomMessageEvent messageEvent) {
if (messageEvent.getMsgType() == 123) {
// // 获取 PublicScreenEaseChatFragment 实例
PublicScreenEaseChatFragment publicScreenEaseChatFragment = (PublicScreenEaseChatFragment) getChildFragmentManager()
.findFragmentByTag("PublicScreenEaseChatFragment");
if (publicScreenEaseChatFragment != null) {
// 调用 someMethod 方法
publicScreenEaseChatFragment.someMethod();
}
} else if (messageEvent.getMsgType() == 1004) {
// setRoleType(messageEvent.getRoleType(), messageEvent.getPit_number());
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(UserInfo messageEvent) {
mBinding.llInput.setVisibility(View.VISIBLE);
mBinding.inputMenu1.bringToFront(); // 强制将该 View 置于最上层
mBinding.inputMenu1.show();
mBinding.inputMenu1.setText("@" + messageEvent.getNickname());
}
}

View File

@@ -0,0 +1,609 @@
package com.example.moduleroom.fragment;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ToastUtils;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.example.moduleroom.R;
import com.example.moduleroom.activity.RoomActivity;
import com.example.moduleroom.contacts.RoomContacts;
import com.example.moduleroom.databinding.FragmentRoomKtvBinding;
import com.example.moduleroom.dialog.RoomGiftDialogFragment;
import com.example.moduleroom.dialog.RoomOnlineDialogFragment;
import com.example.moduleroom.dialog.RoomUserInfoFragment;
import com.example.moduleroom.presenter.RoomPresenter;
import com.qxcm.moduleutil.base.BaseMvpFragment;
import com.qxcm.moduleutil.bean.MusicSongBean;
import com.qxcm.moduleutil.bean.RoomCharmRankBean;
import com.qxcm.moduleutil.bean.RoomMessageEvent;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomOnline;
import com.qxcm.moduleutil.bean.room.RoomPitBean;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.rtc.MusicFileBean;
import com.qxcm.moduleutil.rtc.MusicPlayBean;
import com.qxcm.moduleutil.utils.ImageUtils;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.widget.RoomDefaultWheatView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.List;
import io.agora.karaoke_view.v11.KaraokeEvent;
import io.agora.karaoke_view.v11.KaraokeView;
import io.agora.karaoke_view.v11.model.LyricsLineModel;
import io.agora.karaoke_view.v11.model.LyricsModel;
/**
* @author qx
* @data 2025/6/18
* @description:点唱模式
*/
public class RoomKtvFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomKtvBinding> implements RoomContacts.View {
private RoomInfoResp roomInfoResp;
private KaraokeView mKaraokeView;
private boolean isRotate = true;
private String did;
private String duration;
private MusicSongBean musicSongBean;
BaseQuickAdapter<RoomCharmRankBean, BaseViewHolder> adapter;
private RoomOnline online;
public static RoomKtvFragment newInstance(RoomInfoResp roomInfoResp) {
RoomKtvFragment fragment = new RoomKtvFragment();
Bundle args = new Bundle();
args.putSerializable("roomInfo", roomInfoResp);
fragment.setArguments(args);
return fragment;
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfo");
}
@Override
public void onStart() {
super.onStart();
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
@Override
public void onStop() {
super.onStop();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getActivity());
}
@Override
protected void initData() {
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setvisibTop(true);
}
MvpPre.getCharmRank(roomInfoResp.getRoom_info().getRoom_id());
mKaraokeView = new KaraokeView(mBinding.lyricsView, null);
mKaraokeView.setKaraokeEvent(new KaraokeEvent() {
@Override
public void onDragTo(KaraokeView view, long progress) {
mKaraokeView.setProgress(progress);
}
@Override
public void onRefPitchUpdate(float refPitch, int numberOfRefPitches) {
}
@Override
public void onLineFinished(KaraokeView view, LyricsLineModel line, int score, int cumulativeScore, int index, int numberOfLines) {
}
});
if (roomInfoResp.getSong_user_info() != null) {
AgoraManager.getInstance(getActivity()).stopMuisc();
if (roomInfoResp.getSong_user_info().getUser_id().equals(SpUtil.getUserId() + "")) {
did = roomInfoResp.getSong_user_info().getDid();
AgoraManager.getInstance(getActivity()).isPreload(Long.parseLong(roomInfoResp.getSong_user_info().getSong_code()), 1);
} else {
AgoraManager.getInstance(getActivity()).isPreload(Long.parseLong(roomInfoResp.getSong_user_info().getSong_code()), 2);
}
musicSongBean = roomInfoResp.getSong_user_info();
duration = roomInfoResp.getSong_user_info().getDuration();
mBinding.muName.setText(roomInfoResp.getSong_user_info().getSong_name());
ImageUtils.loadHeadCC(roomInfoResp.getSong_user_info().getPoster(), mBinding.muBj);
ImageUtils.loadHeadCC(roomInfoResp.getSong_user_info().getPoster(), mBinding.musicPoster);
RoomDefaultWheatView roomDefaultWheatView = mBinding.muYc;
RoomPitBean pitBean = new RoomPitBean();
pitBean.setPit_number("-1");
pitBean.setAvatar(roomInfoResp.getSong_user_info().getAvatar());
pitBean.setNickname(roomInfoResp.getSong_user_info().getNickname());
pitBean.setUser_id(roomInfoResp.getSong_user_info().getUser_id());
pitBean.setCharm(roomInfoResp.getSong_user_info().getCharm());
roomDefaultWheatView.setData(pitBean);
} else {
RoomDefaultWheatView roomDefaultWheatView = mBinding.muYc;
RoomPitBean pitBean = new RoomPitBean();
pitBean.setPit_number("-1");
roomDefaultWheatView.setData(pitBean);
}
if (roomInfoResp.getNextInfo() != null) {
mBinding.muXName.setText(roomInfoResp.getNextInfo().getSong_name());
}
if (roomInfoResp.getRoom_info().getPit_list() != null && roomInfoResp.getRoom_info().getPit_list().size() > 0) {
for (RoomPitBean roomPitBean : roomInfoResp.getRoom_info().getPit_list()) {
if (roomPitBean.getPit_number().equals("9")) {
RoomDefaultWheatView roomDefaultWheatView = mBinding.muZc;
roomDefaultWheatView.setData(roomPitBean);
} else if (roomPitBean.getPit_number().equals("10")) {
RoomDefaultWheatView roomDefaultWheatView = mBinding.muJb;
roomDefaultWheatView.setData(roomPitBean);
}
}
}
sv();
}
private void sv(){
RoomDefaultWheatView roomDefaultWheatView = mBinding.muZc;
if (roomInfoResp.getSong_user_info() != null) {
if (roomInfoResp.getSong_user_info().getIs_hot()==1) {
setVisibilityView(1);
} else if (roomInfoResp.getSong_user_info().getUser_id().equals(SpUtil.getUserId() + "")) {
setVisibilityView(2);
} else if (roomInfoResp.getUser_info().getIs_host() == 1 && roomInfoResp.getUser_info().getPit_number() == 9) {
setVisibilityView(1);
} else {
setVisibilityView(3);
}
}else {
if (roomInfoResp.getUser_info().getIs_host() == 1 && roomInfoResp.getUser_info().getPit_number() == 9){
setVisibilityView(1);
}else {
setVisibilityView(3);
}
}
if (roomDefaultWheatView!=null){
if (roomDefaultWheatView.getUserId().equals(SpUtil.getUserId()+"")){
setVisibilityView(1);
}
}
}
@Override
protected void initView() {
mBinding.lyricsView.setStartOfVerseIndicatorColor(getResources().getColor(com.qxcm.moduleutil.R.color.color_0DFFB9));
// mBinding.lyricsView.setStartOfVerseIndicatorPaddingTop(20f);
mBinding.lyricsView.setStartOfVerseIndicatorRadius(6f);
mBinding.lyricsView.enableStartOfVerseIndicator(true);
mBinding.lyricsView.setActiveLineUpcomingTextColor(getResources().getColor(com.qxcm.moduleutil.R.color.color_0DFFB9));
mBinding.lyricsView.setCurrentLineHighlightedTextColor(getResources().getColor(com.qxcm.moduleutil.R.color.color_0DFFB9));
mBinding.lyricsView.setCurrentLineTextColor(getResources().getColor(com.qxcm.moduleutil.R.color.color_0DFFB9));
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
mBinding.muName.setText("暂无歌曲");
mBinding.muXName.setText("暂无歌曲");
startRotateAnimation();
mBinding.llBz.setOnClickListener(this::onClick);
mBinding.llDs.setOnClickListener(this::onClick);
mBinding.llJs.setOnClickListener(this::onClick);
mBinding.llQg.setOnClickListener(this::onClick);
mBinding.llSz.setOnClickListener(this::onClick);
adapter = new BaseQuickAdapter<RoomCharmRankBean, BaseViewHolder>(R.layout.item_room_charm_rank) {
@Override
protected void convert(BaseViewHolder helper, RoomCharmRankBean item) {
RoomPitBean bean = new RoomPitBean();
bean.setUser_id(item.getUser_id());
bean.setRoom_id(roomInfoResp.getRoom_info().getRoom_id());
bean.setNickname(item.getNickname());
bean.setAvatar(item.getAvatar());
bean.setDress(item.getDress());
bean.setCharm(item.getCharm());
bean.setPit_number("0");
RoomDefaultWheatView mu_rank = helper.getView(R.id.mu_rank);
mu_rank.setData(bean);
mu_rank.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RoomDefaultWheatView roomDefaultWheatView = (RoomDefaultWheatView) v;
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), roomDefaultWheatView.getUserId(),roomDefaultWheatView.pitNumber, getHostUser(),false,getChildFragmentManager());
}
});
}
};
mBinding.recyclerView.setAdapter(adapter);
AgoraManager.getInstance(getActivity()).selectAudioTrack(1);
isRotate = true;
RoomDefaultWheatView muYc = mBinding.muYc;
muYc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!muYc.getUserId().equals("")) {
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), muYc.getUserId(),muYc.pitNumber,getHostUser(),false, getChildFragmentManager());
}
}
});
RoomDefaultWheatView muZc = mBinding.muZc;
muZc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!muZc.getUserId().equals("")) {
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), muZc.getUserId(),muZc.pitNumber,getHostUser(),false, getChildFragmentManager());
}else {
MvpPre.applyPit(roomInfoResp.getRoom_info().getRoom_id(), "9");
}
}
});
RoomDefaultWheatView muJb = mBinding.muJb;
muJb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!muJb.getUserId().equals("")) {
RoomUserInfoFragment.show(roomInfoResp.getRoom_info().getRoom_id(), muJb.getUserId(),muJb.pitNumber,getHostUser(),false, getChildFragmentManager());
}else {
RoomOnlineDialogFragment.show(roomInfoResp.getRoom_info().getRoom_id(), "10", getChildFragmentManager());
}
}
});
}
/**
* 这是判断当前用户是否是麦上房主、管理员、主持,不在主持麦的都是不同用户
* @return
*/
private int getHostUser(){
if (roomInfoResp.getUser_info().getPit_number()==9){
if (roomInfoResp.getUser_info().getIs_room_owner()==1){
return 1;
}else if (roomInfoResp.getUser_info().getIs_management()==1){
return 2;
}else {
return 3;
}
}
return 0;
}
private void setVisibilityView(int type) {
if (type == 1) {
mBinding.llBz.setVisibility(View.VISIBLE);
mBinding.llDs.setVisibility(View.VISIBLE);
mBinding.llJs.setVisibility(View.VISIBLE);
mBinding.llQg.setVisibility(View.VISIBLE);
mBinding.llSz.setVisibility(View.GONE);
} else if (type == 2) {
mBinding.llBz.setVisibility(View.VISIBLE);
mBinding.llDs.setVisibility(View.GONE);
mBinding.llJs.setVisibility(View.GONE);
mBinding.llQg.setVisibility(View.VISIBLE);
mBinding.llSz.setVisibility(View.GONE);
} else if (type == 3) {
mBinding.llBz.setVisibility(View.GONE);
mBinding.llDs.setVisibility(View.VISIBLE);
mBinding.llJs.setVisibility(View.GONE);
mBinding.llQg.setVisibility(View.GONE);
mBinding.llSz.setVisibility(View.GONE);
}
}
private void onClick(View view) {
int id = view.getId();
if (id == R.id.ll_js) {
MvpPre.endSong(roomInfoResp.getRoom_info().getRoom_id());
} else if (id == R.id.ll_sz) {
} else if (id == R.id.ll_qg) {
if (did == null || did.equals("")) {
ToastUtils.showShort("暂时没有歌曲");
return;
}
AgoraManager.getInstance(getActivity()).stopMuisc();
MvpPre.changeSong(roomInfoResp.getRoom_info().getRoom_id(), did);
} else if (id == R.id.ll_ds) {
UserInfo userInfo = new UserInfo();
userInfo.setAvatar(roomInfoResp.getSong_user_info().getAvatar());
userInfo.setNickname(roomInfoResp.getSong_user_info().getNickname());
userInfo.setUser_id(Integer.parseInt(roomInfoResp.getSong_user_info().getUser_id()));
userInfo.setPit_number("0");
RoomGiftDialogFragment.show( null,userInfo, roomInfoResp.getRoom_info().getRoom_id(),getParentFragmentManager());
} else if (id == R.id.ll_bz) {
if (isRotate) {
AgoraManager.getInstance(getActivity()).selectAudioTrack(0);
mBinding.imBz.setImageResource(com.qxcm.moduleutil.R.mipmap.accompany_on);
mBinding.tvBz.setText("原唱");
isRotate = false;
} else {
AgoraManager.getInstance(getActivity()).selectAudioTrack(1);
mBinding.imBz.setImageResource(com.qxcm.moduleutil.R.mipmap.accompany_off);
mBinding.tvBz.setText("伴奏");
isRotate = true;
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
endRotateAnimation();
AgoraManager.getInstance(getActivity()).destroy();
}
//开始旋转
public void startRotateAnimation() {
Animation rotateAnimation = AnimationUtils.loadAnimation(getContext(), com.qxcm.moduleutil.R.anim.image_rotate);
LinearInterpolator lin = new LinearInterpolator();
rotateAnimation.setInterpolator(lin);
mBinding.muBj.setAnimation(rotateAnimation);
}
//关闭旋转
public void endRotateAnimation() {
mBinding.muBj.clearAnimation();
mBinding.muBj.setAnimation(null);
}
@Override
protected int getLayoutId() {
return R.layout.fragment_room_ktv;
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(MusicFileBean messageEvent) {
LyricsModel mLyricsModel = KaraokeView.parseLyricsData(messageEvent.getFileData());
if (mLyricsModel != null) {
mKaraokeView.setLyricsData(mLyricsModel);
mBinding.lyricsView.setVisibility(View.VISIBLE);
mBinding.tvJz.setVisibility(View.GONE);
} else {
mBinding.lyricsView.setVisibility(View.GONE);
mBinding.tvJz.setVisibility(View.VISIBLE);
}
// mBinding.muName.setText(mLyricsModel.title);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(MusicPlayBean messageEvent) {
mKaraokeView.setProgress(messageEvent.getPosition());
qiegSta(messageEvent.getPosition());
}
/**
* 自动切歌
*
* @param position
*/
private void qiegSta(long position) {
if (musicSongBean != null) {
if (musicSongBean.getUser_id().equals(SpUtil.getUserId() + "")) {
if (!musicSongBean.getDuration().isEmpty()) {
position += 1000;
double duration = Math.ceil(position / 1000);
if (duration >= Double.parseDouble(musicSongBean.getDuration())) {
AgoraManager.getInstance(getActivity()).stopMuisc();
MvpPre.changeSong(roomInfoResp.getRoom_info().getRoom_id(), did);
}
}
}
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().unregister(this);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void roomInfoEvent(RoomMessageEvent messageEvent) {
if (messageEvent.getMsgType() == 1013) {
LogUtils.e("@@", messageEvent);
if (messageEvent.getText().getAction() == 3) {
if (messageEvent.getText().getNextInfo() != null) {
mBinding.muXName.setText(messageEvent.getText().getNextInfo().getSong_name());
} else {
mBinding.muXName.setText("暂无歌曲");
}
} else if (messageEvent.getText().getAction() == 2) {
if (messageEvent.getText().getSongInfo() != null) {
musicSongBean = messageEvent.getText().getSongInfo();
did = messageEvent.getText().getSongInfo().getDid();
duration = messageEvent.getText().getSongInfo().getDuration();
mBinding.muName.setText(messageEvent.getText().getSongInfo().getSong_name());
ImageUtils.loadHeadCC(messageEvent.getText().getSongInfo().getPoster(), mBinding.musicPoster);
ImageUtils.loadHeadCC(messageEvent.getText().getSongInfo().getPoster(), mBinding.muBj);
RoomDefaultWheatView roomDefaultWheatView = mBinding.muYc;
RoomPitBean pitBean = new RoomPitBean();
pitBean.setPit_number("-1");
pitBean.setAvatar(messageEvent.getText().getSongInfo().getAvatar());
pitBean.setNickname(messageEvent.getText().getSongInfo().getNickname());
pitBean.setUser_id(messageEvent.getText().getSongInfo().getUser_id());
pitBean.setCharm(messageEvent.getText().getSongInfo().getCharm());
roomDefaultWheatView.setData(pitBean);
roomInfoResp.setSong_user_info(musicSongBean);
if (messageEvent.getText().getSongInfo().getUser_id().equals(SpUtil.getUserId() + "")) {
AgoraManager.getInstance(getActivity()).stopMuisc();
LogUtils.e("推送过来的code", messageEvent.getText().getSongInfo().getSong_code());
AgoraManager.getInstance(getActivity()).isPreload(Long.parseLong(messageEvent.getText().getSongInfo().getSong_code()), 1);
} else {
AgoraManager.getInstance(getActivity()).stopMuisc();
AgoraManager.getInstance(getActivity()).isPreload(Long.parseLong(messageEvent.getText().getSongInfo().getSong_code()), 2);
}
if (messageEvent.getText().getSongInfo().getUser_id().equals(SpUtil.getUserId() + "") && roomInfoResp.getUser_info().getIs_host() == 1 && roomInfoResp.getUser_info().getPit_number() == 9) {
setVisibilityView(1);
} else if (messageEvent.getText().getSongInfo().getUser_id().equals(SpUtil.getUserId() + "")) {
setVisibilityView(2);
} else if (roomInfoResp.getUser_info().getIs_host() == 1 && roomInfoResp.getUser_info().getPit_number() == 9) {
setVisibilityView(1);
} else {
setVisibilityView(3);
}
} else {
did = "";
mBinding.muName.setText("");
}
if (messageEvent.getText().getNextInfo() != null) {
mBinding.muXName.setText(messageEvent.getText().getNextInfo().getSong_name());
} else {
mBinding.muXName.setText("");
}
}
} else if (messageEvent.getMsgType() == 1003) {
if (messageEvent.getText().getPit_number().equals("9") || messageEvent.getText().getPit_number().equals("10")) {
RoomPitBean pitBean =new RoomPitBean();
pitBean.setPit_number(messageEvent.getText().getPit_number());
pitBean.setUser_id(messageEvent.getText().getFromUserInfo().getUser_id() + "");
pitBean.setAvatar(messageEvent.getText().getFromUserInfo().getAvatar());
pitBean.setNickname(messageEvent.getText().getFromUserInfo().getNickname());
pitBean.setSex(messageEvent.getText().getFromUserInfo().getSex() + "");
pitBean.setCharm(messageEvent.getText().getFromUserInfo().getCharm());
if (pitBean.getPit_number().equals("9")) {
RoomDefaultWheatView roomDefaultWheatView = mBinding.muZc;
roomDefaultWheatView.setData(pitBean);
} else if (pitBean.getPit_number().equals("10")) {
RoomDefaultWheatView roomDefaultWheatView = mBinding.muJb;
roomDefaultWheatView.setData(pitBean);
}
}
sv();
}else if (messageEvent.getMsgType() == 1004){
if (messageEvent.getText().getPit_number().equals("9") || messageEvent.getText().getPit_number().equals("10")) {
RoomPitBean pitBean =new RoomPitBean();
pitBean.setPit_number(messageEvent.getText().getPit_number());
pitBean.setUser_id("");
pitBean.setAvatar("");
pitBean.setNickname("");
pitBean.setSex("");
pitBean.setCharm("");
if (pitBean.getPit_number().equals("9")) {
RoomDefaultWheatView roomDefaultWheatView = mBinding.muZc;
roomDefaultWheatView.setData(pitBean);
} else if (pitBean.getPit_number().equals("10")) {
RoomDefaultWheatView roomDefaultWheatView = mBinding.muJb;
roomDefaultWheatView.setData(pitBean);
}
}
sv();
}
else if (messageEvent.getMsgType() == 1019) {
LogUtils.e("1019", messageEvent);
}
}
@Override
public void roomInfo(RoomInfoResp resp) {
}
@Override
public void showPasswordDialog() {
}
@Override
public void enterFail() {
}
@Override
public void getRoomOnline(RoomOnline onlineBean) {
this.online = onlineBean;
}
@Override
public void applyPit() {
}
@Override
public void downPit() {
}
@Override
public void applySong() {
}
@Override
public void agreeSong() {
}
@Override
public void postRoomInfo(RoomInfoResp resp) {
AgoraManager.getInstance(getActivity()).destroy();
}
@Override
public void getCharmRank(List<RoomCharmRankBean> list) {
adapter.setNewData(list);
}
@Override
public void changeSong() {
}
@Override
public void hostUserPit() {
}
@Override
public void quitRoom() {
}
@Override
public void userGuanzSuccess(String s) {
}
@Override
public void acceptPk() {
}
}

View File

@@ -0,0 +1,76 @@
package com.example.moduleroom.fragment;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import com.blankj.utilcode.util.ScreenUtils;
import com.example.moduleroom.R;
import com.qxcm.moduleutil.activity.IPresenter;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.widget.dialog.BaseDialog;
/**
*@author qx
*@data 2025/6/10
*@description: 房间公告展示
*/
public class RoomNoticeDialogFragment extends BaseDialog {
private Context mContext;
private TextView tvTile;
private TextView tvContent;
private ImageView ivClose;
String title, content;
public RoomNoticeDialogFragment(@NonNull Context context) {
super(context);
this.mContext = context;
}
@Override
public int getLayoutId() {
return R.layout.fragment_room_notice_dialog;
}
@Override
public void initView() {
getWindow().setLayout((int) (ScreenUtils.getScreenWidth() * 0.86), ViewGroup.LayoutParams.WRAP_CONTENT);
tvTile=findViewById(R.id.tv_title);
tvContent=findViewById(R.id.tv_content);
ivClose=findViewById(R.id.iv_close);
}
@Override
public void initData() {
ivClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
}
public void setContent(String content) {
tvContent.setText(content);
}
public void setTitle(String title) {
tvTile.setText(title);
}
}

View File

@@ -0,0 +1,121 @@
package com.example.moduleroom.fragment;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import androidx.fragment.app.FragmentManager;
import com.blankj.utilcode.util.ScreenUtils;
import com.example.moduleroom.R;
import com.example.moduleroom.contacts.RoomPasswordSetContacts;
import com.example.moduleroom.databinding.RoomDialogRoomPwSettingBinding;
import com.example.moduleroom.presenter.RoomPasswordSetPresenter;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.base.BaseMvpDialogFragment;
import com.qxcm.moduleutil.event.PasswordInputEvent;
import com.qxcm.moduleutil.event.RoomOutEvent;
import org.greenrobot.eventbus.EventBus;
/**
*@author qx
*@data 2025/6/9
*@description: 输入密码弹窗
*/
public class RoomPasswordSetDialogFragment extends BaseMvpDialogFragment<RoomPasswordSetPresenter, RoomDialogRoomPwSettingBinding> implements RoomPasswordSetContacts.View {
private static final String TAG = "RoomPasswordSetDialogFragment";
private boolean hidePwd;
private String roomId;
public static RoomPasswordSetDialogFragment newInstance(boolean hidePwd, String roomId) {
Bundle args = new Bundle();
args.putBoolean("hidePwd", hidePwd);
args.putString("roomId", roomId);
RoomPasswordSetDialogFragment fragment = new RoomPasswordSetDialogFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void initArgs(Bundle arguments) {
super.initArgs(arguments);
this.hidePwd = arguments.getBoolean("hidePwd");
this.roomId = arguments.getString("roomId");
}
@Override
public int getLayoutId() {
return R.layout.room_dialog_room_pw_setting;
}
@Override
public void initView() {
//是否隐藏密码
if (hidePwd) {
mBinding.txTitle.setText("请输入房间密码");
mBinding.useHintTxt.setVisibility(View.INVISIBLE);
mBinding.gpvPswView.setPasswordVisibility(false);
} else {
mBinding.txTitle.setText("请设置房间密码");
mBinding.useHintTxt.setVisibility(View.VISIBLE);
mBinding.gpvPswView.setPasswordVisibility(true);
}
mBinding.btPw.setOnClickListener(this::onViewClicked);
}
@Override
protected void initDialogStyle(Window window) {
super.initDialogStyle(window);
int width = (int) (ScreenUtils.getScreenWidth() * 341.0 / 375);
window.setLayout(width, WindowManager.LayoutParams.WRAP_CONTENT);
}
@Override
protected RoomPasswordSetPresenter bindPresenter() {
return new RoomPasswordSetPresenter(this, getActivity());
}
@Override
public void initData() {
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (hidePwd) {
EventBus.getDefault().post(new RoomOutEvent());
}
}
public void onViewClicked(View view) {
String passWord = mBinding.gpvPswView.getPassWord();
if (passWord.length() != 4 && passWord.length() > 0) {
ToastUtils.show("请输入完整的密码");
return;
}
if (hidePwd) {
EventBus.getDefault().post(new PasswordInputEvent(passWord));
hidePwd = false;
dismiss();
} else {
MvpPre.setRoomPassword(roomId, passWord);
}
}
@Override
public void roomPasswordSettingSuccess() {
ToastUtils.show("密码设置成功");
dismiss();
}
public void show(FragmentManager manager) {
show(manager, TAG);
}
}

View File

@@ -0,0 +1,55 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.blankj.utilcode.util.ObjectUtils;
import com.example.moduleroom.contacts.BidListContacts;
import com.qxcm.moduleutil.bean.room.RoomAuction;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class BidListPresenter extends BasePresenter<BidListContacts.View> implements BidListContacts.IRoomPre {
public BidListPresenter(BidListContacts.View view, Context context) {
super(view, context);
}
@Override
public void roomAuctionList(String auction_id) {
api.roomAuctionList(auction_id, new BaseObserver<List<RoomAuction.AuctionListBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<RoomAuction.AuctionListBean> auctionListBeans) {
List<RoomAuction.AuctionListBean> lists = auctionListBeans;
if (!ObjectUtils.isEmpty(lists)) {//lists判空
//榜一
if (lists.size() > 0) {
MvpRef.get().setNo1(lists.get(0));
}
//榜二
if (lists.size() > 1) {
MvpRef.get().setNo2(lists.get(1));
}
//榜三
if (lists.size() > 2) {
MvpRef.get().setNo3(lists.get(2));
}
//第四名及后
if (lists.size() > 3) {
MvpRef.get().roomAuctionList(lists.subList(3, lists.size()));
}
}else {
MvpRef.get().setCharmEmpty();
}
}
});
}
}

View File

@@ -0,0 +1,83 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.CardRelationshipContacts;
import com.qxcm.moduleutil.bean.RoomRelationBean;
import com.qxcm.moduleutil.bean.RoomTime;
import com.qxcm.moduleutil.bean.RoonGiftModel;
import com.qxcm.moduleutil.bean.room.AuctionBean;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class CardRelationshipPresenter extends BasePresenter<CardRelationshipContacts.View> implements CardRelationshipContacts.IRoomPre{
public CardRelationshipPresenter(CardRelationshipContacts.View view, Context context) {
super(view, context);
}
@Override
public void roomRelationList(String type) {
api.roomRelationList(type, new BaseObserver<List<RoomRelationBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<RoomRelationBean> roomRelationBeans) {
MvpRef.get().roomRelationList(roomRelationBeans);
}
});
}
@Override
public void getGiftList(String id) {
api.getGiftList(Integer.parseInt(id), new BaseObserver<List<RoonGiftModel>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<RoonGiftModel> roonGiftModels) {
MvpRef.get().setGiftList(roonGiftModels);
}
});
}
@Override
public void roomAuction(String roomId, String userId, String giftId, String relation_id, String auction_type, String time_day) {
api.roomAuction(roomId,userId,giftId,relation_id,auction_type,time_day, new BaseObserver<AuctionBean>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable( d);
}
@Override
public void onNext(AuctionBean auctionBean) {
MvpRef.get().roomAuction(auctionBean);
}
});
}
@Override
public void roomAuctionTime(String gift_id) {
api.roomAuctionTime(gift_id, new BaseObserver<RoomTime>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(RoomTime roomTime) {
MvpRef.get().roomAuctionTime(roomTime);
}
});
}
}

View File

@@ -0,0 +1,120 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import android.util.Log;
import com.blankj.utilcode.util.ObjectUtils;
import com.example.moduleroom.contacts.DataListContacts;
import com.qxcm.moduleutil.base.BaseRoomPresenter;
import com.qxcm.moduleutil.bean.CharmRankingResp;
import java.util.List;
import io.reactivex.disposables.Disposable;
/**
*@author qx
*@data 2025/6/10
*@description: 排行榜
*/
public class DataListPresenter extends BaseRoomPresenter<DataListContacts.View> implements DataListContacts.IRoomDataListPre {
private static final String TAG = "DataListPresenter";
public DataListPresenter(DataListContacts.View view, Context context) {
super(view, context);
}
@Override
public void getCharmListInfo(String roomId, int type) {
// ApiClient.getInstance().getCharmList(roomId, type, new BaseObserver<CharmRankingResp>() {
// @Override
// public void onSubscribe(Disposable d) {
// Log.d(TAG, "onSubscribe: isOK");
// addDisposable(d);
// }
//
// @Override
// public void onNext(CharmRankingResp charmRankingResp) {
// //RxJava + Retrefit + mvp模式
// //charmRankingResp请求成功获取到的结果
// //获取魅力ListsBean数据
// List<CharmRankingResp.ListsBean> lists = charmRankingResp.getLists();
// if (!ObjectUtils.isEmpty(lists)) {//lists判空
// //榜一
// if (lists.size() > 0) {
// MvpRef.get().setNo1(lists.get(0));
// }
// //榜二
// if (lists.size() > 1) {
// MvpRef.get().setNo2(lists.get(1));
// }
// //榜三
// if (lists.size() > 2) {
// MvpRef.get().setNo3(lists.get(2));
// }
// //第四名及后
// if (lists.size() > 3) {
// MvpRef.get().setCharmView(lists.subList(3, lists.size()));
// }
// }else {
// MvpRef.get().setCharmEmpty();
// }
// Log.d(TAG, "onNext: getCharmListInfo isOK");
// }
//
// @Override
// public void onComplete() {
// Log.d(TAG, "onComplete: isOK");
// }
//
// @Override
// public void onError(Throwable e) {
// super.onError(e);
// Log.e(TAG, "onError: getCharmListInfo isError");
// }
// });
}
@Override
public void getWealthListInfo(String roomId, int type) {
// ApiClient.getInstance().getWealthList(roomId, type, new BaseObserver<WealthRankingResp>() {
// @Override
// public void onSubscribe(Disposable d) {
// addDisposable(d);
// }
//
// @Override
// public void onNext(WealthRankingResp wealthRankingResp) {
// //获取财富ListsBean数据
// List<WealthRankingResp.ListsBean> lists = wealthRankingResp.getLists();
// if (!ObjectUtils.isEmpty(lists)) {//lists判空
// //榜一
// if (lists.size() > 0) {
// MvpRef.get().setNo1(lists.get(0));
// }
// //榜二
// if (lists.size() > 1) {
// MvpRef.get().setNo2(lists.get(1));
// }
// //榜三
// if (lists.size() > 2) {
// MvpRef.get().setNo3(lists.get(2));
// }
// //第四名及后
// if (lists.size() > 3) {
// MvpRef.get().setWealthView(lists.subList(3, lists.size()));
// }
// }else {
// MvpRef.get().setWealthEmpty();
// }
// }
//
// @Override
// public void onComplete() {
//
// }
// });
}
}

View File

@@ -0,0 +1,32 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.PkTimeContract;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import io.reactivex.disposables.Disposable;
public class PkTimePresenter extends BasePresenter<PkTimeContract.View> implements PkTimeContract.IRoomPre{
public PkTimePresenter(PkTimeContract.View view, Context context) {
super(view, context);
}
@Override
public void startPk(String pk_id, String pk_times) {
api.startPk(pk_id, pk_times, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
// MvpRef.get().startPk();
}
});
}
}

View File

@@ -0,0 +1,12 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.PublishCommentContacts;
import com.qxcm.moduleutil.presenter.BasePresenter;
public class PublishCommentPresenter extends BasePresenter<PublishCommentContacts.View> implements PublishCommentContacts.IRoomPre {
public PublishCommentPresenter(PublishCommentContacts.View view, Context context) {
super(view, context);
}
}

View File

@@ -0,0 +1,67 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RequestContacts;
import com.qxcm.moduleutil.bean.MusicSongBean;
import com.qxcm.moduleutil.bean.SongMusicBean;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class RequestPresenter extends BasePresenter<RequestContacts.View> implements RequestContacts.IRoomPre{
public RequestPresenter(RequestContacts.View view, Context context) {
super(view, context);
}
@Override
public void songList(String roomId) {
api.songList(roomId, new BaseObserver<List<MusicSongBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<MusicSongBean> musicSongBeans) {
MvpRef.get().songList(musicSongBeans);
}
});
}
@Override
public void upSong(String did, String type) {
api.upSong(did, type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().upSong(s);
}
});
}
@Override
public void song(String roomId, String user_id, String song_code, String song_name, String singer, String poster, String duration) {
api.song(roomId, user_id, song_code, song_name, singer, poster, duration, new BaseObserver<List<SongMusicBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<SongMusicBean> songMusicBeans) {
MvpRef.get().song(songMusicBeans);
}
});
}
}

View File

@@ -0,0 +1,86 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomAuctionContacts;
import com.qxcm.moduleutil.bean.room.AuctionBean;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.http.RetrofitClient;
import com.qxcm.moduleutil.presenter.BasePresenter;
import java.lang.ref.WeakReference;
import io.reactivex.disposables.Disposable;
public class RoomAuctionPresenter extends BasePresenter<RoomAuctionContacts.View> implements RoomAuctionContacts.IRoomDataListPre {
public RoomAuctionPresenter(RoomAuctionContacts.View view, Context context) {
super(view, context);
}
@Override
public void applyPit(String roomId, String pitNumber) {
api.applyPit(roomId, pitNumber, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().applyPit();
}
});
}
@Override
public void roomAuction(String roomId, String userId, String giftId, String relation_id, String auction_type, String time_day) {
api.roomAuction(roomId,userId,giftId,relation_id,auction_type,time_day, new BaseObserver<AuctionBean>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable( d);
}
@Override
public void onNext(AuctionBean auctionBean) {
MvpRef.get().roomAuction(auctionBean);
}
});
}
@Override
public void auctionDelay(String auctionId) {
RetrofitClient.getInstance().auctionDelay(auctionId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().auctionDelay();
}
});
}
@Override
public void auctionEnd(String auctionId) {
RetrofitClient.getInstance().auctionEnd(auctionId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().auctionEnd();
}
});
}
@Override
public void auctionMode(String roomId, String labelId) {
}
}

View File

@@ -0,0 +1,98 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomAuctionContacts;
import com.qxcm.moduleutil.bean.RoomTime;
import com.qxcm.moduleutil.bean.room.AuctionBean;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.http.RetrofitClient;
import com.qxcm.moduleutil.presenter.BasePresenter;
import io.reactivex.disposables.Disposable;
public class RoomAuctionPresenterTow extends BasePresenter<RoomAuctionContacts.View> implements RoomAuctionContacts.IRoomDataListPre {
public RoomAuctionPresenterTow(RoomAuctionContacts.View view, Context context) {
super(view, context);
}
@Override
public void applyPit(String roomId, String pitNumber) {
api.applyPit(roomId, pitNumber, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().applyPit();
}
});
}
@Override
public void roomAuction(String roomId, String userId, String giftId, String relation_id, String auction_type, String time_day) {
api.roomAuction(roomId,userId,giftId,relation_id,auction_type,time_day, new BaseObserver<AuctionBean>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable( d);
}
@Override
public void onNext(AuctionBean auctionBean) {
MvpRef.get().roomAuction(auctionBean);
}
});
}
@Override
public void auctionDelay(String auctionId) {
RetrofitClient.getInstance().auctionDelay(auctionId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
// MvpRef.get().auctionDelay();
}
});
}
@Override
public void auctionEnd(String auctionId) {
RetrofitClient.getInstance().auctionEnd(auctionId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
// MvpRef.get().auctionEnd();
}
});
}
@Override
public void auctionMode(String roomId, String labelId) {
RetrofitClient.getInstance().auctionMode(roomId, labelId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
}
});
}
}

View File

@@ -0,0 +1,86 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomBackgroundContacts;
import com.hjq.toast.ToastUtils;
import com.qxcm.moduleutil.bean.RoomBgBean;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import com.qxcm.moduleutil.utils.oss.OSSOperUtils;
import java.io.File;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class RoomBackgroundPresenter extends BasePresenter<RoomBackgroundContacts.View> implements RoomBackgroundContacts.RoomBackgroudPre {
public RoomBackgroundPresenter(RoomBackgroundContacts.View view, Context context) {
super(view, context);
}
@Override
public void getBackgroundList() {
api.getBackgroundList(new BaseObserver<RoomBgBean>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(RoomBgBean roomBgBeans) {
MvpRef.get().getBackgroundList(roomBgBeans);
}
});
}
@Override
public void uploadFile(File file, int type, int index, int size) {
String url = OSSOperUtils.getPath(file, type);
OSSOperUtils.newInstance().putObjectMethod(url, file.getPath(), new OSSOperUtils.OssCallback() {
@Override
public void onSuccess() {
if (isViewAttach()) {
MvpRef.get().upLoadSuccess(OSSOperUtils.AliYunOSSURLFile + url, type, index, size);
}
}
@Override
public void onFail() {
if (isViewAttach()) {
MvpRef.get().disLoadings();
}
}
});
}
@Override
public void uploadBgImage(String id, String image_url) {
api.uploadBgImage(id, image_url, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().uploadBgImage();
}
});
}
@Override
public void editRoom(String room_id, String room_name, String room_cover, String room_intro, String room_background) {
api.editRoom(room_id, room_name, room_cover, room_intro, room_background, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().editRoom();
}
});
}
}

View File

@@ -0,0 +1,31 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomCabinContacts;
import com.qxcm.moduleutil.base.BaseRoomPresenter;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import io.reactivex.disposables.Disposable;
public class RoomCabinPresenter extends BaseRoomPresenter<RoomCabinContacts.View> implements RoomCabinContacts.IRoomPre{
public RoomCabinPresenter(RoomCabinContacts.View view, Context context) {
super(view, context);
}
@Override
public void quitRoom(String roomId, String userId) {
api.quitRoom(roomId, userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().quitRoom();
}
});
}
}

View File

@@ -0,0 +1,93 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomHostContacts;
import com.qxcm.moduleutil.bean.HostBean;
import com.qxcm.moduleutil.bean.RoomSearchResp;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class RoomHostPresenter extends BasePresenter<RoomHostContacts.View> implements RoomHostContacts.IRoomToolPre {
public RoomHostPresenter(RoomHostContacts.View view, Context context) {
super(view, context);
}
// TODO: 2025/3/15 获取当前房间的主持人列表
@Override
public void clearHostList(String roomId,String type) {
api.getHostList(roomId,type, new BaseObserver<List<HostBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<HostBean> giftModels) {
MvpRef.get().setHostrList(giftModels);
}
});
}
// TODO: 2025/3/15 获取用户信息
@Override
public void setUserHostList(String keyWord,String type) {
api.getSearch(keyWord,type, new BaseObserver<List<RoomSearchResp>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<RoomSearchResp> roomSearchResps) {
MvpRef.get().getUserHostList(roomSearchResps);
}
});
}
// TODO: 2025/3/17 设置收益比例
@Override
public void setPresidedRatio(String room_id,String user_id, String ratio) {
api.setPresidedRatio(room_id,user_id, ratio, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().postPresidedRatio(s);
}
});
}
// TODO: 2025/3/17 添加主持人
@Override
public void postHostAdd(String roomId, String userId,String type,String is_add) {
api.postHostAdd(roomId, userId, type, is_add, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().postHostAdd(s,type,is_add);
}
});
}
}

View File

@@ -0,0 +1,34 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomPasswordSetContacts;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import io.reactivex.disposables.Disposable;
public class RoomPasswordSetPresenter extends BasePresenter<RoomPasswordSetContacts.View> implements RoomPasswordSetContacts.IRoomPasswordSetPre {
public RoomPasswordSetPresenter(RoomPasswordSetContacts.View view, Context context) {
super(view, context);
}
@Override
public void setRoomPassword(String roomId, String password) {
api.updatePassword(roomId, password, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().roomPasswordSettingSuccess();
}
@Override
public void onComplete() {
}
});
}
}

View File

@@ -0,0 +1,65 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomPkContacts;
import com.qxcm.moduleutil.bean.room.RoomBean;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class RoomPkPresenter extends BasePresenter<RoomPkContacts.View> implements RoomPkContacts.IRoomPre {
public RoomPkPresenter(RoomPkContacts.View view, Context context) {
super(view, context);
}
@Override
public void searchPkRoom(String roomId, String page, String limit) {
api.searchPkRoom(roomId, page, limit, new BaseObserver<List<RoomBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<RoomBean> roomBeans) {
MvpRef.get().searchPkRoom(roomBeans);
}
});
}
@Override
public void sendPk(String roomIda, String createUserId, String roomIdb) {
api.sendPk(roomIda, createUserId, roomIdb, new BaseObserver<Object>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(Object o) {
MvpRef.get().sendPk();
}
});
}
@Override
public void refusePk(String roomId, String is_pk) {
api.refusePk(roomId, is_pk, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().refusePk();
}
});
}
}

View File

@@ -2,11 +2,301 @@ package com.example.moduleroom.presenter;
import android.content.Context;
import com.blankj.utilcode.util.ObjectUtils;
import com.example.moduleroom.contacts.RoomContacts;
import com.google.gson.reflect.TypeToken;
import com.qxcm.moduleutil.base.CommonAppContext;
import com.qxcm.moduleutil.bean.RoomCharmRankBean;
import com.qxcm.moduleutil.bean.RoomResultResp;
import com.qxcm.moduleutil.bean.room.Config;
import com.qxcm.moduleutil.bean.room.RoomBean;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.bean.room.RoomOnline;
import com.qxcm.moduleutil.bean.room.RoomOnlineBean;
import com.qxcm.moduleutil.bean.room.RoomPitBean;
import com.qxcm.moduleutil.bean.room.RoomUserBean;
import com.qxcm.moduleutil.http.APIException;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.rtc.RtcConstants;
import com.qxcm.moduleutil.rtc.RtcCore;
import com.qxcm.moduleutil.rtc.RtcDestroyCallback;
import com.qxcm.moduleutil.rtc.RtcManager;
import com.qxcm.moduleutil.utils.GsonUtils;
import com.qxcm.moduleutil.utils.SpUtil;
public class RoomPresenter extends BasePresenter<RoomContacts.View> implements RoomContacts.IRoomPre{
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class RoomPresenter extends BasePresenter<RoomContacts.View> implements RoomContacts.IRoomPre {
public RoomPresenter(RoomContacts.View view, Context context) {
super(view, context);
}
// TODO: 2025/6/10 加入房间
@Override
public void getRoomIn(String roomId, String password) {
// Type listType = new TypeToken<RoomInfoResp>() {}.getType();
// RoomInfoResp restoredRoomModels = GsonUtils.getGSON().fromJson(SpUtil.getRoomInfoResp(), listType);
// if (restoredRoomModels!= null ) {
// MvpRef.get().roomInfo(restoredRoomModels);
// }
api.roomGetIn(roomId, password, new BaseObserver<RoomInfoResp>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(RoomInfoResp resp) {
String appId = CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId();
String token = resp.getUser_info().getAgora_token(); // 如果启用了鉴权才需要
String roomId = resp.getRoom_info().getRoom_id(); // 房间 ID
String rtm_token=resp.getUser_info().getAgora_rtm_token();
SpUtil.setRtmToken(rtm_token);
int uid = SpUtil.getUserId(); // 0 表示由 Agora 自动生成 UID
boolean enableMic = false; // 是否开启麦克风
// 初始化 Agora 并加入房间
AgoraManager.getInstance(getView().getSelfActivity())
.init(appId)
.joinRoom(token, roomId, uid, enableMic);
// RtcCore rtcCore = RtcCore.getInstance(getView().getSelfActivity());
// rtcCore.initAgora(appId);
// 2. 加入房间
// rtcCore.joinRoom(token, roomId, uid, enableMic);
MvpRef.get().roomInfo(resp);
}
@Override
public void onError(Throwable e) {
super.onError(e);
if (e instanceof APIException) {
APIException apiException = (APIException) e;
if (apiException.getCode() == 10000) {
MvpRef.get().showPasswordDialog();
} else {
MvpRef.get().enterFail();
}
} else {
MvpRef.get().enterFail();
}
}
});
}
// TODO: 2025/6/10 在线列表
@Override
public void getRoomOnline(String roomId, String page, String page_limit) {
api.getRoomOnline(roomId, page, page_limit, new BaseObserver<RoomOnline>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(RoomOnline roomOnlineBeans) {
MvpRef.get().getRoomOnline(roomOnlineBeans);
}
});
}
@Override
public void applyPit(String roomId, String pitNumber) {
api.applyPit(roomId, pitNumber, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().applyPit();
}
});
}
@Override
public void downPit(String roomId, String pitNumber) {
api.downPit(roomId, pitNumber, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().downPit();
}
});
}
@Override
public void applySong(String roomId) {
api.applySong(roomId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().applySong();
}
});
}
@Override
public void agreeSong(String roomId, String type) {
api.agreeSong(roomId, type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().agreeSong();
}
});
}
@Override
public void endSong(String roomId) {
api.endSong(roomId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().agreeSong();
}
});
}
@Override
public void postRoomInfo(String roomId) {
api.postRoomInfo(roomId, new BaseObserver<RoomInfoResp>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(RoomInfoResp roomInfoResp) {
String appId = CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId();
String token = roomInfoResp.getUser_info().getAgora_token(); // 如果启用了鉴权才需要
String roomId = roomInfoResp.getRoom_info().getRoom_id(); // 房间 ID
String rtm_token=roomInfoResp.getUser_info().getAgora_rtm_token();
SpUtil.setRtmToken(rtm_token);
int uid = SpUtil.getUserId(); // 0 表示由 Agora 自动生成 UID
boolean enableMic = false; // 是否开启麦克风
MvpRef.get().postRoomInfo(roomInfoResp);
}
});
}
@Override
public void getCharmRank(String roomId) {
api.getCharmRank(roomId, new BaseObserver<List<RoomCharmRankBean>>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(List<RoomCharmRankBean> roomCharmRankBeans) {
MvpRef.get().getCharmRank(roomCharmRankBeans);
}
});
}
@Override
public void changeSong(String roomId, String now_did) {
api.changeSong(roomId, now_did, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().changeSong();
}
});
}
@Override
public void hostUserPit(String roomId, String pitNumber, String userId, String type) {
api.hostUserPit(roomId, pitNumber, userId, type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().hostUserPit();
}
});
}
@Override
public void quitRoom(String roomId, String userId) {
api.quitRoom(roomId, userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().quitRoom();
}
});
}
@Override
public void userGuanz(String userId, String type) {
api.userGuanz(userId,type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().userGuanzSuccess(s);
}
});
}
@Override
public void acceptPk(String pkId, String type) {
api.acceptPk(pkId, type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().acceptPk();
}
});
}
}

View File

@@ -0,0 +1,46 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomSettingContacts;
import com.qxcm.moduleutil.bean.room.RoomSettingBean;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import io.reactivex.disposables.Disposable;
public class RoomSettingPresenter extends BasePresenter<RoomSettingContacts.View> implements RoomSettingContacts.IRoomPre{
public RoomSettingPresenter(RoomSettingContacts.View view, Context context) {
super(view, context);
}
@Override
public void changeRoom(String roomId, String userId, int position, RoomSettingBean bean) {
api.changeRoom(roomId, userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().changeRoomSuccess(s, position,bean);
}
});
}
@Override
public void changeRoomType(String roomId, String type) {
api.changeRoomType(roomId, type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().changeRoomType(string);
}
});
}
}

View File

@@ -0,0 +1,139 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.RoomUserContacts;
import com.qxcm.moduleutil.bean.UserInfo;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import io.reactivex.disposables.Disposable;
public class RoomUserPresenter extends BasePresenter<RoomUserContacts.View> implements RoomUserContacts.IEmotionRoomPre {
public RoomUserPresenter(RoomUserContacts.View view, Context context) {
super(view, context);
}
@Override
public void getRoomUserInfo(String roomId, String userId) {
api.getRoomUserInfo(roomId, userId, new BaseObserver<UserInfo>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(UserInfo userInfo) {
MvpRef.get().getRoomUserInfo(userInfo);
}
});
}
@Override
public void downPit(String roomId, String pitNumber) {
api.downPit(roomId, pitNumber, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().downPit();
}
});
}
@Override
public void hostUserPit(String roomId, String pitNumber, String userId, String type) {
api.hostUserPit(roomId, pitNumber, userId, type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().hostUserPit();
}
});
}
@Override
public void kickOutRoom(String roomId, String userId) {
api.kickOutRoom(roomId, userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().kickOutRoom();
}
});
}
@Override
public void postHostAdd(String roomId, String userId, String type, String is_add) {
api.postHostAdd(roomId, userId, type, is_add, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().postHostAdd(s, type, is_add);
}
});
}
@Override
public void setMutePit(String roomId, String user_id, String is_mute) {
api.setMutePit(roomId, user_id, is_mute, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().setMutePit(user_id, is_mute);
}
});
}
@Override
public void addBlackList(String userId) {
api.addBlackList(userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().addBlackList();
}
});
}
@Override
public void userGuanz(String userId, String type) {
api.userGuanz(userId,type, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().userGuanzSuccess(s);
}
});
}
}

View File

@@ -4,9 +4,112 @@ import android.content.Context;
import com.example.moduleroom.contacts.SingSongContacts;
import com.qxcm.moduleutil.base.BaseRoomPresenter;
import com.qxcm.moduleutil.base.CommonAppContext;
import com.qxcm.moduleutil.bean.room.RoomInfoResp;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.rtc.AgoraManager;
import com.qxcm.moduleutil.utils.SpUtil;
import io.reactivex.disposables.Disposable;
public class SingSongPresenter extends BaseRoomPresenter<SingSongContacts.View> implements SingSongContacts.IEmotionRoomPre {
public SingSongPresenter(SingSongContacts.View view, Context context) {
super(view, context);
}
@Override
public void applyPit(String roomId, String pitNumber) {
api.applyPit(roomId, pitNumber, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().applyPit();
}
});
}
@Override
public void setMutePit(String roomId, String pitNumber, String is_mute) {
api.setMutePit(roomId, pitNumber, is_mute, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().setMutePit(pitNumber, is_mute);
}
});
}
@Override
public void setLockPit(String roomId, String pitNumber, String is_lock) {
api.setLockPit(roomId, pitNumber, is_lock, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String string) {
MvpRef.get().setLockPit(pitNumber, is_lock);
}
});
}
/// 请求房间信息当pk同意的时候获取对方房间信息同时请求自己房间信息做页面的更新 添加一type1请求对方信息 2请求自己房间信息
@Override
public void postRoomInfo(String roomId, String number,int type) {
api.postRoomInfo(roomId, new BaseObserver<RoomInfoResp>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(RoomInfoResp roomInfoResp) {
String appId = CommonAppContext.getInstance().getCurrentEnvironment().getSwSdkAppId();
String token = roomInfoResp.getUser_info().getAgora_token(); // 如果启用了鉴权才需要
String roomId = roomInfoResp.getRoom_info().getRoom_id(); // 房间 ID
String rtm_token = roomInfoResp.getUser_info().getAgora_rtm_token();
SpUtil.setRtmToken(rtm_token);
int uid = SpUtil.getUserId(); // 0 表示由 Agora 自动生成 UID
boolean enableMic = false; // 是否开启麦克风
if (type==1) {
if (roomInfoResp.getPk_info() != null) {
if (number.equals("9")) {
///添加多频道
AgoraManager.getInstance(getView().getSelfActivity())
.joinChannelEx(rtm_token, roomId, uid);
}
}
MvpRef.get().postRoomInfoPk(roomInfoResp);
}else {
AgoraManager.getInstance(getView().getSelfActivity()).leaveChannelEx(roomInfoResp.getRoom_info().getLast_pk_room_id()+"", uid);
MvpRef.get().postRoomInfo(roomInfoResp);
}
}
});
}
@Override
public void endPk(String pk_id, String type, String user_id) {
api.endPk(pk_id, type, user_id, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().endPk();
}
});
}
}

View File

@@ -0,0 +1,110 @@
package com.example.moduleroom.presenter;
import android.content.Context;
import com.example.moduleroom.contacts.WheatContacts;
import com.qxcm.moduleutil.bean.room.RoomApplyListBean;
import com.qxcm.moduleutil.http.BaseModel;
import com.qxcm.moduleutil.http.BaseObserver;
import com.qxcm.moduleutil.presenter.BasePresenter;
import java.util.List;
import io.reactivex.disposables.Disposable;
public class WheatPresenter extends BasePresenter<WheatContacts.View> implements WheatContacts.IRoomPre {
public WheatPresenter(WheatContacts.View view, Context context) {
super(view, context);
}
@Override
public void roomApplyListBean(String roomId) {
api.roomApplyListBean(roomId, new BaseObserver<RoomApplyListBean>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(RoomApplyListBean roomApplyListBeans) {
MvpRef.get().roomApplyListBean(roomApplyListBeans);
}
});
}
@Override
public void clearApply(String roomId) {
api.clearApply(roomId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().clearApply();
}
});
}
@Override
public void agreePit(String roomId, String userId) {
api.agreePit(roomId, userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().agreePit();
}
});
}
@Override
public void refusePit(String roomId, String userId) {
api.refusePit(roomId, userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().agreePit();
}
});
}
@Override
public void helpApply(String roomId, String userId) {
api.helpApply(roomId, userId, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().agreePit();
}
});
}
@Override
public void applyPit(String roomId, String pitNumber) {
api.applyPit(roomId, pitNumber, new BaseObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
addDisposable(d);
}
@Override
public void onNext(String s) {
MvpRef.get().applyPit();
}
});
}
}

View File

@@ -15,7 +15,8 @@
android:animateLayoutChanges="true"
android:clipChildren="false"
android:clipToPadding="false"
android:keepScreenOn="true">
android:keepScreenOn="true"
android:background="@color/transparent">
<ImageView
android:id="@+id/iv_bg"
@@ -25,6 +26,7 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:src="@mipmap/room_bj"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
@@ -36,7 +38,8 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
/>
<include layout="@layout/room_top"
@@ -45,9 +48,11 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_50"
app:layout_constraintTop_toTopOf="parent"
android:clipChildren="false"
android:clipToPadding="false"
/>
<com.qxcm.moduleutil.widget.ScrollViewPager
<FrameLayout
android:id="@+id/vp_room_pager"
android:layout_width="0dp"
android:layout_height="0dp"
@@ -59,23 +64,23 @@
app:layout_constraintTop_toBottomOf="@id/room_top" />
<com.qxcm.moduleutil.widget.MusicRotationView
android:id="@+id/rl_music_min_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.35"
tools:visibility="visible" />
<!-- <com.qxcm.moduleutil.widget.MusicRotationView-->
<!-- android:id="@+id/rl_music_min_view"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:visibility="gone"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:layout_constraintVertical_bias="0.35"-->
<!-- tools:visibility="visible" />-->
<com.qxcm.moduleutil.widget.MusicView
android:id="@+id/music_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
tools:visibility="visible" />
<!-- <com.qxcm.moduleutil.widget.MusicView-->
<!-- android:id="@+id/music_view"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- android:visibility="gone"-->
<!-- tools:visibility="visible" />-->
<com.qxcm.moduleutil.widget.AvatarFrameView
android:id="@+id/svga_gift"
@@ -86,6 +91,15 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.qxcm.moduleutil.widget.AvatarFrameView
android:id="@+id/svga_zuoji"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!--礼物连送图标-->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/gift_show_layout"

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="456dp"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_16"
android:background="@drawable/bg_room_gift">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="选择内容"
android:textSize="@dimen/sp_16"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/tv_title"
app:layout_constraintBottom_toTopOf="@+id/tv_wheat_qd"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tv_wheat_qd"
android:layout_width="@dimen/dp_158"
android:layout_height="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@drawable/bg_r53_0dffb9"
android:text="确定"
android:textSize="@dimen/sp_14"
android:gravity="center"
android:textColor="@color/color_FF333333"
android:layout_marginBottom="@dimen/dp_14"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tv_minimize"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="最小化"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E0E0E0" />
<TextView
android:id="@+id/tv_exit_room"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="退出房间"
android:textSize="16sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E0E0E0" />
<TextView
android:id="@+id/tv_cancel"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:text="取消"
android:textColor="#FF0000"
android:textSize="16sp" />
</LinearLayout>

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="@dimen/dp_270"
android:layout_height="@dimen/dp_100"
android:orientation="vertical"
android:padding="16dp"
android:background="@drawable/bg_r16_fff">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="直播对战设置"
android:textSize="@dimen/sp_16"
android:textColor="@color/color_FF333333"
android:textStyle="bold"
android:layout_gravity="center"
android:gravity="center"
android:padding="8dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginTop="@dimen/dp_12">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="不再PK邀请"
android:textSize="@dimen/sp_14"
android:textColor="@color/color_FF333333"/>
<Switch
android:id="@+id/switch_friend_invitation"
android:layout_width="@dimen/dp_37"
android:layout_height="@dimen/dp_20"
android:background="@drawable/room_tuner_selector_switch"
android:thumb="@android:color/transparent"
tools:ignore="UseSwitchCompatOrMaterialXml" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="@dimen/dp_15"
android:visibility="gone">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="不再接收推荐邀请"
android:textSize="@dimen/sp_14"
android:textColor="@color/color_FF333333"/>
<Switch
android:id="@+id/switch_recommend_invitation"
android:layout_width="@dimen/dp_37"
android:layout_height="@dimen/dp_20"
android:background="@drawable/room_tuner_selector_switch"
android:thumb="@android:color/transparent"
tools:ignore="UseSwitchCompatOrMaterialXml" />
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data></data>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_r16_fff"
android:orientation="vertical"
android:padding="16dp">
<!-- 标题栏 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="发头条"
android:textColor="@color/black"
android:textSize="16sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/iv_close"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="8dp"
android:src="@mipmap/gb" />
</LinearLayout>
<com.qxcm.moduleutil.widget.ClearEditText
android:id="@+id/ed_room_name"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_44"
android:layout_marginTop="@dimen/dp_35"
android:background="@drawable/bg_r100_hui"
android:hint="请输入内容(最多15字)"
android:inputType="numberDecimal"
android:maxLength="10"
android:paddingStart="10dp"
android:paddingEnd="@dimen/dp_10"
android:singleLine="true"
android:text=""
android:textColor="#333333"
android:textSize="14sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center|left"
android:orientation="vertical">
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_12"
android:gravity="center"
android:text="5分钟"
android:textColor="@color/color_FF333333"
android:textSize="12sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_18"
android:layout_marginStart="@dimen/dp_18"
android:layout_toRightOf="@+id/tv_time"
android:drawableLeft="@mipmap/jinb"
android:drawablePadding="5dp"
android:gravity="center"
android:text="40"
android:textColor="@color/color_FF333333"
android:textSize="12sp" />
</RelativeLayout>
<!-- 发布按钮 -->
<Button
android:id="@+id/btn_action"
android:layout_width="221dp"
android:layout_height="47dp"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginBottom="@dimen/dp_20"
android:background="@drawable/cs"
android:layout_gravity="center"
android:text="发布"
android:textColor="@color/color_FF333333"
android:textSize="16sp" />
</LinearLayout>
</layout>

View File

@@ -0,0 +1,89 @@
<?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="wrap_content"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="@dimen/dp_265"
android:layout_height="@dimen/dp_250"
android:background="@mipmap/auction_cg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.qxcm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/avatar1"
android:layout_width="@dimen/dp_68"
android:layout_height="@dimen/dp_68"
android:layout_marginStart="@dimen/dp_66"
android:layout_marginTop="@dimen/dp_73"
android:src="@mipmap/default_avatar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_name1"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_21"
android:ellipsize="start"
android:maxLines="1"
android:text="用户名"
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="@+id/avatar1"
app:layout_constraintStart_toStartOf="@+id/avatar1"
app:layout_constraintTop_toBottomOf="@+id/avatar1" />
<com.qxcm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/avatar2"
android:layout_width="@dimen/dp_68"
android:layout_height="@dimen/dp_68"
android:layout_marginTop="@dimen/dp_73"
android:layout_marginEnd="@dimen/dp_68"
android:src="@mipmap/default_avatar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_name2"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_21"
android:ellipsize="start"
android:maxLines="1"
android:text="用户名"
android:textColor="@color/white"
android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="@+id/avatar2"
app:layout_constraintStart_toStartOf="@+id/avatar2"
app:layout_constraintTop_toBottomOf="@+id/avatar2" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_57"
android:background="@mipmap/bg_wz"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/tv_tname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="@dimen/dp_5"
android:rotation="-6.9"
android:text="情侣关系竞拍成功"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,262 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/room_rank_bj">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="@dimen/dp_142"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="10dp">
<View
android:id="@+id/view_top2"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_70"
android:layout_marginTop="@dimen/dp_24"
app:layout_constraintEnd_toStartOf="@+id/view_top1"
app:layout_constraintHorizontal_chainStyle="spread"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_top1" />
<com.qxcm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/room_rank_top2_headIcon"
android:layout_width="@dimen/dp_58"
android:layout_height="@dimen/dp_58"
app:layout_constraintBottom_toBottomOf="@id/view_top2"
app:layout_constraintEnd_toEndOf="@id/view_top2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@id/view_top2"
app:layout_constraintTop_toTopOf="@id/view_top2"
app:layout_constraintVertical_bias="0.9"
app:riv_oval="true" />
<ImageView
android:layout_width="@dimen/dp_63"
android:layout_height="@dimen/dp_63"
android:background="@mipmap/rank_im_t2"
app:layout_constraintBottom_toBottomOf="@id/view_top2"
app:layout_constraintEnd_toEndOf="@id/view_top2"
app:layout_constraintStart_toStartOf="@id/view_top2"
app:layout_constraintTop_toTopOf="@id/view_top2" />
<TextView
android:id="@+id/room_top2_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
tools:text="sdfdfgfg"
android:textColor="@color/color_white"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@id/view_top2"
app:layout_constraintStart_toStartOf="@id/view_top2"
app:layout_constraintTop_toBottomOf="@+id/view_top2" />
<LinearLayout
android:id="@+id/ll_vip2"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_15"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="@id/view_top2"
app:layout_constraintStart_toStartOf="@id/view_top2"
app:layout_constraintTop_toBottomOf="@id/room_top2_name" />
<TextView
android:id="@+id/room_head_top2_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="34dp"
android:drawableStart="@mipmap/rank_h"
android:drawablePadding="@dimen/dp_4"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/sp_8"
app:layout_constraintBottom_toBottomOf="@+id/ll_vip2"
app:layout_constraintTop_toBottomOf="@+id/ll_vip2"
app:layout_constraintEnd_toEndOf="@id/ll_vip2"
app:layout_constraintStart_toStartOf="@id/ll_vip2"
tools:text="00000" />
<View
android:id="@+id/view_top1"
android:layout_width="@dimen/dp_64"
android:layout_height="@dimen/dp_64"
android:layout_marginTop="@dimen/dp_4"
app:layout_constraintEnd_toStartOf="@+id/view_top3"
app:layout_constraintStart_toEndOf="@id/view_top2"
app:layout_constraintTop_toTopOf="parent" />
<View
android:id="@+id/view_top3"
android:layout_width="@dimen/dp_51"
android:layout_height="@dimen/dp_51"
android:layout_marginTop="@dimen/dp_30"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/view_top1"
app:layout_constraintTop_toTopOf="@id/view_top1" />
<com.qxcm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/room_rank_top1_headIcon"
android:layout_width="@dimen/dp_67"
android:layout_height="@dimen/dp_67"
app:layout_constraintBottom_toBottomOf="@id/view_top1"
app:layout_constraintEnd_toEndOf="@id/view_top1"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@id/view_top1"
app:layout_constraintTop_toTopOf="@id/view_top1"
app:layout_constraintVertical_bias="0.9"
app:riv_oval="true" />
<ImageView
android:layout_width="@dimen/dp_80"
android:layout_height="@dimen/dp_80"
android:background="@mipmap/rank_im_t1"
app:layout_constraintBottom_toBottomOf="@id/view_top1"
app:layout_constraintEnd_toEndOf="@id/view_top1"
app:layout_constraintStart_toStartOf="@id/view_top1"
app:layout_constraintTop_toTopOf="@id/view_top1" />
<com.qxcm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/room_rank_top3_headIcon"
android:layout_width="@dimen/dp_58"
android:layout_height="@dimen/dp_58"
app:layout_constraintBottom_toBottomOf="@id/view_top3"
app:layout_constraintEnd_toEndOf="@id/view_top3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="@id/view_top3"
app:layout_constraintTop_toTopOf="@id/view_top3"
app:layout_constraintVertical_bias="0.9"
app:riv_oval="true" />
<ImageView
android:layout_width="@dimen/dp_64"
android:layout_height="@dimen/dp_64"
android:background="@mipmap/rank_im_t3"
app:layout_constraintBottom_toBottomOf="@id/view_top3"
app:layout_constraintEnd_toEndOf="@id/view_top3"
app:layout_constraintStart_toStartOf="@id/view_top3"
app:layout_constraintTop_toTopOf="@id/view_top3" />
<TextView
android:id="@+id/room_top1_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_26"
android:ellipsize="end"
android:gravity="center"
android:maxLength="6"
android:maxLines="1"
tools:text="111111"
android:textColor="@color/color_white"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@id/view_top1"
app:layout_constraintStart_toStartOf="@id/view_top1"
app:layout_constraintTop_toBottomOf="@+id/view_top1" />
<LinearLayout
android:id="@+id/ll_vip1"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_15"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="@id/view_top1"
app:layout_constraintStart_toStartOf="@id/view_top1"
app:layout_constraintTop_toBottomOf="@id/room_top1_name" />
<TextView
android:id="@+id/room_head_top1_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@mipmap/rank_h"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/sp_8"
app:layout_constraintEnd_toEndOf="@id/view_top1"
app:layout_constraintStart_toStartOf="@id/view_top1"
app:layout_constraintTop_toBottomOf="@+id/ll_vip1"
tools:text="00000" />
<TextView
android:id="@+id/room_top3_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_14"
android:ellipsize="end"
android:gravity="center"
android:maxLength="6"
android:maxLines="1"
tools:text="sdfdfgfg"
android:textColor="@color/color_white"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="@id/view_top3"
app:layout_constraintStart_toStartOf="@id/view_top3"
app:layout_constraintTop_toBottomOf="@id/view_top3" />
<LinearLayout
android:id="@+id/ll_vip3"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_15"
android:gravity="center_vertical"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="@id/view_top3"
app:layout_constraintStart_toStartOf="@id/view_top3"
app:layout_constraintTop_toBottomOf="@id/room_top3_name" />
<TextView
android:id="@+id/room_head_top3_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@mipmap/rank_h"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/sp_8"
app:layout_constraintEnd_toEndOf="@id/view_top3"
app:layout_constraintStart_toStartOf="@id/view_top3"
app:layout_constraintTop_toBottomOf="@+id/ll_vip3"
tools:text="00000" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.qxcm.moduleutil.widget.RankRecycleView
android:id="@+id/rankRecycleView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never"
tools:listitem="@layout/item_ranking_auction">
</com.qxcm.moduleutil.widget.RankRecycleView>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_54"
android:background="@mipmap/setting_t"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/color_FF333333"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="@dimen/dp_25"
android:layout_marginBottom="@dimen/dp_13"
app:layout_constraintEnd_toStartOf="@+id/im"
android:textSize="@dimen/sp_12"
android:text="立即发送头条"
/>
<ImageView
android:id="@+id/im"
android:layout_width="@dimen/dp_14"
android:layout_height="@dimen/dp_14"
app:layout_constraintTop_toTopOf="@+id/tv_title"
app:layout_constraintBottom_toBottomOf="@+id/tv_title"
android:layout_marginEnd="@dimen/dp_14"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/detail_icon_go" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_r16_tb_ffffff"
android:layout_marginTop="@dimen/dp_5"
android:padding="@dimen/dp_16"
app:layout_constraintTop_toBottomOf="@+id/cl"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/room_dialog_bj"
android:paddingTop="@dimen/dp_16"
android:paddingStart="@dimen/dp_16">
<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="设置插队礼物"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_240"
android:paddingTop="@dimen/dp_12"
app:layout_constraintTop_toBottomOf="@id/tv_1"
/>
<TextView
android:id="@+id/tv_wheat_qx"
android:layout_width="@dimen/dp_95"
android:layout_height="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:background="@drawable/bg_r53_33333"
android:text="取消"
android:textSize="@dimen/sp_14"
android:gravity="center"
android:textColor="@color/white"
android:layout_marginBottom="@dimen/dp_44"
android:layout_marginStart="@dimen/dp_28"/>
<TextView
android:id="@+id/tv_wheat_qd"
android:layout_width="@dimen/dp_158"
android:layout_height="@dimen/dp_42"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@drawable/bg_r53_0dffb9"
android:layout_marginEnd="@dimen/dp_38"
android:text="确定"
android:textSize="@dimen/sp_14"
android:gravity="center"
android:textColor="@color/color_FF333333"
android:layout_marginBottom="@dimen/dp_44"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,80 @@
<?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="wrap_content"
android:background="@mipmap/auction_sb"
android:padding="24dp">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="8dp"
android:text="竞拍结束"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="本次竞拍已结束,期待您的下次参与"
android:textColor="@color/color_FF333333"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<LinearLayout
android:layout_width="@dimen/dp_178"
android:layout_height="@dimen/dp_42"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:background="@drawable/cs"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/btn_know"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_21"
android:text="知道了"
android:textColor="@color/color_FF333333"
android:textSize="@dimen/sp_14" />
<TextView
android:id="@+id/tv_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="3"
android:textSize="16sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false">
<LinearLayout
android:id="@+id/l"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_32"
android:layout_marginLeft="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_6"
android:layout_marginRight="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_6"
android:layout_weight="1"
android:background="@drawable/bg_r99_eff2f8"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="gone"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv_close"
android:layout_width="@dimen/dp_18"
android:layout_height="@dimen/dp_18"
android:layout_marginLeft="@dimen/dp_11"
android:layout_marginRight="@dimen/dp_7"
android:src="@drawable/index_level_search" />
<EditText
android:id="@+id/edit_query"
android:layout_width="@dimen/dp_0"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@android:color/transparent"
android:hint="输入相关的主播名、房间名"
android:maxLength="10"
android:singleLine="true"
android:textColor="#333333"
android:textColorHint="@color/color_FF999999"
android:textSize="@dimen/sp_12" />
</LinearLayout>
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/smart_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toBottomOf="@+id/l"
app:srlEnableLoadMore="true"
app:srlEnableRefresh="false">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_40" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_pk"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_248"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@mipmap/pk_sl">
<com.qxcm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/user_avatar1"
android:layout_width="@dimen/dp_50"
android:layout_height="@dimen/dp_50"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="@dimen/dp_34"
app:layout_constraintBottom_toBottomOf="parent"
app:riv_oval="true"
android:src="@mipmap/default_avatar"/>
<ImageView
android:id="@+id/iv_start1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@+id/user_avatar1"
app:layout_constraintEnd_toEndOf="@+id/user_avatar1"
app:layout_constraintBottom_toBottomOf="@+id/user_avatar1"
android:src="@mipmap/victory"/>
<TextView
android:id="@+id/tv_name1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@+id/user_avatar1"
app:layout_constraintTop_toTopOf="@+id/user_avatar1"
app:layout_constraintBottom_toBottomOf="@+id/user_avatar1"
android:text="名称"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"/>
<com.qxcm.moduleutil.widget.GifAvatarOvalView
android:id="@+id/user_avatar2"
android:layout_width="@dimen/dp_50"
android:layout_height="@dimen/dp_50"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/dp_34"
android:layout_marginBottom="@dimen/dp_39"
app:layout_constraintBottom_toBottomOf="parent"
app:riv_oval="true"
android:src="@mipmap/default_avatar"/>
<ImageView
android:id="@+id/iv_start2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="@+id/user_avatar2"
app:layout_constraintEnd_toEndOf="@+id/user_avatar2"
app:layout_constraintBottom_toBottomOf="@+id/user_avatar2"
android:src="@mipmap/victory"/>
<TextView
android:id="@+id/tv_name2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@+id/user_avatar2"
app:layout_constraintTop_toTopOf="@+id/user_avatar2"
app:layout_constraintBottom_toBottomOf="@+id/user_avatar2"
android:text="名称"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="456dp"
android:paddingStart="@dimen/dp_16"
android:paddingEnd="@dimen/dp_16"
android:background="@drawable/bg_r16_tb_ffffff">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="请选择PK时长"
android:textSize="@dimen/sp_16"
android:textColor="@color/color_FF333333"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycle_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/tv_title"
app:layout_constraintBottom_toTopOf="@+id/tv_wheat_qd"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tv_wheat_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/tv_wheat_qd"
android:background="@mipmap/cancel"
android:layout_marginBottom="@dimen/dp_46"
/>
<TextView
android:id="@+id/tv_wheat_qd"
android:layout_width="@dimen/dp_158"
android:layout_height="@dimen/dp_42"
app:layout_constraintEnd_toEndOf="parent"
android:background="@drawable/bg_r53_0dffb9"
app:layout_constraintTop_toTopOf="@+id/tv_wheat_cancel"
android:text="确定"
android:textSize="@dimen/sp_14"
android:gravity="center"
android:textColor="@color/color_FF333333"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".fragment.RelationshipFragment">
<data>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dp_120"
>
<com.zhpan.bannerview.BannerViewPager
android:id="@+id/banner_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- app:bvp_indicator_visibility="gone"-->
</layout>

Some files were not shown because too many files have changed in this diff Show More