diff --git a/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt b/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt index f4aa44279..f8e1b9a6e 100644 --- a/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/vip/VipMainActivity.kt @@ -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(), private lateinit var rvDelegate: RVDelegate 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(), } binding.tvOpenVip.setOnClickListener { - PaymentDialog().show(this) -// if (AppMetaDataUtil.getChannelID().equals(Constants.GOOGLE)) { -// bean?.let { charge -> -// //点击充值 -// val map = java.util.HashMap(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(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(), } } 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(), //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 = @@ -488,7 +498,7 @@ class VipMainActivity : BaseViewBindingActivity(), super.onDestroy() EventBus.getDefault().unregister(this) billingManager?.destroy() - bean = null + googleChargeBean = null chargeInfo = null } diff --git a/app/src/main/java/com/yizhuan/erban/vip/VipViewModel.kt b/app/src/main/java/com/yizhuan/erban/vip/VipViewModel.kt index 1f3004bba..13f34edf5 100644 --- a/app/src/main/java/com/yizhuan/erban/vip/VipViewModel.kt +++ b/app/src/main/java/com/yizhuan/erban/vip/VipViewModel.kt @@ -165,4 +165,11 @@ class VipViewModel : BaseViewModel() { _currVipInfoLiveData.value = vipInfosLiveData.value?.getOrNull(position) _pageLiveData.value = position } + + fun openVipWithDiamond() { + safeLaunch(true) { + VipModel.openVipWithDiamond() + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/vip/dialog/SelectPayTypeDialog.kt b/app/src/main/java/com/yizhuan/erban/vip/dialog/SelectPayTypeDialog.kt new file mode 100644 index 000000000..e20b96bca --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/vip/dialog/SelectPayTypeDialog.kt @@ -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() { + + 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 + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_white_bottom_28dp.xml b/app/src/main/res/drawable/shape_white_bottom_28dp.xml new file mode 100644 index 000000000..870e01b74 --- /dev/null +++ b/app/src/main/res/drawable/shape_white_bottom_28dp.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_select_pay_type.xml b/app/src/main/res/layout/dialog_select_pay_type.xml new file mode 100644 index 000000000..13914dd37 --- /dev/null +++ b/app/src/main/res/layout/dialog_select_pay_type.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/ModuleClanActivity.java b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/ModuleClanActivity.java index 79e0cacf6..dac8e658b 100644 --- a/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/ModuleClanActivity.java +++ b/app/src/module_labour_union/java/com/yizhuan/erban/module_hall/hall/activity/ModuleClanActivity.java @@ -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); } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/vip/VipModel.kt b/core/src/main/java/com/yizhuan/xchat_android_core/vip/VipModel.kt index 59d827052..b1b5da1d8 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/vip/VipModel.kt +++ b/core/src/main/java/com/yizhuan/xchat_android_core/vip/VipModel.kt @@ -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 + + /** + * 使用钻石开通贵族 + * + * @return + */ + @FormUrlEncoded + @POST("/vip/openWithDiamond") + suspend fun openVipWithDiamond(@Field("roomUid") roomUid: Long?): ServiceResult + } } \ No newline at end of file