[Modify]贵族优化

This commit is contained in:
wushaocheng
2023-07-14 19:29:50 +08:00
parent cd5b1728f8
commit 34b9233825
7 changed files with 316 additions and 44 deletions

View File

@@ -38,7 +38,7 @@ import com.yizhuan.erban.ui.webview.CommonWebViewActivity
import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.yizhuan.erban.vip.adapter.VipAuthAdapter
import com.yizhuan.erban.vip.adapter.VipMagicIndicatorAdapter
import com.yizhuan.erban.vip.dialog.PaymentDialog
import com.yizhuan.erban.vip.dialog.SelectPayTypeDialog
import com.yizhuan.erban.vip.dialog.VipAuthDetailsDialog
import com.yizhuan.erban.vip.dialog.VipRemainTimeDialog
import com.yizhuan.xchat_android_core.Constants
@@ -79,7 +79,7 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
private lateinit var rvDelegate: RVDelegate<VipAuthInfo>
private val vipViewModel: VipViewModel by viewModels()
private var billingManager: BillingManager? = null
private var bean: ChargeBean? = null//google
private var googleChargeBean: ChargeBean? = null//google
private var chargeInfo: ChargeBean? = null//official
@SuppressLint("SetTextI18n")
@@ -230,31 +230,41 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
}
binding.tvOpenVip.setOnClickListener {
PaymentDialog().show(this)
// if (AppMetaDataUtil.getChannelID().equals(Constants.GOOGLE)) {
// bean?.let { charge ->
// //点击充值
// val map = java.util.HashMap<String, Any>(3)
// map[IReportConstants.MONEY] = charge.money
// map[IReportConstants.MODULE] = IReportConstants.PEKO_PAY
// ReportManager.get().reportEvent(IReportConstants.PAY_CLICK, map)
// buyProduct(charge.skuDetails)
// }
// } else {
// chargeInfo?.let { charge ->
// //点击充值
// val map = java.util.HashMap<String, Any>(3)
// map[IReportConstants.MONEY] = charge.money
// map[IReportConstants.MODULE] = IReportConstants.PEKO_PAY
// ReportManager.get().reportEvent(IReportConstants.PAY_CLICK, map)
// CommonWebViewActivity.start(
// context,
// UriProvider.getOfficialPay(5, DeviceUtil.getDeviceId(context))
// )
// }
// }
if (AppMetaDataUtil.getChannelID().equals(Constants.GOOGLE)) {
if ((googleChargeBean?.skuDetails?.price ?: "0") == "0") {
toast(getString(R.string.Recharge_failure))
return@setOnClickListener
}
SelectPayTypeDialog.newInstance(
googleChargeBean?.skuDetails?.price ?: "0",
true,
googleChargeBean?.getMoney() ?: 0.0
)
.apply {
setOnDiamondChargeClick {
vipViewModel.openVipWithDiamond()
}
setOnGoogleChargeClick {
googleChargeBean?.let { charge ->
buyProduct(charge.skuDetails)
}
}
}
.show(context)
} else {
SelectPayTypeDialog.newInstance(
((chargeInfo?.getMoney() ?: 0.0) * 1000).toInt().toString(),
false,
chargeInfo?.getMoney() ?: 0.0
)
.apply {
setOnDiamondChargeClick {
vipViewModel.openVipWithDiamond()
}
}
.show(context)
}
}
}
@SuppressLint("CheckResult", "SetTextI18n")
@@ -380,9 +390,9 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
}
}
if (showChargeList.size > 0) {
bean = showChargeList[0]
googleChargeBean = showChargeList[0]
binding.tvOpenVip.text = "${
bean?.getMoney()
googleChargeBean?.getMoney()
}${getString(R.string.me_immediately_become_a_Peko_nobleman)}"
}
}
@@ -414,8 +424,8 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
//L.i("token=" + token);
billingManager?.consumeAsync(token)
var skuDetails: SkuDetails? = null
if (bean?.getChargeProdId() == purchase.skus[0]) {
skuDetails = bean?.skuDetails
if (googleChargeBean?.getChargeProdId() == purchase.skus[0]) {
skuDetails = googleChargeBean?.skuDetails
}
if (skuDetails != null) {
val eventValue: MutableMap<String, Any> =
@@ -488,7 +498,7 @@ class VipMainActivity : BaseViewBindingActivity<ActivityVipMainBinding>(),
super.onDestroy()
EventBus.getDefault().unregister(this)
billingManager?.destroy()
bean = null
googleChargeBean = null
chargeInfo = null
}

View File

@@ -165,4 +165,11 @@ class VipViewModel : BaseViewModel() {
_currVipInfoLiveData.value = vipInfosLiveData.value?.getOrNull(position)
_pageLiveData.value = position
}
fun openVipWithDiamond() {
safeLaunch(true) {
VipModel.openVipWithDiamond()
}
}
}

View File

@@ -0,0 +1,135 @@
package com.yizhuan.erban.vip.dialog
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 androidx.core.graphics.toColorInt
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.yizhuan.erban.base.BaseDialog
import com.yizhuan.erban.databinding.DialogSelectPayTypeBinding
import com.yizhuan.erban.utils.SpannableBuilder
import com.yizhuan.xchat_android_core.pay.PayModel
import com.yizhuan.xchat_android_core.pay.bean.WalletInfo
import com.yizhuan.xchat_android_library.utils.FormatUtils
import com.yizhuan.xchat_android_library.utils.SingleToastUtil
/**
* 充值方式选择弹窗
*/
class SelectPayTypeDialog : BaseDialog<DialogSelectPayTypeBinding>() {
private val descText by lazy { requireArguments().getString("descText", "") }
private val money by lazy { requireArguments().getDouble("money", 0.0) }
private val showGoogleCharge by lazy {
requireArguments().getBoolean(
"showGoogleCharge",
false
)
}
private var onDiamondChargeClick: (() -> Unit)? = null
private var onGoogleChargeClick: (() -> Unit)? = null
companion object {
@JvmStatic
fun newInstance(
descText: String,
showGoogleCharge: Boolean = false,
money: Double = 0.0
): SelectPayTypeDialog {
return SelectPayTypeDialog().apply {
arguments = Bundle().apply {
putString("descText", descText)
putBoolean("showGoogleCharge", showGoogleCharge)
putDouble("money", money)
}
}
}
}
fun setOnDiamondChargeClick(onDiamondChargeClick: (() -> Unit)) {
this.onDiamondChargeClick = onDiamondChargeClick
}
fun setOnGoogleChargeClick(onGoogleChargeClick: (() -> Unit)) {
this.onGoogleChargeClick = onGoogleChargeClick
}
override fun onStart() {
width = WindowManager.LayoutParams.MATCH_PARENT
gravity = Gravity.BOTTOM
super.onStart()
}
@SuppressLint("CheckResult")
override fun init() {
PayModel.get().walletInfo
.compose(bindToLifecycle())
.subscribe({
setWalletData(it)
}, {
SingleToastUtil.showToast(it.message)
it.printStackTrace()
})
binding.tvConfirmPay.setOnClickListener {
if (binding.rbDiamond.isChecked) {
onDiamondChargeClick?.invoke()
} else {
onGoogleChargeClick?.invoke()
}
dismissAllowingStateLoss()
}
if (showGoogleCharge) {
binding.rbGoogle.visibility = View.VISIBLE
binding.rg.setOnCheckedChangeListener { _, _ ->
if (binding.rbDiamond.isChecked) {
binding.tvDiamondNum.text = (money * 1000).toInt().toString()
binding.tvDiamond.visibility = View.VISIBLE
} else {
binding.tvDiamondNum.text = descText
binding.tvDiamond.visibility = View.GONE
}
}
} else {
binding.rbGoogle.visibility = View.GONE
binding.tvDiamondNum.text = descText
}
}
/**
* defaultPay 1默认支付宝2默认微信
*/
private fun setWalletData(walletInfo: WalletInfo) {
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()
val defaultDiamond = money != 0.0 && money * 1000 <= walletInfo.diamondNum
if (showGoogleCharge) {
binding.rbGoogle.visibility = View.VISIBLE
binding.rbGoogle.isChecked = !defaultDiamond
} else {
binding.rbGoogle.visibility = View.GONE
}
binding.rbDiamond.isChecked = defaultDiamond
}
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white" />
<corners
android:topLeftRadius="@dimen/dp_28"
android:topRightRadius="@dimen/dp_28" />
</shape>

View File

@@ -0,0 +1,108 @@
<?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="wrap_content"
android:background="@drawable/shape_white_bottom_28dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvPay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_24"
android:includeFontPadding="false"
android:text="@string/pay"
android:textColor="@color/color_1F1B4F"
android:textSize="@dimen/sp_18"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvDiamondNum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30"
android:includeFontPadding="false"
android:text="0"
android:textColor="@color/color_9168FA"
android:textSize="28sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvPay" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvDiamond"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_6"
android:includeFontPadding="false"
android:text="@string/diamond"
android:textColor="@color/color_8A8CAB"
android:textSize="@dimen/sp_14"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvDiamondNum" />
<RadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:orientation="vertical"
android:paddingStart="@dimen/dp_40"
android:paddingEnd="@dimen/dp_40"
app:layout_constraintTop_toBottomOf="@+id/tvDiamond">
<RadioButton
android:id="@+id/rb_diamond"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:background="@null"
android:button="@null"
android:drawableStart="@drawable/ic_diamond"
android:drawableEnd="@drawable/selector_select_pay"
android:drawablePadding="10dp"
android:text="@string/diamond_pay"
android:textColor="@color/color_1F1B4F"
android:textSize="@dimen/sp_16"
android:textStyle="bold" />
<RadioButton
android:id="@+id/rb_google"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp"
android:background="@null"
android:button="@null"
android:drawableStart="@drawable/ic_google"
android:drawableEnd="@drawable/selector_select_pay"
android:drawablePadding="10dp"
android:text="@string/google_pay"
android:textColor="@color/color_1F1B4F"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
android:visibility="gone"
tools:visibility="visible"/>
</RadioGroup>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tvConfirmPay"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginStart="@dimen/dp_36"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginEnd="@dimen/dp_36"
android:layout_marginBottom="@dimen/dp_20"
android:background="@drawable/bg_common_confirm_30"
android:gravity="center"
android:text="@string/confirm_pay"
android:textColor="@color/white"
android:textSize="@dimen/sp_20"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rg" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -136,17 +136,6 @@ public class ModuleClanActivity extends BaseActivity implements View.OnClickList
ImageLoadUtils.loadRectImage(context, clanInfo.getAvatar(), binding.ivClanAvatar, R.drawable.default_avatar, ScreenUtil.dip2px(8));
ImageLoadUtils.loadImage(context, clanInfo.getLevelIcon(), binding.ivClanLevel);
loadHallList();
if (clanInfo.isElderHasExchangeManagerAuth()) {
binding.tvHallExchange.setVisibility(View.VISIBLE);
binding.tvHallIncome.setBackgroundResource(R.drawable.bg_hall_income_small);
binding.tvHallAdmin.setBackgroundResource(R.drawable.bg_hall_admin_small);
binding.tvHallExchange.setBackgroundResource(R.drawable.bg_hall_exchange_small);
} else {
binding.tvHallExchange.setVisibility(View.GONE);
binding.tvHallIncome.setBackgroundResource(R.drawable.bg_hall_income);
binding.tvHallAdmin.setBackgroundResource(R.drawable.bg_hall_admin);
binding.tvHallExchange.setBackgroundResource(R.drawable.bg_hall_exchange);
}
} else {
binding.clClan.setVisibility(View.GONE);
}

View File

@@ -5,8 +5,7 @@ import com.yizhuan.xchat_android_core.bean.response.ServiceResult
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager
import com.yizhuan.xchat_android_core.utils.net.launchRequest
import com.yizhuan.xchat_android_library.net.rxnet.RxNet
import retrofit2.http.GET
import retrofit2.http.Query
import retrofit2.http.*
object VipModel : BaseModel() {
@@ -37,6 +36,10 @@ object VipModel : BaseModel() {
api.changeInvisibleInRoom(open)
}
suspend fun openVipWithDiamond(): Any? =
launchRequest {
api.openVipWithDiamond(if (AvRoomDataManager.get().roomUid == 0L) null else AvRoomDataManager.get().roomUid)
}
private interface Api {
@@ -83,6 +86,16 @@ object VipModel : BaseModel() {
*/
@GET("/vip/changeInvisibleInRoom")
suspend fun changeInvisibleInRoom(@Query("open") open: Boolean): ServiceResult<String>
/**
* 使用钻石开通贵族
*
* @return
*/
@FormUrlEncoded
@POST("/vip/openWithDiamond")
suspend fun openVipWithDiamond(@Field("roomUid") roomUid: Long?): ServiceResult<Any>
}
}