396 lines
12 KiB
Java
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) {
|
|
|
|
}
|
|
|
|
}
|