package com.xscm.modulemain.dialog import android.content.Context import android.os.CountDownTimer import android.view.Gravity import android.view.ViewGroup import com.blankj.utilcode.util.ScreenUtils import com.xscm.modulemain.R import com.xscm.modulemain.databinding.DialogInviteBinding import com.xscm.modulemain.manager.RoomManager import com.xscm.moduleutil.bean.IndexRecommendRoom import com.xscm.moduleutil.color.ThemeableDrawableUtils import com.xscm.moduleutil.utils.ColorManager import com.xscm.moduleutil.utils.ImageUtils import com.xscm.moduleutil.widget.dialog.BaseDialog /** * 项目名称:羽声语音 * 时间:2025/12/8 16:19 * 用途:首页推荐房间 */ class InviteDialog(context: Context, data: IndexRecommendRoom?) : BaseDialog(context) { private var countDownTimer: CountDownTimer? = null // 倒计时器 private var data: IndexRecommendRoom? = data // 将构造函数参数赋值给成员变量 init { // 设置对话框从底部弹出 window?.setGravity(Gravity.CENTER) // 设置对话框的宽度为屏幕宽度 window?.setLayout( (ScreenUtils.getScreenWidth() * 315f / 375).toInt(), ViewGroup.LayoutParams.WRAP_CONTENT ) // 添加动画效果 window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt) setCancelable(false) setCanceledOnTouchOutside(false) } override fun getLayoutId(): Int { return R.layout.dialog_invite } override fun initView() { // 设置邀请按钮文本 ThemeableDrawableUtils.setThemeableRoundedBackground( mBinding.btnPositive, ColorManager.getInstance().getPrimaryColorInt(), 53 ) mBinding.btnPositive.setTextColor(ColorManager.getInstance().getButtonColorInt()) } override fun initData() { mBinding.ivClose.setOnClickListener { dismiss() } mBinding.btnPositive.setOnClickListener { // 如果有房间数据,进入房间;否则只关闭对话框 data?.let { roomData -> RoomManager.getInstance() .fetchRoomDataAndEnter(context, roomData.room_id, "", null) } ?: run { // 没有数据时,可以显示提示或执行其他操作 // 这里我们只关闭对话框 } dismiss() } } fun setData(data: IndexRecommendRoom?) { this.data = data // 设置房间数据 data?.let { roomData -> // 设置房间封面 ImageUtils.loadHead(roomData.room_cover, mBinding.invitePic) // 启动倒计时 startCountDown() } ?: run { // 仍然启动倒计时,让用户可以关闭对话框 startCountDown() } } /** * 开始倒计时 */ private fun startCountDown() { countDownTimer?.cancel() // 确保之前的计时器被取消 countDownTimer = object : CountDownTimer(9 * 1000L, 1000) { override fun onTick(millisUntilFinished: Long) { val secondsLeft = (millisUntilFinished / 1000).toInt() mBinding.btnNegative.setText("拒接" + " (" + secondsLeft + "s)") } override fun onFinish() { // 检查是否被主动取消 dismiss() } }.start() // 设置点击事件,点击按钮也关闭对话框 mBinding.btnNegative.setOnClickListener({ v -> dismiss() }) } override fun dismiss() { // 在对话框关闭前取消倒计时 if (countDownTimer != null) { countDownTimer?.cancel() } super.dismiss() } }