Files
yusheng-android/MainModule/src/main/java/com/xscm/modulemain/dialog/InviteDialog.kt

123 lines
3.8 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<DialogInviteBinding>(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()
}
}