Files
peko-android/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt

266 lines
11 KiB
Kotlin
Raw Normal View History

2021-12-29 19:03:15 +08:00
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)
}
}