This commit is contained in:
2025-11-28 19:04:18 +08:00
parent 847c768e4d
commit 94a55bafea
19 changed files with 782 additions and 103 deletions

View File

@@ -1507,6 +1507,14 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
messageEvent.text.rights_icon
)
}
} else if (msgType == EMMessageInfo.QXRoomMessageTypeSignStartText) {
roomFragment?.handleRoomMessage(messageEvent)
} else if (msgType == EMMessageInfo.QXRoomMessageTypeSignMaxUserText) {
roomFragment?.handleRoomMessage(messageEvent)
} else if (msgType == EMMessageInfo.QXRoomMessageTypeSignEndText) {
roomFragment?.handleRoomMessage(messageEvent)
} else if (msgType == EMMessageInfo.QXRoomMessageTypeSignDelayText) {
roomFragment?.handleRoomMessage(messageEvent)
}
}
@@ -1797,6 +1805,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
roomFragment!!.upRoomInfoData(mRoomInfoResp)
roomFragment?.handleRoomMessage(messageEvent)
}
RoomType.SIGN_CONTRACT -> {
mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1] =
getPitBean(messageEvent, 1)
@@ -1805,6 +1814,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
mBinding!!.rlMisc.visibility = View.GONE
roomFragment?.handleRoomMessage(messageEvent)
}
else -> {
roomFragment!!.updateSeatViewExchangedWithPitArray(mRoomInfoResp)
}
@@ -1887,6 +1897,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
roomFragment!!.upRoomInfoData(mRoomInfoResp)
roomFragment!!.handleRoomMessage(messageEvent)
}
RoomType.SIGN_CONTRACT -> {
mRoomInfoResp?.room_info?.pit_list!![pitNumber.toInt() - 1] = RoomPitBean(pitNumber)
@@ -2500,7 +2511,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
val id = view.id
// 通过 ID 获取资源名称
var viewName = try {
var viewName = try {
view.context.resources.getResourceEntryName(id)
} catch (e: java.lang.Exception) {
"未知View ID: $id"
@@ -3129,7 +3140,7 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
fun dialogMessage(event: RoomInputEvent){
fun dialogMessage(event: RoomInputEvent) {
if (publicScreenFragment != null) {
publicScreenFragment!!.fasong(event)
}
@@ -3660,7 +3671,6 @@ class RoomActivity : BaseMvpActivity<RoomPresenter?, ActivityRoomBinding?>(),
}
// 添加检查房间连接状态的方法
private fun resumeRoomState() {
// 恢复房间相关状态

View File

@@ -3,11 +3,15 @@ package com.xscm.modulemain.activity.room.contacts
import android.app.Activity
import com.xscm.moduleutil.activity.IPresenter
import com.xscm.moduleutil.activity.IView
import com.xscm.moduleutil.bean.WalletBean
class MentorShipContacts {
interface View : IView<Activity>{
fun signCoinList(list:List<String>)
fun wallet(list:List<String>,walletBean: WalletBean?)
}
interface Ipre : IPresenter{
@@ -19,8 +23,14 @@ class MentorShipContacts {
fun signDelay(signId:String,roomId:String)
fun signCoinList(signId:String)
fun signCoin(signId:String,sign_value:String)
fun setMutePit(roomId:String,pitNumber:String,isMute:String)
fun setLockPit(roomId:String,pitNumber:String,isLock:String)
fun wallet(list:List<String>)
}
}

View File

@@ -30,6 +30,7 @@ import com.xscm.moduleutil.bean.RedPacketInfo;
import com.xscm.moduleutil.bean.RoomCharmRankBean;
import com.xscm.moduleutil.bean.RoomMessageEvent;
import com.xscm.moduleutil.bean.UserOnlineStatusBean;
import com.xscm.moduleutil.bean.room.EMMessageInfo;
import com.xscm.moduleutil.bean.room.FriendInfo;
import com.xscm.moduleutil.bean.room.FriendUserBean;
import com.xscm.moduleutil.bean.room.RoomAuction;
@@ -305,7 +306,7 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
if (roomJukeboxFragment != null && roomJukeboxFragment.isAdded()) {
roomJukeboxFragment.roomInfoUpdate(mRoomInfoResp);
}
}else if (roomType == RoomType.SIGN_CONTRACT) {
} else if (roomType == RoomType.SIGN_CONTRACT) {
if (mentorShipFragment != null && mentorShipFragment.isAdded()) {
mentorShipFragment.roomInfoUpdate(mRoomInfoResp);
}
@@ -427,9 +428,9 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
else roomJukeboxFragment.roomInfoUpdate(mRoomInfoResp);
newFragment = roomJukeboxFragment;
} else if (roomType == RoomType.SIGN_CONTRACT) {
if(mentorShipFragment == null){
if (mentorShipFragment == null) {
mentorShipFragment = RoomMentorShipFragment.Companion.newInstance(mRoomInfoResp);
}else{
} else {
mentorShipFragment.roomInfoUpdate(mRoomInfoResp);
}
newFragment = mentorShipFragment;
@@ -555,9 +556,9 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
public void setView() {//这里是当进入电影放房的时候,如果是排麦模式,并且不是电影放的时候,就隐藏排麦视图
if (ActivityUtils.getTopActivity() instanceof RoomActivity) {
if (mRoomInfoResp.getRoom_info().getRoom_up_pit_type().equals("1") && !mRoomInfoResp.getRoom_info().getType_id().equals("6")) {
((RoomActivity)ActivityUtils.getTopActivity()).clFirstCharge(true);
((RoomActivity) ActivityUtils.getTopActivity()).clFirstCharge(true);
} else {
((RoomActivity)ActivityUtils.getTopActivity()).clFirstCharge(false);
((RoomActivity) ActivityUtils.getTopActivity()).clFirstCharge(false);
}
}
}
@@ -937,6 +938,18 @@ public class RoomFragment extends BaseMvpFragment<RoomPresenter, FragmentRoomBin
case 1059:
mentorShipFragment.event1039(messageEvent);
break;
case EMMessageInfo.QXRoomMessageTypeSignStartText:
mentorShipFragment.event1090(messageEvent);
break;
case EMMessageInfo.QXRoomMessageTypeSignMaxUserText:
mentorShipFragment.event1091(messageEvent);
break;
case EMMessageInfo.QXRoomMessageTypeSignEndText:
mentorShipFragment.event1092(messageEvent);
break;
case EMMessageInfo.QXRoomMessageTypeSignDelayText:
mentorShipFragment.event1093(messageEvent);
break;
}
}

View File

@@ -12,14 +12,25 @@ import com.xscm.modulemain.R
import com.xscm.modulemain.activity.room.contacts.MentorShipContacts
import com.xscm.modulemain.activity.room.presenter.MentorShipPresenter
import com.xscm.modulemain.databinding.FragmentMentorShipBinding
import com.xscm.modulemain.dialog.DialogMentorShip
import com.xscm.modulemain.dialog.RoomOnlineDialogFragment
import com.xscm.modulemain.dialog.RoomTalentDialog
import com.xscm.modulemain.dialog.RoomUserInfoFragment
import com.xscm.modulemain.utils.CountdownTimer
import com.xscm.modulemain.widget.RoomMentorShipWheatView
import com.xscm.moduleutil.base.BaseMvpFragment
import com.xscm.moduleutil.bean.RoomMessageEvent
import com.xscm.moduleutil.bean.WalletBean
import com.xscm.moduleutil.bean.room.RoomInfoResp
import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.bean.room.RoomUserBean
import com.xscm.moduleutil.utils.ClickUtils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
/**
* 签约房
@@ -46,8 +57,26 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
private var popupWindow: PopupWindow? = null
private var mPitBean: RoomPitBean? = null
private var roomId: String = mRoomInfo?.room_info?.room_id!!
private var signPitBean: RoomPitBean? = null
private var mRoomId: String = mRoomInfo?.room_info?.room_id!!
private var mSignPitBean: RoomPitBean? = null
private var mSignId: String? = null
private val timer = CountdownTimer()
private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
private val startOrDelay = arrayOf("开始", "延迟")
private var mUserInfo: RoomUserBean? = mRoomInfo?.user_info
private var dialogMentorShip: DialogMentorShip? = null
private val ivForMai = arrayOf(
com.xscm.moduleutil.R.mipmap.icon_apply_for_mai,
com.xscm.moduleutil.R.mipmap.icon_show_alent,
com.xscm.moduleutil.R.mipmap.icon_contract
)
override fun getLayoutId(): Int {
return R.layout.fragment_mentor_ship
@@ -70,14 +99,19 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
viewList.add(mBinding.rmswRightMidd)
viewList.add(mBinding.rmswRightRight)
mBinding.tvTimeLeft.visibility = View.GONE
for ((idx, view) in viewList.withIndex()) {
if (mRoomInfo?.room_info?.pit_list!!.size > indexList[idx].toInt() - 1) {
view.setRoomWheatNumber(indexList[idx])
val bean = mRoomInfo?.room_info?.pit_list!![indexList[idx].toInt() - 1]
if (idx == 0) {
view.setHostTv(mBinding.tvHostName)
}else if (idx == 1){
signPitBean = bean
} else if (idx == 1) {
mSignPitBean = bean
if (bean.user_id != "0" && mUserInfo?.user_id != null && viewList[0].pitBean?.user_id.equals(mUserInfo?.user_id.toString())) {
mBinding.tvTimeLeft.visibility = View.VISIBLE
}
}
view.isMentorShip(true)
view.setData(bean)
@@ -116,7 +150,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(
roomId,
mRoomId,
mPitBean?.pit_number,
mRoomInfo?.user_info,
mRoomInfo,
@@ -133,56 +167,94 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
mBinding.ivApplyForMai.setOnClickListener(this)
mBinding.tvTimeLeft.setOnClickListener(this)
mBinding.tvTimeRight.setOnClickListener(this)
if (mRoomInfo?.sign_info?.sign_id != "-1") {
if (mRoomInfo?.sign_info?.sign_status == 0) {
mBinding.tvTimeLeft.text = startOrDelay[0]
} else {
mBinding.tvTimeLeft.text = startOrDelay[1]
startTimer(mRoomInfo?.sign_info?.end_time!!)
}
mBinding.tvSignDay.visibility = View.VISIBLE
mSignId = mRoomInfo?.sign_info?.sign_id
mBinding.tvLeftPrice.text = mRoomInfo?.sign_info?.current_body_value.toString()
mBinding.tvSignDay.text = "签约${mRoomInfo?.sign_info?.sign_day}"
if (mUserInfo?.user_id?.toString().equals(mSignPitBean?.user_id)) {
setIvForMai(1)
} else if (!mSignPitBean?.user_id.equals("0")) {
setIvForMai(2)
} else {
setIvForMai(0)
}
} else {
mBinding.tvTimeLeft.text = startOrDelay[0]
mBinding.tvTime.text = "倒计时 00:00"
setIvForMai(0)
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.iv_apply_for_mai -> {
MvpPre!!.applyPit(mRoomInfo?.room_info?.room_id!!, "")
when (mBinding.ivApplyForMai.tag) {
ivForMai[0] -> {
MvpPre!!.applyPit(mRoomInfo?.room_info?.room_id!!, "")
}
ivForMai[1] -> {
RoomTalentDialog(ActivityUtils.getTopActivity(), mRoomId).show()
}
ivForMai[2] -> {
MvpPre?.signCoinList(mSignId!!)
}
}
}
R.id.tv_time_left -> {
if (mBinding.tvTimeLeft.text.toString() == "开始") {
MvpPre.signStart(roomId,signPitBean?.user_id!!)
if (mBinding.tvTimeLeft.text.toString() == startOrDelay[0]) {
MvpPre.signStart(mRoomId, mSignPitBean?.user_id!!)
} else {
MvpPre.signDelay(mRoomInfo?.sign_info?.sign_id!!,roomId)
MvpPre.signDelay(mSignId!!, mRoomId)
}
}
R.id.tv_time_right -> {
MvpPre.signEnd(mRoomInfo?.sign_info?.sign_id!!)
MvpPre.signEnd(mSignId!!)
}
}
}
private fun showHostOrAboveBottomView(isSignUser:Boolean) {
private fun showHostOrAboveBottomView(isShow: Boolean) {
if (getHostUser() < 4) {
mBinding.tvTimeLeft.visibility = View.VISIBLE
mBinding.tvTimeLeft.text = "开始"
mBinding.tvTime.text = "倒计时 00:00"
mBinding.tvTimeRight.visibility = if (isShow) View.VISIBLE else View.INVISIBLE
mBinding.tvTime.visibility = if (isShow) View.VISIBLE else View.INVISIBLE
} else {
mBinding.tvHostName.visibility = View.GONE
mBinding.tvTime.visibility = if (isShow) View.VISIBLE else View.INVISIBLE
}
}
fun roomInfoUpdate(mRoomInfoResp: RoomInfoResp) {
mRoomInfo = mRoomInfoResp
mUserInfo = mRoomInfo?.user_info
}
fun event1003(messageEvent: RoomMessageEvent) {
val fromUserInfo = messageEvent.text.fromUserInfo ?: return
val pitNumber = messageEvent.text.pit_number
val userId = fromUserInfo.user_id
if (indexList.contains(pitNumber)) {
val viewPos = indexList.indexOf(pitNumber)
val pitBean = mRoomInfo?.room_info?.pit_list!![pitNumber.toInt() - 1]
viewList[viewPos].setData(pitBean)
if (pitNumber == "1") {
showHostOrAboveBottomView(true)
signPitBean = pitBean
mSignPitBean = pitBean
}
if (pitNumber == "9" && pitBean.user_id.equals(mUserInfo?.user_id.toString())) {
mBinding.tvTimeLeft.visibility = View.VISIBLE
}
}
@@ -200,12 +272,154 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
viewList[viewPos].setData(pitBean)
if (pitNumber == "1") {
showHostOrAboveBottomView(false)
signPitBean = pitBean
mSignPitBean = pitBean
}
if (pitNumber == "9" && pitBean.user_id.equals(mUserInfo?.user_id.toString())) {
mBinding.tvTimeLeft.visibility = View.GONE
}
}
}
/**
* 开始
* sign_id 场次id这个出价的时候要传回来
*/
fun event1090(messageEvent: RoomMessageEvent?) {
mSignId = messageEvent?.text?.sign_id
val endTime = messageEvent?.text?.end_time
val signDay = messageEvent?.text?.sign_day
val currBodyValue = messageEvent?.text?.current_body_value
if (!mSignId.equals("-1")) {
startTimer(endTime?.toLong()!!)
mBinding.tvTimeLeft.text = startOrDelay[1]
mBinding.tvLeftPrice.text = currBodyValue
mBinding.tvSignDay.visibility = View.VISIBLE
mBinding.tvSignDay.text = "签约${signDay}"
if (viewList[indexList.indexOf("1")].pitBean.user_id.equals(mUserInfo?.user_id.toString())) {
setIvForMai(1)
} else {
setIvForMai(2)
}
}
}
/**
* IM 推送 1091
* FromUserInfo 出价最高用户信息sign_value出的价sign_id场次
*/
fun event1091(messageEvent: RoomMessageEvent?) {
val fromUserInfo = messageEvent?.text?.fromUserInfo
val signId = messageEvent?.text?.sign_id
if (fromUserInfo != null && mSignId == signId) {
val pitBean = RoomPitBean()
pitBean.pit_number = indexList[2]
pitBean.user_id = fromUserInfo.user_id.toString()
pitBean.avatar = fromUserInfo.avatar
pitBean.nickname = fromUserInfo.nickname
pitBean.sex = fromUserInfo.sex.toString()
pitBean.charm = fromUserInfo.charm
viewList[indexList.indexOf("2")].setData(pitBean)
if (dialogMentorShip != null && dialogMentorShip?.isShowing!!) {
MvpPre!!.signCoinList(mSignId!!)
}
}
}
/**
* IM推送 1092 结束
* FromUserInfo出价用户信息
* ToUserInfo被签用户信息
* sign_value出的最高价
*/
fun event1092(messageEvent: RoomMessageEvent?) {
stopTimer()
val fromUserInfo = messageEvent?.text?.fromUserInfo
val toUserInfo = messageEvent?.text?.toUserInfo
val signValue = messageEvent?.text?.sign_value
if (fromUserInfo != null && toUserInfo != null && signValue != null) {
}
}
/**
* IM 1093的推送
* end_time延时到这个时间点
*/
fun event1093(messageEvent: RoomMessageEvent?) {
val endTime = messageEvent?.text?.end_time
restartWithDelay(endTime?.toLong()!!)
}
override fun signCoinList(list: List<String>) {
MvpPre!!.wallet(list)
}
override fun wallet(list: List<String>,walletBean: WalletBean?) {
if (dialogMentorShip == null) {
dialogMentorShip = DialogMentorShip(ActivityUtils.getTopActivity())
}
dialogMentorShip?.show(list,mSignPitBean,
object : DialogMentorShip.OnItemClickListener {
override fun onItemClick(coin: String) {
MvpPre!!.signCoin(mSignId!!, coin)
}
})
}
private fun setIvForMai(idx: Int) {
mBinding.ivApplyForMai.setImageResource(ivForMai[idx])
mBinding.ivApplyForMai.tag = ivForMai[idx]
}
// 在需要开始计时的地方调用
private fun startTimer(milliseconds: Long) {
showHostOrAboveBottomView(true)
// 启动计时器
timer.startCountdown(milliseconds, scope)
// 观察时间变化
scope.launch {
timer.timeLeft.collect { time ->
val formattedTime = timer.formatTime(time)
// 更新UI显示
updateTimerDisplay(formattedTime)
}
}
}
private fun stopTimer() {
timer.stop()
setIvForMai(0)
showHostOrAboveBottomView(false)
mBinding.tvLeftPrice.text = "0"
mBinding.tvSignDay.visibility = View.GONE
mBinding.tvTimeLeft.text = startOrDelay[0]
mBinding.tvTime.text = "倒计时 00:00"
}
// 更新UI显示
private fun updateTimerDisplay(time: String) {
// 在这里更新你的UI比如
mBinding.tvTime.text = "倒计时 ${time}"
}
// 延迟后重新开始计时
private fun restartWithDelay(newMilliseconds: Long, delayMillis: Long = 1000) {
scope.launch {
delay(delayMillis)
startTimer(newMilliseconds)
}
}
fun event1035(messageEvent: RoomMessageEvent) {
}
@@ -271,7 +485,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
}
switchCloseMic.setOnCheckedChangeListener { compoundButton, b ->
MvpPre.setMutePit(
roomId,
mRoomId,
mPitBean?.pit_number!!,
if (b) "2" else "4"
)
@@ -280,7 +494,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
switchLockMic.setOnCheckedChangeListener { compoundButton, b ->
MvpPre.setLockPit(
roomId,
mRoomId,
mPitBean?.pit_number!!,
if (b) "1" else "0"
)
@@ -290,7 +504,7 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
tvHugMic.setOnClickListener { v: View? ->
// 处理抱麦逻辑
RoomOnlineDialogFragment.show(
roomId, mPitBean?.pit_number, mRoomInfo?.user_info, mRoomInfo,
mRoomId, mPitBean?.pit_number, mRoomInfo?.user_info, mRoomInfo,
childFragmentManager
)
popupWindow!!.dismiss()
@@ -322,4 +536,12 @@ class RoomMentorShipFragment(var mRoomInfo: RoomInfoResp?) :
viewList.clear()
}
// 在Fragment销毁时记得清理资源
override fun onDestroy() {
super.onDestroy()
scope.cancel()
}
}

View File

@@ -1,11 +1,12 @@
package com.xscm.modulemain.activity.room.presenter
import android.content.Context
import com.xscm.modulemain.activity.room.contacts.JukeboxContacts
import com.xscm.modulemain.activity.room.contacts.MentorShipContacts
import com.xscm.moduleutil.bean.WalletBean
import com.xscm.moduleutil.http.BaseObserver
import com.xscm.moduleutil.http.RetrofitClient
import com.xscm.moduleutil.presenter.BasePresenter
import com.xscm.moduleutil.presenter.RewardGiftContacts
import io.reactivex.disposables.Disposable
import java.lang.ref.WeakReference
@@ -24,6 +25,23 @@ class MentorShipPresenter(context: Context, val view: MentorShipContacts.View) :
})
}
override fun wallet(list:List<String>) {
RetrofitClient.getInstance().wallet(object : BaseObserver<WalletBean?>() {
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(walletBean: WalletBean) {
if (MvpRef == null) {
MvpRef = WeakReference(view)
}
MvpRef.get()?.wallet(list,walletBean)
}
})
}
override fun signStart(roomId: String, userId: String) {
RetrofitClient.getInstance().signStart(roomId, userId, object : BaseObserver<String?>() {
override fun onSubscribe(d: Disposable) {
@@ -60,6 +78,33 @@ class MentorShipPresenter(context: Context, val view: MentorShipContacts.View) :
})
}
override fun signCoinList(signId: String) {
RetrofitClient.getInstance().signCoinList(signId, object : BaseObserver<List<String>>() {
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(list: List<String>) {
if (MvpRef == null){
MvpRef = WeakReference(view)
}
MvpRef.get()?.signCoinList(list)
}
})
}
override fun signCoin(signId: String, sign_value: String) {
RetrofitClient.getInstance().signCoin(signId, sign_value, object : BaseObserver<String?>() {
override fun onSubscribe(d: Disposable) {
addDisposable(d)
}
override fun onNext(s: String) {
}
})
}
override fun setMutePit(roomId: String, pitNumber: String, isMute: String) {
RetrofitClient.getInstance()

View File

@@ -0,0 +1,68 @@
package com.xscm.modulemain.dialog
import android.content.Context
import android.view.Gravity
import android.view.ViewGroup
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.xscm.modulemain.R
import com.xscm.modulemain.databinding.DialogMentorShipLayoutBinding
import com.xscm.moduleutil.bean.room.RoomPitBean
import com.xscm.moduleutil.utils.ImageUtils
import com.xscm.moduleutil.widget.dialog.BaseDialog
class DialogMentorShip(context: Context) : BaseDialog<DialogMentorShipLayoutBinding>(context) {
init {
// 设置对话框从底部弹出
window?.setGravity(Gravity.BOTTOM)
// 设置对话框的宽度为屏幕宽度
window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
// 添加动画效果
window?.setWindowAnimations(com.xscm.moduleutil.R.style.DialogAnimationt)
}
override fun getLayoutId(): Int {
return R.layout.dialog_mentor_ship_layout
}
private var adapter: Adapter? = null
private var onItemClickListener: OnItemClickListener? = null
override fun initView() {
adapter = Adapter(R.layout.item_mentor_ship_layout, arrayListOf())
mBinding.recycleView.adapter = adapter
}
override fun initData() {
adapter?.setOnItemClickListener { adapter, view, position ->
onItemClickListener?.onItemClick(adapter.data[position]!!.toString())
}
mBinding.tvRecharge.setOnClickListener {
}
}
fun show(list: List<String>, mSignPitBean: RoomPitBean?, onItemClickListener: OnItemClickListener?) {
super.show()
mBinding.tvName.text = mSignPitBean?.nickname
ImageUtils.loadHeadCC(mSignPitBean?.avatar, mBinding.ivHead)
this.onItemClickListener = onItemClickListener
adapter?.setNewData(list)
}
class Adapter(idx: Int, data: MutableList<String>) :
BaseQuickAdapter<String, BaseViewHolder>(idx, data) {
override fun convert(helper: BaseViewHolder, item: String?) {
helper.setText(R.id.tv_glod, item)
}
}
interface OnItemClickListener {
fun onItemClick(coin: String)
}
}

View File

@@ -0,0 +1,44 @@
package com.xscm.modulemain.utils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
class CountdownTimer {
private var job: Job? = null
private val _timeLeft = MutableStateFlow(0L)
val timeLeft: StateFlow<Long> = _timeLeft
fun startCountdown(endTimestamp: Long, scope: CoroutineScope) {
job?.cancel()
job = scope.launch {
while (true) {
val currentTime = System.currentTimeMillis() / 1000
val remainingTime = (endTimestamp - currentTime) * 1000 // 转换为毫秒
if (remainingTime <= 0) {
_timeLeft.value = 0
break
}
_timeLeft.value = remainingTime
delay(1000)
}
}
}
fun stop() {
job?.cancel()
}
fun formatTime(milliseconds: Long): String {
val seconds = (milliseconds / 1000).toInt()
val minutes = seconds / 60
val remainingSeconds = seconds % 60
return String.format("%02d:%02d", minutes, remainingSeconds)
}
}

View File

@@ -74,7 +74,7 @@ class RoomMentorShipWheatView : BaseWheatView {
hostTv?.text = bean.nickname
} else {
mTvName.visibility = VISIBLE
mCharmView.visibility = INVISIBLE
mCharmView.visibility = GONE
hostTv?.visibility = GONE
}
}