266 lines
11 KiB
Kotlin
266 lines
11 KiB
Kotlin
![]() |
package com.yizhuan.erban.vip
|
||
|
|
||
|
import android.annotation.SuppressLint
|
||
|
import android.content.Context
|
||
|
import android.content.Intent
|
||
|
import android.view.View
|
||
|
import android.widget.LinearLayout
|
||
|
import android.widget.TextView
|
||
|
import androidx.activity.viewModels
|
||
|
import androidx.constraintlayout.widget.ConstraintLayout
|
||
|
import androidx.core.view.isInvisible
|
||
|
import androidx.core.view.isVisible
|
||
|
import androidx.recyclerview.widget.GridLayoutManager
|
||
|
import com.netease.nim.uikit.StatusBarUtil
|
||
|
import com.netease.nim.uikit.common.util.sys.TimeUtil
|
||
|
import com.yizhuan.erban.R
|
||
|
import com.yizhuan.erban.avroom.firstcharge.SelectPayTypeDialog
|
||
|
import com.yizhuan.erban.bank_card.activity.AddBankCardAgreementActivity
|
||
|
import com.yizhuan.erban.base.BaseViewBindingActivity
|
||
|
import com.yizhuan.erban.base.TitleBar
|
||
|
import com.yizhuan.erban.common.EmptyViewHelper
|
||
|
import com.yizhuan.erban.common.widget.dialog.DialogManager
|
||
|
import com.yizhuan.erban.databinding.ActivityVipMainBinding
|
||
|
import com.yizhuan.erban.ui.setting.ModifyPwdActivity
|
||
|
import com.yizhuan.erban.ui.utils.RVDelegate
|
||
|
import com.yizhuan.erban.ui.utils.load
|
||
|
import com.yizhuan.erban.ui.webview.CommonWebViewActivity
|
||
|
import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
|
||
|
import com.yizhuan.xchat_android_core.UriProvider
|
||
|
import com.yizhuan.xchat_android_core.auth.AuthModel
|
||
|
import com.yizhuan.xchat_android_core.pay.PayModel
|
||
|
import com.yizhuan.xchat_android_core.pay.PaymentActivity
|
||
|
import com.yizhuan.xchat_android_core.pay.bean.PaymentResult
|
||
|
import com.yizhuan.xchat_android_core.pay.model.unionpay.UnionPayModel
|
||
|
import com.yizhuan.xchat_android_core.vip.VipAuthInfo
|
||
|
import com.yizhuan.xchat_android_core.vip.VipInfo
|
||
|
import com.yizhuan.xchat_android_core.vip.VipPageInfo
|
||
|
import com.yizhuan.xchat_android_library.utils.JavaUtil
|
||
|
import java.util.*
|
||
|
|
||
|
class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
|
||
|
VipMagicIndicatorAdapter.OnItemSelectListener {
|
||
|
|
||
|
companion object {
|
||
|
|
||
|
@JvmStatic
|
||
|
fun start(context: Context, roomUid: Long) {
|
||
|
val starter = Intent(context, VipMainActivity::class.java)
|
||
|
starter.putExtra("roomUid", roomUid)
|
||
|
context.startActivity(starter)
|
||
|
}
|
||
|
|
||
|
private const val BIND_CODE_GOLD = 200
|
||
|
}
|
||
|
|
||
|
private val perAdapter = VipAuthAdapter()
|
||
|
private lateinit var rvDelegate: RVDelegate<VipAuthInfo>
|
||
|
private val roomUid by lazy { intent.getLongExtra("roomUid", 0) }
|
||
|
private val vipViewModel: VipViewModel by viewModels()
|
||
|
|
||
|
private var currVipInfo: VipInfo? = null
|
||
|
private var vipInfos: List<VipInfo>? = null
|
||
|
private var myVipInfo: VipInfo? = null
|
||
|
private var vipPageInfo: VipPageInfo? = null
|
||
|
|
||
|
@SuppressLint("SetTextI18n")
|
||
|
override fun init() {
|
||
|
initWhiteTitleBar("贵族中心")
|
||
|
mTitleBar.addAction(object : TitleBar.ImageAction(R.drawable.ic_room_pk_help) {
|
||
|
override fun performAction(view: View) {
|
||
|
}
|
||
|
})
|
||
|
rvDelegate = RVDelegate.Builder<VipAuthInfo>()
|
||
|
.setLayoutManager(GridLayoutManager(this, 3))
|
||
|
.setRecyclerView(binding.recyclerView)
|
||
|
.setEmptyView(EmptyViewHelper.createEmptyView(context, "没有搜索结果"))
|
||
|
.setAdapter(perAdapter)
|
||
|
.build()
|
||
|
binding.recyclerView.isNestedScrollingEnabled = false
|
||
|
vipViewModel.getVipPageInfo()
|
||
|
vipViewModel.vipInfoLiveData.observe(this) {
|
||
|
|
||
|
vipPageInfo = it
|
||
|
it?.let {
|
||
|
vipInfos = it.vipInfos
|
||
|
myVipInfo = it.vipInfos?.find { vipInfo -> it.currLevel == vipInfo.vipLevel }
|
||
|
val nextVipInfo =
|
||
|
it.vipInfos?.getOrNull((it.vipInfos?.indexOf(myVipInfo) ?: -1) + 1)
|
||
|
|
||
|
if (nextVipInfo == null || nextVipInfo == myVipInfo) {
|
||
|
|
||
|
}
|
||
|
|
||
|
myVipInfo?.let { vipInfo ->
|
||
|
|
||
|
binding.llMyVipInfo.isVisible = true
|
||
|
binding.tvOpenVip.isVisible = false
|
||
|
binding.tvNotOpen.text = "当前权力值:${it.currScore}"
|
||
|
binding.tvCurrValue.text = "当前${it.currScore}"
|
||
|
binding.tvCurrLevelName.text = myVipInfo?.vipName
|
||
|
binding.tvNextLevelName.text = nextVipInfo?.vipName
|
||
|
binding.tvKeepValue.text = "保级${vipInfo.levelKeepScore}"
|
||
|
binding.tvUpValue.text = "升级${vipInfo.levelUpScore}"
|
||
|
binding.tvUpgradeValue.text = "${vipInfo.levelUpScore - it.currScore}"
|
||
|
binding.tvResidueTime.text = TimeUtil.getElapseTimeForVip(it.remainSeconds)
|
||
|
binding.seekBar.max = vipInfo.levelUpScore
|
||
|
binding.seekBar.progress = it.currScore
|
||
|
|
||
|
val currValueParams =
|
||
|
binding.tvCurrValue.layoutParams as ConstraintLayout.LayoutParams
|
||
|
currValueParams.horizontalBias = it.currScore.toFloat() / vipInfo.levelUpScore
|
||
|
binding.tvCurrValue.layoutParams = currValueParams
|
||
|
|
||
|
val keepParams =
|
||
|
binding.ivKeepIndicator.layoutParams as ConstraintLayout.LayoutParams
|
||
|
keepParams.horizontalBias =
|
||
|
vipInfo.levelKeepScore.toFloat() / vipInfo.levelUpScore
|
||
|
binding.ivKeepIndicator.layoutParams = keepParams
|
||
|
|
||
|
} ?: run {
|
||
|
binding.llMyVipInfo.isVisible = false
|
||
|
binding.tvOpenVip.isVisible = true
|
||
|
binding.tvNotOpen.text = "尚未开通贵族"
|
||
|
}
|
||
|
|
||
|
initTitleTab()
|
||
|
perAdapter.setNewData(it.vipAuthInfos)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
override fun initWhiteTitleBar(title: String?) {
|
||
|
mTitleBar = findViewById(R.id.title_bar)
|
||
|
if (mTitleBar != null) {
|
||
|
mTitleBar.setTitle(title)
|
||
|
mTitleBar.setImmersive(false)
|
||
|
mTitleBar.setTitleColor(resources.getColor(R.color.white))
|
||
|
mTitleBar.setLeftImageResource(R.drawable.arrow_left_white)
|
||
|
mTitleBar.setCommonBackgroundColor(resources.getColor(R.color.transparent))
|
||
|
mTitleBar.setLeftClickListener { onLeftClickListener() }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 初始化推荐和派对tab
|
||
|
*/
|
||
|
private fun initTitleTab() {
|
||
|
val tagList: MutableList<String> = ArrayList()
|
||
|
vipInfos?.forEach {
|
||
|
tagList.add(it.vipName)
|
||
|
}
|
||
|
val commonNavigator = CommonNavigator(context)
|
||
|
commonNavigator.setTitleWrapContent(true)
|
||
|
val magicIndicatorAdapter = VipMagicIndicatorAdapter(context, tagList)
|
||
|
magicIndicatorAdapter.setOnItemSelectListener(this)
|
||
|
commonNavigator.adapter = magicIndicatorAdapter
|
||
|
binding.magicIndicator.navigator = commonNavigator
|
||
|
commonNavigator.titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
|
||
|
onItemSelect(if (myVipInfo == null) 0 else vipInfos?.indexOf(myVipInfo) ?: 0, null)
|
||
|
}
|
||
|
|
||
|
@SuppressLint("SetTextI18n")
|
||
|
override fun onItemSelect(position: Int, view: TextView?) {
|
||
|
currVipInfo = vipInfos?.getOrNull(position)
|
||
|
binding.ivMyLevel.isInvisible = currVipInfo?.vipLevel != myVipInfo?.vipLevel
|
||
|
binding.tvNotOpen.text = if (myVipInfo == null) {
|
||
|
"尚未开通贵族"
|
||
|
} else {
|
||
|
"当前权力值:${vipPageInfo?.currScore ?: 0}"
|
||
|
}
|
||
|
binding.tvNotOpen.isInvisible =
|
||
|
!(currVipInfo?.vipLevel == myVipInfo?.vipLevel || myVipInfo == null)
|
||
|
binding.ivVipIcon.load(currVipInfo?.vipLogo)
|
||
|
binding.tvAuthNum.text =
|
||
|
"${currVipInfo?.ownAuthTypes?.size ?: 0}/${vipPageInfo?.vipAuthInfos?.size ?: 0}"
|
||
|
perAdapter.setVipInfo(currVipInfo)
|
||
|
binding.magicIndicator.onPageSelected(position)
|
||
|
perAdapter.notifyDataSetChanged()
|
||
|
}
|
||
|
|
||
|
override fun onResume() {
|
||
|
super.onResume()
|
||
|
loadData()
|
||
|
}
|
||
|
|
||
|
@SuppressLint("CheckResult", "SetTextI18n")
|
||
|
private fun loadData() {
|
||
|
PayModel.get().getChargeList(9, AuthModel.get().currentUid)
|
||
|
.compose(bindToLifecycle())
|
||
|
.subscribe(
|
||
|
{
|
||
|
val chargeInfo = it.list.getOrNull(0)
|
||
|
chargeInfo?.let { chargeBean ->
|
||
|
binding.tvOpenVip.text = "¥${chargeBean.getMoney()}立刻成为大鹅贵族"
|
||
|
binding.tvOpenVip.setOnClickListener {
|
||
|
SelectPayTypeDialog.newInstance(
|
||
|
chargeBean.chargeProdId,
|
||
|
"¥${chargeBean.money}",
|
||
|
)
|
||
|
.show(context)
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
it.printStackTrace()
|
||
|
}
|
||
|
)
|
||
|
|
||
|
}
|
||
|
|
||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||
|
super.onActivityResult(requestCode, resultCode, data)
|
||
|
dialogManager.dismissDialog()
|
||
|
if (resultCode != RESULT_OK) {
|
||
|
return
|
||
|
}
|
||
|
//支付页面返回处理
|
||
|
if (requestCode == PaymentActivity.REQUEST_CODE_PAY) {
|
||
|
if (data != null && data.extras != null) {
|
||
|
val paymentResult: PaymentResult? =
|
||
|
data.getParcelableExtra(PaymentActivity.KEY_PAY_RESULT)
|
||
|
if (paymentResult != null) {
|
||
|
// 充值金额超过限定时,就必须先实名认证
|
||
|
when (JavaUtil.str2int(paymentResult.code)) {
|
||
|
PayModel.NOT_REAL_NAME_BEFORE_CHARGING -> dialogManager.showTipsDialog(
|
||
|
getString(R.string.tips_need_to_certification),
|
||
|
getString(R.string.go_to_certification),
|
||
|
object : DialogManager.AbsOkDialogListener() {
|
||
|
override fun onOk() {
|
||
|
// 跳去实名认证页面
|
||
|
CommonWebViewActivity.start(
|
||
|
this@VipMainActivity,
|
||
|
UriProvider.getTutuRealNamePage()
|
||
|
)
|
||
|
}
|
||
|
})
|
||
|
UnionPayModel.CODE_NEED_BIND_BANK_CARD_FIRST -> dialogManager.showTipsDialog(
|
||
|
getString(R.string.tips_need_bind_bank_card_first),
|
||
|
object : DialogManager.AbsOkDialogListener() {
|
||
|
override fun onOk() {
|
||
|
// 跳去添加银行卡页面
|
||
|
AddBankCardAgreementActivity.start(this@VipMainActivity)
|
||
|
}
|
||
|
})
|
||
|
else -> {
|
||
|
toast(paymentResult.msg)
|
||
|
//重新获取钱包信息
|
||
|
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (requestCode == BIND_CODE_GOLD) {
|
||
|
ModifyPwdActivity.start(this, ModifyPwdActivity.FOGERT_PAY_PWD)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
override fun needSteepStateBar() = true
|
||
|
|
||
|
override fun setStatusBar() {
|
||
|
super.setStatusBar()
|
||
|
StatusBarUtil.transparencyBar(this)
|
||
|
}
|
||
|
}
|