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

396 lines
12 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.TasksMessage;
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.io.Serializable;
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;
private List<RoomOnlineBean> onlineBeanList = new ArrayList<>();
private RoomOnline mOnlineBean;
@Override
protected RoomPresenter bindPresenter() {
return new RoomPresenter(this, getActivity());
}
public static RoomOnlineDialogFragment show(String id, String pit_number, RoomOnline mOnlineBean, 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);
args.putSerializable("mOnlineBean", mOnlineBean);
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");
mOnlineBean = (RoomOnline) getArguments().getSerializable("mOnlineBean");
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);
}
}
});
List<RoomOnlineBean> roomOnlineBeanList = processOnlineData(mOnlineBean);
onlineBeanList.addAll(roomOnlineBeanList);
updateUserCount(mOnlineBean.getCount());
mBinding.rvComment.setLayoutManager(new LinearLayoutManager(getActivity()));
roomOnlineAdapter = new RoomOnlineAdapter(onlineBeanList);
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) {
if (!isValidContext()) {
return;
}
List<RoomOnlineBean> roomOnlineBeanList = processOnlineData(onlineBean);
updateAdapterData(roomOnlineBeanList);
updateUserCount(onlineBean.getCount());
}
private boolean isValidContext() {
return getActivity() != null && mBinding != null;
}
private List<RoomOnlineBean> processOnlineData(RoomOnline onlineBean) {
List<RoomOnlineBean> result = new ArrayList<>();
boolean isFirstPage = page <= 1;
int typePit = pit_number.isEmpty() ? 1 : 2;
// 处理麦上用户
processUserList(onlineBean.getOn_pit(), result, "麦上用户",
isFirstPage, 1, 0);
// 处理麦下用户
processUserList(onlineBean.getOff_pit(), result, "麦下用户",
isFirstPage, 2, typePit);
return result;
}
private void processUserList(List<RoomOnlineBean> userList,
List<RoomOnlineBean> result, String title,
boolean addTitle, int type, int typePit) {
if (userList == null || userList.isEmpty()) {
return;
}
if (addTitle) {
RoomOnlineBean titleBean = createTitleBean(title);
result.add(titleBean);
}
for (RoomOnlineBean userBean : userList) {
userBean.setType(type);
userBean.setType_pit(typePit);
userBean.setItemViewType(2);
result.add(userBean);
}
}
private RoomOnlineBean createTitleBean(String title) {
RoomOnlineBean titleBean = new RoomOnlineBean();
titleBean.setItemViewType(1);
titleBean.setTypeNames(title);
return titleBean;
}
private void updateAdapterData(List<RoomOnlineBean> newData) {
if (page == 1) {
onlineBeanList.clear();
}
onlineBeanList.addAll(newData);
roomOnlineAdapter.notifyDataSetChanged();
}
private void updateUserCount(int count) {
if (mBinding.tvNum != null) {
mBinding.tvNum.setText(String.format("用户列表(%d)人", count));
}
if (getActivity() instanceof RoomActivity) {
((RoomActivity) getActivity()).setOnlineNumber(count);
}
}
@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) {
}
@Override
public void getTasksMessage(TasksMessage data) {
}
}