442 lines
15 KiB
Java
442 lines
15 KiB
Java
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) {
|
||
|
||
}
|
||
|
||
}
|