|
|
@@ -1,397 +0,0 @@
|
|
|
-package com.adealink.weparty.bettingpk
|
|
|
-
|
|
|
-import android.content.DialogInterface
|
|
|
-import android.graphics.Color
|
|
|
-import android.graphics.drawable.ColorDrawable
|
|
|
-import android.os.Bundle
|
|
|
-import android.view.Gravity
|
|
|
-import android.view.Window
|
|
|
-import android.view.WindowManager
|
|
|
-import androidx.fragment.app.viewModels
|
|
|
-import com.adealink.frame.aab.util.getCompatColor
|
|
|
-import com.adealink.frame.aab.util.getCompatString
|
|
|
-import com.adealink.frame.base.Rlt
|
|
|
-import com.adealink.frame.base.fastLazy
|
|
|
-import com.adealink.weparty.commonui.BaseActivity
|
|
|
-import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
|
|
|
-import com.adealink.weparty.commonui.dialogfragment.showDialogFragment
|
|
|
-import com.adealink.weparty.commonui.ext.gone
|
|
|
-import com.adealink.weparty.commonui.ext.hide
|
|
|
-import com.adealink.weparty.commonui.ext.show
|
|
|
-import com.adealink.weparty.commonui.toast.util.showToast
|
|
|
-import com.adealink.frame.log.Log
|
|
|
-import com.adealink.frame.mvvm.view.viewBinding
|
|
|
-import com.adealink.frame.router.Router
|
|
|
-import com.adealink.frame.router.annotation.RouterUri
|
|
|
-import com.adealink.frame.util.safeToLong
|
|
|
-import com.adealink.weparty.module.backpack.SelectUserPackageInfo
|
|
|
-import com.adealink.weparty.bettingpk.comp.MyPkInfoComp
|
|
|
-import com.adealink.weparty.bettingpk.data.BETTING_PK_BG_EFFECT
|
|
|
-import com.adealink.weparty.bettingpk.data.BETTING_PK_VS_EFFECT
|
|
|
-import com.adealink.weparty.module.bettingpk.data.BettingPkStatus
|
|
|
-import com.adealink.weparty.module.bettingpk.data.BettingPkTime
|
|
|
-import com.adealink.weparty.module.bettingpk.data.PKInfoData
|
|
|
-import com.adealink.weparty.bettingpk.data.TAG_PK
|
|
|
-import com.adealink.weparty.bettingpk.databinding.DialogMyBettingPkBinding
|
|
|
-import com.adealink.weparty.bettingpk.dialog.BettingPKRecordDialog
|
|
|
-import com.adealink.weparty.bettingpk.dialog.BettingPKRuleDialog
|
|
|
-import com.adealink.weparty.bettingpk.viewmodel.BettingPKEffectViewModel
|
|
|
-import com.adealink.weparty.bettingpk.viewmodel.BettingPKListViewModel
|
|
|
-import com.adealink.weparty.bettingpk.viewmodel.BettingPKViewModel
|
|
|
-import com.adealink.weparty.bettingpk.viewmodel.BettingPKViewModelFactory
|
|
|
-import com.adealink.weparty.commonui.viewmodel.VapcEffectInfo
|
|
|
-import com.adealink.weparty.module.bettingpk.BettingPK
|
|
|
-import com.adealink.weparty.module.profile.ProfileModule
|
|
|
-import com.adealink.weparty.module.room.RoomModule
|
|
|
-import com.adealink.weparty.module.search.Search
|
|
|
-import com.adealink.weparty.module.search.SearchModule
|
|
|
-import com.tencent.qgame.animplayer.util.ScaleType
|
|
|
-import java.io.File
|
|
|
-import com.adealink.weparty.R as APP_R
|
|
|
-
|
|
|
-@RouterUri(path = [BettingPK.MyBettingPk.PATH], desc = "我的赌注PK")
|
|
|
-class MyBettingPKDialog : BaseDialogFragment(R.layout.dialog_my_betting_pk) {
|
|
|
- private val binding by viewBinding(DialogMyBettingPkBinding::bind)
|
|
|
- private val viewModel by viewModels<BettingPKViewModel>({ requireActivity() }) { BettingPKViewModelFactory() }
|
|
|
- private val listViewModel by viewModels<BettingPKListViewModel>({ requireActivity() }) { BettingPKViewModelFactory() }
|
|
|
- private val searchViewModel by fastLazy { SearchModule.getSearchViewModel(requireActivity()) }
|
|
|
- private val effectViewModel by viewModels<BettingPKEffectViewModel>()
|
|
|
- private var selectPkTime = BettingPkTime.MINUTES_10
|
|
|
- private var myPkInfo: PKInfoData? = null
|
|
|
-
|
|
|
- override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
- super.onCreate(savedInstanceState)
|
|
|
- Router.bind(this)
|
|
|
- }
|
|
|
-
|
|
|
- override fun initViews() {
|
|
|
- super.initViews()
|
|
|
- binding.root.setOnClickListener {
|
|
|
- dismiss()
|
|
|
- }
|
|
|
- binding.clContainer.setOnClickListener {
|
|
|
- //Ntd.
|
|
|
- }
|
|
|
- binding.ivRule.setOnClickListener {
|
|
|
- val act = activity ?: return@setOnClickListener
|
|
|
- showDialogFragment<BettingPKRuleDialog>(act.supportFragmentManager)
|
|
|
- }
|
|
|
- binding.ivRecord.setOnClickListener {
|
|
|
- val act = activity ?: return@setOnClickListener
|
|
|
- showDialogFragment<BettingPKRecordDialog>(act.supportFragmentManager)
|
|
|
- dismiss()
|
|
|
- }
|
|
|
- binding.vBettingPkEntrance.setOnClickListener {
|
|
|
- val act = activity ?: return@setOnClickListener
|
|
|
- showDialogFragment<BettingPKDialog>(act.supportFragmentManager)
|
|
|
- dismiss()
|
|
|
- }
|
|
|
- binding.tv10Min.text = getCompatString(R.string.betting_pk_duration_min, BettingPkTime.MINUTES_10.time.toString())
|
|
|
- binding.tv10Min.setOnClickListener {
|
|
|
- val myPkInfo = viewModel.getMyPkInfo()
|
|
|
- if (myPkInfo != null && !myPkInfo.isOver()) {
|
|
|
- return@setOnClickListener
|
|
|
- }
|
|
|
- clickPkDuration(BettingPkTime.MINUTES_10)
|
|
|
- }
|
|
|
- binding.tv60Min.text = getCompatString(R.string.betting_pk_duration_min, BettingPkTime.MINUTES_60.time.toString())
|
|
|
- binding.tv60Min.setOnClickListener {
|
|
|
- val myPkInfo = viewModel.getMyPkInfo()
|
|
|
- if (myPkInfo != null && !myPkInfo.isOver()) {
|
|
|
- return@setOnClickListener
|
|
|
- }
|
|
|
- clickPkDuration(BettingPkTime.MINUTES_60)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- override fun initComponents() {
|
|
|
- super.initComponents()
|
|
|
- MyPkInfoComp(this, binding.clBetInfo) {
|
|
|
- dismiss()
|
|
|
- }.attach()
|
|
|
- }
|
|
|
-
|
|
|
- private fun updateByPkInfo(pkInfo: PKInfoData?) {
|
|
|
- updatePkDuration(
|
|
|
- BettingPkTime.getTimeBy(pkInfo?.time) ?: BettingPkTime.MINUTES_10
|
|
|
- )
|
|
|
- when (BettingPkStatus.getStatusBy(pkInfo?.status)) {
|
|
|
- BettingPkStatus.WAIT,
|
|
|
- BettingPkStatus.WAIT_LOCK -> {
|
|
|
- binding.clDuration.gone()
|
|
|
- //邀请他人
|
|
|
- binding.tvLeftBtn.show()
|
|
|
- binding.tvLeftBtn.setBackgroundResource(R.drawable.betting_pk_blue_button_bg)
|
|
|
- binding.tvLeftBtn.text = getCompatString(R.string.betting_pk_invite_other)
|
|
|
- binding.tvLeftBtn.setOnClickListener { inviteOthers() }
|
|
|
-
|
|
|
- //随机PK
|
|
|
- binding.tvRightBtn.show()
|
|
|
- binding.tvRightBtn.setBackgroundResource(R.drawable.betting_pk_red_button_bg)
|
|
|
- binding.tvRightBtn.text = getCompatString(R.string.betting_pk_random_match)
|
|
|
- binding.tvRightBtn.setOnClickListener { randomPk() }
|
|
|
-
|
|
|
- //取消
|
|
|
- binding.tvCancelBtn.show()
|
|
|
- binding.tvCancelBtn.setOnClickListener { cancelPk() }
|
|
|
- }
|
|
|
-
|
|
|
- BettingPkStatus.IN_PK -> {
|
|
|
- binding.clDuration.gone()
|
|
|
- binding.tvLeftBtn.gone()
|
|
|
- binding.tvRightBtn.gone()
|
|
|
- binding.tvCancelBtn.gone()
|
|
|
- }
|
|
|
-
|
|
|
- BettingPkStatus.OVER,
|
|
|
- BettingPkStatus.OVER_REWARD,
|
|
|
- null -> {
|
|
|
- binding.clDuration.show()
|
|
|
- //没有PK信息,需要重新发起PK
|
|
|
- //邀请他人
|
|
|
- binding.tvLeftBtn.show()
|
|
|
- binding.tvLeftBtn.setBackgroundResource(R.drawable.betting_pk_blue_button_bg)
|
|
|
- binding.tvLeftBtn.text = getCompatString(R.string.betting_pk_invite_other)
|
|
|
- binding.tvLeftBtn.setOnClickListener { inviteOthers() }
|
|
|
-
|
|
|
- //随机PK
|
|
|
- binding.tvRightBtn.show()
|
|
|
- binding.tvRightBtn.setBackgroundResource(R.drawable.betting_pk_red_button_bg)
|
|
|
- binding.tvRightBtn.text = getCompatString(R.string.betting_pk_random_match)
|
|
|
- binding.tvRightBtn.setOnClickListener { randomPk() }
|
|
|
-
|
|
|
- binding.tvCancelBtn.gone()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- override fun loadData() {
|
|
|
- super.loadData()
|
|
|
- viewModel.clearOwnerAddBet()
|
|
|
- viewModel.loadMyPkInfo()
|
|
|
- listViewModel.loadPkList(BettingPkStatus.IN_PK.status, 0, 3).observe(viewLifecycleOwner) { rlt ->
|
|
|
- when (rlt) {
|
|
|
- is Rlt.Failed -> {
|
|
|
- binding.vBettingPkEntrance.setAvatarList(
|
|
|
- listOf(Pair("", ""))
|
|
|
- )
|
|
|
- }
|
|
|
-
|
|
|
- is Rlt.Success -> {
|
|
|
- binding.vBettingPkEntrance.setAvatarList(
|
|
|
- rlt.data.map { Pair(it.ownerImg, it.otherImg) }
|
|
|
- )
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- effectViewModel.checkAndDownloadEffect(BETTING_PK_BG_EFFECT).observe(viewLifecycleOwner) {
|
|
|
- if (it == null) {
|
|
|
- Log.e(TAG_PK, "checkAndDownloadEffect($BETTING_PK_BG_EFFECT) fail.")
|
|
|
- return@observe
|
|
|
- }
|
|
|
- playBgEffect(it)
|
|
|
- }
|
|
|
- activity?.let {
|
|
|
- binding.vBettingPkEntrance.playVsEffect(it.assets, "betting_pk_vs.mp4")
|
|
|
- } ?: let {
|
|
|
- effectViewModel.checkAndDownloadEffect(BETTING_PK_VS_EFFECT).observe(viewLifecycleOwner) {
|
|
|
- if (it == null) {
|
|
|
- Log.e(TAG_PK, "checkAndDownloadEffect($BETTING_PK_VS_EFFECT) fail.")
|
|
|
- return@observe
|
|
|
- }
|
|
|
- binding.vBettingPkEntrance.playVsEffect(it.localPath)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun playBgEffect(effect: VapcEffectInfo) {
|
|
|
- binding.ivBg.hide()
|
|
|
- binding.animBg.show()
|
|
|
- binding.animBg.apply {
|
|
|
- setMute(true)
|
|
|
- setLoop(Int.MAX_VALUE)
|
|
|
- autoDismiss(false)
|
|
|
- setScaleType(ScaleType.FIT_CENTER)
|
|
|
- startPlay(File(effect.localPath))
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- override fun observeViewModel() {
|
|
|
- super.observeViewModel()
|
|
|
- viewModel.myPkInfoLD.observe(this) {
|
|
|
- myPkInfo = it
|
|
|
- updateByPkInfo(it)
|
|
|
- }
|
|
|
- viewModel.onPkStartLD.observeWithoutCache(this) {
|
|
|
- viewModel.loadMyPkInfo()
|
|
|
- }
|
|
|
- viewModel.onPkResultLD.observeWithoutCache(this) {
|
|
|
- //检查是不是自己的比赛
|
|
|
- val currentRoomId = RoomModule.getJoinedRoomId() ?: return@observeWithoutCache
|
|
|
- val ownerRoomId = it.ownerId.safeToLong(0)
|
|
|
- val otherRoomId = it.otherId.safeToLong(0)
|
|
|
- if (currentRoomId != ownerRoomId && currentRoomId != otherRoomId) {
|
|
|
- return@observeWithoutCache
|
|
|
- }
|
|
|
- viewModel.loadMyPkInfo()
|
|
|
- }
|
|
|
- searchViewModel?.inviteResultLD?.observeWithoutCache(this) {
|
|
|
- val uid = it.uid
|
|
|
- val roomOwnerUid = it.roomInfo?.owner
|
|
|
- if (uid > 0) {
|
|
|
- sendInvite(it.uid)
|
|
|
- } else if (roomOwnerUid != null && roomOwnerUid > 0) {
|
|
|
- sendInvite(roomOwnerUid)
|
|
|
- } else {
|
|
|
- Log.d(TAG_PK, "search invite info is invalid, uid:$uid, roomOwnerUid:$roomOwnerUid")
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun clickPkDuration(time: BettingPkTime) {
|
|
|
- selectPkTime = time
|
|
|
- updatePkDuration(time)
|
|
|
- }
|
|
|
-
|
|
|
- private fun updatePkDuration(time: BettingPkTime) {
|
|
|
- if (time == BettingPkTime.MINUTES_10) {
|
|
|
- binding.tv10Min.setBackgroundResource(R.drawable.betting_pk_duration_select_bg)
|
|
|
- binding.tv10Min.setTextColor(getCompatColor(APP_R.color.color_FF833900))
|
|
|
-
|
|
|
- binding.tv60Min.setBackgroundResource(R.drawable.betting_pk_duration_unselect_bg)
|
|
|
- binding.tv60Min.setTextColor(getCompatColor(APP_R.color.color_B3FFFFFF))
|
|
|
- } else {
|
|
|
- binding.tv10Min.setBackgroundResource(R.drawable.betting_pk_duration_unselect_bg)
|
|
|
- binding.tv10Min.setTextColor(getCompatColor(APP_R.color.color_B3FFFFFF))
|
|
|
-
|
|
|
- binding.tv60Min.setBackgroundResource(R.drawable.betting_pk_duration_select_bg)
|
|
|
- binding.tv60Min.setTextColor(getCompatColor(APP_R.color.color_FF833900))
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun cancelPk() {
|
|
|
- val currentPkInfo = viewModel.getMyPkInfo()
|
|
|
- if (currentPkInfo == null || currentPkInfo.gameId.isEmpty()) {
|
|
|
- showToast(R.string.betting_pk_current_no_pk_info)
|
|
|
- return
|
|
|
- }
|
|
|
- (activity as? BaseActivity)?.showLoading()
|
|
|
- viewModel.cancelPk(currentPkInfo.gameId).observe(viewLifecycleOwner) {
|
|
|
- (activity as? BaseActivity)?.dismissLoading()
|
|
|
- showToast(it)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun inviteOthers() {
|
|
|
- val act = activity ?: return
|
|
|
- Router.getRouterInstance<BaseDialogFragment>(Search.SearchDialog.PATH)?.apply {
|
|
|
- arguments = Bundle().apply {
|
|
|
- putInt(Search.Search.EXTRA_SCENE, Search.Search.SCENE_INVITE)
|
|
|
- }
|
|
|
- }?.show(act.supportFragmentManager)
|
|
|
- }
|
|
|
-
|
|
|
- private fun randomPk() {
|
|
|
- val myPkInfo = viewModel.getMyPkInfo()
|
|
|
- if (myPkInfo == null || myPkInfo.isOver()) {
|
|
|
- randomPkInner(selectPkTime, viewModel.getOwnerBetList()) {
|
|
|
- viewModel.clearOwnerAddBet()
|
|
|
- gotoPkDialog(BettingPK.BettingPK.TAB_WAIT_FOR_PK)
|
|
|
- dismiss()
|
|
|
- }
|
|
|
- } else {
|
|
|
- if (myPkInfo.isOpen) {
|
|
|
- gotoPkDialog(BettingPK.BettingPK.TAB_WAIT_FOR_PK)
|
|
|
- dismiss()
|
|
|
- } else {
|
|
|
- randomPkInner(BettingPkTime.getTimeBy(myPkInfo.time), null) {
|
|
|
- gotoPkDialog(BettingPK.BettingPK.TAB_WAIT_FOR_PK)
|
|
|
- dismiss()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun randomPkInner(
|
|
|
- pkTime: BettingPkTime?,
|
|
|
- betList: List<SelectUserPackageInfo>?,
|
|
|
- successCallback: (() -> Unit)?
|
|
|
- ) {
|
|
|
- (activity as? BaseActivity)?.showLoading()
|
|
|
- viewModel.randomPk(pkTime, betList).observe(viewLifecycleOwner) {
|
|
|
- (activity as? BaseActivity)?.dismissLoading()
|
|
|
- when (it) {
|
|
|
- is Rlt.Failed -> {
|
|
|
- showToast(it)
|
|
|
- }
|
|
|
-
|
|
|
- is Rlt.Success -> {
|
|
|
- successCallback?.invoke()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun gotoPkDialog(tab: Int) {
|
|
|
- activity?.let { act ->
|
|
|
- showDialogFragment<BettingPKDialog>(act.supportFragmentManager, Bundle().apply {
|
|
|
- putInt(BettingPK.BettingPK.EXTRA_TAB, tab)
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun sendInvite(uid: Long) {
|
|
|
- if (uid == ProfileModule.getMyUid()) {
|
|
|
- //自己邀请自己
|
|
|
- showToast(APP_R.string.common_can_not_invite_self)
|
|
|
- return
|
|
|
- }
|
|
|
- val myPkInfo = viewModel.getMyPkInfo()
|
|
|
- if (myPkInfo == null || myPkInfo.isOver()) {
|
|
|
- createPk {
|
|
|
- viewModel.clearOwnerAddBet()
|
|
|
- sendInvite(uid)
|
|
|
- }
|
|
|
- } else {
|
|
|
- (activity as? BaseActivity)?.showLoading()
|
|
|
- viewModel.sendInvite(myPkInfo.gameId, uid).observe(viewLifecycleOwner) {
|
|
|
- (activity as? BaseActivity)?.dismissLoading()
|
|
|
- showToast(it)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private fun createPk(callback: () -> Unit) {
|
|
|
- (activity as? BaseActivity)?.showLoading()
|
|
|
- viewModel.createPk(selectPkTime, viewModel.getOwnerBetList(), false).observe(viewLifecycleOwner) {
|
|
|
- (activity as? BaseActivity)?.dismissLoading()
|
|
|
- when (it) {
|
|
|
- is Rlt.Failed -> {
|
|
|
- showToast(it)
|
|
|
- }
|
|
|
-
|
|
|
- is Rlt.Success -> {
|
|
|
- callback.invoke()
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- override fun onDismiss(dialog: DialogInterface) {
|
|
|
- super.onDismiss(dialog)
|
|
|
- viewModel.clearOwnerAddBet()
|
|
|
- }
|
|
|
-
|
|
|
- override fun resetWindowAttributes(window: Window) {
|
|
|
- super.resetWindowAttributes(window)
|
|
|
- window.setLayout(
|
|
|
- WindowManager.LayoutParams.MATCH_PARENT,
|
|
|
- WindowManager.LayoutParams.MATCH_PARENT
|
|
|
- )
|
|
|
- window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
|
|
- val attr = window.attributes
|
|
|
- attr.gravity = Gravity.BOTTOM
|
|
|
- attr.dimAmount = 0.7f
|
|
|
- window.attributes = attr
|
|
|
- }
|
|
|
-}
|