贵族迭代:支持钻石开通,首充优惠,贵族排行榜

This commit is contained in:
huangjian
2022-10-26 18:28:05 +08:00
parent 28c2d4cab7
commit c4f8830333
32 changed files with 1028 additions and 279 deletions

View File

@@ -1281,6 +1281,10 @@
android:name=".avroom.wishlist.WishListHistoryActivity"
android:screenOrientation="portrait" />
<activity
android:name=".vip.VipRankActivity"
android:screenOrientation="portrait" />
</application>
</manifest>

View File

@@ -61,7 +61,11 @@ class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>() {
val starter = Intent(context, FirstChargeDialog::class.java)
context.startActivity(starter)
StatisticManager.Instance()
.onEvent(StatisticsProtocol.EVENT_ROOM_POP_CLICK, "房间pop点击", mapOf("name" to "新人充值"))
.onEvent(
StatisticsProtocol.EVENT_ROOM_POP_CLICK,
"房间pop点击",
mapOf("name" to "新人充值")
)
}
private const val BIND_CODE_GOLD = 200
@@ -103,7 +107,10 @@ class FirstChargeDialog : BaseViewBindingActivity<DialogFirstChargeBinding>() {
}
rvDelegate = RVDelegate.Builder<FirstChargeReward>()
.setAdapter(RewardAdapter().also { rewardAdapter = it })
.setAdapter(
RewardAdapter((ScreenUtil.screenWidth * 0.66f / 3f).toInt())
.also { rewardAdapter = it }
)
.setLayoutManager(FlexboxLayoutManager(context).apply {
alignItems = AlignItems.STRETCH
justifyContent = JustifyContent.SPACE_EVENLY

View File

@@ -10,6 +10,7 @@ import com.mango.moshen.treasure_box.widget.dialog.BaseBindingDialog
import com.mango.moshen.ui.utils.RVDelegate
import com.mango.core.pay.bean.FirstChargeReward
import com.mango.xchat_android_library.annatation.ActLayoutRes
import com.netease.nim.uikit.common.util.sys.ScreenUtil
@ActLayoutRes(R.layout.dialog_first_charge_prize)
class FirstChargePrizeDialog(
@@ -22,7 +23,7 @@ class FirstChargePrizeDialog(
override fun init() {
rvDelegate = RVDelegate.Builder<FirstChargeReward>()
.setAdapter(RewardAdapter())
.setAdapter(RewardAdapter(ScreenUtil.dip2px(248f) / 3))
.setLayoutManager(FlexboxLayoutManager(context).apply {
alignItems = AlignItems.STRETCH
justifyContent = JustifyContent.SPACE_EVENLY

View File

@@ -4,17 +4,16 @@ import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.mango.moshen.R
import com.mango.core.pay.bean.FirstChargeReward
import com.mango.moshen.ui.utils.ImageLoadUtils
import com.mango.core.utils.TextUtils
class RewardAdapter :
class RewardAdapter(private val itemWidth: Int) :
BaseQuickAdapter<FirstChargeReward, BaseViewHolder>(R.layout.item_first_charge_reward) {
override fun convert(helper: BaseViewHolder, item: FirstChargeReward) {
helper.itemView.updateLayoutParams<RecyclerView.LayoutParams> {
width = (ScreenUtil.screenWidth * 0.66f / 3f).toInt()
width = itemWidth
}
ImageLoadUtils.loadImage(
mContext,

View File

@@ -1,20 +1,27 @@
package com.mango.moshen.avroom.firstcharge
import android.annotation.SuppressLint
import android.content.res.ColorStateList
import android.os.Bundle
import android.text.style.TextAppearanceSpan
import android.view.Gravity
import android.view.View
import android.view.WindowManager
import com.mango.moshen.R
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.DialogSelectPayTypeBinding
import com.mango.moshen.ui.pay.ChargeActivity
import androidx.core.graphics.toColorInt
import androidx.core.view.isVisible
import com.mango.core.Constants
import com.mango.core.pay.PayModel
import com.mango.core.pay.PaymentActivity
import com.mango.core.pay.bean.WalletInfo
import com.mango.moshen.R
import com.mango.moshen.base.BaseDialog
import com.mango.moshen.databinding.DialogSelectPayTypeBinding
import com.mango.moshen.ui.pay.ChargeActivity
import com.mango.moshen.utils.SpannableBuilder
import com.mango.xchat_android_library.annatation.ActLayoutRes
import com.mango.xchat_android_library.utils.FormatUtils
import com.mango.xchat_android_library.utils.SingleToastUtil
import com.netease.nim.uikit.common.util.sys.ScreenUtil
/**
* 充值方式选择弹窗
@@ -24,16 +31,32 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
private val chargeProdId by lazy { requireArguments().getString("chargeProdId", "") }
private val descText by lazy { requireArguments().getString("descText", "") }
private val money by lazy { requireArguments().getInt("money", 0) }
private val showDiamondCharge by lazy {
requireArguments().getBoolean(
"showDiamondCharge",
false
)
}
private var removeView: View? = null
private var onDiamondChargeClick: (() -> Unit)? = null
companion object {
@JvmStatic
fun newInstance(chargeProdId: String, descText: String): SelectPayTypeDialog {
fun newInstance(
chargeProdId: String,
descText: String,
showDiamondCharge: Boolean = false,
money: Int = 0
): SelectPayTypeDialog {
return SelectPayTypeDialog().apply {
arguments = Bundle().apply {
putString("chargeProdId", chargeProdId)
putString("descText", descText)
putBoolean("showDiamondCharge", showDiamondCharge)
putInt("money", money)
}
}
}
@@ -41,6 +64,10 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
private var payChannel = ""
fun setOnDiamondChargeClick(onDiamondChargeClick: (() -> Unit)) {
this.onDiamondChargeClick = onDiamondChargeClick
}
override fun onStart() {
width = WindowManager.LayoutParams.MATCH_PARENT
gravity = Gravity.BOTTOM
@@ -57,8 +84,6 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
SingleToastUtil.showToast(it.message)
it.printStackTrace()
})
binding.tvDesc.text = descText
binding.tvConfirm.setOnClickListener {
if (payChannel.isEmpty()) {
SingleToastUtil.showToast("数据初始化中,请稍后~")
@@ -66,6 +91,8 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
}
if (binding.rbAlipay.isChecked) {
PaymentActivity.start(requireActivity(), Constants.CHARGE_ALIPAY, chargeProdId)
} else if (binding.rbDiamond.isChecked) {
onDiamondChargeClick?.invoke()
} else {
PaymentActivity.start(requireActivity(), Constants.CHARGE_WX, chargeProdId)
}
@@ -82,6 +109,18 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
binding.ivClose.setOnClickListener {
dismissAllowingStateLoss()
}
if (showDiamondCharge) {
binding.rg.setOnCheckedChangeListener { _, _ ->
if (binding.rbDiamond.isChecked) {
binding.tvDesc.text = "${money * 10}钻石"
} else {
binding.tvDesc.text = descText
}
}
} else {
binding.tvDesc.text = descText
}
}
/**
@@ -89,30 +128,53 @@ class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
*/
private fun setWalletData(walletInfo: WalletInfo) {
binding.rg.visibility = View.VISIBLE
var defaultDiamond = false
if (showDiamondCharge) {
binding.rbDiamond.isVisible = true
val states = arrayOf(intArrayOf(android.R.attr.state_enabled))
val colors = intArrayOf("#8A8CAB".toColorInt())
binding.rbDiamond.text = SpannableBuilder()
.append("钻石支付")
.append(
"${FormatUtils.formatBigInteger(walletInfo.diamondNum)}钻石)",
TextAppearanceSpan(
null,
0,
ScreenUtil.sp2px(10f),
ColorStateList(states, colors),
null
)
)
.build()
defaultDiamond = money != 0 && money <= walletInfo.diamondNum
binding.rbDiamond.isChecked = defaultDiamond
} else {
binding.rbDiamond.isVisible = false
}
when (walletInfo.defaultPay) {
ChargeActivity.ALI_PAY_CLOSE -> {
payChannel = Constants.CHARGE_ALIPAY
removeView = binding.rbAlipay
binding.rg.removeView(binding.rbAlipay)
binding.rbWechat.isChecked = true
binding.rbWechat.isChecked = !defaultDiamond
binding.tvMore.visibility = View.VISIBLE
}
ChargeActivity.WX_PAY_CLOSE -> {
payChannel = Constants.CHARGE_WX
removeView = binding.rbWechat
binding.rg.removeView(binding.rbWechat)
binding.rbAlipay.isChecked = true
binding.rbAlipay.isChecked = !defaultDiamond
binding.tvMore.visibility = View.VISIBLE
}
ChargeActivity.WX_PAY_OPEN -> {
payChannel = Constants.CHARGE_WX
binding.rbWechat.isChecked = true
binding.rbWechat.isChecked = !defaultDiamond
binding.rg.removeView(binding.rbAlipay)
binding.rg.addView(binding.rbAlipay)
}
else -> {
payChannel = Constants.CHARGE_ALIPAY
binding.rbAlipay.isChecked = true
binding.rbAlipay.isChecked = !defaultDiamond
}
}
}

View File

@@ -288,7 +288,6 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
}
addTipMsg();
case RoomEvent.ROOM_INFO_UPDATE:
updateView(AvRoomDataManager.get().mCurrentRoomInfo);
setRoomBg(AvRoomDataManager.get().mCurrentRoomInfo);
break;
case RoomEvent.RECEIVE_NORMALE_GIFT:

View File

@@ -484,7 +484,7 @@ public class BaseRoomPresenter<V extends IBaseRoomView> extends BaseMvpPresenter
.takeWhile(aBoolean -> !aBoolean && getMvpView() != null)
.doOnNext(aBoolean -> getMvpView().noFollow())
//个人主播房新加的关注提醒弹窗,以后还会不会有呢???
.takeWhile(aBoolean -> !AvRoomDataManager.get().isSingleRoom())
.takeWhile(aBoolean -> AvRoomDataManager.get().isSingleRoom())
.delay(4, TimeUnit.MINUTES)
.single(false)
.flatMap(aBoolean -> PraiseModel.get().isPraised(AuthModel.get().getCurrentUid(), uid))
@@ -493,7 +493,7 @@ public class BaseRoomPresenter<V extends IBaseRoomView> extends BaseMvpPresenter
.doOnNext(aBoolean -> getMvpView().showAttentionDialog())
.subscribe();
Observable.interval(1, 5, TimeUnit.MINUTES)
Observable.timer(5, TimeUnit.MINUTES)
.compose(bindUntilEvent(PresenterEvent.DESTROY))
.takeWhile(aLong -> !AvRoomDataManager.get().isRoomFans && getMvpView() != null)
.subscribe(aLong -> getMvpView().noFollow2());

View File

@@ -711,7 +711,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
}
};
rvLuckyMsg.setAdapter(luckyMsgAdapter);
rvLuckyMsg.setLayoutManager(new ScrollSpeedLinearLayoutManger(context, LinearLayoutManager.HORIZONTAL, false));
rvLuckyMsg.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
}
luckyMsgDisposable = GiftModel.get().getLuckyGiftMsgList()
.compose(RxHelper.bindContext(context))

View File

@@ -3,20 +3,29 @@ package com.mango.moshen.vip
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.graphics.Paint
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.isGone
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.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView
import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAVideoEntity
import com.mango.core.UriProvider
import com.mango.core.auth.AuthModel
import com.mango.core.pay.PayModel
import com.mango.core.pay.PaymentActivity
import com.mango.core.pay.bean.PaymentResult
import com.mango.core.pay.model.unionpay.UnionPayModel
import com.mango.core.statistic.StatisticManager
import com.mango.core.statistic.protocol.StatisticsProtocol
import com.mango.core.utils.toIntOrDef
import com.mango.core.utils.toast
import com.mango.core.vip.VipAuthInfo
import com.mango.core.vip.VipInfo
import com.mango.core.vip.VipOpenEvent
import com.mango.moshen.R
import com.mango.moshen.avroom.firstcharge.SelectPayTypeDialog
import com.mango.moshen.bank_card.activity.AddBankCardAgreementActivity
@@ -29,25 +38,18 @@ import com.mango.moshen.ui.setting.ModifyPwdActivity
import com.mango.moshen.ui.utils.RVDelegate
import com.mango.moshen.ui.webview.CommonWebViewActivity
import com.mango.moshen.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.mango.core.UriProvider
import com.mango.core.auth.AuthModel
import com.mango.core.pay.PayModel
import com.mango.core.pay.PaymentActivity
import com.mango.core.pay.bean.PaymentResult
import com.mango.core.pay.model.unionpay.UnionPayModel
import com.mango.core.statistic.StatisticManager
import com.mango.core.statistic.protocol.StatisticsProtocol
import com.mango.core.utils.toast
import com.mango.core.vip.VipAuthInfo
import com.mango.core.vip.VipInfo
import com.mango.core.vip.VipOpenEvent
import com.mango.xchat_android_library.utils.JavaUtil
import com.netease.nim.uikit.StatusBarUtil
import com.netease.nim.uikit.common.util.sys.TimeUtil
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView
import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAVideoEntity
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.net.MalformedURLException
import java.net.URL
import java.util.*
class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
VipMagicIndicatorAdapter.OnItemSelectListener {
@@ -81,6 +83,10 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
VipRemainTimeDialog.newInstance().show(this)
}
binding.stvRank.setOnClickListener {
VipRankActivity.start(this)
}
rvDelegate = RVDelegate.Builder<VipAuthInfo>()
.setLayoutManager(GridLayoutManager(this, 3))
.setRecyclerView(binding.recyclerView)
@@ -117,7 +123,7 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
vipViewModel.myVipInfoLiveData.observe(this) {
it?.let {
binding.llMyVipInfo.isVisible = true
binding.tvOpenVip.isVisible = false
binding.flOpenVip.isVisible = false
binding.tvNotOpen.text = "当前权力值:${it.currScore}"
binding.tvCurrValue.text = "当前${it.currScore}"
binding.tvCurrLevelName.text = it.vipName
@@ -159,15 +165,13 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
} ?: run {
binding.llMyVipInfo.isVisible = false
binding.tvOpenVip.isVisible = true
binding.slAuth.isVisible = true
binding.tvNotOpen.text = "尚未开通贵族"
loadData()
vipViewModel.getOpenVipProd()
}
}
vipViewModel.currVipInfoLiveData.observe(this) {
it?.let {
if (it.comingSoon == 2) {
binding.llNotOpen.isVisible = true
@@ -194,6 +198,39 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
}
vipViewModel.chargeBeanLiveData.observe(this) {
it?.let { chargeBean ->
binding.flOpenVip.isVisible = true
val oriPrice = chargeBean.oriPrice.toIntOrDef(0)
val isDiscountPrice = oriPrice != 0 && oriPrice != chargeBean.getMoney()
binding.tvOpenVip.isGone = isDiscountPrice
binding.clOpenVipFirst.isGone = !isDiscountPrice
if (isDiscountPrice) {
binding.tvFirstOpenPriceOriginal.paint.flags = Paint.STRIKE_THRU_TEXT_FLAG
binding.tvFirstOpenPriceOriginal.text = chargeBean.oriPrice
binding.tvFirstOpenPrice.text = "仅需${chargeBean.money}"
} else {
binding.tvOpenVip.text = "${chargeBean.getMoney()}立刻成为魔力贵族"
}
binding.flOpenVip.setOnClickListener {
StatisticManager.Instance()
.onEvent(StatisticsProtocol.EVENT_VIP_OPEN_CLICK, "开通贵族点击事件")
SelectPayTypeDialog.newInstance(
chargeBean.chargeProdId,
"¥${chargeBean.money}",
true,
chargeBean.money
)
.apply {
setOnDiamondChargeClick {
vipViewModel.openVipWithDiamond()
}
}
.show(context)
}
}
}
vipViewModel.pageLiveData.observe(this) {
it?.let {
binding.magicIndicator.onPageSelected(it)
@@ -255,32 +292,6 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
vipViewModel.onItemSelect(position)
}
@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 {
StatisticManager.Instance()
.onEvent(StatisticsProtocol.EVENT_VIP_OPEN_CLICK, "开通贵族点击事件")
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()
@@ -317,8 +328,6 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
})
else -> {
toast(paymentResult.msg)
//重新获取钱包信息
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
}
}
}
@@ -333,6 +342,8 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
fun onVipOpenEvent(vipOpenEvent: VipOpenEvent) {
"恭喜开通贵族成功!".toast()
vipViewModel.getVipPageInfo()
//重新获取钱包信息
PayModel.get().getWalletInfo(AuthModel.get().currentUid).subscribe()
}

View File

@@ -0,0 +1,109 @@
package com.mango.moshen.vip
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import androidx.activity.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.mango.core.vip.RankInfo
import com.mango.core.vip.VipMessageInfo
import com.mango.moshen.R
import com.mango.moshen.base.BaseViewBindingActivity
import com.mango.moshen.databinding.ActivityVipRankBinding
import com.mango.moshen.ui.utils.RVDelegate
import com.netease.nim.uikit.StatusBarUtil
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.util.concurrent.TimeUnit
class VipRankActivity : BaseViewBindingActivity<ActivityVipRankBinding>() {
companion object {
@JvmStatic
fun start(context: Context) {
val starter = Intent(context, VipRankActivity::class.java)
context.startActivity(starter)
}
}
private lateinit var bannerRvDelegate: RVDelegate<VipMessageInfo>
private lateinit var rankRvDelegate: RVDelegate<RankInfo>
private val viewModel: VipRankViewModel by viewModels()
private var disposable: Disposable? = null
@SuppressLint("SetTextI18n")
override fun init() {
initWhiteTitleBar("贵族设置")
bannerRvDelegate = RVDelegate.Builder<VipMessageInfo>()
.setLayoutManager(LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false))
.setRecyclerView(binding.rvBanner)
.setAdapter(VipRankBannerAdapter())
.build()
rankRvDelegate = RVDelegate.Builder<RankInfo>()
.setLayoutManager(LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false))
.setRecyclerView(binding.rvRank)
.setAdapter(VipRankAdapter())
.build()
viewModel.loadingLiveData.observe(this) {
if (it == true) {
dialogManager.showProgressDialog(this)
} else {
dialogManager.dismissDialog()
}
}
viewModel.rankLiveData.observe(this) {
rankRvDelegate.loadData(it)
}
viewModel.bannerLiveData.observe(this) {
bannerRvDelegate.loadData(it)
}
viewModel.myRankLiveData.observe(this) {
}
disposable = Observable.intervalRange(0, Int.MAX_VALUE.toLong(), 0, 5, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.filter { bannerRvDelegate.adapter.itemCount > 0 }
.subscribe {
val index = (it % bannerRvDelegate.adapter.itemCount).toInt()
if (index == 0) {
binding.rvBanner.scrollToPosition(index)
} else {
binding.rvBanner.smoothScrollToPosition(index)
}
}
}
override fun onDestroy() {
super.onDestroy()
disposable?.dispose()
}
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() }
}
}
override fun needSteepStateBar() = true
override fun setStatusBar() {
super.setStatusBar()
StatusBarUtil.transparencyBar(this)
}
}

View File

@@ -0,0 +1,45 @@
package com.mango.moshen.vip
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.core.vip.RankInfo
import com.mango.moshen.R
import com.mango.moshen.ui.utils.loadAvatar
class VipRankAdapter : BaseQuickAdapter<RankInfo, BaseViewHolder>(R.layout.item_vip_rank) {
override fun convert(helper: BaseViewHolder, item: RankInfo) {
helper.setText(R.id.tv_userName, item.nick)
.setText(R.id.tv_value, item.score.toString() + "")
helper.getView<ImageView>(R.id.iv_avatar).loadAvatar(item.avatar)
helper.getView<ImageView>(R.id.iv_vip_icon).loadAvatar(item.vipLogo)
val tvPosition = helper.getView<TextView>(R.id.tv_position)
val ivPosition = helper.getView<ImageView>(R.id.iv_position)
when (helper.layoutPosition) {
0 -> {
tvPosition.visibility = View.GONE
ivPosition.visibility = View.VISIBLE
ivPosition.setImageDrawable(mContext.resources.getDrawable(R.drawable.ic_box_ranking_first))
}
1 -> {
tvPosition.visibility = View.GONE
ivPosition.visibility = View.VISIBLE
ivPosition.setImageDrawable(mContext.resources.getDrawable(R.drawable.ic_box_ranking_second))
}
2 -> {
tvPosition.visibility = View.GONE
ivPosition.visibility = View.VISIBLE
ivPosition.setImageDrawable(mContext.resources.getDrawable(R.drawable.ic_box_ranking_third))
}
else -> {
tvPosition.visibility = View.VISIBLE
ivPosition.visibility = View.GONE
tvPosition.text = (helper.layoutPosition + 1).toString()
}
}
}
}

View File

@@ -0,0 +1,42 @@
package com.mango.moshen.vip
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.text.style.ForegroundColorSpan
import android.widget.TextView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.mango.core.utils.sub
import com.mango.core.vip.VipMessageInfo
import com.mango.moshen.R
import com.mango.moshen.common.widget.CircleImageSpan
import com.mango.moshen.utils.SpannableBuilder
class VipRankBannerAdapter :
BaseQuickAdapter<VipMessageInfo, BaseViewHolder>(R.layout.item_vip_rank_banner) {
override fun convert(helper: BaseViewHolder, item: VipMessageInfo) {
val tvContent: TextView = helper.getView(R.id.tv_content)
val text = SpannableBuilder()
.append("恭喜 ", ForegroundColorSpan(Color.WHITE))
.append(
"-",
CircleImageSpan(
ColorDrawable(Color.TRANSPARENT),
item.avatar,
50,
50
)
)
.append(
" " + item.nick.sub(6) + " ",
ForegroundColorSpan(mContext.resources.getColor(R.color.notice_nick))
)
.append(
"贵族身份升级为" + item.currVipName,
ForegroundColorSpan(Color.WHITE).toString() + "!"
)
tvContent.text = text.build()
}
}

View File

@@ -0,0 +1,53 @@
package com.mango.moshen.vip
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.mango.core.bean.response.ListResult
import com.mango.core.vip.RankInfo
import com.mango.core.vip.VipMessageInfo
import com.mango.core.vip.VipModel
import com.mango.moshen.base.BaseViewModel
class VipRankViewModel : BaseViewModel() {
private val _rankLiveData = MutableLiveData<ListResult<RankInfo>>()
val rankLiveData: LiveData<ListResult<RankInfo>> = _rankLiveData
private val _myRankLiveData = MutableLiveData<RankInfo>()
val myRankLiveData: LiveData<RankInfo> = _myRankLiveData
private val _bannerLiveData = MutableLiveData<ListResult<VipMessageInfo>>()
val bannerLiveData: LiveData<ListResult<VipMessageInfo>> = _bannerLiveData
init {
getVipRank()
getVipRankBanner()
}
private fun getVipRank() {
safeLaunch(
true,
onError = {
_rankLiveData.value = ListResult.failed(1)
},
block = {
val data = VipModel.getVipRank()
_rankLiveData.value = ListResult.success(data?.ranks, 1)
_myRankLiveData.value = data?.myRank
})
}
private fun getVipRankBanner() {
safeLaunch(
onError = {
_bannerLiveData.value = ListResult.failed(1)
},
block = {
val data = VipModel.getVipRankBanner()
_bannerLiveData.value = ListResult.success(data, 1)
})
}
}

View File

@@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.mango.moshen.base.BaseViewModel
import com.mango.core.bean.response.BeanResult
import com.mango.core.pay.bean.ChargeBean
import com.mango.core.user.UserModel
import com.mango.core.utils.toast
import com.mango.core.vip.VipAuthInfo
@@ -41,6 +42,9 @@ class VipViewModel : BaseViewModel() {
private val _enterHideLiveData = MutableLiveData<Boolean>()
val enterHideLiveData: LiveData<Boolean> = _enterHideLiveData
private val _chargeBeanLiveData = MutableLiveData<ChargeBean>()
val chargeBeanLiveData: LiveData<ChargeBean> = _chargeBeanLiveData
fun getVipPageInfo() {
safeLaunch(
true,
@@ -140,4 +144,16 @@ class VipViewModel : BaseViewModel() {
_currVipInfoLiveData.value = vipInfosLiveData.value?.getOrNull(position)
_pageLiveData.value = position
}
fun openVipWithDiamond() {
safeLaunch(true) {
VipModel.openVipWithDiamond()
}
}
fun getOpenVipProd() {
safeLaunch {
_chargeBeanLiveData.value = VipModel.getOpenVipProd()
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -1,11 +1,6 @@
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
</data>
<LinearLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_white_top_10dp"
@@ -51,16 +46,30 @@
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:orientation="vertical"
android:paddingStart="30dp"
android:paddingEnd="30dp"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:visibility="invisible">
<RadioButton
android:id="@+id/rb_diamond"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:background="@drawable/bottom_line"
android:button="@null"
android:drawableStart="@drawable/ic_diamond_charge"
android:drawableEnd="@drawable/selector_check_box_pic_check"
android:drawablePadding="10dp"
android:text="钻石支付"
android:textColor="@color/color_333333"
android:textSize="15sp" />
<RadioButton
android:id="@+id/rb_alipay"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:background="@color/transparent"
android:background="@drawable/bottom_line"
android:button="@null"
android:drawableStart="@drawable/ic_ali_charge"
android:drawableEnd="@drawable/selector_check_box_pic_check"
@@ -74,7 +83,7 @@
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:background="@color/transparent"
android:background="@drawable/bottom_line"
android:button="@null"
android:drawableStart="@drawable/ic_wechat_charge"
android:drawableEnd="@drawable/selector_check_box_pic_check"
@@ -113,5 +122,4 @@
android:textColor="@color/white"
android:textSize="15sp" />
</LinearLayout>
</layout>
</LinearLayout>

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<FrameLayout
android:layout_width="70dp"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_position"
android:layout_width="@dimen/dp_25"
android:layout_height="@dimen/dp_20"
android:layout_gravity="center" />
<TextView
android:id="@+id/tv_position"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/color_666666"
android:textSize="24sp"
android:textStyle="bold"
tools:text="50" />
</FrameLayout>
<com.mango.moshen.common.widget.CircleImageView
android:id="@+id/iv_avatar"
android:layout_width="44dp"
android:layout_height="44dp"
android:layout_gravity="center_vertical"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/default_avatar" />
<ImageView
android:id="@+id/iv_vip_icon"
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp" />
<TextView
android:id="@+id/tv_userName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_weight="1"
android:ellipsize="end"
android:lines="1"
android:textColor="@color/color_333333"
android:textSize="15sp"
app:layout_flexShrink="1"
tools:text="我的我的我的我的我的我的" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginEnd="22dp"
android:gravity="end"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="权利值"
android:textColor="#9E9E9E"
android:textSize="10sp" />
<TextView
android:id="@+id/tv_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:drawablePadding="5dp"
android:gravity="end"
android:textColor="#F7DA94"
android:textSize="@dimen/dp_14"
android:textStyle="bold"
tools:text="1236843" />
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:textColor="@color/color_999999"
android:textSize="12dp"
tools:text="每整点半小时内,房间礼物流水排名前十将有机会登上房间首页的官方推荐哦~" />

View File

@@ -146,11 +146,19 @@
</androidx.core.widget.NestedScrollView>
<FrameLayout
android:id="@+id/fl_open_vip"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<com.mango.xchat_android_library.widget.DrawableCenterTextView
android:id="@+id/tv_open_vip"
android:layout_width="300dp"
android:layout_height="44dp"
android:layout_marginBottom="30dp"
android:background="@drawable/bg_vip_open_btn"
android:drawableStart="@drawable/ic_vip_open_btn"
android:drawablePadding="3dp"
@@ -159,10 +167,74 @@
android:textSize="16dp"
android:textStyle="bold"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
tools:text="¥6立刻成为魔力贵族" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_open_vip_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="visible">
<View
android:id="@+id/view_open_vip_first_bg"
android:layout_width="300dp"
android:layout_height="44dp"
android:layout_marginTop="17dp"
android:layout_marginBottom="30dp"
android:background="@drawable/bg_vip_open_btn"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:text="¥6立刻成为魔力贵族" />
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:text="即刻体验大鹅贵族"
android:textColor="@color/color_333333"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tv_first_open_price_original"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:textColor="#BABBCD"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/tv_first_open_price"
app:layout_constraintStart_toEndOf="@id/tv_first_open_price"
app:layout_constraintTop_toTopOf="@id/tv_first_open_price"
tools:text="18" />
<TextView
android:id="@+id/tv_first_open_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:includeFontPadding="false"
android:textColor="#EA2B0D"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_open_vip_first_bg"
tools:text="仅需12¥" />
<ImageView
android:id="@+id/iv_open_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:src="@drawable/bg_vip_first_charge_tip"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
<com.mango.moshen.base.TitleBar
android:id="@+id/title_bar"
@@ -184,6 +256,27 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title_bar" />
<com.coorchice.library.SuperTextView
android:id="@+id/stv_rank"
android:layout_width="wrap_content"
android:layout_height="22dp"
android:layout_marginTop="7dp"
android:layout_marginEnd="20dp"
android:drawableStart="@drawable/vip_rank_ic_entrance"
android:drawablePadding="2dp"
android:gravity="center"
android:includeFontPadding="false"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:text="贵族榜"
android:textColor="#F5C277"
android:textSize="10sp"
app:corner="@dimen/dp_20"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/magic_indicator"
app:stroke_color="#FFE3AF"
app:stroke_width="1dp" />
<LinearLayout
android:id="@+id/ll_my_vip_info"
android:layout_width="0dp"
@@ -193,7 +286,7 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible">
tools:visibility="gone">
<FrameLayout
android:layout_width="match_parent"

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#221F20"
android:orientation="vertical">
<!--
<com.mango.moshen.base.TitleBar
android:id="@+id/title_bar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-->
<ImageView
android:id="@+id/iv_top"
android:layout_width="0dp"
android:layout_height="0dp"
android:src="@drawable/vip_rank_bg_top"
app:layout_constraintDimensionRatio="750:567"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/fl_msg"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="20dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="20dp"
android:background="@drawable/vip_rank_bg_msg"
app:layout_constraintDimensionRatio="670:80"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_top">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_banner"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
<FrameLayout
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="15dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="15dp"
android:background="@drawable/vip_rank_bg_rank"
app:layout_constraintDimensionRatio="690:887"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/fl_msg">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_rank"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:itemCount="5"
tools:listitem="@layout/item_vip_rank" />
</FrameLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="#2A2417"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingTop="10dp"
android:paddingBottom="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="30dp"
android:text="未上榜"
android:textColor="#4dffffff"
android:textSize="12sp" />
<ImageView
android:layout_width="44dp"
android:layout_height="44dp"
android:layout_marginStart="10dp"
android:src="@drawable/default_avatar" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="18dp"
android:layout_marginStart="8dp" />
<TextView
android:layout_width="84dp"
android:layout_height="18dp"
android:layout_marginStart="4dp"
android:text="你还没有贵族吧"
android:textColor="#ffffffff"
android:textSize="12sp" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="37dp"
android:gravity="end"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="权利值"
android:textColor="#ff616161"
android:textSize="10sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="99999"
android:textColor="#F7DA94"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,5 +1,7 @@
package com.mango.core.bean.response;
import androidx.annotation.Nullable;
import java.io.Serializable;
/**
@@ -7,76 +9,7 @@ import java.io.Serializable;
*/
public class ServiceResult<T> implements Serializable {
private static final long serialVersionUID = -1954065564856833013L;
public static final int SC_SUCCESS = 200;
private int code = -1;
private String message = "";
private T data;
private long timestamp;
public ServiceResult() {
}
public boolean isSuccess() {
return this.code == SC_SUCCESS;
}
public static <T> ServiceResult<T> success(T data) {
return success(data, "");
}
public static <T> ServiceResult<T> success(T data, String message) {
ServiceResult<T> result = new ServiceResult<T>();
result.setCodeSuccess().setMessage(message).setData(data);
return result;
}
public int getCode() {
return code;
}
public ServiceResult<T> setCode(int code) {
this.code = code;
return this;
}
public ServiceResult<T> setCodeSuccess() {
this.code = SC_SUCCESS;
return this;
}
public String getMessage() {
return message;
}
public ServiceResult<T> setMessage(String message) {
this.message = message;
return this;
}
public T getData() {
return data;
}
public ServiceResult<T> setData(T data) {
this.data = data;
return this;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public static final int SUCCESS = 200;//成功
public static final int INVALID_SERVICE = 199;//服务不可用
public static final int SERVEXCEPTION = 5000;//服务端异常
@@ -93,11 +26,74 @@ public class ServiceResult<T> implements Serializable {
public static final int SMSCODEERROR = 4003;//短信验证码错误
public static final int WEEKNOTWITHCASHTOWNUMS = 1600;//每周提现俩次
public static final int CODE_NEED_COMPLETE_USER_INFO = 1415;//每周提现俩次
/** 没有网络 */
/**
* 没有网络
*/
public static final int NOT_NET = 50010;
public static final int OTHER = 50011;
private static final long serialVersionUID = -1954065564856833013L;
private int code = -1;
private String message = "";
@Nullable
private T data;
private long timestamp;
public ServiceResult() {
}
public static <T> ServiceResult<T> success(T data) {
return success(data, "");
}
public static <T> ServiceResult<T> success(T data, String message) {
ServiceResult<T> result = new ServiceResult<T>();
result.setCodeSuccess().setMessage(message).setData(data);
return result;
}
public boolean isSuccess() {
return this.code == SC_SUCCESS;
}
public int getCode() {
return code;
}
public ServiceResult<T> setCode(int code) {
this.code = code;
return this;
}
public ServiceResult<T> setCodeSuccess() {
this.code = SC_SUCCESS;
return this;
}
public String getMessage() {
return message;
}
public ServiceResult<T> setMessage(String message) {
this.message = message;
return this;
}
@Nullable
public T getData() {
return data;
}
public ServiceResult<T> setData(@Nullable T data) {
this.data = data;
return this;
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getErrorMessage() {
String errorStr = "服务器正在维护";

View File

@@ -23,23 +23,8 @@ public class ChargeBean implements Serializable{
public int giftGoldNum;
public int channel;
public String prodDesc;
public boolean isSelected;
public ChargeBean(int money) {
this.money = money;
}
// public int seqNo;
//
//
// public int getSeqNo() {
// return seqNo;
// }
//
// public void setSeqNo(int seqNo) {
// this.seqNo = seqNo;
// }
private String oriPrice;
public String getChargeProdId() {
@@ -82,6 +67,14 @@ public class ChargeBean implements Serializable{
this.channel = channel;
}
public String getOriPrice() {
return oriPrice;
}
public void setOriPrice(String oriPrice) {
this.oriPrice = oriPrice;
}
@Override
public String toString() {
return "ChargeBean{" +

View File

@@ -3,9 +3,11 @@ package com.mango.core.vip
import com.mango.core.base.BaseModel
import com.mango.core.bean.response.ServiceResult
import com.mango.core.manager.AvRoomDataManager
import com.mango.core.pay.bean.ChargeBean
import com.mango.core.utils.net.launchRequest
import com.mango.xchat_android_library.net.rxnet.RxNet
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query
object VipModel : BaseModel() {
@@ -37,6 +39,25 @@ object VipModel : BaseModel() {
api.changeInvisibleInRoom(open)
}
suspend fun getVipRank(): VipRankInfo? =
launchRequest {
api.getVipRank()
}
suspend fun getVipRankBanner(): List<VipMessageInfo>? =
launchRequest {
api.getVipRankBanner()
}
suspend fun openVipWithDiamond(): Any? =
launchRequest {
api.openVipWithDiamond()
}
suspend fun getOpenVipProd(): ChargeBean? =
launchRequest {
api.getOpenVipProd()
}
private interface Api {
@@ -83,6 +104,38 @@ object VipModel : BaseModel() {
*/
@GET("/vip/changeInvisibleInRoom")
suspend fun changeInvisibleInRoom(@Query("open") open: Boolean): ServiceResult<String>
/**
* 获取贵族排行榜信息
*
* @return
*/
@GET("/vip/listRank")
suspend fun getVipRank(): ServiceResult<VipRankInfo>
/**
* 获取贵族升级的轮播列表
*
* @return
*/
@GET("/vip/listUpgrade")
suspend fun getVipRankBanner(): ServiceResult<List<VipMessageInfo>>
/**
* 使用钻石开通贵族
*
* @return
*/
@POST("/vip/openWithDiamond")
suspend fun openVipWithDiamond(): ServiceResult<Any>
/**
* 获取开通贵族产品
*
* @return
*/
@GET("/vip/getOpenVipProd")
suspend fun getOpenVipProd(): ServiceResult<ChargeBean>
}
}

View File

@@ -0,0 +1,16 @@
package com.mango.core.vip
data class VipRankInfo(
val myRank: RankInfo? = null,
val ranks: List<RankInfo>? = null,
)
data class RankInfo(
val uid: Long? = null,
val erbanNo: Long? = null,
val nick: String? = null,
val avatar: String? = null,
val vipLogo: String? = null,
val score: Long? = null,
val rankNo: Int? = null
)