Files
yusheng-android/MainModule/src/main/java/com/xscm/modulemain/dialog/RoomOnlineDialogFragment.java
2025-11-21 18:55:12 +08:00

442 lines
15 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.xscm.modulemain.dialog;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import com.blankj.utilcode.util.ToastUtils;
import com.xscm.modulemain.R;
import com.xscm.modulemain.activity.room.activity.RoomActivity;
import com.xscm.modulemain.activity.room.contacts.RoomContacts;
import com.xscm.modulemain.activity.room.presenter.RoomPresenter;
import com.xscm.modulemain.adapter.RoomOnlineAdapter;
import com.xscm.modulemain.databinding.FragmentRoomOnlineDialogBinding;
import com.xscm.moduleutil.base.BaseMvpDialogFragment;
import com.xscm.moduleutil.bean.RedPacketInfo;
import com.xscm.moduleutil.bean.RoomCharmRankBean;
import com.xscm.moduleutil.bean.UserOnlineStatusBean;
import com.xscm.moduleutil.bean.room.RoomInfoResp;
import com.xscm.moduleutil.bean.room.RoomOnline;
import com.xscm.moduleutil.bean.room.RoomOnlineBean;
import com.xscm.moduleutil.bean.room.RoomUserBean;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;
import java.util.ArrayList;
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;
private RoomUserBean hostUser;
protected RoomInfoResp roomInfoResp;
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getActivity());
}
public static RoomOnlineDialogFragment show(String id, String pit_number, RoomUserBean hostUser, RoomInfoResp roomInfoResp, FragmentManager fragmentManager) {
RoomOnlineDialogFragment dialogFragment = new RoomOnlineDialogFragment();
Bundle args = new Bundle();
args.putString("roomId", id); // 可选:传递参数
args.putString("pit_number", pit_number);
args.putSerializable("hostUser", hostUser); // 可选:传递参数
args.putSerializable("roomInfoResp", roomInfoResp);
dialogFragment.setArguments(args);
dialogFragment.show(fragmentManager, "RoomOnlineDialogFragment");
return dialogFragment;
}
@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);
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, heightInDp);
// 可选:设置动画样式(从底部弹出)
window.setWindowAnimations(com.xscm.moduleutil.R.style.CommonShowDialogBottom);
}
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
roomId = getArguments().getString("roomId");
pit_number = getArguments().getString("pit_number");
hostUser = (RoomUserBean) getArguments().getSerializable("hostUser");
roomInfoResp = (RoomInfoResp) getArguments().getSerializable("roomInfoResp");
}
@Override
protected void initView() {
mBinding.srl.setOnRefreshLoadMoreListener(new OnRefreshLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
// 添加延迟以避免过于频繁的请求
page++;
if (MvpPre != null && getArguments() != null) {
MvpPre.getRoomOnline(getArguments().getString("roomId"), page + "", "10");
} else {
refreshLayout.finishLoadMore(false);
}
}
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
page = 1;
if (MvpPre != null && getArguments() != null) {
MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10");
} else {
refreshLayout.finishRefresh(false);
}
}
});
mBinding.rvComment.setLayoutManager(new LinearLayoutManager(getActivity()));
roomOnlineAdapter = new RoomOnlineAdapter(new ArrayList<RoomOnlineBean>());
mBinding.rvComment.setAdapter(roomOnlineAdapter);
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) {
// 使用 post 延迟执行,确保 dismiss 完成后再显示新对话框
mBinding.getRoot().post(() -> {
mBinding.getRoot().post(() -> {
RoomUserInfoFragment.show(roomId, item.getUser_id() + "", pit_number, getHostUser(hostUser), false, 4, isNumberWhether(), getParentFragmentManager());
});
dismiss();
});
}
});
}
// 在类中添加以下方法
private void resetRefreshState() {
if (mBinding != null && mBinding.srl != null) {
mBinding.srl.resetNoMoreData();
}
page = 1;
}
private int isNumberWhether() {
for (int i = 0; i < roomInfoResp.getRoom_info().getPit_list().size(); i++) {
if (roomInfoResp.getRoom_info().getPit_list().get(i).getPit_number().equals("9") && roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id() != null &&
!roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id().equals("0") && !roomInfoResp.getRoom_info().getPit_list().get(i).getUser_id().isEmpty())
return 1;
}
return 0;
}
private int getHostUser(RoomUserBean item) {
if (item.getPit_number() == 9) {
if (item.getIs_room_owner() == 1) {
return 1;
} else if (item.getIs_management() == 1) {
return 2;
} else if (item.getIs_host() == 1) {
return 3;
} else {
return 4;
}
} else {
if (item.getIs_room_owner() == 1) {
return 1;
} else if (item.getIs_management() == 1) {
return 2;
} else if (item.getIs_host() == 1) {
return 3;
}
return 4;
}
}
@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) {
try {
// 确保在主线程中执行UI操作
if (getActivity() == null || mBinding == null) {
return;
}
getActivity().runOnUiThread(() -> {
// 完成刷新或加载更多操作
if (mBinding.srl != null) {
if (page <= 1) {
mBinding.srl.finishRefresh();
} else {
mBinding.srl.finishLoadMore();
}
}
List<RoomOnlineBean> roomOnlineBeanList = new ArrayList<>();
// 处理第一页数据(刷新操作)
if (page <= 1) {
// 清空之前的数据
roomOnlineAdapter.setNewData(new ArrayList<>());
}
int type_pit;
if (pit_number.isEmpty()) {
type_pit = 1;
} else {
type_pit = 2;
}
if (onlineBean.getOn_pit() != null && onlineBean.getOn_pit().size() > 0) {
RoomOnlineBean roomOnlineBean = new RoomOnlineBean();
roomOnlineBean.setItemViewType(1);
roomOnlineBean.setTypeNames("麦上用户");
roomOnlineBeanList.add(roomOnlineBean);
for (RoomOnlineBean roomOnlineBean1 : onlineBean.getOn_pit()) {
roomOnlineBean1.setType(1);
roomOnlineBean1.setType_pit(0);
roomOnlineBean1.setItemViewType(2);
roomOnlineBeanList.add(roomOnlineBean1);
}
}
if (onlineBean.getOff_pit() != null && onlineBean.getOff_pit().size() > 0) {
RoomOnlineBean roomOnlineBean = new RoomOnlineBean();
roomOnlineBean.setItemViewType(1);
roomOnlineBean.setTypeNames("麦下用户");
roomOnlineBeanList.add(roomOnlineBean);
for (RoomOnlineBean roomOnlineBean2 : onlineBean.getOff_pit()) {
roomOnlineBean2.setType(2);
roomOnlineBean2.setType_pit(type_pit);
roomOnlineBean2.setItemViewType(2);
roomOnlineBeanList.add(roomOnlineBean2);
}
}
// 根据是刷新还是加载更多来处理数据
if (page <= 1) {
// 刷新操作,设置新数据
roomOnlineAdapter.setNewData(roomOnlineBeanList);
} else {
// 加载更多操作,添加数据
if (roomOnlineBeanList.size() > 0) {
roomOnlineAdapter.addData(roomOnlineBeanList);
} else {
// 没有更多数据了
if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
}
// 更新用户总数
// 更新用户总数 - 仅在第一页刷新时更新总数
if (page <= 1) {
int total = 0;
if (onlineBean.getOn_pit() != null) {
total += onlineBean.getOn_pit().size();
}
if (onlineBean.getOff_pit() != null) {
total += onlineBean.getOff_pit().size();
}
// 只有当获取到有效数据时才更新总数显示
if (onlineBean.getOn_pit() != null || onlineBean.getOff_pit() != null) {
mBinding.tvNum.setText("在线用户(" + total + ")人");
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setOnlineNumber(total);
}
}
// 如果两个列表都为null保持之前的总数显示不变
} else {
// 加载更多时,更新总数显示
int currentTotal = 0;
List<RoomOnlineBean> currentData = roomOnlineAdapter.getData();
for (RoomOnlineBean bean : currentData) {
if (bean.getItemViewType() == 2) { // 只统计用户项,不统计标题项
currentTotal++;
}
}
mBinding.tvNum.setText("在线用户(" + currentTotal + ")人");
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setOnlineNumber(currentTotal);
}
}
// 检查是否需要禁用加载更多(如果当前页数据少于预期)
if (onlineBean.getOn_pit() != null && onlineBean.getOff_pit() != null) {
int currentCount = onlineBean.getOn_pit().size() + onlineBean.getOff_pit().size();
if (currentCount < 10 && page > 1) { // 每页预期10条数据
if (mBinding.srl != null) {
mBinding.srl.finishLoadMoreWithNoMoreData();
}
}
}
});
} catch (Exception e) {
// 确保在异常情况下也能完成刷新操作
if (getActivity() != null && mBinding != null && mBinding.srl != null) {
getActivity().runOnUiThread(() -> {
if (page <= 1) {
mBinding.srl.finishRefresh(false);
} else {
mBinding.srl.finishLoadMore(false);
}
});
}
e.printStackTrace();
}
}
// @Override
// public void getRoomOnline(List<RoomOnlineBean> onlineBean) {
// roomOnlineAdapter.setNewData(onlineBean);
// mBinding.tvNum.setText("在线用户("+onlineBean.size()+")人");
// }
@Override
public void onResume() {
super.onResume();
// 每次恢复时重置刷新状态
resetRefreshState();
}
@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("抱麦成功");
dismiss();
}
@Override
public void quitRoom() {
}
@Override
public void quitRoom2(String roomId) {
}
@Override
public void userGuanzSuccess(String s) {
}
@Override
public void acceptPk() {
}
@Override
public void clearUserCharm() {
}
@Override
public void userOnlineStatus(List<UserOnlineStatusBean> list) {
}
@Override
public void findRoom() {
mBinding.srl.finishRefresh();
mBinding.srl.finishLoadMore();
}
@Override
public void roomRedPackets(List<RedPacketInfo> list) {
}
}