diff --git a/app/src/main/java/com/cheng/bole/bean/VipGoodsEntity.kt b/app/src/main/java/com/cheng/bole/bean/VipGoodsEntity.kt index 3eaa5e7..3bba959 100644 --- a/app/src/main/java/com/cheng/bole/bean/VipGoodsEntity.kt +++ b/app/src/main/java/com/cheng/bole/bean/VipGoodsEntity.kt @@ -11,4 +11,9 @@ class VipGoodsEntity { var tips: String = "" var sign_value = "" var value: String = "" + + var invoice_tips: String = "" + var member_limit: String = "" + var member_price: String = "" + var origin_member_price: String = "" } \ No newline at end of file diff --git a/app/src/main/java/com/cheng/bole/event/PaySuccessEvent.kt b/app/src/main/java/com/cheng/bole/event/PaySuccessEvent.kt new file mode 100644 index 0000000..023a090 --- /dev/null +++ b/app/src/main/java/com/cheng/bole/event/PaySuccessEvent.kt @@ -0,0 +1,4 @@ +package com.cheng.bole.event + +class PaySuccessEvent { +} \ No newline at end of file diff --git a/app/src/main/java/com/cheng/bole/ui/dialog/PayTipDialog.kt b/app/src/main/java/com/cheng/bole/ui/dialog/PayTipDialog.kt index 5402765..f19d7ee 100644 --- a/app/src/main/java/com/cheng/bole/ui/dialog/PayTipDialog.kt +++ b/app/src/main/java/com/cheng/bole/ui/dialog/PayTipDialog.kt @@ -8,17 +8,19 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.DialogFragment -import com.example.base.extensions.getColor -import com.example.base.extensions.onClick -import com.example.base.utils.ScreenUtils -import com.example.base.utils.SpanUtils import com.cheng.bole.R import com.cheng.bole.common.Constants import com.cheng.bole.databinding.DialogPayTipBinding import com.cheng.bole.manager.DialogEnum import com.cheng.bole.utils.UrlHelper +import com.example.base.extensions.getColor +import com.example.base.extensions.onClick +import com.example.base.utils.ScreenUtils +import com.example.base.utils.SpanUtils class PayTipDialog : DialogFragment() { + private val showPolicy by lazy { arguments?.getBoolean("show_policy") ?: false } + private val showAgreement by lazy { arguments?.getBoolean("show_agreement") ?: false } private val showRenew by lazy { arguments?.getBoolean("show_renew") ?: false } private var mOnBackListener: ((DialogEnum) -> Unit)? = null //回调事件 @@ -63,11 +65,19 @@ class PayTipDialog : DialogFragment() { private fun initAgreement() { val spanUtils = SpanUtils.with(binding.tvContent) - .append("我已阅读并同意") - .append("《会员服务协议规则》") - .setClickSpan(getColor(R.color.color_125ffe), false) { - UrlHelper.startUserAgreement(requireContext(), "会员服务协议规则") - } + if (showPolicy) { + spanUtils.append("我已阅读并同意") + .append("《隐私协议》") + .setClickSpan(getColor(R.color.color_125ffe), false) { + UrlHelper.startPrivacyPolicy(requireContext()) + } + } else if (showAgreement) { + spanUtils.append("我已阅读并同意") + .append("《会员服务协议规则》") + .setClickSpan(getColor(R.color.color_125ffe), false) { + UrlHelper.startUserAgreement(requireContext(), "会员服务协议规则") + } + } if (showRenew) { spanUtils.append("和") spanUtils.append("《自动续费服务规则》") @@ -83,8 +93,10 @@ class PayTipDialog : DialogFragment() { } companion object { - fun newInstance(showRenew: Boolean = false): PayTipDialog { + fun newInstance(showPolicy: Boolean = false, showAgreement: Boolean = false, showRenew: Boolean = false): PayTipDialog { val arg = Bundle() + arg.putBoolean("show_policy", showPolicy) + arg.putBoolean("show_agreement", showAgreement) arg.putBoolean("show_renew", showRenew) val fragment = PayTipDialog() fragment.arguments = arg diff --git a/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipFragment.kt b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipFragment.kt index e2196a3..c945b7c 100644 --- a/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipFragment.kt +++ b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipFragment.kt @@ -1,31 +1,38 @@ package com.cheng.bole.ui.fragment.mine.vip import android.annotation.SuppressLint +import android.graphics.Color import android.text.TextUtils import android.view.View import android.window.OnBackInvokedDispatcher import androidx.activity.addCallback +import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.ContextCompat import androidx.core.os.BuildCompat import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.cheng.bole.R +import com.cheng.bole.bean.CorpInfoBean +import com.cheng.bole.bean.OrderPayEntity +import com.cheng.bole.bean.UserEntity +import com.cheng.bole.bean.VipGoodsEntity +import com.cheng.bole.common.Constants import com.cheng.bole.common.EventConstants import com.cheng.bole.databinding.FragmentVipBinding import com.cheng.bole.event.PayStatusEnum import com.cheng.bole.event.PayStatusEvent -import com.cheng.bole.event.VipPaySuccessEvent +import com.cheng.bole.event.PaySuccessEvent import com.cheng.bole.manager.EventReportManager import com.cheng.bole.manager.LoginManager import com.cheng.bole.manager.UserConfigManager import com.cheng.bole.ui.activity.MainActivity import com.cheng.bole.ui.dialog.PayTipDialog +import com.cheng.bole.utils.DateUtils import com.cheng.bole.utils.UrlHelper import com.cheng.bole.utils.pay.PayUtils -import com.bytedance.ads.convert.event.ConvertReportHelper import com.example.base.common.RxBus -import com.example.base.decoration.FirstItemOffsetDecoration +import com.example.base.common.RxCountDown import com.example.base.decoration.GridSpaceItemDecoration import com.example.base.decoration.SpacesItemDecoration import com.example.base.extensions.getColor @@ -39,42 +46,59 @@ import com.example.base.utils.SpanUtils import com.google.gson.Gson import com.tencent.mm.opensdk.openapi.IWXAPI import com.tencent.mm.opensdk.openapi.WXAPIFactory -import com.cheng.bole.common.Constants +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.disposables.Disposable import org.jetbrains.anko.sdk27.listeners.onCheckedChange +import org.jetbrains.anko.sdk27.listeners.onTouch import org.jetbrains.anko.startActivity import java.text.DecimalFormat +import java.util.concurrent.TimeUnit class VipFragment : BaseFragment() { private val origin by lazy { arguments?.getString("origin") ?: "center" } private val isGuide by lazy { origin == "bootpage" } + private val vipType by lazy { arguments?.getInt("vipType") ?: 0 } // 0 个人版 1 企业版 + private lateinit var api: IWXAPI private var isAgree = false private var payType = 0 //0微信支付 1支付宝支付 private var totalPrice = 0f - private val mealAdapter by lazy { VipMealAdapter() } - private val tipAdapter by lazy { VipTipAdapter() } + private var seatPrice = 0f + private var seatCount = 0 + private var seatCountLimit = 3 - private var userInfo: com.cheng.bole.bean.UserEntity? = null - private var vipGoodsEntity: com.cheng.bole.bean.VipGoodsEntity? = null - private var orderEntity: com.cheng.bole.bean.OrderPayEntity? = null + private val goodsAdapter by lazy { VipMealAdapter() } + + private val userTipsList = mutableListOf() + private val userTipsAdapter by lazy { VipUserTipsAdapter(requireContext(), userTipsList) } + + private var userInfo: UserEntity? = null + private var goodsEntity: VipGoodsEntity? = null + private var orderEntity: OrderPayEntity? = null + private var corpInfo: CorpInfoBean? = null + + private var payTypeCheckedRes = R.mipmap.ic_pay_checked1 + + private var countdownDisposable: Disposable? = null + private var scrollTask: Disposable? = null override fun initView() { super.initView() - mTitleBar?.background = null setBackColor(R.color.white) + setPageStyle() + checkPayType() - binding.tvPrice.typeface = Constants.dDIN_PRO_M - binding.tvTipTitle.typeface = Constants.almmsht + binding.rvUserTips.adapter = userTipsAdapter - binding.rvMeal.adapter = mealAdapter - - binding.rvTip.adapter = tipAdapter - tipAdapter.setList(com.cheng.bole.bean.VipTipItemEntity.getVipTipList()) + binding.rvGoods.adapter = goodsAdapter binding.cbAgree.visibility = if (UserConfigManager.isPayAgreementEnable()) View.VISIBLE else View.GONE binding.tvAgree.visibility = if (UserConfigManager.isPayAgreementEnable()) View.VISIBLE else View.GONE + + binding.tvPrice.typeface = Constants.dDIN_PRO_M } override fun initData() { @@ -82,7 +106,9 @@ class VipFragment : BaseFragment() { api = WXAPIFactory.createWXAPI(requireContext(), Constants.WechatAppId) mViewModel.userInfo() - mViewModel.getGoodsList() + mViewModel.getPayUserTips() + mViewModel.getGoodsList(if (vipType == 0) "member" else "corp") + if (vipType == 1) mViewModel.getCorpInfo() } @SuppressLint("NotifyDataSetChanged", "SetTextI18n") @@ -91,63 +117,74 @@ class VipFragment : BaseFragment() { setBackPressed() mTitleBar?.setNavigationOnClickListener { if (isGuide) { - requireActivity().startActivity() EventReportManager.eventReport(EventConstants.GUIDE_SKIP, "icon", pageDuration()) + } + if (isGuide) { + requireActivity().startActivity() } else { requireActivity().finish() } } - mealAdapter.setOnItemClickListener { _, _, i -> - val item = mealAdapter.getItem(i) - if (item.goods_id == vipGoodsEntity?.goods_id) return@setOnItemClickListener - mealAdapter.data.forEach { it.checked = it.goods_id == item.goods_id } - mealAdapter.notifyDataSetChanged() - EventReportManager.eventReport(EventConstants.GOODS_SELECT, "${origin}:${item.goods_name}", Gson().toJson(item)) + binding.rvUserTips.onTouch { _, _ -> true } - vipGoodsEntity = item - setPrice(vipGoodsEntity!!.price.toFloat()) + goodsAdapter.setOnItemClickListener { _, _, i -> + val item = goodsAdapter.getItem(i) + if (item.goods_id == goodsEntity?.goods_id) return@setOnItemClickListener + goodsAdapter.data.forEach { it.checked = it.goods_id == item.goods_id } + goodsAdapter.notifyDataSetChanged() + + goodsEntity = item + if (vipType == 1) { + seatCountLimit = goodsEntity!!.member_limit.toInt() + if (seatCount < seatCountLimit) seatCount = seatCountLimit + binding.tvSeatPrice.text = "+¥${DecimalFormat("0.##").format(goodsEntity!!.member_price.toFloat())}" + binding.tvSeatOriginPrice.text = "(原¥${DecimalFormat("0.##").format(goodsEntity!!.origin_member_price.toFloat())})" + setSeatCount() + + seatPrice = (seatCount - seatCountLimit) * (goodsEntity?.member_price?.toFloat() ?: 0f) + setPrice(goodsEntity!!.price.toFloat() + seatPrice) + } else { + setPrice(goodsEntity!!.price.toFloat()) + } releasePayType() } - binding.tvWxPay.onClick { - payType = 0 - checkPayType() - EventReportManager.eventReport(EventConstants.PAY_SELECT, "weixin", origin) + + binding.ivAdd.onClick { + seatCount++ + setSeatCount() + + seatPrice = (seatCount - seatCountLimit) * goodsEntity!!.member_price.toFloat() + setPrice(goodsEntity!!.price.toFloat() + seatPrice) + + binding.ivSubtract.setImageResource(R.mipmap.ic_subtract_count_enable) } + + binding.ivSubtract.onClick { + if (seatCount > seatCountLimit) { + seatCount-- + setSeatCount() + + seatPrice = (seatCount - seatCountLimit) * goodsEntity!!.member_price.toFloat() + setPrice(goodsEntity!!.price.toFloat() + seatPrice) + + binding.ivSubtract.setImageResource(if (seatCount > seatCountLimit) R.mipmap.ic_subtract_count_enable else R.mipmap.ic_subtract_count_disable) + } + } + binding.tvAliPay.onClick { payType = 1 checkPayType() - EventReportManager.eventReport(EventConstants.PAY_SELECT, "alipay", origin) } - binding.nextBtn.onClick { - if (vipGoodsEntity == null) return@onClick - if (!UserConfigManager.getNoLoginPay() && !LoginManager.isLogin()) { - toast("请登录后支付") - return@onClick - } - if (payType == 0 && !api.isWXAppInstalled) { - toast("您没有安装微信客户端,请先下载安装") - return@onClick - } - if (UserConfigManager.isPayAgreementEnable() && !isAgree) { - val f = PayTipDialog.newInstance(!TextUtils.isEmpty(vipGoodsEntity?.sign_value) && payType == 1) - f.setOnSelectListener { - binding.cbAgree.isChecked = true - if (this.payType == 0) { - mViewModel.payCreateOrder(vipGoodsEntity!!.goods_id, "weixin", origin) - } else { - mViewModel.payCreateOrder(vipGoodsEntity!!.goods_id, "alipay", origin) - } - } - f.show(childFragmentManager, PayTipDialog::class.java.simpleName) - } else { - if (this.payType == 0) { - mViewModel.payCreateOrder(vipGoodsEntity!!.goods_id, "weixin", origin) - } else { - mViewModel.payCreateOrder(vipGoodsEntity!!.goods_id, "alipay", origin) - } - } - EventReportManager.eventReport(EventConstants.PAY_PAY, if (payType == 0) "weixin" else "alipay", Gson().toJson(vipGoodsEntity)) + + binding.tvWxPay.onClick { + payType = 0 + checkPayType() + } + + binding.tvBankPay.onClick { + payType = 2 + checkPayType() } binding.cbAgree.onCheckedChange { _, isChecked -> @@ -157,73 +194,141 @@ class VipFragment : BaseFragment() { binding.tvAgree.onClick { binding.cbAgree.isChecked = !binding.cbAgree.isChecked } + + binding.tvPay.onClick { + if (goodsEntity == null) return@onClick + if (!UserConfigManager.getNoLoginPay() && !LoginManager.isLogin()) { + toast("请登录后支付") + return@onClick + } + if (payType == 0 && !api.isWXAppInstalled) { + toast("您没有安装微信客户端,请先下载安装") + return@onClick + } + if (UserConfigManager.isPayAgreementEnable() && !isAgree) { + val f = PayTipDialog.newInstance(showAgreement = true, showRenew = !TextUtils.isEmpty(goodsEntity?.sign_value) && payType == 1) + f.setOnSelectListener { + binding.cbAgree.isChecked = true + if (payType == 0) { + mViewModel.payCreateOrder(goodsEntity!!.goods_id, "weixin", origin, "${seatCount - seatCountLimit}") + } else if (payType == 1) { + mViewModel.payCreateOrder(goodsEntity!!.goods_id, "alipay", origin, "${seatCount - seatCountLimit}") + } else if (payType == 2) { + mViewModel.payCreateOrder(goodsEntity!!.goods_id, "bank", origin, "${seatCount - seatCountLimit}") + } + } + f.show(childFragmentManager, PayTipDialog::class.java.simpleName) + } else { + if (payType == 0) { + mViewModel.payCreateOrder(goodsEntity!!.goods_id, "weixin", origin, "${seatCount - seatCountLimit}") + } else if (payType == 1) { + mViewModel.payCreateOrder(goodsEntity!!.goods_id, "alipay", origin, "${seatCount - seatCountLimit}") + } else if (payType == 2) { + mViewModel.payCreateOrder(goodsEntity!!.goods_id, "bank", origin, "${seatCount - seatCountLimit}") + } + } + EventReportManager.eventReport( + EventConstants.PAY_PAY, + if (payType == 0) "weixin" else if (payType == 1) "alipay" else "bank", + Gson().toJson(goodsEntity) + ) + } } - @SuppressLint("SetTextI18n") + @SuppressLint("NotifyDataSetChanged", "SetTextI18n") override fun initObserve() { super.initObserve() mViewModel.userInfoLiveData.observe(this) { userInfo = it - } - mViewModel.mealListLiveData.observe(this) { list -> - if (list.size <= 3) { - binding.rvMeal.layoutManager = GridLayoutManager(requireContext(), 3) - binding.rvMeal.setPadding(DensityUtils.dp2px(20f), 0, DensityUtils.dp2px(20f),0) - binding.rvMeal.addItemDecoration(GridSpaceItemDecoration(3, 0, DensityUtils.dp2px(10f))) + if (TextUtils.isEmpty(it.vip_expire)) { + binding.layoutCountdown.visible() + startCountdown(DateUtils.getDayEndTime() - System.currentTimeMillis() / 1000) } else { - binding.rvMeal.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) - binding.rvMeal.addItemDecoration(SpacesItemDecoration(DensityUtils.dp2px(10f), RecyclerView.HORIZONTAL)) - binding.rvMeal.addItemDecoration(FirstItemOffsetDecoration(DensityUtils.dp2px(20f), FirstItemOffsetDecoration.left)) + binding.layoutCountdown.gone() } + } - mealAdapter.setList(list) - - vipGoodsEntity = list.find { it.checked } - if (vipGoodsEntity == null && list.isNotEmpty()) { - vipGoodsEntity = list[0] + mViewModel.goodsListLiveData.observe(this) { list -> + if (list.size <= 3) { + binding.rvGoods.layoutManager = GridLayoutManager(requireContext(), 3) + binding.rvGoods.addItemDecoration(GridSpaceItemDecoration(3, 0, DensityUtils.dp2px(12f))) + } else { + binding.rvGoods.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false) + binding.rvGoods.addItemDecoration(SpacesItemDecoration(DensityUtils.dp2px(12f), RecyclerView.HORIZONTAL)) } - if (vipGoodsEntity != null) { - setPrice(vipGoodsEntity!!.price.toFloat()) + goodsAdapter.setList(list) + + goodsEntity = list.find { it.checked } + if (goodsEntity == null && list.isNotEmpty()) { + goodsEntity = list[0] + } + if (goodsEntity != null) { + if (vipType == 1) { + seatCountLimit = goodsEntity!!.member_limit.toInt() + if (seatCount < seatCountLimit) seatCount = seatCountLimit + binding.tvSeatPrice.text = "+¥${DecimalFormat("0.##").format(goodsEntity!!.member_price.toFloat())}" + binding.tvSeatOriginPrice.text = "(原¥${DecimalFormat("0.##").format(goodsEntity!!.origin_member_price.toFloat())})" + setSeatCount() + + seatPrice = (seatCount - seatCountLimit) * (goodsEntity?.member_price?.toFloat() ?: 0f) + setPrice(goodsEntity!!.price.toFloat() + seatPrice) + } else { + setPrice(goodsEntity!!.price.toFloat()) + } releasePayType() } initPrivacyTv() } + + mViewModel.corpInfoLiveData.observe(this) { + corpInfo = it + if (!TextUtils.isEmpty(it.sub_user_limit)) { + seatCount = corpInfo!!.sub_user_limit.toInt() + } + setSeatCount() + } + mViewModel.createOrderLiveData.observe(this) { orderEntity = it - if (this.payType == 0) { + if (payType == 0) { PayUtils.toWXPay(requireActivity(), it) - } else { + } else if (payType == 1) { PayUtils.toAliPay(requireActivity(), it.payParam, "") + } else { +// PublicActivity.start(requireContext(), CertificateFragment::class.java, Pair("orderId", orderEntity!!.orderId)) } } + mViewModel.payTipsLiveData.observe(this) { + userTipsList.addAll(it) + userTipsAdapter.notifyDataSetChanged() + startScroll() + } + val payStatusDisposable = RxBus.defaultInstance.toObservable(PayStatusEvent::class.java).subscribe { when (it.payStatus) { PayStatusEnum.PAY_SUCCESS -> { toast("支付成功") - sendBDReport(true) EventReportManager.eventReport( EventConstants.PAY_SUCCESS, if (payType == 0) "weixin" else "alipay", - "{isGuide:$isGuide, orderId:${orderEntity?.orderId}, meal:${Gson().toJson(vipGoodsEntity)}}" + "{isGuide:$isGuide, orderId:${orderEntity?.orderId}, meal:${Gson().toJson(goodsEntity)}}" ) if (isGuide) { requireActivity().startActivity() } else { - RxBus.defaultInstance.post(VipPaySuccessEvent()) - requireActivity().finish() + RxBus.defaultInstance.post(PaySuccessEvent()) } + requireActivity().finish() } PayStatusEnum.PAY_CANCEL -> { - toast("支付取消") - sendBDReport(false) + toast("已取消支付") EventReportManager.eventReport(EventConstants.PAY_CANCEL, if (payType == 0) "weixin" else "alipay", "{isGuide:$isGuide, orderId:${orderEntity?.orderId}") } else -> { - toast("支付取消") - sendBDReport(false) + toast("已取消支付") EventReportManager.eventReport(if (payType == 0) EventConstants.ERROR_CLIENT_WXPAY_ERR else EventConstants.ERROR_CLIENT_ALIPAY_ERR, "{isGuide:$isGuide, orderId:${orderEntity?.orderId}", it.message) } } @@ -231,19 +336,124 @@ class VipFragment : BaseFragment() { addDisposable(payStatusDisposable) } + private fun checkPayType() { + if (payType == 0) { + val start1 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_wx_pay) + val end1 = ContextCompat.getDrawable(requireContext(), payTypeCheckedRes) + binding.tvWxPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start1, null, end1, null) + + val start2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_ali_pay) + val end2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_default) + binding.tvAliPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start2, null, end2, null) + + val start3 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_transfer_pay) + val end3 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_default) + binding.tvBankPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start3, null, end3, null) + } else if (payType == 1) { + val start1 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_ali_pay) + val end1 = ContextCompat.getDrawable(requireContext(), payTypeCheckedRes) + binding.tvAliPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start1, null, end1, null) + + val start2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_wx_pay) + val end2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_default) + binding.tvWxPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start2, null, end2, null) + + val start3 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_transfer_pay) + val end3 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_default) + binding.tvBankPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start3, null, end3, null) + } else { + val start1 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_transfer_pay) + val end1 = ContextCompat.getDrawable(requireContext(), payTypeCheckedRes) + binding.tvBankPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start1, null, end1, null) + + val start2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_ali_pay) + val end2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_default) + binding.tvAliPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start2, null, end2, null) + + val start3 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_wx_pay) + val end3 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_default) + binding.tvWxPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start3, null, end3, null) + } + initPrivacyTv() + } + + private fun releasePayType() { + val list = goodsEntity?.pay_type?.split(",")?.map { it.trim() }?.toList() + if (list?.find { it == "alipay" } != null) { + binding.tvAliPay.visible() + } else { + binding.tvAliPay.gone() + } + if (list?.find { it == "weixin" } != null) { + binding.tvWxPay.visible() + } else { + binding.tvWxPay.gone() + } + if (list?.find { it == "bank" } != null) { + binding.tvBankPay.visible() + } else { + binding.tvBankPay.gone() + } + + if (goodsEntity?.pay_type!!.startsWith("weixin")) { + payType = 0 + } + if (goodsEntity?.pay_type!!.startsWith("alipay")) { + payType = 1 + } + if (goodsEntity?.pay_type!!.startsWith("bank")) { + payType = 2 + } + + checkPayType() + } + + private fun initPrivacyTv() { + val spanUtils = SpanUtils.with(binding.tvAgree) + .append("我已阅读并同意") + .append("《会员服务协议规则》") + .setClickSpan(getColor(R.color.color_ff493c), false) { + UrlHelper.startUserAgreement(requireContext(), "会员服务协议规则") + } + if (!TextUtils.isEmpty(goodsEntity?.sign_value?.trim()) && payType == 1) { + spanUtils.append("和") + spanUtils.append("《自动续费服务规则》") + spanUtils.setClickSpan(getColor(R.color.color_ff493c), false) { + UrlHelper.startRenewAgreement(requireContext()) + } + } + spanUtils.create() + } + + private fun setSeatCount() { + binding.tvCount.text = "$seatCount" + SpanUtils.with(binding.tvSeatTip2) + .append("当前") + .append("1个") + .setForegroundColor(Color.parseColor("#D6AA58")) + .append("主号+") + .append("${seatCount}个") + .setForegroundColor(Color.parseColor("#D6AA58")) + .append("席位") + .create() + } + + @SuppressLint("SetTextI18n") private fun setPrice(price: Float) { totalPrice = if (price < 0) 0f else price SpanUtils.with(binding.tvPrice) .append("¥") .setFontSize(13, true) .append(DecimalFormat("0.##").format(totalPrice)) - .append(formatPricePeriod(vipGoodsEntity!!.value)) + .append(formatPricePeriod(goodsEntity!!.value)) .setFontSize(13, true) .create() - SpanUtils.with(binding.tvOriginPrice) - .append("¥${DecimalFormat("0.##").format(vipGoodsEntity!!.origin_price.toFloat())}") - .setStrikethrough() - .create() + val totalOriginPrice = if (vipType == 1) { + goodsEntity!!.origin_price.toFloat() + (seatCount - seatCountLimit) * (goodsEntity?.origin_member_price?.toFloat() ?: 0f) + } else { + goodsEntity!!.origin_price.toFloat() + } + binding.tvSavedPrice.text = "立省${DecimalFormat("0.##").format(totalOriginPrice - totalPrice)}" } private fun formatPricePeriod(value: String): String { @@ -265,78 +475,104 @@ class VipFragment : BaseFragment() { return "" } - private fun checkPayType() { - if (payType == 0) { - val start = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_wx_pay) - val end = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_true) - binding.tvWxPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start, null, end, null) + private fun setPageStyle() { + if (vipType == 0) { + payTypeCheckedRes = R.mipmap.ic_pay_checked1 - val start2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_ali_pay) - val end2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_false) - binding.tvAliPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start2, null, end2, null) + binding.ivTopBg.setImageResource(R.mipmap.ic_vip_top_bg1) + binding.layoutPay.setBackgroundResource(R.mipmap.ic_vip_pay_bg1) + binding.layoutPayBtn.setBackgroundResource(R.mipmap.ic_vip_pay_btn_bg1) + + val tipsLp = binding.ivTips.layoutParams as ConstraintLayout.LayoutParams + tipsLp.dimensionRatio = "h,1030:1010" + binding.ivTips.layoutParams = tipsLp + binding.ivTips.setImageResource(R.mipmap.ic_vip_tips1) + + binding.tvDay.setBackgroundResource(R.drawable.shape_vip_countdown_bg1) + binding.tvHour.setBackgroundResource(R.drawable.shape_vip_countdown_bg1) + binding.tvMinute.setBackgroundResource(R.drawable.shape_vip_countdown_bg1) + binding.tvSecond.setBackgroundResource(R.drawable.shape_vip_countdown_bg1) + + binding.tvPay.setTextColor(Color.parseColor("#080501")) + + binding.layoutSeat.gone() } else { - val start = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_ali_pay) - val end = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_true) - binding.tvAliPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start, null, end, null) + payTypeCheckedRes = R.mipmap.ic_pay_checked2 - val start2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_wx_pay) - val end2 = ContextCompat.getDrawable(requireContext(), R.mipmap.ic_pay_false) - binding.tvWxPay.setCompoundDrawablesRelativeWithIntrinsicBounds(start2, null, end2, null) + binding.ivTopBg.setImageResource(R.mipmap.ic_vip_top_bg2) + binding.layoutPay.setBackgroundResource(R.mipmap.ic_vip_pay_bg2) + binding.layoutPayBtn.setBackgroundResource(R.mipmap.ic_vip_pay_btn_bg2) + + val tipsLp = binding.ivTips.layoutParams as ConstraintLayout.LayoutParams + tipsLp.dimensionRatio = "h,1030:1301" + binding.ivTips.layoutParams = tipsLp + binding.ivTips.setImageResource(R.mipmap.ic_vip_tips2) + + SpanUtils.with(binding.tvSeatTip1) + .append("增加") + .append("1个") + .setForegroundColor(Color.parseColor("#146847")) + .append("席位") + .create() + + binding.tvDay.setBackgroundResource(R.drawable.shape_vip_countdown_bg2) + binding.tvHour.setBackgroundResource(R.drawable.shape_vip_countdown_bg2) + binding.tvMinute.setBackgroundResource(R.drawable.shape_vip_countdown_bg2) + binding.tvSecond.setBackgroundResource(R.drawable.shape_vip_countdown_bg2) + + binding.tvPay.setTextColor(Color.WHITE) + + binding.layoutSeat.visible() } - initPrivacyTv() } - private fun releasePayType() { - val list = vipGoodsEntity?.pay_type?.split(",")?.map { it.trim() }?.toList() - if (list?.find { it == "alipay" } != null) { - binding.tvAliPay.visible() - } else { - binding.tvAliPay.gone() - } - if (list?.find { it == "weixin" } != null) { - binding.tvWxPay.visible() - } else { - binding.tvWxPay.gone() - } - - if (vipGoodsEntity?.pay_type!!.startsWith("alipay")) { - payType = 1 - } - if (vipGoodsEntity?.pay_type!!.startsWith("weixin")) { - payType = 0 - } - - checkPayType() - } - - private fun initPrivacyTv() { - val spanUtils = SpanUtils.with(binding.tvAgree) - .append("我已阅读并同意") - .append("《会员服务协议规则》") - .setClickSpan(getColor(R.color.color_125ffe), false) { - UrlHelper.startUserAgreement(requireContext(), "会员服务协议规则") + private fun startCountdown(time: Long) { + countdownDisposable = RxCountDown.countdown(time) + .subscribe { + setCountdownTime(it) } - if (!TextUtils.isEmpty(vipGoodsEntity?.sign_value) && payType == 1) { - spanUtils.append("和") - spanUtils.append("《自动续费服务规则》") - spanUtils.setClickSpan(getColor(R.color.color_125ffe), false) { - UrlHelper.startRenewAgreement(requireContext()) - } - } - spanUtils.create() } - private fun sendBDReport(isSuccess: Boolean) { - ConvertReportHelper.onEventPurchase( - "member", - vipGoodsEntity!!.goods_name, - vipGoodsEntity!!.goods_id, - 1, - if (payType == 0) "weixin" else "alipay", - "¥", - isSuccess, - totalPrice.toInt() - ) + //格式化倒计时 + private fun setCountdownTime(seconds: Long) { + val minutes = seconds / 60 + val hours = minutes / 60 + val day = hours / 24 + binding.tvDay.text = String.format("%02d", day) + binding.tvHour.text = if (day > 0) String.format("%02d", hours % 24) else String.format("%02d", hours) + binding.tvMinute.text = String.format("%02d", minutes % 60) + binding.tvSecond.text = String.format("%02d", seconds % 60) + } + + private fun startScroll() { + if (userTipsList.isEmpty() || scrollTask != null) return + scrollTask = Observable.interval(300, 9, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + if (activity != null) { + binding.rvUserTips.scrollBy(3, 0) + } + } + } + + private fun stopScroll() { + scrollTask?.dispose() + scrollTask = null + } + + override fun onStart() { + startScroll() + super.onStart() + } + + override fun onStop() { + stopScroll() + super.onStop() + } + + override fun onDestroyView() { + countdownDisposable?.dispose() + super.onDestroyView() } @SuppressLint("UnsafeOptInUsageError") @@ -344,8 +580,10 @@ class VipFragment : BaseFragment() { if (BuildCompat.isAtLeastT()) { requireActivity().onBackInvokedDispatcher.registerOnBackInvokedCallback(OnBackInvokedDispatcher.PRIORITY_DEFAULT) { if (isGuide) { - requireActivity().startActivity() EventReportManager.eventReport(EventConstants.GUIDE_SKIP, "back", pageDuration()) + } + if (isGuide) { + requireActivity().startActivity() } else { requireActivity().finish() } @@ -353,8 +591,10 @@ class VipFragment : BaseFragment() { } else { requireActivity().onBackPressedDispatcher.addCallback(this) { if (isGuide) { - requireActivity().startActivity() EventReportManager.eventReport(EventConstants.GUIDE_SKIP, "back", pageDuration()) + } + if (isGuide) { + requireActivity().startActivity() } else { requireActivity().finish() } diff --git a/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipMealAdapter.kt b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipMealAdapter.kt index 3ed2659..9437700 100644 --- a/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipMealAdapter.kt +++ b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipMealAdapter.kt @@ -9,18 +9,19 @@ import androidx.core.view.setPadding import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.cheng.bole.R +import com.cheng.bole.bean.VipGoodsEntity +import com.cheng.bole.common.Constants import com.example.base.extensions.getColor import com.example.base.ui.list.LoadMoreAdapter import com.example.base.utils.DensityUtils import com.example.base.utils.SpanUtils -import com.cheng.bole.R -import com.cheng.bole.common.Constants import java.text.DecimalFormat -class VipMealAdapter : LoadMoreAdapter(R.layout.listitem_vip_meal) { +class VipMealAdapter : LoadMoreAdapter(R.layout.listitem_vip_meal) { @SuppressLint("NotifyDataSetChanged") - override fun convert(holder: BaseViewHolder, item: com.cheng.bole.bean.VipGoodsEntity) { + override fun convert(holder: BaseViewHolder, item: VipGoodsEntity) { holder.setGone(R.id.tv_tag, true) if (item.tips.isNotEmpty()) { holder.setVisible(R.id.tv_tag, true) diff --git a/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipUserTipsAdapter.kt b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipUserTipsAdapter.kt new file mode 100644 index 0000000..728cf69 --- /dev/null +++ b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipUserTipsAdapter.kt @@ -0,0 +1,38 @@ +package com.cheng.bole.ui.fragment.mine.vip + +import android.annotation.SuppressLint +import android.content.Context +import android.view.View +import android.view.ViewGroup +import android.view.ViewGroup.LayoutParams +import android.widget.ImageView +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.recyclerview.widget.RecyclerView +import coil.load +import coil.transform.CircleCropTransformation +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.cheng.bole.R +import com.example.base.utils.DensityUtils + +class VipUserTipsAdapter(val context: Context, val data: MutableList): RecyclerView.Adapter() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { + val view = View.inflate(context, R.layout.listitem_vip_user_tip, null) + val lp = ConstraintLayout.LayoutParams(LayoutParams.WRAP_CONTENT, DensityUtils.dp2px(24f)) + lp.leftMargin = DensityUtils.dp2px(10f) + view.layoutParams = lp + return BaseViewHolder(view) + } + + @SuppressLint("DiscouragedApi") + override fun onBindViewHolder(holder: BaseViewHolder, position: Int) { + holder.getView(R.id.iv_avatar).load(context.resources.getIdentifier("yq_${position % 50}", "mipmap", context.packageName)) { + transformations(CircleCropTransformation()) + } + holder.setText(R.id.tv_content, data[position % data.size]) + } + + override fun getItemCount(): Int { + return if (data.isNotEmpty()) Int.MAX_VALUE else 0 + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipViewModel.kt b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipViewModel.kt index 01567ef..ab1b686 100644 --- a/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipViewModel.kt +++ b/app/src/main/java/com/cheng/bole/ui/fragment/mine/vip/VipViewModel.kt @@ -1,18 +1,28 @@ package com.cheng.bole.ui.fragment.mine.vip import androidx.lifecycle.MutableLiveData +import com.cheng.bole.bean.CorpInfoBean +import com.cheng.bole.bean.CouponEntity +import com.cheng.bole.bean.OrderPayEntity +import com.cheng.bole.bean.UserEntity +import com.cheng.bole.bean.VipGoodsEntity import com.cheng.bole.net.ApiFactory import com.example.base.extensions.toast import com.example.base.utils.L import com.example.base.viewmodel.BaseViewModel import com.google.gson.JsonObject +import com.ylqh.cube.bean.CouponActivityEntity import okhttp3.RequestBody.Companion.toRequestBody class VipViewModel : BaseViewModel() { - val userInfoLiveData = MutableLiveData() - val mealListLiveData = MutableLiveData>() - val couponListLiveData = MutableLiveData>() - val createOrderLiveData = MutableLiveData() + val userInfoLiveData = MutableLiveData() + val goodsListLiveData = MutableLiveData>() + val corpInfoLiveData = MutableLiveData() + val createOrderLiveData = MutableLiveData() + val payTipsLiveData = MutableLiveData>() + val couponListLiveData = MutableLiveData>() + val couponActivityLiveData = MutableLiveData>() + val getCouponLiveData = MutableLiveData() fun userInfo() { showDialog() @@ -29,11 +39,69 @@ class VipViewModel : BaseViewModel() { }) } - fun getGoodsList() { + fun getGoodsList(type: String) { + showDialog() launchOnUiTryCatch({ - val response = ApiFactory.apiService.getGoodsList() + val response = ApiFactory.apiService.getGoodsList(type) if (response.status) { - mealListLiveData.postValue(response.data) + goodsListLiveData.postValue(response.data) + } else toast(response.message, true) + dismissDialog() + }, { + dismissDialog() + setError(it) + L.d(it) + }) + } + + fun getCorpInfo() { + showDialog() + launchOnUiTryCatch({ + val response = ApiFactory.apiService.getSeatInfo() + if (response.status) { + corpInfoLiveData.postValue(response.data) + } else toast(response.message, true) + dismissDialog() + }, { + dismissDialog() + setError(it) + L.d(it) + }) + } + + fun payCreateOrder(goos_id: String, pay_type: String, source: String, seatCount: String, coupon: String? = "") { + showDialog() + launchOnUiTryCatch({ + val json = JsonObject() + json.addProperty("goods_id", goos_id) + json.addProperty("pay_type", pay_type) + json.addProperty("source", source) + json.addProperty("pay_source", "app") + json.addProperty("coupon", coupon ?: "") + + val extra = JsonObject() + extra.addProperty("add_corp_limit", seatCount) + json.add("extra", extra) + L.d("TAG-->>$json") + val response = ApiFactory.apiService.payCreateOrder(json.toString().toRequestBody()) + if (response.status) { + createOrderLiveData.postValue(response.data) + } else { + toast(response.message, true) + } + dismissDialog() + }, { + dismissDialog() + setError(it) + L.d(it) + }) + } + + fun getPayUserTips() { + launchOnUiTryCatch({ + val response = ApiFactory.apiService.getPayUserTips() + if (response.status) { + payTipsLiveData.postValue(response.data) } }, { setError(it) @@ -58,25 +126,24 @@ class VipViewModel : BaseViewModel() { }) } - fun payCreateOrder(goos_id: String, pay_type: String, source: String) { + fun couponActivityList() { + launchOnUiTryCatch({ + val response = ApiFactory.apiService.couponActivityList("cli_pay_return") + if (response.status) { + couponActivityLiveData.postValue(response.data) + } + },{ + L.d(it) + }) + } + + fun getActivityCoupon(ids: String) { showDialog() launchOnUiTryCatch({ - val json = JsonObject() - json.addProperty("goods_id", goos_id) - json.addProperty("pay_type", pay_type) - json.addProperty("source", source) - json.addProperty("pay_source", "app") - - val extra = JsonObject() -// extra.addProperty("choose_red_packet", true)//红包选中 - json.add("extra", extra) - L.d("TAG-->>$json") - val response = ApiFactory.apiService.payCreateOrder(json.toString().toRequestBody()) + val response = ApiFactory.apiService.getActivityCoupons(ids) if (response.status) { - createOrderLiveData.postValue(response.data) - } else { - toast(response.message, true) - } + getCouponLiveData.postValue(Any()) + } else toast(response.message, true) dismissDialog() }, { dismissDialog() diff --git a/app/src/main/res/drawable/shape_daf0e6_cor4.xml b/app/src/main/res/drawable/shape_daf0e6_cor4.xml new file mode 100644 index 0000000..59f89cb --- /dev/null +++ b/app/src/main/res/drawable/shape_daf0e6_cor4.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_bottom_bg.xml b/app/src/main/res/drawable/shape_vip_bottom_bg.xml deleted file mode 100644 index 39c17ad..0000000 --- a/app/src/main/res/drawable/shape_vip_bottom_bg.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_countdown_bg1.xml b/app/src/main/res/drawable/shape_vip_countdown_bg1.xml new file mode 100644 index 0000000..383e7d0 --- /dev/null +++ b/app/src/main/res/drawable/shape_vip_countdown_bg1.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_countdown_bg2.xml b/app/src/main/res/drawable/shape_vip_countdown_bg2.xml new file mode 100644 index 0000000..805ce0d --- /dev/null +++ b/app/src/main/res/drawable/shape_vip_countdown_bg2.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_coupon_bg.xml b/app/src/main/res/drawable/shape_vip_coupon_bg.xml new file mode 100644 index 0000000..1238d3b --- /dev/null +++ b/app/src/main/res/drawable/shape_vip_coupon_bg.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_seat_bg.xml b/app/src/main/res/drawable/shape_vip_seat_bg.xml new file mode 100644 index 0000000..04a1548 --- /dev/null +++ b/app/src/main/res/drawable/shape_vip_seat_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_tab_checked.xml b/app/src/main/res/drawable/shape_vip_tab_checked.xml new file mode 100644 index 0000000..97d02b4 --- /dev/null +++ b/app/src/main/res/drawable/shape_vip_tab_checked.xml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_tab_default.xml b/app/src/main/res/drawable/shape_vip_tab_default.xml new file mode 100644 index 0000000..4edfb4e --- /dev/null +++ b/app/src/main/res/drawable/shape_vip_tab_default.xml @@ -0,0 +1,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_tag_bg.xml b/app/src/main/res/drawable/shape_vip_tag_bg.xml index c898ad7..32dfb4a 100644 --- a/app/src/main/res/drawable/shape_vip_tag_bg.xml +++ b/app/src/main/res/drawable/shape_vip_tag_bg.xml @@ -1,9 +1,7 @@ - + + android:bottomRightRadius="@dimen/dp_8" + android:topLeftRadius="@dimen/dp_8" /> \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_vip_user_tip_bg.xml b/app/src/main/res/drawable/shape_vip_user_tip_bg.xml new file mode 100644 index 0000000..3abdcde --- /dev/null +++ b/app/src/main/res/drawable/shape_vip_user_tip_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_vip.xml b/app/src/main/res/layout/fragment_vip.xml index eb07ea2..500a4c2 100644 --- a/app/src/main/res/layout/fragment_vip.xml +++ b/app/src/main/res/layout/fragment_vip.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="#0F1016"> + android:background="#180602"> + app:layout_constraintTop_toTopOf="parent" + tools:listitem="@layout/listitem_vip_user_tip" /> + + + + + + + + + android:layout_marginStart="@dimen/dp_12" + android:layout_marginTop="@dimen/dp_40" + android:layout_marginEnd="@dimen/dp_12" + android:overScrollMode="never" + app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" + app:layout_constraintTop_toBottomOf="@id/layout_tab" + app:spanCount="3" + tools:itemCount="3" + tools:listitem="@layout/listitem_vip_goods" /> + + + + + + + + + + + + + + + + + + + + + + + - + app:layout_constraintTop_toTopOf="parent" /> - + android:layout_marginStart="@dimen/dp_7" + android:text="增加1个席位" + android:textColor="@color/color_222222" + android:textSize="@dimen/sp_16" + app:layout_constraintBottom_toBottomOf="@id/iv_seat_icon1" + app:layout_constraintStart_toEndOf="@id/iv_seat_icon1" + app:layout_constraintTop_toTopOf="@id/iv_seat_icon1" /> + + + + + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + app:layout_constraintTop_toBottomOf="@id/layout_coupon_redpacket" /> + app:layout_constraintTop_toBottomOf="@id/tv_wx_pay" /> - + android:layout_height="@dimen/dp_54" + android:drawableStart="@mipmap/ic_transfer_pay" + android:drawableEnd="@mipmap/ic_pay_default" + android:drawablePadding="@dimen/dp_10" + android:gravity="center_vertical" + android:paddingStart="@dimen/dp_12" + android:paddingEnd="@dimen/dp_12" + android:text="对公转账" + android:textColor="@color/color_fdf7f0" + android:textSize="@dimen/sp_15" + app:layout_constraintTop_toBottomOf="@id/tv_ali_pay" /> + - - - - - + android:layout_height="0dp" + android:layout_marginStart="@dimen/dp_16" + android:layout_marginEnd="@dimen/dp_16" + android:src="@mipmap/ic_vip_tips1" + app:layout_constraintDimensionRatio="h,1030:1010" + app:layout_constraintTop_toBottomOf="@id/layout_pay" /> + app:layout_constraintTop_toBottomOf="@id/iv_tips" /> + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/listitem_vip_goods.xml b/app/src/main/res/layout/listitem_vip_goods.xml new file mode 100644 index 0000000..6cc1b1a --- /dev/null +++ b/app/src/main/res/layout/listitem_vip_goods.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/listitem_vip_user_tip.xml b/app/src/main/res/layout/listitem_vip_user_tip.xml new file mode 100644 index 0000000..7ad553a --- /dev/null +++ b/app/src/main/res/layout/listitem_vip_user_tip.xml @@ -0,0 +1,32 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/yq_0.jpg b/app/src/main/res/mipmap-hdpi/yq_0.jpg new file mode 100644 index 0000000..204ab6b Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_0.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_1.jpg b/app/src/main/res/mipmap-hdpi/yq_1.jpg new file mode 100644 index 0000000..d269d84 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_1.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_10.jpg b/app/src/main/res/mipmap-hdpi/yq_10.jpg new file mode 100644 index 0000000..9d8d4bd Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_10.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_11.jpg b/app/src/main/res/mipmap-hdpi/yq_11.jpg new file mode 100644 index 0000000..79e438c Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_11.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_12.jpg b/app/src/main/res/mipmap-hdpi/yq_12.jpg new file mode 100644 index 0000000..2f0ce06 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_12.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_13.jpg b/app/src/main/res/mipmap-hdpi/yq_13.jpg new file mode 100644 index 0000000..40d9e50 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_13.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_14.jpg b/app/src/main/res/mipmap-hdpi/yq_14.jpg new file mode 100644 index 0000000..3e0d829 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_14.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_15.jpg b/app/src/main/res/mipmap-hdpi/yq_15.jpg new file mode 100644 index 0000000..21856a6 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_15.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_16.jpg b/app/src/main/res/mipmap-hdpi/yq_16.jpg new file mode 100644 index 0000000..3a5e1da Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_16.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_17.jpg b/app/src/main/res/mipmap-hdpi/yq_17.jpg new file mode 100644 index 0000000..c3bdd44 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_17.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_18.jpg b/app/src/main/res/mipmap-hdpi/yq_18.jpg new file mode 100644 index 0000000..9aaea49 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_18.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_19.jpg b/app/src/main/res/mipmap-hdpi/yq_19.jpg new file mode 100644 index 0000000..36ccbb7 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_19.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_2.jpg b/app/src/main/res/mipmap-hdpi/yq_2.jpg new file mode 100644 index 0000000..affc642 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_2.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_20.jpg b/app/src/main/res/mipmap-hdpi/yq_20.jpg new file mode 100644 index 0000000..8c0be66 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_20.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_21.jpg b/app/src/main/res/mipmap-hdpi/yq_21.jpg new file mode 100644 index 0000000..552c6ed Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_21.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_22.jpg b/app/src/main/res/mipmap-hdpi/yq_22.jpg new file mode 100644 index 0000000..33ade43 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_22.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_23.jpg b/app/src/main/res/mipmap-hdpi/yq_23.jpg new file mode 100644 index 0000000..796a37e Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_23.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_24.jpg b/app/src/main/res/mipmap-hdpi/yq_24.jpg new file mode 100644 index 0000000..3bbf04f Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_24.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_25.jpg b/app/src/main/res/mipmap-hdpi/yq_25.jpg new file mode 100644 index 0000000..3a903b2 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_25.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_26.png b/app/src/main/res/mipmap-hdpi/yq_26.png new file mode 100644 index 0000000..adf0e28 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_26.png differ diff --git a/app/src/main/res/mipmap-hdpi/yq_27.jpg b/app/src/main/res/mipmap-hdpi/yq_27.jpg new file mode 100644 index 0000000..d9a0169 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_27.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_28.jpg b/app/src/main/res/mipmap-hdpi/yq_28.jpg new file mode 100644 index 0000000..a321239 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_28.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_29.jpg b/app/src/main/res/mipmap-hdpi/yq_29.jpg new file mode 100644 index 0000000..d7d5869 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_29.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_3.jpg b/app/src/main/res/mipmap-hdpi/yq_3.jpg new file mode 100644 index 0000000..fff2a52 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_3.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_30.jpg b/app/src/main/res/mipmap-hdpi/yq_30.jpg new file mode 100644 index 0000000..f22670f Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_30.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_31.jpg b/app/src/main/res/mipmap-hdpi/yq_31.jpg new file mode 100644 index 0000000..9c34811 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_31.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_32.jpg b/app/src/main/res/mipmap-hdpi/yq_32.jpg new file mode 100644 index 0000000..7d1e2d0 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_32.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_33.jpg b/app/src/main/res/mipmap-hdpi/yq_33.jpg new file mode 100644 index 0000000..f480145 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_33.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_34.jpg b/app/src/main/res/mipmap-hdpi/yq_34.jpg new file mode 100644 index 0000000..9561d32 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_34.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_35.jpg b/app/src/main/res/mipmap-hdpi/yq_35.jpg new file mode 100644 index 0000000..50e56c9 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_35.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_36.jpg b/app/src/main/res/mipmap-hdpi/yq_36.jpg new file mode 100644 index 0000000..0d8686e Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_36.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_37.jpg b/app/src/main/res/mipmap-hdpi/yq_37.jpg new file mode 100644 index 0000000..a8ef694 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_37.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_38.jpg b/app/src/main/res/mipmap-hdpi/yq_38.jpg new file mode 100644 index 0000000..ae3c6f1 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_38.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_39.jpg b/app/src/main/res/mipmap-hdpi/yq_39.jpg new file mode 100644 index 0000000..b5bf8f3 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_39.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_4.jpg b/app/src/main/res/mipmap-hdpi/yq_4.jpg new file mode 100644 index 0000000..f4d4e54 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_4.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_40.jpg b/app/src/main/res/mipmap-hdpi/yq_40.jpg new file mode 100644 index 0000000..b1cdac1 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_40.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_41.jpg b/app/src/main/res/mipmap-hdpi/yq_41.jpg new file mode 100644 index 0000000..5e6c879 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_41.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_42.jpg b/app/src/main/res/mipmap-hdpi/yq_42.jpg new file mode 100644 index 0000000..fdbd7eb Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_42.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_43.jpg b/app/src/main/res/mipmap-hdpi/yq_43.jpg new file mode 100644 index 0000000..9609fe1 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_43.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_44.jpg b/app/src/main/res/mipmap-hdpi/yq_44.jpg new file mode 100644 index 0000000..02cf43e Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_44.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_45.jpg b/app/src/main/res/mipmap-hdpi/yq_45.jpg new file mode 100644 index 0000000..40ad9a9 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_45.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_46.jpg b/app/src/main/res/mipmap-hdpi/yq_46.jpg new file mode 100644 index 0000000..51de80c Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_46.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_47.jpg b/app/src/main/res/mipmap-hdpi/yq_47.jpg new file mode 100644 index 0000000..4fc5153 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_47.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_48.jpg b/app/src/main/res/mipmap-hdpi/yq_48.jpg new file mode 100644 index 0000000..742784b Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_48.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_49.jpg b/app/src/main/res/mipmap-hdpi/yq_49.jpg new file mode 100644 index 0000000..465708a Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_49.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_5.jpg b/app/src/main/res/mipmap-hdpi/yq_5.jpg new file mode 100644 index 0000000..c5f3558 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_5.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_50.jpg b/app/src/main/res/mipmap-hdpi/yq_50.jpg new file mode 100644 index 0000000..942f9ec Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_50.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_6.jpg b/app/src/main/res/mipmap-hdpi/yq_6.jpg new file mode 100644 index 0000000..0ffb6ce Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_6.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_7.jpg b/app/src/main/res/mipmap-hdpi/yq_7.jpg new file mode 100644 index 0000000..4512cfa Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_7.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_8.jpg b/app/src/main/res/mipmap-hdpi/yq_8.jpg new file mode 100644 index 0000000..f87b856 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_8.jpg differ diff --git a/app/src/main/res/mipmap-hdpi/yq_9.jpg b/app/src/main/res/mipmap-hdpi/yq_9.jpg new file mode 100644 index 0000000..eedf061 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/yq_9.jpg differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_add_count.webp b/app/src/main/res/mipmap-xxhdpi/ic_add_count.webp new file mode 100644 index 0000000..eddd248 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_add_count.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_pay_checked1.webp b/app/src/main/res/mipmap-xxhdpi/ic_pay_checked1.webp new file mode 100644 index 0000000..9e9dfe5 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_pay_checked1.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_pay_checked2.webp b/app/src/main/res/mipmap-xxhdpi/ic_pay_checked2.webp new file mode 100644 index 0000000..fc5c650 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_pay_checked2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_pay_default.webp b/app/src/main/res/mipmap-xxhdpi/ic_pay_default.webp new file mode 100644 index 0000000..edd26c4 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_pay_default.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_personal_goods_checked.webp b/app/src/main/res/mipmap-xxhdpi/ic_personal_goods_checked.webp new file mode 100644 index 0000000..9b5152d Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_personal_goods_checked.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_personal_goods_default.webp b/app/src/main/res/mipmap-xxhdpi/ic_personal_goods_default.webp new file mode 100644 index 0000000..0d9d81f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_personal_goods_default.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_seat_arrow.webp b/app/src/main/res/mipmap-xxhdpi/ic_seat_arrow.webp new file mode 100644 index 0000000..7ce438a Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_seat_arrow.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_subtract_count_disable.webp b/app/src/main/res/mipmap-xxhdpi/ic_subtract_count_disable.webp new file mode 100644 index 0000000..0d3bf13 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_subtract_count_disable.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_subtract_count_enable.webp b/app/src/main/res/mipmap-xxhdpi/ic_subtract_count_enable.webp new file mode 100644 index 0000000..6513e3b Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_subtract_count_enable.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_transfer_pay.webp b/app/src/main/res/mipmap-xxhdpi/ic_transfer_pay.webp new file mode 100644 index 0000000..d6f3596 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_transfer_pay.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_coupon.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_coupon.webp new file mode 100644 index 0000000..fc1cb7a Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_coupon.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_bg1.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_bg1.webp new file mode 100644 index 0000000..38fa045 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_bg1.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_bg2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_bg2.webp new file mode 100644 index 0000000..e2b7764 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_bg2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_btn_bg1.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_btn_bg1.webp new file mode 100644 index 0000000..a2b31a7 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_btn_bg1.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_btn_bg2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_btn_bg2.webp new file mode 100644 index 0000000..9ea84d7 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_pay_btn_bg2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_redpacket.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_redpacket.webp new file mode 100644 index 0000000..64f7421 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_redpacket.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_seat.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_seat.webp new file mode 100644 index 0000000..e7d78d1 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_seat.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_bg.webp new file mode 100644 index 0000000..797ae5c Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_bg.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_checked.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_checked.webp new file mode 100644 index 0000000..63c19c9 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_checked.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_checked_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_checked_bg.webp new file mode 100644 index 0000000..d6bb22c Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_checked_bg.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_default.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_default.webp new file mode 100644 index 0000000..5bb604c Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_tab_default.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tag_small.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tag_small.webp new file mode 100644 index 0000000..a769a10 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_tag_small.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tip_l.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tip_l.webp deleted file mode 100644 index 123ccd4..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_tip_l.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tip_r.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tip_r.webp deleted file mode 100644 index 789f3f8..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_tip_r.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips.webp deleted file mode 100644 index 3ae3563..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips1.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips1.webp new file mode 100644 index 0000000..c3ec1b8 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips1.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips2.webp new file mode 100644 index 0000000..444ef1f Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips2.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_divider.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_divider.webp deleted file mode 100644 index 0950f33..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_divider.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_light.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_light.webp deleted file mode 100644 index 5128f64..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_light.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_star.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_star.webp deleted file mode 100644 index ea74077..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_tips_star.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg.webp deleted file mode 100644 index e77e1d9..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg1.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg1.webp new file mode 100644 index 0000000..bfdfd6e Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg1.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg2.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg2.webp new file mode 100644 index 0000000..b0b09fd Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_top_bg2.webp differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d250c7c..7b4cb14 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -95,4 +95,14 @@ #BCAC8E #C5FFE1 #A6C8BA + #7E4024 + #F11E1E + #797069 + #FFF5E6 + #1B6648 + #FFFAEF + #FDF7F0 + #FFF4E6 + #ECC9AE + #703D27 \ No newline at end of file