diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java index 45509bcf..f8de909e 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/HeadlineBean.java @@ -1,5 +1,7 @@ package com.xscm.moduleutil.bean; +import com.xscm.moduleutil.BaseEvent; + import java.io.Serializable; import lombok.Data; @@ -9,7 +11,7 @@ import lombok.Data; *@description:发布头条需要的参数 */ @Data -public class HeadlineBean implements Serializable { +public class HeadlineBean extends BaseEvent implements Serializable { private String countdown; private String now_money; private String next_money; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java index 0d32949a..8d419ff7 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/MqttXlhEnd.java @@ -1,11 +1,13 @@ package com.xscm.moduleutil.bean; +import com.xscm.moduleutil.BaseEvent; + import lombok.Data; import java.io.Serializable; @Data -public class MqttXlhEnd implements Serializable { +public class MqttXlhEnd extends BaseEvent implements Serializable { private static final long serialVersionUID = 1L; private String message; } diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java index 2d378246..2c5674d2 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/RoomMessageEvent.java @@ -27,21 +27,21 @@ public class RoomMessageEvent { public static class T { private String text; private String GiftNum; - private String pit_number; - private String jia_jia; - private UserInfo FromUserInfo; - private UserInfo ToUserInfo; - private List ToUserInfos; + private String pit_number;//麦位 + private String jia_jia;//坐骑 + private UserInfo FromUserInfo;//从me + private UserInfo ToUserInfo;// 到you + private List ToUserInfos;//一键发送礼物 private GiftBean GiftInfo; private List GiftInfos; - private int room_up_pit_type; - private MusicSongBean songInfo; - private MusicSongBean nextInfo; - private int action; - private int total; - private RoomBean RoomInfo; - private RoomAuction.AuctionUserBean auction_user; - private List auction_list; + private int room_up_pit_type;//1:上麦、0:下麦 + private MusicSongBean songInfo; //正在播放歌曲信息 + private MusicSongBean nextInfo; //下一首歌曲信息 + private int action; //切歌 + private int total; // + private RoomBean RoomInfo; //房间信息 + private RoomAuction.AuctionUserBean auction_user; //拍卖信息 + private List auction_list; //拍卖列表 private long duration;//时间 private RoomAuction.AuctionListBean recipient;//是否成功,有值的是成功的,没有值的时候,是失败的 private int type;//拍卖者,1:上麦、2:下麦 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/UserInfo.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/UserInfo.java index 5a882fb6..69075155 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/UserInfo.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/UserInfo.java @@ -1,19 +1,23 @@ package com.xscm.moduleutil.bean; import com.google.gson.annotations.SerializedName; +import com.xscm.moduleutil.BaseEvent; import com.xscm.moduleutil.bean.room.FriendInfo; import java.io.Serializable; import java.util.List; import lombok.Data; +import lombok.EqualsAndHashCode; + /** *@author qx *@data 2025/6/3 *@description: 个人信息,点击我的获取 */ +@EqualsAndHashCode(callSuper = true) @Data -public class UserInfo implements Serializable { +public class UserInfo extends BaseEvent implements Serializable { private static final long serialVersionUID = 1L; public static final String FEMALE = "2"; public static final String MALE = "1"; diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomBean.java index cfdb87ac..29335ce2 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomBean.java @@ -75,10 +75,10 @@ public class RoomBean implements Serializable { private String room_name;//房间名称 private String room_cover;//房间封面 private String room_intro;//房间公告 - private String type_id;//房间类型 + private String type_id;//房间类型 1:点唱(pk) 2:拍卖(真爱拍小黑屋) 3/4:交友 6:小黑屋 7:互娱 8:交友 private String type_name;//房间类型名称 private String user_id;//房主id - private String label_id;//类型id + private String label_id;//类型id 2:ktv type:1/3/4/8 private String label_icon;//房间类型图标 private String room_background;//房间背景 private String hot_value;//房间火热值 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/enumType/RoomType.kt b/moduleUtil/src/main/java/com/xscm/moduleutil/enumType/RoomType.kt new file mode 100644 index 00000000..a1cb8eb8 --- /dev/null +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/enumType/RoomType.kt @@ -0,0 +1,36 @@ +package com.xscm.moduleutil.enumType + +/** + * 房间类型枚举 + * 对应 type_id 含义: + * 2-拍卖(真爱拍小黑屋);1/3/4/8-交友;6-小黑屋;7-互娱 + */ +enum class RoomType( + val description: String, // 房间类型描述 + private vararg val typeIds: Int // 该类型对应的所有 type_id(支持多个) +) { + // 枚举常量:名称(描述, 对应的type_id) +// SINGING_PK("点唱(pk)", 1), + AUCTION("拍卖(真爱拍小黑屋)", 2), + DATING("交友", 1,3, 4, 8), // 1、3、4、8 均对应交友 + BLACK_ROOM("小黑屋", 6), + MUTUAL_ENTERTAINMENT("互娱", 7); + + companion object { + /** + * 根据 type_id 字符串获取对应的枚举实例 + * @param typeIdStr 房间类型字符串(如 "1"、"3") + * @return 匹配的 RoomType,若无效则返回 null + */ + fun fromTypeId(typeIdStr: String?): RoomType? { + if (typeIdStr.isNullOrBlank()) return null + val typeId = try { + typeIdStr.toInt() // 转换为 Int(处理数字字符串) + } catch (e: NumberFormatException) { + return null // 非数字字符串视为无效 + } + // 遍历所有枚举,匹配 type_id + return values().find { typeId in it.typeIds } + } + } +} \ No newline at end of file diff --git a/modulemain/src/main/java/com/xscm/modulemain/Application.kt b/modulemain/src/main/java/com/xscm/modulemain/Application.kt index 7a1aa3d4..af3b68a5 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/Application.kt +++ b/modulemain/src/main/java/com/xscm/modulemain/Application.kt @@ -1,5 +1,6 @@ package com.xscm.modulemain +import com.blankj.utilcode.util.LogUtils import com.opensource.svgaplayer.utils.log.SVGALogger import com.xscm.modulemain.widget.WheatLayoutSingManager import com.xscm.moduleutil.base.CommonAppContext @@ -13,7 +14,8 @@ open class Application : CommonAppContext() { WheatLayoutSingManager.getInstance().setWheatData( null) // 默认情况下,SVGA 内部不会输出任何 log,所以需要手动设置为 true - SVGALogger.setLogEnabled(true) + SVGALogger.setLogEnabled(false) + LogUtils.getConfig().isLogSwitch = true } } \ No newline at end of file diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java index b46419e9..445e3289 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/main/activity/MainActivity.java @@ -25,27 +25,35 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import com.alibaba.android.arouter.facade.annotation.Route; import com.blankj.utilcode.util.FragmentUtils; import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.ToastUtils; import com.bumptech.glide.Glide; -import com.xscm.modulemain.activity.msg.fragment.NewsFragment; -import com.xscm.modulemain.activity.user.fragment.VocalRangeFragment; -import com.xscm.modulemain.activity.plaza.fragment.CircleFragment; -import com.xscm.modulemain.activity.room.fragment.VoiceFragment; import com.permissionx.guolindev.PermissionX; import com.permissionx.guolindev.callback.RequestCallback; import com.stx.xhb.xbanner.XBanner; +import com.tencent.imsdk.v2.V2TIMManager; +import com.tencent.imsdk.v2.V2TIMValueCallback; +import com.xscm.modulemain.BaseMvpActivity; import com.xscm.modulemain.R; import com.xscm.modulemain.activity.main.contacts.HomeContacts; -import com.xscm.modulemain.databinding.ActivityMainBinding; import com.xscm.modulemain.activity.main.presenter.HomePresenter; +import com.xscm.modulemain.activity.msg.fragment.NewsFragment; +import com.xscm.modulemain.activity.plaza.fragment.CircleFragment; +import com.xscm.modulemain.activity.room.activity.RoomActivity; +import com.xscm.modulemain.activity.room.fragment.VoiceFragment; +import com.xscm.modulemain.activity.user.fragment.VocalRangeFragment; +import com.xscm.modulemain.databinding.ActivityMainBinding; import com.xscm.modulemain.manager.RoomManager; -import com.xscm.modulemain.BaseMvpActivity; import com.xscm.moduleutil.adapter.AppUpdateDialog; import com.xscm.moduleutil.base.CommonAppContext; -import com.xscm.moduleutil.bean.*; +import com.xscm.moduleutil.bean.ActivitiesPermission; +import com.xscm.moduleutil.bean.AppUpdateModel; +import com.xscm.moduleutil.bean.FirstChargeBean; +import com.xscm.moduleutil.bean.FirstChargeGiftBean; +import com.xscm.moduleutil.bean.HeavenGiftBean; +import com.xscm.moduleutil.bean.PermissionPicBean; +import com.xscm.moduleutil.bean.ThemeBean; import com.xscm.moduleutil.bean.room.RoomOnline; import com.xscm.moduleutil.bean.room.RoomOnlineBean; import com.xscm.moduleutil.dialog.FirstChargeDialog; @@ -54,12 +62,13 @@ import com.xscm.moduleutil.dialog.NewPeopleDialog; import com.xscm.moduleutil.dialog.RechargeDialogFragment; import com.xscm.moduleutil.event.RoomOutEvent; import com.xscm.moduleutil.event.UnreadCountEvent; -import com.xscm.moduleutil.utils.*; +import com.xscm.moduleutil.utils.BackgroundManager; +import com.xscm.moduleutil.utils.ColorManager; +import com.xscm.moduleutil.utils.ImageLoader; +import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.utils.location.LocationProvider; import com.xscm.moduleutil.utils.location.SystemLocationProvider; import com.xscm.moduleutil.utils.logger.Logger; -import com.tencent.imsdk.v2.V2TIMManager; -import com.tencent.imsdk.v2.V2TIMValueCallback; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -348,7 +357,6 @@ public class MainActivity extends BaseMvpActivity(), QXRedPacketManager.QXRedPacketManagerDelegate { private var roomFragment: RoomFragment? = null private var mRoomBean: RoomBean? = null + //房主信息 private var mRoomOwnerBean: RoomOwnerBean? = null + //房间用户信息 private var mRoomUserBean: RoomUserBean? = null private var mPitList: List = ArrayList() var password: String? = null var roomId: String? = null var mRoomInfoResp: RoomInfoResp? = null + @JvmField @Autowired var taskId: String? = null @@ -229,6 +233,17 @@ class RoomActivity : BaseMvpActivity(), private var qxRedPacketManager: QXRedPacketManager? = null + + override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_DOWN) { + // 拦截返回键,显示退出对话框而不是直接退出 + showExitRoomDialog() + return true + } + return false + } + + override fun doDone() { isOnline = intent.getBooleanExtra("isOnline", false) password = intent.getStringExtra("password") @@ -246,12 +261,12 @@ class RoomActivity : BaseMvpActivity(), tasksManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION) } } - isOnline = intent.getBooleanExtra("isOnline", false) - password = intent.getStringExtra("password") - roomId = intent.getStringExtra("roomId") - mRoomInfoResp = intent.getSerializableExtra("roomInfo") as RoomInfoResp? - LogUtils.dTag("RoomActivit", "doDone" + mRoomInfoResp.toString()) - taskId = intent.getStringExtra("taskId") + //重新进入无需传参 +// isOnline = intent.getBooleanExtra("isOnline", false) +// password = intent.getStringExtra("password") +// roomId = intent.getStringExtra("roomId") +// mRoomInfoResp = intent.getSerializableExtra("roomInfo") as RoomInfoResp? +// taskId = intent.getStringExtra("taskId") LogUtils.e("RoomActivity", "onNewIntent") } @@ -271,14 +286,12 @@ class RoomActivity : BaseMvpActivity(), sActivityRef = WeakReference(this) // 检查是否有保存的最小化状态 checkAndRestoreMinimizeState() - if (onBackPressedDispatcher != null) { - onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - // 拦截返回键,显示退出对话框而不是直接退出 - showExitRoomDialog() - } - }) - } + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + // 拦截返回键,显示退出对话框而不是直接退出 + showExitRoomDialog() + } + }) // 获取Application实例并设置监听器 val app = application as CommonAppContext appStateListener = AppStateManager.getInstance() @@ -311,442 +324,6 @@ class RoomActivity : BaseMvpActivity(), initPublicScreenFragment() } - // 添加弹框到管理列表 - fun addActiveDialog(dialog: DialogInterface) { - activeDialogs.add(dialog) - } - - fun addActiveDialogFragment(dialogFragment: Fragment) { - activeDialogFragments.add(dialogFragment) - } - - - - private var bgEffectView: View? = null - - private fun setupEffectView() { - if (bgEffectView == null) { - // 获取单例管理器 - val manager = QXGiftPlayerManager.getInstance(applicationContext) - - // 获取背景特效视图并添加到布局中 - bgEffectView = manager.defaultBgEffectView - // 找到 mBinding.svgaGift 的父容器 - val parent = mBinding!!.svgaGift.parent - if (parent is ViewGroup) { - val parentViewGroup = parent - // 检查 bgEffectView 是否已经有父视图 - val currentParent = bgEffectView?.getParent() - if (currentParent != null && currentParent is ViewGroup) { - // 如果已经有父视图,先从父视图中移除 - currentParent.removeView(bgEffectView) - } - - // 确保 bgEffectView 不为 null 并且没有父视图后再添加 - if (bgEffectView != null) { - // 将 bgEffectView 添加为 mBinding.svgaGift 的兄弟视图 - // 添加到 mBinding.svgaGift 的父容器中,位置在 mBinding.svgaGift 之前 - parentViewGroup.addView( - bgEffectView, - parentViewGroup.indexOfChild(mBinding!!.svgaGift) - ) - } - - // 设置布局参数 - 填满父视图 - val params = FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.MATCH_PARENT - ) - bgEffectView?.setLayoutParams(params) - } else { - LogUtils.e("mBinding.svgaGift 没有有效的父容器") - return - } - // 获取全屏特效视图 - val fullEffectView = manager.defaultFullEffectView - - // 设置全屏特效视图的布局参数 - 居中并设置尺寸 - val fullParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ) - fullParams.gravity = Gravity.CENTER - fullEffectView.layoutParams = fullParams - - // 获取聊天特效视图 - val chatEffectView = manager.defaultChatEffectView - - // 设置聊天特效视图的布局参数 - 底部居中并设置尺寸 - val chatParams = FrameLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ) - chatParams.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL - chatEffectView.layoutParams = chatParams - } - - val isClose = SpUtil.getOpenEffect() != 1 - QXGiftPlayerManager.getInstance(applicationContext).openOrCloseEffectViewWith(!isClose) - } - - override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { - if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_DOWN) { - // 拦截返回键,显示退出对话框而不是直接退出 - showExitRoomDialog() - return true - } - return false - } - - // 添加一个标记,用于判断用户是否主动离开应用 - private var userLeaving = false - - override fun onUserLeaveHint() { - super.onUserLeaveHint() - LogUtils.e("RoomActivity", "onUserLeaveHint") - // 当用户主动离开应用时(例如按下Home键),设置标记 - userLeaving = true - } - - override fun onPause() { - super.onPause() - LogUtils.e("RoomActivity", "onPause") - GiftDisplayManager.getInstance().clearAll() - if (mRoomInfoResp != null) { - if (mRoomInfoResp!!.room_info.type_id != "6") { - // 只有在用户主动离开应用时才执行最小化操作 - if (!userLeaving) { - // 保持Activity alive,不调用finish() - minimizeToBackground() - - userLeaving = false // 重置标记 - } - } - userLeaving = true - } - } - - fun tob() { - val stub = mBinding!!.roomTop.stubButtons2 - stub.visibility = View.VISIBLE - val imActionJs = mBinding!!.roomTop.imActionJs.findViewById(R.id.im_action_js) - val imActionYs = mBinding!!.roomTop.imActionYs.findViewById(R.id.im_action_ys) - if (imActionJs != null && imActionYs != null) { - imActionJs.setOnClickListener { dialogEnd() } - imActionYs.setOnClickListener { - MvpPre!!.auctionDelay( - SpUtil.getauctionId() - ) - } - } - } - - fun upTop() { - mBinding!!.roomTop.stubButtons2.visibility = View.GONE - } - - private fun dialogEnd() { - // 创建并显示确认对话框 - ConfirmDialog( - this, - "提示", - "您确定要结束本次拍卖吗?", - "确认", - "取消", - { - // 点击“确认”按钮时执行删除操作 - MvpPre!!.auctionEnd(SpUtil.getauctionId(), roomId) - }, - { - // 点击“取消”按钮时取消操作 - }, false, 0 - ).show() - } - - fun upVisibility(visible: Boolean) { - mBinding!!.roomTop.imActionJs.visibility = - if (visible) View.VISIBLE else View.INVISIBLE - mBinding!!.roomTop.imActionYs.visibility = - if (visible) View.VISIBLE else View.INVISIBLE - } - - fun upJs(visible: Boolean) { - mBinding!!.roomTop.imActionJs.visibility = - if (visible) View.VISIBLE else View.INVISIBLE - } - - fun upYs(visible: Boolean) { - mBinding!!.roomTop.imActionYs.visibility = - if (visible) View.VISIBLE else View.INVISIBLE - } - - /** 最小化 */ - private fun showExitRoomDialog() { - if (mRoomInfoResp?.room_info?.type_id.equals("6")) { - val bottomSheet = ExitRoomBottomSheet.newInstance(false, true, true); - bottomSheet.setOnOptionSelectedListener(object : - ExitRoomBottomSheet.OnOptionSelectedListener { - override fun onMinimize() { - } - - override fun onExitRoom() { - // 真正退出房间 - // 调用退出房间方法 - MessageListenerSingleton.quitGroup(roomId); - quit(); - if (mRoomInfoResp?.room_info?.label_id != null && mRoomInfoResp?.room_info?.label_id.equals("5")) { - jiaR() - return - } else { - performExitRoom(1); - } - } - - override fun onCancel() { - // 用户点击取消,不做任何事 - } - }) - - return - } - - val bottomSheet = ExitRoomBottomSheet.newInstance() - bottomSheet.setOnOptionSelectedListener(object : - ExitRoomBottomSheet.OnOptionSelectedListener { - override fun onMinimize() { - // 处理最小化逻辑,比如不销毁 Activity,仅移至后台 - minimizeToBackground() - } - - override fun onExitRoom() { - performExitRoom(1) - } - - override fun onCancel() { - // 用户点击取消,不做任何事 - } - }) - bottomSheet.show(supportFragmentManager, "ExitRoomBottomSheet") - addActiveDialogFragment(bottomSheet) - } - - override fun onConfigurationChanged(newConfig: Configuration) { - super.onConfigurationChanged(newConfig) - val currentFragment = - supportFragmentManager.findFragmentById(R.id.vp_room_pager) // 替换为你实际的容器 ID - if (currentFragment is RoomCabinFragment) { - currentFragment.onConfigurationChanged(newConfig) - - } - } - - fun clearData() { - publicScreenFragment!!.someMethod() - } - - /** - * 释放当前房间 - */ - private fun releaseRoom() { - AgoraManager.getInstance(this).cleanup() - CommonAppContext.getInstance().isPlaying = false - CommonAppContext.getInstance().isShow = false - QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga() - cleanupResources() - } - - override fun onDestroy() { - super.onDestroy() - LogUtils.e("RoomActivity", "onDestroy") - } - - private val imSdkListener = object : V2TIMSDKListener() { - override fun onConnecting() {} - - override fun onConnectSuccess() { //重连成功 - if (CommonAppContext.getInstance().playId != null) { - LogUtils.e("@@@", "重连成功") - LogUtils.e("@@@", "" + CommonAppContext.getInstance().playId) - RetrofitClient.getInstance() - .roomUserReconnect(CommonAppContext.getInstance().playId) - } - } - - override fun onConnectFailed(code: Int, error: String?) { - LogUtils.e("@@@", "断开连接") - CommonAppContext.getInstance().onConnectFailed = true - } - - override fun onKickedOffline() { - // queren1(); - if (CommonAppContext.getInstance().playId != null) { - ToastUtils.show("您的账号已被挤下线") - try { - CommonAppContext.getInstance().clearLoginInfo() - } catch (e: ClassNotFoundException) { - throw RuntimeException(e) - } - } - } - - override fun onUserSigExpired() {} - - override fun onSelfInfoUpdated(info: V2TIMUserFullInfo?) {} - } - - private fun setView(resp: RoomInfoResp?) { - if (resp == null) - return - AppStateManager.getInstance().roomInfo = resp - this.mRoomInfoResp = resp - val roomBean = resp.room_info - this.mRoomBean = roomBean - this.mRoomUserBean = resp.user_info - this.mRoomOwnerBean = resp.room_owner - this.mPitList = mRoomBean?.pit_list ?: ArrayList() - this.roomId = roomBean.room_id - MessageListenerSingleton.getInstance().joinGroup(roomId) //加入房间im - ImageUtils.loadHeadCC(resp.room_info.room_cover, mBinding!!.roomTop.avatar) - mBinding!!.roomTop.name.text = roomBean.room_name - mBinding!!.roomTop.idVal.text = "ID:" + roomBean.room_number - if (mRoomUserBean?.getIs_room_owner() == 1) { - mBinding!!.roomTop.btnFollow.visibility = View.GONE - } else { - mBinding!!.roomTop.btnFollow.visibility = View.VISIBLE - if (resp.isCollect) { - mBinding!!.roomTop.btnFollow.background = - resources.getDrawable(com.xscm.moduleutil.R.mipmap.collected) - mBinding!!.roomTop.btnFollow.text = "" - } - } - number = roomBean.online_number - mBinding!!.roomTop.tvNum.text = number.toString() + "" - - setviewyc(true) - // 确保Fragment已完全初始化后再调用getUpRoomInfo - if (publicScreenFragment != null && publicScreenFragment!!.isAdded && publicScreenFragment!!.view != null) { - publicScreenFragment!!.getUpRoomInfo(resp) - } - if (!isFinishing && !isDestroyed) { - resetFragment() - upHeight() - } else { - Log.e("Fragment", "Fragment transaction skipped due to state loss.") - } - LogUtils.e("加入", roomId) - val userIds = StringBuilder() - if (mRoomInfoResp?.room_info?.pit_list != null) { - for (i in mRoomInfoResp?.room_info?.pit_list!!.indices) { - val userId = mRoomInfoResp!!.room_info.pit_list[i].user_id - if (userId != null && userId != "0" && !userId.isEmpty()) { - if (userIds.length > 0) { - userIds.append(",") - } - userIds.append(userId) - } - } - } - CommonAppContext.getInstance().isPlaying = true - CommonAppContext.getInstance().playId = roomId - CommonAppContext.getInstance().playName = mRoomBean!!.room_name - - CommonAppContext.getInstance().playCover = resp.room_info.room_cover - CommonAppContext.getInstance().showSelf = resp.is_show_self == 1 - - if (mRoomUserBean?.getIs_collect() == 1) { - mBinding!!.roomTop.btnFollow.background = - resources.getDrawable(com.xscm.moduleutil.R.mipmap.yishouc) - mBinding!!.roomTop.btnFollow.text = "" - } else { - ThemeableDrawableUtils.setThemeableRoundedBackground( - mBinding!!.roomTop.btnFollow, - ColorManager.getInstance().primaryColorInt, - 53 - ) - mBinding!!.roomTop.btnFollow.setTextColor(ColorManager.getInstance().buttonColorInt) - mBinding!!.roomTop.btnFollow.text = "收藏" - } - if ((roomBean.type_id == "3" || roomBean.type_id == "1" || roomBean.type_id == "4") && roomBean.label_id == "2") { - AgoraManager.getInstance(this).isBjMusic = false - } else { - AgoraManager.getInstance(this).isBjMusic = true - } - - AgoraManager.stopMuisc() - initializeAudio() - toutiao() - upRoomInfo(resp) - instView() - - if (mRoomInfoResp!!.user_info.pit_number == 9 && mRoomInfoResp!!.user_info.user_id == SpUtil.getUserId() - .toString() + "" - ) { - mBinding!!.roomTop.rl.visibility = View.VISIBLE - ivSoundEffects(true) - } else { - mBinding!!.roomTop.rl.visibility = View.GONE - ivSoundEffects(false) - } - - if (resp.room_info.type_id == "7" || resp.room_info.type_id == "2") { - mBinding!!.rlMore.visibility = View.GONE - mBinding!!.rlMisc.visibility = View.GONE - } - setupEffectView() - // 使用Handler延迟执行,确保Fragment视图已完全创建 - Handler(Looper.getMainLooper()).post { - if (publicScreenFragment != null && publicScreenFragment!!.isAdded && publicScreenFragment!!.view != null) { - publicScreenFragment!!.getUpRoomInfo(resp) - } - } - - if (mRoomInfoResp!!.gift_cycle != null && mRoomInfoResp!!.gift_cycle.xlh_info != null && mRoomInfoResp!!.gift_cycle.xlh_info.xlh_status != null && mRoomInfoResp!!.gift_cycle.xlh_info.xlh_status == "1") { - mBinding?.xlhRk?.visibility = View.VISIBLE - xlhDjs(mRoomInfoResp!!.gift_cycle.xlh_info.end_time) - } else { - mBinding?.xlhRk?.visibility = View.INVISIBLE - releaseCountDownTimer1() - } - - if (mRoomInfoResp!!.hour_ranking_open == 1) { - mBinding!!.clXsb.visibility = View.VISIBLE - } else { - mBinding!!.clXsb.visibility = View.GONE - } - } - - - private fun checkAndRestoreMinimizeState() { - val prefs = getSharedPreferences("room_minimize_state", Context.MODE_PRIVATE) - var isMinimized = prefs.getBoolean("is_minimized", false) - - if (isMinimized) { - isMinimized = true - // 检查最小化时间,如果太久可能需要重新登录 - val minimizeTime = prefs.getLong(PREF_MINIMIZED_TIME, 0) - val currentTime = System.currentTimeMillis() - - // 如果最小化超过一定时间(如30分钟),可能需要重新验证 - if (currentTime - minimizeTime > 30 * 60 * 1000) { - // 清理过期的最小化状态 - clearMinimizeState() - isMinimized = false - } - } else { - isMinimized = false - } - } - - - // TODO: 发红包 - fun redDialogView() { - RedBagSendDialog(this, roomId).show() - } - - var redEnvelopesFragment: RedEnvelopesFragment? = null - var redListDialog: RedListDialog? = null - var redPacketInfo: RedPacketInfo? = null - @SuppressLint("ClickableViewAccessibility") override fun initView() { super.initView() @@ -791,7 +368,7 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.xlhIm.setOnClickListener { val fm = supportFragmentManager - if (fm != null && !fm.isDestroyed) { + if (!fm.isDestroyed) { val newDialog = TourClubDialogFragment.newInstance( roomId ) @@ -852,223 +429,6 @@ class RoomActivity : BaseMvpActivity(), } } - private fun onGiftGiveProgressClcik() { - if (giftGiveEvent == null || giftGiveEvent!!.roonGiftModel == null) { - return - } - - if (giftGiveEvent!!.auction_id != null && !giftGiveEvent!!.auction_id.isEmpty()) { - RetrofitClient.getInstance().roomAuctionJoin( - giftGiveEvent!!.getAuction_id(), - giftGiveEvent!!.getUserId(), - giftGiveEvent!!.getRoonGiftModel().gift_id, - giftGiveEvent!!.getNum(), - "1", - object : BaseObserver() { - override fun onSubscribe(d: Disposable) { -// showGiftGiveProgress(); - } - - override fun onNext(auctionListBean: AuctionListBean) { - if (auctionListBean == null) { - // 处理空响应 - Log.e("RoomActivity", "AuctionListBean is null") - hideGiftGiveProgress() - return - } - showGiftGiveProgress() - } - - override fun onError(e: Throwable) { - super.onError(e) - val msg = e.message - if (!TextUtils.isEmpty(msg) && msg!!.contains("当前余额不足")) { - ToastUtils.show("当前余额不足,请充值") - ThreadUtils.runOnUiThreadDelayed({ - val fragment = RechargeDialogFragment.show( - roomId, null, - supportFragmentManager, "", "" - ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } - }, 1400) - } - hideGiftGiveProgress() - } - }) - } else { - RetrofitClient.getInstance().roomGift( - giftGiveEvent!!.getRoom_id(), - giftGiveEvent!!.getRoonGiftModel().gift_id, - giftGiveEvent!!.getNum(), - giftGiveEvent!!.getUserId(), - "1", - giftGiveEvent!!.getPit(), - giftGiveEvent!!.heart_id, - object : BaseObserver() { - override fun onSubscribe(d: Disposable) { - } - - override fun onNext(s: String) { - showGiftGiveProgress() - } - - override fun onError(e: Throwable) { - super.onError(e) - val msg = e.message - if (!TextUtils.isEmpty(msg) && msg!!.contains("当前余额不足")) { - ToastUtils.show("当前余额不足,请充值") - ThreadUtils.runOnUiThreadDelayed({ - val fragment = RechargeDialogFragment.show( - roomId, null, - supportFragmentManager, "", "" - ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } - }, 1400) - } - hideGiftGiveProgress() - } - }) - } - } - - - - private var giftProgress = 0 - private var giftCountTimer: CountDownTimer? = null - - private fun startGiftProgressTime() { - giftProgress = 0 - if (giftCountTimer != null) { - giftCountTimer!!.cancel() - } - LogUtils.e("xj2", "onSubscribe") - giftCountTimer = object : CountDownTimer((1000 * 10).toLong(), 50) { - override fun onTick(millisUntilFinished: Long) { - if (!isFinishing) { - circularProgress!!.progress = 1000 - (millisUntilFinished / 10).toInt() - } - } - - override fun onFinish() { - circularProgress!!.progress = 1000 - hideGiftGiveProgress() - } - } - giftCountTimer?.start() - } - - private fun showGiftGiveProgress() { - ImageUtils.loadImageView( - giftGiveEvent!!.roonGiftModel.base_image, - mBinding!!.giftShowProgressImg - ) - circularProgress!!.progress = 1000 // 显示进度条,2025年7月19日11:23:37将这个从下面的方法提起到这里, - startGiftProgressTime() - mBinding!!.giftShowLayout.visibility = View.VISIBLE - } - - private fun hideGiftGiveProgress() { - mBinding!!.giftShowLayout.visibility = View.GONE - if (giftCountTimer != null) { - giftCountTimer!!.cancel() - giftCountTimer = null - } - } - - private fun toggleFullScreen() { - if (isFullScreen) { - exitFullScreen() - } else { - // 修改为横屏展示模式而不是全屏模式 - enterLandscapeMode() - } - } - - - private fun enterLandscapeMode() { - isFullScreen = true - - // 设置横屏 - requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE - - if (floatingMagnetView != null) { - // 修改Floa组件的布局参数,使其在横屏时占据更大区域 - val layoutParams = floatingMagnetView!!.layoutParams - if (layoutParams is ConstraintLayout.LayoutParams) { - val params = layoutParams - params.width = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT - params.height = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT - floatingMagnetView!!.layoutParams = params - } else { - // 如果不是ConstraintLayout.LayoutParams,创建新的 - val params = ConstraintLayout.LayoutParams( - ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, - ConstraintLayout.LayoutParams.MATCH_CONSTRAINT - ) - params.topToTop = ConstraintLayout.LayoutParams.PARENT_ID - params.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID - params.startToStart = ConstraintLayout.LayoutParams.PARENT_ID - params.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID - floatingMagnetView!!.layoutParams = params - } - - // 可以调整内部fl_screenshare的布局参数 - val flScreenshare = floatingMagnetView!!.findViewById(R.id.fl_screenshare) - val screenParams = flScreenshare.layoutParams - if (screenParams !is FrameLayout.LayoutParams) { - // 如果不是FrameLayout.LayoutParams,创建新的 - val newScreenParams = FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.MATCH_PARENT - ) - flScreenshare.layoutParams = newScreenParams - } else { - val newScreenParams = screenParams - newScreenParams.width = FrameLayout.LayoutParams.MATCH_PARENT - newScreenParams.height = FrameLayout.LayoutParams.MATCH_PARENT - flScreenshare.layoutParams = newScreenParams - } - - // 显示退出按钮 - ivQuan!!.visibility = View.VISIBLE - } - } - - private fun exitFullScreen() { - isFullScreen = false - - // 设置回竖屏 - requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED - - if (floatingMagnetView != null) { - // 恢复原始尺寸 - val params = ConstraintLayout.LayoutParams( - resources.getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_240), - resources.getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_135) - ) - params.topToTop = ConstraintLayout.LayoutParams.PARENT_ID - params.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID - params.startToStart = ConstraintLayout.LayoutParams.PARENT_ID - params.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID - floatingMagnetView!!.layoutParams = params - - // 恢复内部fl_screenshare的布局参数 - val flScreenshare = floatingMagnetView!!.findViewById(R.id.fl_screenshare) - val screenParams = FrameLayout.LayoutParams( - FrameLayout.LayoutParams.MATCH_PARENT, - FrameLayout.LayoutParams.MATCH_PARENT - ) - flScreenshare.layoutParams = screenParams - } - - // 隐藏退出按钮 - ivExitFullscreen!!.visibility = View.GONE - } - override fun initData() { if (!EasyPermissions.hasPermissions(this, *permissions)) { EasyPermissions.requestPermissions( @@ -1218,11 +578,658 @@ class RoomActivity : BaseMvpActivity(), setView(mRoomInfoResp) } + // 添加弹框到管理列表 + fun addActiveDialog(dialog: DialogInterface) { + activeDialogs.add(dialog) + } + + fun addActiveDialogFragment(dialogFragment: Fragment) { + activeDialogFragments.add(dialogFragment) + } + + + private var bgEffectView: View? = null + + private fun setupEffectView() { + if (bgEffectView == null) { + // 获取单例管理器 + val manager = QXGiftPlayerManager.getInstance(applicationContext) + + // 获取背景特效视图并添加到布局中 + bgEffectView = manager.defaultBgEffectView + // 找到 mBinding.svgaGift 的父容器 + val parent = mBinding!!.svgaGift.parent + if (parent is ViewGroup) { + val parentViewGroup = parent + // 检查 bgEffectView 是否已经有父视图 + val currentParent = bgEffectView?.getParent() + if (currentParent != null && currentParent is ViewGroup) { + // 如果已经有父视图,先从父视图中移除 + currentParent.removeView(bgEffectView) + } + + // 确保 bgEffectView 不为 null 并且没有父视图后再添加 + if (bgEffectView != null) { + // 将 bgEffectView 添加为 mBinding.svgaGift 的兄弟视图 + // 添加到 mBinding.svgaGift 的父容器中,位置在 mBinding.svgaGift 之前 + parentViewGroup.addView( + bgEffectView, + parentViewGroup.indexOfChild(mBinding!!.svgaGift) + ) + } + + // 设置布局参数 - 填满父视图 + val params = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT + ) + bgEffectView?.setLayoutParams(params) + } else { + LogUtils.e("mBinding.svgaGift 没有有效的父容器") + return + } + // 获取全屏特效视图 + val fullEffectView = manager.defaultFullEffectView + + // 设置全屏特效视图的布局参数 - 居中并设置尺寸 + val fullParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + fullParams.gravity = Gravity.CENTER + fullEffectView.layoutParams = fullParams + + // 获取聊天特效视图 + val chatEffectView = manager.defaultChatEffectView + + // 设置聊天特效视图的布局参数 - 底部居中并设置尺寸 + val chatParams = FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + chatParams.gravity = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL + chatEffectView.layoutParams = chatParams + } + + val isClose = SpUtil.getOpenEffect() != 1 + QXGiftPlayerManager.getInstance(applicationContext).openOrCloseEffectViewWith(!isClose) + } + + + // 添加一个标记,用于判断用户是否主动离开应用 + private var userLeaving = false + + override fun onUserLeaveHint() { + super.onUserLeaveHint() + LogUtils.e("RoomActivity", "onUserLeaveHint") + // 当用户主动离开应用时(例如按下Home键),设置标记 + userLeaving = true + } + + override fun onPause() { + super.onPause() + LogUtils.e("RoomActivity", "onPause") + GiftDisplayManager.getInstance().clearAll() + if (mRoomInfoResp != null) { + if (mRoomInfoResp!!.room_info.type_id != "6") { + // 只有在用户主动离开应用时才执行最小化操作 + if (!userLeaving) { + // 保持Activity alive,不调用finish() + minimizeToBackground() + + userLeaving = false // 重置标记 + } + } + userLeaving = true + } + } + + fun tob() { + val stub = mBinding!!.roomTop.stubButtons2 + stub.visibility = View.VISIBLE + val imActionJs = mBinding!!.roomTop.imActionJs.findViewById(R.id.im_action_js) + val imActionYs = mBinding!!.roomTop.imActionYs.findViewById(R.id.im_action_ys) + if (imActionJs != null && imActionYs != null) { + imActionJs.setOnClickListener { dialogEnd() } + imActionYs.setOnClickListener { + MvpPre!!.auctionDelay( + SpUtil.getauctionId() + ) + } + } + } + + fun upTop() { + mBinding!!.roomTop.stubButtons2.visibility = View.GONE + } + + private fun dialogEnd() { + // 创建并显示确认对话框 + ConfirmDialog( + this, + "提示", + "您确定要结束本次拍卖吗?", + "确认", + "取消", + { + // 点击“确认”按钮时执行删除操作 + MvpPre!!.auctionEnd(SpUtil.getauctionId(), roomId) + }, + { + // 点击“取消”按钮时取消操作 + }, false, 0 + ).show() + } + + fun isAuctionTopBtVisible(isShow: Boolean) { + mBinding!!.roomTop.rl.visibility = View.GONE + mBinding!!.roomTop.stubButtons2.visibility = if (isShow) View.VISIBLE else View.GONE + } + + + fun upVisibility(visible: Boolean) { + mBinding!!.roomTop.imActionJs.visibility = + if (visible) View.VISIBLE else View.INVISIBLE + mBinding!!.roomTop.imActionYs.visibility = + if (visible) View.VISIBLE else View.INVISIBLE + } + + fun upJs(visible: Boolean) { + mBinding!!.roomTop.imActionJs.visibility = + if (visible) View.VISIBLE else View.INVISIBLE + } + + fun upYs(visible: Boolean) { + mBinding!!.roomTop.imActionYs.visibility = + if (visible) View.VISIBLE else View.INVISIBLE + } + + /** 最小化 */ + private fun showExitRoomDialog() { + if (mRoomInfoResp?.room_info?.type_id.equals("6")) { + val bottomSheet = ExitRoomBottomSheet.newInstance(false, true, true); + bottomSheet.setOnOptionSelectedListener(object : + ExitRoomBottomSheet.OnOptionSelectedListener { + override fun onMinimize() { + } + + override fun onExitRoom() { + // 真正退出房间 + // 调用退出房间方法 + MessageListenerSingleton.quitGroup(roomId); + quit(); + if (mRoomInfoResp?.room_info?.label_id != null && mRoomInfoResp?.room_info?.label_id.equals( + "5" + ) + ) { + jiaR() + return + } else { + performExitRoom(1); + } + } + + override fun onCancel() { + // 用户点击取消,不做任何事 + } + }) + + return + } + + val bottomSheet = ExitRoomBottomSheet.newInstance() + bottomSheet.setOnOptionSelectedListener(object : + ExitRoomBottomSheet.OnOptionSelectedListener { + override fun onMinimize() { + // 处理最小化逻辑,比如不销毁 Activity,仅移至后台 + minimizeToBackground() + } + + override fun onExitRoom() { + performExitRoom(1) + } + + override fun onCancel() { + // 用户点击取消,不做任何事 + } + }) + bottomSheet.show(supportFragmentManager, "ExitRoomBottomSheet") + addActiveDialogFragment(bottomSheet) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + val currentFragment = + supportFragmentManager.findFragmentById(R.id.vp_room_pager) // 替换为你实际的容器 ID + if (currentFragment is RoomCabinFragment) { + currentFragment.onConfigurationChanged(newConfig) + + } + } + + fun clearData() { + publicScreenFragment!!.someMethod() + } + + /** + * 释放当前房间 + */ + private fun releaseRoom() { + AgoraManager.getInstance(this).cleanup() + CommonAppContext.getInstance().isPlaying = false + CommonAppContext.getInstance().isShow = false + QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga() + cleanupResources() + } + + override fun onDestroy() { + super.onDestroy() + LogUtils.e("RoomActivity", "onDestroy") + } + + private val imSdkListener = object : V2TIMSDKListener() { + override fun onConnecting() {} + + override fun onConnectSuccess() { //重连成功 + if (CommonAppContext.getInstance().playId != null) { + LogUtils.e("@@@", "重连成功") + LogUtils.e("@@@", "" + CommonAppContext.getInstance().playId) + RetrofitClient.getInstance() + .roomUserReconnect(CommonAppContext.getInstance().playId) + } + } + + override fun onConnectFailed(code: Int, error: String?) { + LogUtils.e("@@@", "断开连接") + CommonAppContext.getInstance().onConnectFailed = true + } + + override fun onKickedOffline() { + // queren1(); + if (CommonAppContext.getInstance().playId != null) { + ToastUtils.show("您的账号已被挤下线") + try { + CommonAppContext.getInstance().clearLoginInfo() + } catch (e: ClassNotFoundException) { + throw RuntimeException(e) + } + } + } + + override fun onUserSigExpired() {} + + override fun onSelfInfoUpdated(info: V2TIMUserFullInfo?) {} + } + + private fun setView(resp: RoomInfoResp?) { + if (resp == null) + return + AppStateManager.getInstance().roomInfo = resp + this.mRoomInfoResp = resp + val roomBean = resp.room_info + this.mRoomBean = roomBean + this.mRoomUserBean = resp.user_info + this.mRoomOwnerBean = resp.room_owner + this.mPitList = mRoomBean?.pit_list ?: ArrayList() + this.roomId = roomBean.room_id + MessageListenerSingleton.getInstance().joinGroup(roomId) //加入房间im + ImageUtils.loadHeadCC(resp.room_info.room_cover, mBinding!!.roomTop.avatar) + mBinding!!.roomTop.name.text = roomBean.room_name + mBinding!!.roomTop.idVal.text = "ID:" + roomBean.room_number + if (mRoomUserBean?.getIs_room_owner() == 1) { + mBinding!!.roomTop.btnFollow.visibility = View.GONE + } else { + mBinding!!.roomTop.btnFollow.visibility = View.VISIBLE + if (resp.isCollect) { + mBinding!!.roomTop.btnFollow.background = + resources.getDrawable(com.xscm.moduleutil.R.mipmap.collected) + mBinding!!.roomTop.btnFollow.text = "" + } + } + number = roomBean.online_number + mBinding!!.roomTop.tvNum.text = number.toString() + "" + + setviewyc(true) + + + LogUtils.e("加入", roomId) + val userIds = StringBuilder() + if (mRoomInfoResp?.room_info?.pit_list != null) { + for (i in mRoomInfoResp?.room_info?.pit_list!!.indices) { + val userId = mRoomInfoResp!!.room_info.pit_list[i].user_id + if (userId != null && userId != "0" && !userId.isEmpty()) { + if (userIds.length > 0) { + userIds.append(",") + } + userIds.append(userId) + } + } + } + CommonAppContext.getInstance().isPlaying = true + CommonAppContext.getInstance().playId = roomId + CommonAppContext.getInstance().playName = mRoomBean!!.room_name + + CommonAppContext.getInstance().playCover = resp.room_info.room_cover + CommonAppContext.getInstance().showSelf = resp.is_show_self == 1 + + if (mRoomUserBean?.getIs_collect() == 1) { + mBinding!!.roomTop.btnFollow.background = + resources.getDrawable(com.xscm.moduleutil.R.mipmap.yishouc) + mBinding!!.roomTop.btnFollow.text = "" + } else { + ThemeableDrawableUtils.setThemeableRoundedBackground( + mBinding!!.roomTop.btnFollow, + ColorManager.getInstance().primaryColorInt, + 53 + ) + mBinding!!.roomTop.btnFollow.setTextColor(ColorManager.getInstance().buttonColorInt) + mBinding!!.roomTop.btnFollow.text = "收藏" + } + if ((roomBean.type_id == "3" || roomBean.type_id == "1" || roomBean.type_id == "4") && roomBean.label_id == "2") { + AgoraManager.getInstance(this).isBjMusic = false + } else { + AgoraManager.getInstance(this).isBjMusic = true + } + + + if (mRoomInfoResp!!.user_info.pit_number == 9 && mRoomInfoResp!!.user_info.user_id == SpUtil.getUserId() + .toString() + "" + ) { + mBinding!!.roomTop.rl.visibility = View.VISIBLE + ivSoundEffects(true) + } else { + mBinding!!.roomTop.rl.visibility = View.GONE + ivSoundEffects(false) + } + + if (resp.room_info.type_id == "7" || resp.room_info.type_id == "2") { + mBinding!!.rlMore.visibility = View.GONE + mBinding!!.rlMisc.visibility = View.GONE + } + + if (mRoomInfoResp!!.gift_cycle != null && mRoomInfoResp!!.gift_cycle.xlh_info != null && mRoomInfoResp!!.gift_cycle.xlh_info.xlh_status != null && mRoomInfoResp!!.gift_cycle.xlh_info.xlh_status == "1") { + mBinding?.xlhRk?.visibility = View.VISIBLE + xlhDjs(mRoomInfoResp!!.gift_cycle.xlh_info.end_time) + } else { + mBinding?.xlhRk?.visibility = View.INVISIBLE + releaseCountDownTimer1() + } + + if (mRoomInfoResp!!.hour_ranking_open == 1) { + mBinding!!.clXsb.visibility = View.VISIBLE + } else { + mBinding!!.clXsb.visibility = View.GONE + } + + + // 使用Handler延迟执行,确保Fragment视图已完全创建 + if (publicScreenFragment != null && publicScreenFragment!!.isAdded && publicScreenFragment!!.view != null) { + publicScreenFragment!!.upRoomInfo(resp) + } + AgoraManager.stopMuisc() + initializeAudio() + toutiao() + upRoomInfo(resp) + instView() + resetFragment() + upHeight() + setupEffectView() + } + + + private fun checkAndRestoreMinimizeState() { + val prefs = getSharedPreferences("room_minimize_state", Context.MODE_PRIVATE) + var isMinimized = prefs.getBoolean("is_minimized", false) + + if (isMinimized) { + isMinimized = true + // 检查最小化时间,如果太久可能需要重新登录 + val minimizeTime = prefs.getLong(PREF_MINIMIZED_TIME, 0) + val currentTime = System.currentTimeMillis() + + // 如果最小化超过一定时间(如30分钟),可能需要重新验证 + if (currentTime - minimizeTime > 30 * 60 * 1000) { + // 清理过期的最小化状态 + clearMinimizeState() + isMinimized = false + } + } else { + isMinimized = false + } + } + + + // TODO: 发红包 + fun redDialogView() { + RedBagSendDialog(this, roomId).show() + } + + var redEnvelopesFragment: RedEnvelopesFragment? = null + var redListDialog: RedListDialog? = null + var redPacketInfo: RedPacketInfo? = null + + + private fun onGiftGiveProgressClcik() { + if (giftGiveEvent == null || giftGiveEvent!!.roonGiftModel == null) { + return + } + + if (giftGiveEvent!!.auction_id != null && !giftGiveEvent!!.auction_id.isEmpty()) { + RetrofitClient.getInstance().roomAuctionJoin( + giftGiveEvent!!.getAuction_id(), + giftGiveEvent!!.getUserId(), + giftGiveEvent!!.getRoonGiftModel().gift_id, + giftGiveEvent!!.getNum(), + "1", + object : BaseObserver() { + override fun onSubscribe(d: Disposable) { +// showGiftGiveProgress(); + } + + override fun onNext(auctionListBean: AuctionListBean) { + if (auctionListBean == null) { + // 处理空响应 + Log.e("RoomActivity", "AuctionListBean is null") + hideGiftGiveProgress() + return + } + showGiftGiveProgress() + } + + override fun onError(e: Throwable) { + super.onError(e) + val msg = e.message + if (!TextUtils.isEmpty(msg) && msg!!.contains("当前余额不足")) { + ToastUtils.show("当前余额不足,请充值") + ThreadUtils.runOnUiThreadDelayed({ + val fragment = RechargeDialogFragment.show( + roomId, null, + supportFragmentManager, "", "" + ) + if (fragment != null) { + addActiveDialogFragment(fragment) // 添加到管理列表 + } + }, 1400) + } + hideGiftGiveProgress() + } + }) + } else { + RetrofitClient.getInstance().roomGift( + giftGiveEvent!!.getRoom_id(), + giftGiveEvent!!.getRoonGiftModel().gift_id, + giftGiveEvent!!.getNum(), + giftGiveEvent!!.getUserId(), + "1", + giftGiveEvent!!.getPit(), + giftGiveEvent!!.heart_id, + object : BaseObserver() { + override fun onSubscribe(d: Disposable) { + } + + override fun onNext(s: String) { + showGiftGiveProgress() + } + + override fun onError(e: Throwable) { + super.onError(e) + val msg = e.message + if (!TextUtils.isEmpty(msg) && msg!!.contains("当前余额不足")) { + ToastUtils.show("当前余额不足,请充值") + ThreadUtils.runOnUiThreadDelayed({ + val fragment = RechargeDialogFragment.show( + roomId, null, + supportFragmentManager, "", "" + ) + if (fragment != null) { + addActiveDialogFragment(fragment) // 添加到管理列表 + } + }, 1400) + } + hideGiftGiveProgress() + } + }) + } + } + + + private var giftProgress = 0 + private var giftCountTimer: CountDownTimer? = null + + private fun startGiftProgressTime() { + giftProgress = 0 + if (giftCountTimer != null) { + giftCountTimer!!.cancel() + } + LogUtils.e("xj2", "onSubscribe") + giftCountTimer = object : CountDownTimer((1000 * 10).toLong(), 50) { + override fun onTick(millisUntilFinished: Long) { + if (!isFinishing) { + circularProgress!!.progress = 1000 - (millisUntilFinished / 10).toInt() + } + } + + override fun onFinish() { + circularProgress!!.progress = 1000 + hideGiftGiveProgress() + } + } + giftCountTimer?.start() + } + + private fun showGiftGiveProgress() { + ImageUtils.loadImageView( + giftGiveEvent!!.roonGiftModel.base_image, + mBinding!!.giftShowProgressImg + ) + circularProgress!!.progress = 1000 // 显示进度条,2025年7月19日11:23:37将这个从下面的方法提起到这里, + startGiftProgressTime() + mBinding!!.giftShowLayout.visibility = View.VISIBLE + } + + private fun hideGiftGiveProgress() { + mBinding!!.giftShowLayout.visibility = View.GONE + if (giftCountTimer != null) { + giftCountTimer!!.cancel() + giftCountTimer = null + } + } + + private fun toggleFullScreen() { + if (isFullScreen) { + exitFullScreen() + } else { + // 修改为横屏展示模式而不是全屏模式 + enterLandscapeMode() + } + } + + + private fun enterLandscapeMode() { + isFullScreen = true + + // 设置横屏 + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + + if (floatingMagnetView != null) { + // 修改Floa组件的布局参数,使其在横屏时占据更大区域 + val layoutParams = floatingMagnetView!!.layoutParams + if (layoutParams is ConstraintLayout.LayoutParams) { + val params = layoutParams + params.width = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT + params.height = ConstraintLayout.LayoutParams.MATCH_CONSTRAINT + floatingMagnetView!!.layoutParams = params + } else { + // 如果不是ConstraintLayout.LayoutParams,创建新的 + val params = ConstraintLayout.LayoutParams( + ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, + ConstraintLayout.LayoutParams.MATCH_CONSTRAINT + ) + params.topToTop = ConstraintLayout.LayoutParams.PARENT_ID + params.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID + params.startToStart = ConstraintLayout.LayoutParams.PARENT_ID + params.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID + floatingMagnetView!!.layoutParams = params + } + + // 可以调整内部fl_screenshare的布局参数 + val flScreenshare = floatingMagnetView!!.findViewById(R.id.fl_screenshare) + val screenParams = flScreenshare.layoutParams + if (screenParams !is FrameLayout.LayoutParams) { + // 如果不是FrameLayout.LayoutParams,创建新的 + val newScreenParams = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT + ) + flScreenshare.layoutParams = newScreenParams + } else { + val newScreenParams = screenParams + newScreenParams.width = FrameLayout.LayoutParams.MATCH_PARENT + newScreenParams.height = FrameLayout.LayoutParams.MATCH_PARENT + flScreenshare.layoutParams = newScreenParams + } + + // 显示退出按钮 + ivQuan!!.visibility = View.VISIBLE + } + } + + private fun exitFullScreen() { + isFullScreen = false + + // 设置回竖屏 + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED + + if (floatingMagnetView != null) { + // 恢复原始尺寸 + val params = ConstraintLayout.LayoutParams( + resources.getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_240), + resources.getDimensionPixelSize(com.xscm.moduleutil.R.dimen.dp_135) + ) + params.topToTop = ConstraintLayout.LayoutParams.PARENT_ID + params.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID + params.startToStart = ConstraintLayout.LayoutParams.PARENT_ID + params.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID + floatingMagnetView!!.layoutParams = params + + // 恢复内部fl_screenshare的布局参数 + val flScreenshare = floatingMagnetView!!.findViewById(R.id.fl_screenshare) + val screenParams = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT + ) + flScreenshare.layoutParams = screenParams + } + + // 隐藏退出按钮 + ivExitFullscreen!!.visibility = View.GONE + } + private fun initPublicScreenFragment() { // 如果不存在,则创建新的实例 if (publicScreenFragment == null) { - publicScreenFragment = ChatRoomFragment.newInstance(roomId) + publicScreenFragment = ChatRoomFragment.newInstance(mRoomInfoResp) supportFragmentManager.beginTransaction() .replace(R.id.ease_container, publicScreenFragment!!) .commitAllowingStateLoss() @@ -1239,7 +1246,7 @@ class RoomActivity : BaseMvpActivity(), fun roomInfoEvent(messageEvent: RoomMessageEvent?) { if (messageEvent == null) return if (roomFragment == null) { - roomFragment = RoomFragment.newInstance(mRoomInfoResp) + roomFragment = RoomFragment.newInstance(this, mRoomInfoResp) supportFragmentManager .beginTransaction() .replace(R.id.vp_room_pager, roomFragment!!) @@ -1429,7 +1436,7 @@ class RoomActivity : BaseMvpActivity(), private fun xlhDjs(endTimeStr: String?) { // 获取结束时间并启动倒计时 - if (endTimeStr != null && !endTimeStr.isEmpty()) { + if (!endTimeStr.isNullOrEmpty()) { try { // 假设 end_time 是时间戳字符串 endTime = endTimeStr.toLong() @@ -1443,7 +1450,7 @@ class RoomActivity : BaseMvpActivity(), } } - fun countDownTime(time: Long) { + private fun countDownTime(time: Long) { try { if (time <= 0) { setTime(0) @@ -1516,10 +1523,6 @@ class RoomActivity : BaseMvpActivity(), val pitList = mRoomInfoResp!!.room_info.pit_list if (pitList != null && !pitList.isEmpty()) { -// pitMap.clear() // 避免数据累积 -// for (roomPitBean in pitList) { -// pitMap[roomPitBean.pit_number] = roomPitBean -// } if (text == null) { return @@ -1543,16 +1546,6 @@ class RoomActivity : BaseMvpActivity(), mRoomInfoResp!!.user_info.pit_number = Integer.parseInt(toPitNumber) -// if (messageEvent.text.user_id .equals(SpUtil.getUserId().toString()) && "9" == toPitNumber) { -// if (customMusicFloatingView != null) { -// customMusicFloatingView!!.destroy() -// AgoraManager.getInstance(this@RoomActivity).desMusic() -// isMusic = false -// } -// mBinding!!.roomTop.rl.visibility = View.GONE -// ivSoundEffects(false) -// } - if ("9" == toPitNumber && messageEvent.text.user_id.equals(SpUtil.getUserId().toString())) { mBinding!!.roomTop.rl.visibility = View.VISIBLE ivSoundEffects(true) @@ -1565,140 +1558,19 @@ class RoomActivity : BaseMvpActivity(), mBinding!!.roomTop.rl.visibility = View.GONE ivSoundEffects(false) } -// if (TextUtils.isEmpty(fromPitNumber) || TextUtils.isEmpty(toPitNumber)) { -// return -// } -//// -// if (mRoomInfoResp == null || mRoomInfoResp!!.room_info == null) { -// LogUtils.e("Room info is null") -// return -// } -//// -// val pitList = mRoomInfoResp!!.room_info.pit_list -// if (pitList == null || pitList.isEmpty()) { -// LogUtils.e("pit_list is null or empty") -// return -// } -//// -// var fromBean: RoomPitBean? = null -// var toBean: RoomPitBean? = null -// val pitListCopy: MutableList = ArrayList() -// -// for (bean in pitList) { -// if (bean == null) continue -// if (fromPitNumber == bean.pit_number) { -// fromBean = bean -// pitListCopy.add(bean) -// } else if (toPitNumber == bean.pit_number) { -// toBean = bean -// pitListCopy.add(bean) -// } -// } -// -// if (fromBean == null || toBean == null) { -// LogUtils.e("Cannot find pit number: from=$fromPitNumber, to=$toPitNumber") -// return -// } -// -// // 交换 pit_number -// val temp = fromBean.pit_number -// fromBean.pit_number = toBean.pit_number -// toBean.pit_number = temp -// -// // 构造新的 pitList -// val newPitList: MutableList = ArrayList() -// for (bean in pitList) { -// if (!pitListCopy.contains(bean)) { -// newPitList.add(bean) -// } -// } -// newPitList.add(fromBean) -// newPitList.add(toBean) -//// 排序 - 更简洁的 Kotlin 写法 -// newPitList.sortWith(compareBy { -// try { -// it.pit_number.toInt() -// } catch (e: NumberFormatException) { -// it.pit_number -// } -// }) -// -// mRoomInfoResp!!.room_info.pit_list = newPitList -// -// // 更新当前用户 pit_number -// if (mRoomInfoResp!!.user_info != null) { -// val currentUserId = SpUtil.getUserId().toString() -// val fromUserId = fromBean.user_id -// val toUserId = toBean.user_id -// -// if (fromUserId != null && fromUserId == currentUserId) { -// try { -// mRoomInfoResp!!.user_info.pit_number = fromBean.pit_number.toInt() -// } catch (e: NumberFormatException) { -// LogUtils.e("Invalid pit number: " + toBean.pit_number) -// } -// } else if (toUserId != null && toUserId == currentUserId) { -// try { -// mRoomInfoResp!!.user_info.pit_number = fromBean.pit_number.toInt() -// } catch (e: NumberFormatException) { -// LogUtils.e("Invalid pit number: " + toBean.pit_number) -// } -// } -// } - dispatchRoomEvent(messageEvent) - } + roomFragment!!.handleRoomMessage(messageEvent) - private fun dispatchRoomEvent(messageEvent: RoomMessageEvent) { - if (mRoomInfoResp == null || mRoomInfoResp!!.room_info == null) return - roomFragment!!.upRoomInfoData(mRoomInfoResp) - val typeId = mRoomInfoResp!!.room_info.type_id - if ("2" == typeId) { - - roomFragment!!.handleRoomMessage(messageEvent) - } else if ("3" == typeId || "4" == typeId || "1" == typeId || "8" == typeId) { - val labelId = mRoomInfoResp!!.room_info.label_id - if ("2" == labelId) { - roomFragment!!.handleRoomMessage(messageEvent) - } else if ("1" == labelId) { - roomFragment!!.handleRoomMessage(messageEvent) - } - } else if ("7" == typeId) { - roomFragment!!.handleRoomMessage(messageEvent) - } if (mRoomInfoResp!!.user_info.pit_number == 9) { mBinding!!.roomTop.rl.visibility = View.VISIBLE ivSoundEffects(true) } + } private fun hand1005(messageEvent: RoomMessageEvent, text: T?) { if (text == null || mRoomInfoResp == null || mRoomInfoResp!!.room_info == null) return - - val giftInfo = text.giftInfo - val toUserInfo = text.toUserInfo - // if (giftInfo == null || toUserInfo == null) return; - val pitList = mRoomInfoResp!!.room_info.pit_list ?: return - - - // roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp); - val typeId = mRoomInfoResp!!.room_info.type_id - if ("2" == typeId) { - roomFragment!!.handleRoomMessage(messageEvent) - return - } else if ("1" == typeId || "4" == typeId || "3" == typeId || "8" == typeId) { - val labelId = mRoomInfoResp!!.room_info.label_id - if ("2" == labelId) { - roomFragment!!.handleRoomMessage(messageEvent) - return - } else if ("1" == labelId) { - roomFragment!!.handleRoomMessage(messageEvent) - return - } - } else if ("7" == typeId) { //交友房 - roomFragment!!.handleRoomMessage(messageEvent) - return - } + roomFragment!!.handleRoomMessage(messageEvent) } private fun handleMsgType1014(messageEvent: RoomMessageEvent, text: T?) { @@ -1778,7 +1650,7 @@ class RoomActivity : BaseMvpActivity(), private fun handleMsgType1003(messageEvent: RoomMessageEvent, text: T?) { if (text == null || mRoomInfoResp == null || mRoomInfoResp!!.room_info == null) return if (roomFragment == null) { - roomFragment = RoomFragment.newInstance(mRoomInfoResp) + roomFragment = RoomFragment.newInstance(this, mRoomInfoResp) supportFragmentManager .beginTransaction() .replace(R.id.vp_room_pager, roomFragment!!) @@ -2120,7 +1992,6 @@ class RoomActivity : BaseMvpActivity(), lastSwitchedRoomId = pendingRoomId!! AgoraManager.getInstance(OkDownloadProvider.context).lastRoomId = messageEvent.roomId -// RoomManager.getInstance().fetchRoomDataAndEnter(this,pendingRoomId, "") } } pendingRoomId = null @@ -2208,7 +2079,8 @@ class RoomActivity : BaseMvpActivity(), if (text == null) return try { - val parsedText: RoomMessageEvent.text = GsonUtils.fromJson(text, RoomMessageEvent.text::class.java) + val parsedText: RoomMessageEvent.text = + GsonUtils.fromJson(text, RoomMessageEvent.text::class.java) if (parsedText.is_mute == 1) { AgoraManagerEx.getInstance(this).muteLocalAudioStreamEx(true) } else { @@ -2224,7 +2096,6 @@ class RoomActivity : BaseMvpActivity(), if (mRoomInfoResp != null && mRoomInfoResp!!.user_info != null) { mRoomInfoResp!!.user_info.is_host = 1 roomFragment!!.upRoomInfoData(mRoomInfoResp) - // roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp); } } @@ -2239,7 +2110,6 @@ class RoomActivity : BaseMvpActivity(), if (mRoomInfoResp != null && mRoomInfoResp!!.user_info != null) { mRoomInfoResp!!.user_info.is_host = 0 roomFragment!!.upRoomInfoData(mRoomInfoResp) - // roomFragment.updateSeatViewExchangedWithPitArray(mRoomInfoResp); } } @@ -2642,9 +2512,9 @@ class RoomActivity : BaseMvpActivity(), appStateListener!!.isAppInBackground = true } QXGiftPlayerManager.getInstance(applicationContext).destroyEffectSvga() - if (ActivityUtils.getActivityList().size <= 1){ + if (ActivityUtils.getActivityList().size <= 1) { singleTaskToActivity(MainActivity::class.java) - }else{ + } else { singleTaskToActivity(ActivityUtils.getActivityList()[1]::class.java) } } @@ -2695,7 +2565,6 @@ class RoomActivity : BaseMvpActivity(), * * @param type */ - // @Override fun switchMic(type: Int) { if (type == 1) { mBinding!!.ivMic.setImageResource(com.xscm.moduleutil.R.mipmap.room_microphone) @@ -2840,7 +2709,7 @@ class RoomActivity : BaseMvpActivity(), if (mutableListOf("1").contains(typeId) && "1" == labelId) { rl_more?.visibility = View.VISIBLE rl_misc?.visibility = View.VISIBLE - }else{ + } else { rl_more?.visibility = View.GONE rl_misc?.visibility = View.GONE } @@ -3015,13 +2884,11 @@ class RoomActivity : BaseMvpActivity(), var intRed_num: String? = null - override fun getLayoutId(): Int { return R.layout.activity_room } - override fun bindPresenter(): RoomPresenter { return RoomPresenter(this, this) } @@ -3122,7 +2989,7 @@ class RoomActivity : BaseMvpActivity(), // MvpPre.userOnlineStatus(userIds.toString(), roomId); } if (publicScreenFragment != null) { - publicScreenFragment!!.getUpRoomInfo(resp) + publicScreenFragment!!.upRoomInfo(resp) } instView() @@ -3157,29 +3024,8 @@ class RoomActivity : BaseMvpActivity(), } } - protected fun tzblChanged() { -// mBinding.dhv9.updateTzbl(SpUtil.getTzbl(roomId)); - - val userIds = StringBuilder() - for (i in 0 until mRoomInfoResp!!.room_info!!.pit_list!!.size) { - val userId = mRoomInfoResp!!.room_info!!.pit_list[i]!!.user_id!! - if (userId != null && userId != "0" && userId.isNotEmpty()) { - if (userIds.isNotEmpty()) { - userIds.append(",") - } - userIds.append(userId) - } - } - - if (userIds.isNotEmpty() && roomId != null) { - MvpPre!!.userOnlineStatus(userIds.toString(), roomId) - } else { -// updateWheatData() - } - } - - private fun instView() { //隐藏视图 - + //隐藏视图 + private fun instView() { if (mRoomInfoResp!!.user_info.pit_number != 0) { aBoolean = false ivWheatFeeding(com.xscm.moduleutil.R.mipmap.room_wheat_feeding_up) @@ -3233,11 +3079,8 @@ class RoomActivity : BaseMvpActivity(), setRoleType(roleType, pitNumber) } - private val isClick = false - private val isIntercepted = false - private val downTime: Long = 0 - /** 头条 */ + @SuppressLint("ClickableViewAccessibility") fun toutiao() { if (mRoomInfoResp!!.room_info.head_line != null) { mBinding!!.flaoatZuoji.visibility = View.VISIBLE @@ -3268,10 +3111,6 @@ class RoomActivity : BaseMvpActivity(), com.blankj.utilcode.util.ToastUtils.showLong("您就在当前房间") } } -// ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS) -// .withString("from", "我的界面") -// .withString("roomId", mRoomInfoResp!!.room_info.head_line.room_id) -// .navigation() } mBinding!!.imYc.setOnClickListener { v: View? -> @@ -3395,140 +3234,170 @@ class RoomActivity : BaseMvpActivity(), @Subscribe(threadMode = ThreadMode.MAIN) fun onEventMain(event: BaseEvent?) { - if (event is MusicEvent) { - if (!isMusic) { - xunf() - isMusic = true - } - val fragment = RequestDialogFragment.show( - roomId, mRoomInfoResp, 2, - supportFragmentManager - ) - if (fragment != null) { - addActiveDialogFragment(fragment) // 添加到管理列表 - } - } else if (event is RoomInputHideEvent) { - mBinding!!.vpRoomPager.isScrollContainer = !event.hide - } else if (event is SurfaceEvent) { - if (mRoomInfoResp!!.room_info.type_id == "6") { //判断是否是电影房 - floatingMagnetView = findViewById(R.id.flaoat) //电影房 - if (mRoomInfoResp!!.user_info.is_room_owner != 1) { //判断是不是房主,1:是 如何是,不展示 0不是,展示布局 - if (event.type != 1) { - val container = - floatingMagnetView?.findViewById(R.id.fl_screenshare) - mBinding!!.flaoat.visibility = View.VISIBLE - container?.removeAllViews() - container?.addView(event.surfaceView) - } else { - floatingMagnetView?.visibility = View.GONE - } - } - } - } else if (event is ColoseCardEvent) { - mBinding!!.flaoat.visibility = View.GONE - exitFullScreen() - } else if (event is RoomTaskEvent) { - if (taskId != null && taskId != "9") { //这是每日任务完成发送私聊信息的事件 - RetrofitClient.getInstance() - .dailyTasksComplete(taskId, object : BaseObserver() { - override fun onSubscribe(d: Disposable) { - } - override fun onNext(roomSingleton: RoomSingleton) { - number++ - // 这里处理请求结果 - if (roomSingleton.is_completed == 1) { - // 任务完成,可以做一些后续操作 - taskId = null - } - } - }) - } - }else if (event is RoomGiftGiveEvent) { - if (event.roonGiftModel == null) { - return - } - giftGiveEvent = event - showGiftGiveProgress() - }else if(event is UnreadCountEvent){ - if (event.aLong == 0L) { - mBinding!!.ivMessageDot.visibility = View.GONE - } else { - mBinding!!.ivMessageDot.visibility = View.VISIBLE - mBinding!!.ivMessageDot.text = event.aLong.toString() - } - }else if (event is EffectEvent){ - if (event.isEffectOn) { //特效开启 - QXGiftPlayerManager.getInstance(this).openOrCloseEffectViewWith(true) - mBinding!!.svgaGift.visibility = View.VISIBLE - } else { - QXGiftPlayerManager.getInstance(this).openOrCloseEffectViewWith(false) - mBinding!!.svgaGift.visibility = View.GONE - } - }else if (event is RoomJoinMountModel) { - //坐骑进场特效 - if (roomId != event.room_id) { - return - } - if (event.show_type != 1) { - val gift = GiftBean() - gift.gift_id = "" - gift.play_image = event.ride_url - QXGiftPlayerManager.getInstance(this).displayFullEffectView(event.ride_url) - } - }else if (event is RoomWheatEvent){ - if (event.roomId == roomId) { - if (event.isOccupied) { - mBinding!!.ivWheatFeeding.setImageResource(com.xscm.moduleutil.R.mipmap.room_wheat_feeding_up) - aBoolean = false - } else { - mBinding!!.ivWheatFeeding.setImageResource(com.xscm.moduleutil.R.mipmap.room_wheat_feeding) - aBoolean = true + when (event) { + is MusicEvent -> { + if (!isMusic) { + xunf() + isMusic = true + } + val fragment = RequestDialogFragment.show( + roomId, mRoomInfoResp, 2, + supportFragmentManager + ) + if (fragment != null) { + addActiveDialogFragment(fragment) // 添加到管理列表 } } - }else if (event is UserInfo){ - if (event.red_num != null) { - inputSting = "# 口令红包 " + event.red_num - intRed_num = "# 口令红包 " + event.red_num - dialogDismiss(2) - } else if (event.ta != null) { - intRed_num = "" - inputSting = "@" + event.nickname - dialogDismiss(1) + + is RoomInputHideEvent -> { + mBinding!!.vpRoomPager.isScrollContainer = !event.hide } - }else if (event is RoomOutEvent){ - performExitRoom(2) - }else if (event is HeadlineBean){ - mRoomInfoResp!!.room_info.head_line = event - toutiao() - }else if (event is MqttXlhEnd) { - val xlhBean: XLHBean = - GsonUtils.fromJson(event.message, XLHBean::class.java) - if (xlhBean.from_type == 100) { - if (xlhBean.xlh_data != null) { - if (xlhBean.xlh_data.status == 1) { - mBinding?.xlhRk?.visibility = View.VISIBLE - xlhDjs(xlhBean.xlh_data.end_time) - } else { - mBinding?.xlhRk?.visibility = View.INVISIBLE - releaseCountDownTimer1() + + is SurfaceEvent -> { + if (mRoomInfoResp!!.room_info.type_id == "6") { //判断是否是电影房 + floatingMagnetView = findViewById(R.id.flaoat) //电影房 + if (mRoomInfoResp!!.user_info.is_room_owner != 1) { //判断是不是房主,1:是 如何是,不展示 0不是,展示布局 + if (event.type != 1) { + val container = + floatingMagnetView?.findViewById(R.id.fl_screenshare) + mBinding!!.flaoat.visibility = View.VISIBLE + container?.removeAllViews() + container?.addView(event.surfaceView) + } else { + floatingMagnetView?.visibility = View.GONE + } } } - } else if (xlhBean.from_type == 103) { - val existingFragment = - supportFragmentManager.findFragmentByTag("TourClubDialogFragment") as TourClubDialogFragment? - if (existingFragment != null && existingFragment.isVisible) { - existingFragment.onMessageReceived(event) - } else { - LogUtils.e("TourClubDialogFragment", "巡乐会界面未打开") + } + + is ColoseCardEvent -> { + mBinding!!.flaoat.visibility = View.GONE + exitFullScreen() + } + + is RoomTaskEvent -> { + if (taskId != null && taskId != "9") { //这是每日任务完成发送私聊信息的事件 + RetrofitClient.getInstance() + .dailyTasksComplete(taskId, object : BaseObserver() { + override fun onSubscribe(d: Disposable) { + } + + override fun onNext(roomSingleton: RoomSingleton) { + number++ + // 这里处理请求结果 + if (roomSingleton.is_completed == 1) { + // 任务完成,可以做一些后续操作 + taskId = null + } + } + }) + } + } + + is RoomGiftGiveEvent -> { + if (event.roonGiftModel == null) { + return + } + giftGiveEvent = event + showGiftGiveProgress() + } + + is UnreadCountEvent -> { + if (event.aLong == 0L) { + mBinding!!.ivMessageDot.visibility = View.GONE + } else { + mBinding!!.ivMessageDot.visibility = View.VISIBLE + mBinding!!.ivMessageDot.text = event.aLong.toString() + } + } + + is EffectEvent -> { + if (event.isEffectOn) { //特效开启 + QXGiftPlayerManager.getInstance(this).openOrCloseEffectViewWith(true) + mBinding!!.svgaGift.visibility = View.VISIBLE + } else { + QXGiftPlayerManager.getInstance(this).openOrCloseEffectViewWith(false) + mBinding!!.svgaGift.visibility = View.GONE + } + } + + is RoomJoinMountModel -> { + //坐骑进场特效 + if (roomId != event.room_id) { + return + } + if (event.show_type != 1) { + val gift = GiftBean() + gift.gift_id = "" + gift.play_image = event.ride_url + QXGiftPlayerManager.getInstance(this).displayFullEffectView(event.ride_url) + } + } + + is RoomWheatEvent -> { + if (event.roomId == roomId) { + if (event.isOccupied) { + mBinding!!.ivWheatFeeding.setImageResource(com.xscm.moduleutil.R.mipmap.room_wheat_feeding_up) + aBoolean = false + } else { + mBinding!!.ivWheatFeeding.setImageResource(com.xscm.moduleutil.R.mipmap.room_wheat_feeding) + aBoolean = true + } + } + } + + is UserInfo -> { + if (event.red_num != null) { + inputSting = "# 口令红包 " + event.red_num + intRed_num = "# 口令红包 " + event.red_num + dialogDismiss(2) + } else if (event.ta != null) { + intRed_num = "" + inputSting = "@" + event.nickname + dialogDismiss(1) + } + } + + is RoomOutEvent -> { + performExitRoom(2) + } + + is HeadlineBean -> { + mRoomInfoResp!!.room_info.head_line = event + toutiao() + } + + is MqttXlhEnd -> { + val xlhBean: XLHBean = + GsonUtils.fromJson(event.message, XLHBean::class.java) + if (xlhBean.from_type == 100) { + if (xlhBean.xlh_data != null) { + if (xlhBean.xlh_data.status == 1) { + mBinding?.xlhRk?.visibility = View.VISIBLE + xlhDjs(xlhBean.xlh_data.end_time) + } else { + mBinding?.xlhRk?.visibility = View.INVISIBLE + releaseCountDownTimer1() + } + } + } else if (xlhBean.from_type == 103) { + val existingFragment = + supportFragmentManager.findFragmentByTag("TourClubDialogFragment") as TourClubDialogFragment? + if (existingFragment != null && existingFragment.isVisible) { + existingFragment.onMessageReceived(event) + } else { + LogUtils.e("TourClubDialogFragment", "巡乐会界面未打开") + } + xlhDjs(xlhBean.end_time) + } else if (xlhBean.from_type == 104) { + mBinding?.xlhRk?.visibility = View.GONE + releaseCountDownTimer1() } - xlhDjs(xlhBean.end_time) - } else if (xlhBean.from_type == 104) { - mBinding?.xlhRk?.visibility = View.GONE - releaseCountDownTimer1() } } } + private var giftGiveEvent: RoomGiftGiveEvent? = null /** @@ -3899,68 +3768,65 @@ class RoomActivity : BaseMvpActivity(), adjustLayoutHeights() } + @SuppressLint("CommitTransaction") private fun resetFragment() { val typeId = mRoomInfoResp!!.room_info.type_id val labelId = mRoomInfoResp!!.room_info.label_id CommonAppContext.getInstance().lable_id = typeId + + val roomType = RoomType.fromTypeId(typeId) + val qxType: QXRoomSeatViewType = when (roomType) { + RoomType.MUTUAL_ENTERTAINMENT -> { + if (mRoomInfoResp!!.room_info.room_background == null || mRoomInfoResp!!.room_info.room_background == "") { + changeBackground(com.xscm.moduleutil.R.mipmap.jiaoy_bj) + } else { + changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) + } + setvisibTop(true) + QXRoomSeatViewType.FRIEND + } + + RoomType.AUCTION -> { + changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) + setvisibTop(true) + QXRoomSeatViewType.AUCTION + } + + RoomType.DATING -> { + if ("2" == labelId) { + changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) + setvisibTop(true) + QXRoomSeatViewType.KTV + } else if ("1" == labelId) { + changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) + setvisibTop(true) + QXRoomSeatViewType.NORMAL + } else { + QXRoomSeatViewType.NONE + } + } + + RoomType.BLACK_ROOM -> { + changeBackground(com.xscm.moduleutil.R.mipmap.cabin_bj) + setvisibTop(false) + QXRoomSeatViewType.CABIN + } + + null -> { + LogUtils.e("@@@", "RoomType is null") + QXRoomSeatViewType.NONE + } + } + if (roomFragment == null) { - roomFragment = RoomFragment.newInstance(mRoomInfoResp) + roomFragment = RoomFragment.newInstance(this,mRoomInfoResp) supportFragmentManager .beginTransaction() .replace(R.id.vp_room_pager, roomFragment!!) .commitAllowingStateLoss() + }else { + roomFragment!!.refreshData(mRoomInfoResp, qxType) } - - if ("7" == typeId) { - if (mRoomInfoResp!!.room_info.room_background == null || mRoomInfoResp!!.room_info.room_background == "") { - changeBackground(com.xscm.moduleutil.R.mipmap.jiaoy_bj) - } else { - changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) - } - setvisibTop(true) - // 当需要传递数据给子Fragment时 -// sharedViewModel.setSeatViewType(QXRoomSeatViewType.FRIEND); -// sharedViewModel.setDataForFragment(mRoomInfoResp); - roomFragment!!.refreshData(mRoomInfoResp, QXRoomSeatViewType.FRIEND) - } else if ("2" == typeId) { - changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) - setvisibTop(true) - // sharedViewModel.setSeatViewType(QXRoomSeatViewType.AUCTION); -// sharedViewModel.setDataForFragment(mRoomInfoResp); - roomFragment!!.refreshData(mRoomInfoResp, QXRoomSeatViewType.AUCTION) - } else if ("1" == typeId || "3" == typeId || "4" == typeId || "8" == typeId) { - if ("2" == labelId) { - changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) - setvisibTop(true) - // sharedViewModel.setSeatViewType(QXRoomSeatViewType.KTV); - roomFragment!!.refreshData(mRoomInfoResp, QXRoomSeatViewType.KTV) - } else if ("1" == labelId) { - changeBackgroundColor(mRoomInfoResp!!.room_info.room_background) - setvisibTop(true) - roomFragment!!.refreshData(mRoomInfoResp, QXRoomSeatViewType.NORMAL) - } - } else if ("6" == typeId) { - changeBackground(com.xscm.moduleutil.R.mipmap.cabin_bj) - setvisibTop(false) - - // sharedViewModel.setSeatViewType(QXRoomSeatViewType.CABIN); - roomFragment!!.refreshData(mRoomInfoResp, QXRoomSeatViewType.CABIN) - } - - // if (isMinimized) { -// // 如果是从最小化状态恢复,使用轻量级方式更新数据 -// sharedViewModel.clearChildFragmentData(); -// // 只传递必要的信息,而不是整个RoomInfoResp对象 -// sharedViewModel.setChildFragmentData(mRoomInfoResp); -// } else { -// // 正常进入房间 -// sharedViewModel.clearChildFragmentData(); -// sharedViewModel.setChildFragmentData(mRoomInfoResp); -// } - - // 先清除旧数据再设置新数据,确保更新 -// sharedViewModel.clearChildFragmentData(); -// sharedViewModel.setChildFragmentData(mRoomInfoResp); } override fun getCharmRank(list: List) { @@ -3979,8 +3845,6 @@ class RoomActivity : BaseMvpActivity(), fun quit() { CommonAppContext.getInstance().isPlaying = false CommonAppContext.getInstance().isShow = false - // AgoraManager.getInstance(this).stopScreenCapture(); -// AgoraManager.getInstance(this).leaveRoom(); AgoraManager.getInstance(this).cleanup() MyRoomSingleton.getInstance().onExitRoom() } @@ -3994,25 +3858,13 @@ class RoomActivity : BaseMvpActivity(), "@@@", "上一个房间的roonid" + AgoraManager.getInstance(OkDownloadProvider.context).lastRoomId ) - // MvpPre.getRoomIn(AgoraManager.getInstance(context).getLastRoomId(), ""); -// ARouter.getInstance().build(ARouteConstants.ROOM_DETAILS).withString("form", "电影房") -// .withString("roomId", AgoraManager.getInstance(OkDownloadProvider.context).lastRoomId) -// .navigation() -// RoomManager.getInstance().fetchRoomDataAndEnter( -// this, -// AgoraManager.getInstance(OkDownloadProvider.context).lastRoomId, -// "" -// ) MvpPre?.getRoomIn(AgoraManager.getInstance(OkDownloadProvider.context).lastRoomId, "") AgoraManager.getInstance(OkDownloadProvider.context).lastRoomId = "" - // setviewyc(true); -// exitFullScreen() } override fun userGuanzSuccess(s: String) { if (mRoomUserBean!!.is_collect == 1) { mRoomUserBean!!.is_collect = 0 - // mBinding.roomTop.btnFollow.setBackground(getResources().getDrawable(com.xscm.moduleutil.R.mipmap.collect)); ThemeableDrawableUtils.setThemeableRoundedBackground( mBinding!!.roomTop.btnFollow, ColorManager.getInstance().primaryColorInt, @@ -4035,7 +3887,6 @@ class RoomActivity : BaseMvpActivity(), } override fun userOnlineStatus(list: List) { -// SpUtil.setUserOnline(GsonUtils.toJson(list)); if (!list.isEmpty()) { for (i in list.indices) { val userOnlineStatusBean = list[i] @@ -4224,11 +4075,7 @@ class RoomActivity : BaseMvpActivity(), try { if (mBinding != null) { if (mBinding!!.svgaGift != null) { -// mBinding.svgaGift.release(); } - // if (mBinding.svgaZuoji != null) { -// mBinding.svgaZuoji.release(); -// } } } catch (e: Exception) { LogUtils.e("clearSVGAResources error: " + e.message) diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/ChatRoomFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/ChatRoomFragment.java index a2ecaf46..1fc43cc5 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/ChatRoomFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/ChatRoomFragment.java @@ -58,14 +58,9 @@ import java.util.Random; */ public class ChatRoomFragment extends BaseMvpFragment implements ChatRoomContacts.View { - private final static String TAG = "聊天室"; - private boolean isBottom = true; private int count = 0; - - private String toChatUsername; - private RoomInfoResp roomInfoResp; private EaseChatAdapter easeChatAdapter; private String roomId; @@ -76,12 +71,15 @@ public class ChatRoomFragment extends BaseMvpFragment { + // 确保在主线程更新 UI + if (getActivity() != null) { + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + handleRoomMessage(message); + } + }); } }; MessageListenerSingleton.getInstance().addPublicScreenMessageListener(messageListener); @@ -212,45 +206,11 @@ public class ChatRoomFragment extends BaseMvpFragment() { @Override public void onProgress(int progress) { @@ -440,11 +397,11 @@ public class ChatRoomFragment extends BaseMvpFragment() { @Override public void onProgress(int progress) { @@ -577,8 +534,6 @@ public class ChatRoomFragment extends BaseMvpFragment 0) { mBinding.recycleViewPublic.scrollToPosition(itemCount - 1); } } else { count++; - if (mBinding.tvCount != null) { - mBinding.tvCount.setText(count + "条新消息"); - mBinding.tvCount.setVisibility(View.VISIBLE); - } + mBinding.tvCount.setText(count + "条新消息"); + mBinding.tvCount.setVisibility(View.VISIBLE); // 当未读消息过多时,限制数量显示 if (count > 99) { - if (mBinding.tvCount != null) { - mBinding.tvCount.setText("99+条新消息"); - } + mBinding.tvCount.setText("99+条新消息"); } } } @@ -747,8 +696,6 @@ public class ChatRoomFragment extends BaseMvpFragment implements FriendshipRoomContacts.View, RoomConcernDialogFragment.OnConcernSelectedListener { @@ -297,10 +297,6 @@ public class FriendshipRoomFragment extends BaseRoomFragment mediaProjectionLauncher = registerForActivityResult( -// new ActivityResultContracts.StartActivityForResult(), result -> { -// if (result.getResultCode() == Activity.RESULT_OK) { -// try { -// // 获取申请到的 MediaProjection -// mediaProjection[0] = mediaProjectionManager -// .getMediaProjection(result.getResultCode(), result.getData()); -// // r MediaProjection,需要在 startScreenCapture 之前调用 -// -// AgoraManager.getInstance(getActivity()).setExternalMediaProjection(mediaProjection); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// } -// ); - // 请求屏幕捕获 - private void requestScreenCapture() { -// Intent intent = mediaProjectionManager.createScreenCaptureIntent(); -// mediaProjectionLauncher.launch(intent); - } + public void handleMsgType1028(RoomMessageEvent messageEvent){ if (messageEvent.getMsgType()==1028){ mBinding.tvHeartValue2.setText(messageEvent.getText().getHot_value()); } } - public void upRoomInfo(RoomInfoResp roomInfoResp){ - this.roomInfoResp = roomInfoResp; -// if (roomInfoResp != null) { -// roomId = roomInfoResp.getRoom_info().getRoom_id(); -// cpUserBean = roomInfoResp.getCp_user(); -// label_id = roomInfoResp.getRoom_info().getLabel_id(); -// } -// if (roomInfoResp != null && roomInfoResp.getRoom_owner().getUser_id().equals(SpUtil.getUserId()+"")){ -// mBinding.im3.setVisibility(VISIBLE); -//// setvkk(false); -// }else { -// mBinding.im3.setVisibility(GONE); -// } -// -// 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 (cpUserBean != null) { -// 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("000"); -// -// 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("000"); -// -// -// } 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("000"); -// -// 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("000"); -// } -// } -//// 不论谁是自己,始终将自己放在 roomMakeWheat1 -// mBinding.roomMakeWheat1.setData(selfBean); -//// 将另一个用户的数据放在 roomMakeWheat2 -// mBinding.roomMakeWheat2.setData(otherBean); -// mBinding.tvMainTitle.setText(roomInfoResp.getRoom_info().getRoom_name()); -// mBinding.tvHeartValue2.setText(roomInfoResp.getRoom_info().getHot_value()); -// if (cpUserBean != null) { -// countDownTime(Long.parseLong(cpUserBean.getTime_day())); -// } -// mediaProjectionManager = (MediaProjectionManager) getContext().getSystemService(Context.MEDIA_PROJECTION_SERVICE); - } public void upCabinFragment(long time){ countDownTime( time); } - - private boolean isFullscreen = false; - - public void switchMic(int type) { if (type == 1) { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java index 5082cc42..b44425d9 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RoomFragment.java @@ -7,9 +7,7 @@ import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ForegroundColorSpan; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -24,7 +22,6 @@ import com.xscm.modulemain.R; import com.xscm.modulemain.activity.room.activity.RoomActivity; import com.xscm.modulemain.databinding.FragmentRoomBinding; import com.xscm.modulemain.dialog.WheatFeedingDialogFragment; -import com.hjq.toast.ToastUtils; import com.xscm.modulemain.activity.room.contacts.RoomContacts; import com.xscm.modulemain.activity.room.presenter.RoomPresenter; import com.xscm.moduleutil.base.BaseMvpFragment; @@ -42,10 +39,10 @@ import com.xscm.moduleutil.bean.room.RoomOnline; import com.xscm.moduleutil.bean.room.RoomPitBean; import com.xscm.moduleutil.dialog.ConfirmDialog; import com.xscm.moduleutil.enumType.QXRoomSeatViewType; +import com.xscm.moduleutil.enumType.RoomType; import com.xscm.moduleutil.listener.MessageListenerSingleton; import com.xscm.moduleutil.rtc.AgoraManager; import com.xscm.moduleutil.utils.SpUtil; -import com.xscm.moduleutil.widget.SharedViewModel; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -54,7 +51,6 @@ import org.greenrobot.eventbus.ThreadMode; import java.nio.charset.StandardCharsets; import java.util.Date; import java.util.List; -import java.util.Objects; /** * @author qx @@ -62,9 +58,9 @@ import java.util.Objects; * @description:房间fragment */ public class RoomFragment extends BaseMvpFragment implements RoomContacts.View { - public static RoomFragment newInstance(RoomInfoResp resp) { + public static RoomFragment newInstance(RoomActivity roomActivity, RoomInfoResp resp) { Bundle args = new Bundle(); - RoomFragment fragment = new RoomFragment(resp); + RoomFragment fragment = new RoomFragment(roomActivity, resp); fragment.setArguments(args); return fragment; } @@ -73,10 +69,12 @@ public class RoomFragment extends BaseMvpFragment heartLists) { FriendshipRoomFragment friendshipRoomFragment = findFragmentByTag(FriendshipRoomFragment.class); if (friendshipRoomFragment != null) { - friendshipRoomFragment.upRoomInfo(mRoomInfoResp); friendshipRoomFragment.friendHeartNumberDidChanged(heartLists); } } @@ -337,7 +338,6 @@ public class RoomFragment extends BaseMvpFragment pitArr) { FriendshipRoomFragment friendshipRoomFragment = findFragmentByTag(FriendshipRoomFragment.class); if (friendshipRoomFragment != null) { - friendshipRoomFragment.upRoomInfo(mRoomInfoResp); friendshipRoomFragment.friendSeatDidChanged(pitArr); } } @@ -368,77 +368,59 @@ public class RoomFragment extends BaseMvpFragment { + if (ktvFragment == null) + ktvFragment = RoomKtvFragment.newInstance(mRoomInfoResp); + else ktvFragment.roomInfoUpdate(mRoomInfoResp); + yield ktvFragment; + } + case "1" -> { + if (singSongFragment == null) + singSongFragment = SingSongFragment.newInstance(mRoomInfoResp); + else + singSongFragment.roomInfoUpdate(mRoomInfoResp); + yield singSongFragment; + } + default -> newFragment; + }; + } else if (roomType == RoomType.BLACK_ROOM) { if (roomCabinFragment == null) roomCabinFragment = RoomCabinFragment.newInstance(mRoomInfoResp); + else roomCabinFragment.roomInfoUpdate(mRoomInfoResp); newFragment = roomCabinFragment; setviewyc(); - } else if ("3".equals(typeId)) { - if ("1".equals(labelId)) { - if (singSongFragment == null) - singSongFragment = SingSongFragment.newInstance(mRoomInfoResp); - newFragment = singSongFragment; - } else if ("2".equals(labelId)) { - if (ktvFragment == null) - ktvFragment = RoomKtvFragment.newInstance(mRoomInfoResp); - newFragment = ktvFragment; - } - } else if ("4".equals(typeId)) { - if ("1".equals(labelId)) { - if (singSongFragment == null) - singSongFragment = SingSongFragment.newInstance(mRoomInfoResp); - newFragment = singSongFragment; - } else if ("2".equals(labelId)) { - if (ktvFragment == null) - ktvFragment = RoomKtvFragment.newInstance(mRoomInfoResp); - newFragment = ktvFragment; - } - } else if ("7".equals(typeId)) { - if (friendshipRoomFragment == null) - friendshipRoomFragment = FriendshipRoomFragment.newInstance(mRoomInfoResp); - newFragment = friendshipRoomFragment; - } else if ("8".equals(typeId)) { - if ("1".equals(labelId)) { - if (singSongFragment == null) - singSongFragment = SingSongFragment.newInstance(mRoomInfoResp); - newFragment = singSongFragment; - } else if ("2".equals(labelId)) { - if (ktvFragment == null) - ktvFragment = RoomKtvFragment.newInstance(mRoomInfoResp); - newFragment = ktvFragment; - } } if (newFragment != null) { replaceNestedFragment(newFragment, R.id.container); + }else { + LogUtils.e("newFragment==null"); } - setview(); + setView(); if (mRoomInfoResp.getUser_info().getPit_number() != 0) { - if (!CommonAppContext.getInstance().isMai) { - AgoraManager.getInstance(getActivity()).muteLocalAudioStream(false); - RoomActivity activity = (RoomActivity) getActivity(); - if (activity != null) { - activity.switchMic(1); - } else { - Log.w("RoomFragment", "switchMic called but activity is null"); - } - } + mRoomActivity.switchMic(CommonAppContext.getInstance().isMai?1:2); + AgoraManager.getInstance(getActivity()).muteLocalAudioStream(CommonAppContext.getInstance().isMai); } else { AgoraManager.getInstance(getActivity()).muteLocalAudioStream(true); } @@ -543,7 +525,7 @@ public class RoomFragment extends BaseMvpFragment(); if (getActivity() instanceof RoomActivity) { ((RoomActivity) getActivity()).setvisibTop(true); @@ -1230,9 +1232,6 @@ public class SingSongFragment extends BaseRoomFragment { page++; if (MvpPre != null && getArguments() != null) { MvpPre.getRoomOnline(getArguments().getString("roomId"), page + "", "10"); } else { refreshLayout.finishLoadMore(false); } - }, 300); } @Override public void onRefresh(@NonNull RefreshLayout refreshLayout) { -// EventBus.getDefault().post(new BannerRefreshEvent()); -// page = 1; -// MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10"); - - // 添加延迟以避免过于频繁的请求 - mBinding.getRoot().postDelayed(() -> { page = 1; if (MvpPre != null && getArguments() != null) { MvpPre.getRoomOnline(getArguments().getString("roomId"), "1", "10"); } else { refreshLayout.finishRefresh(false); } - }, 300); } }); @@ -134,10 +125,6 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment()); mBinding.rvComment.setAdapter(roomOnlineAdapter); -// mBinding.rvComment2.setLayoutManager(new LinearLayoutManager(getActivity())); -// roomOnlineAdapter2 = new RoomOnlineAdapter(); -// mBinding.rvComment2.setAdapter(roomOnlineAdapter2); - roomOnlineAdapter.setListener(new RoomOnlineAdapter.OnJoinButtonClickListener() { @Override @@ -156,19 +143,6 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment()); } -// roomOnlineAdapter.setNewData(roomOnlineBeanList); int type_pit; if (pit_number.isEmpty()) { type_pit = 1; @@ -284,7 +257,6 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment 0) { RoomOnlineBean roomOnlineBean = new RoomOnlineBean(); @@ -297,7 +269,6 @@ public class RoomOnlineDialogFragment extends BaseMvpDialogFragment