veloria two 6.18 commit

This commit is contained in:
yuyl 2025-06-18 09:05:34 +08:00
parent 41c7432edb
commit 45bdeec96f
34 changed files with 852 additions and 675 deletions

View File

@ -14,8 +14,8 @@ android {
applicationId = "com.veloria.now.shortapp" applicationId = "com.veloria.now.shortapp"
minSdk = 24 minSdk = 24
targetSdk = 34 targetSdk = 34
versionCode = 4 versionCode = 5
versionName = "1.0.3" versionName = "1.0.4"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
} }

View File

@ -1653,8 +1653,11 @@ class NOEditRegisterFragment : JItemServiceFragment<QfAutoBinding, VDLRenderers>
break break
} }
val maxSize = appearanceBase.size - (appearanceBase.size % 3)
homeDramaAdapter?.submitList(appearanceBase) val dramaArrayList = appearanceBase.take(maxSize)
homeDramaAdapter?.submitList(dramaArrayList)
} else { } else {
var loginm: String = "downmix" var loginm: String = "downmix"
while (loginm.length > 104) { while (loginm.length > 104) {

View File

@ -13,6 +13,7 @@ import android.view.WindowManager
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.android.billingclient.api.AcknowledgePurchaseParams import com.android.billingclient.api.AcknowledgePurchaseParams
import com.android.billingclient.api.BillingClient import com.android.billingclient.api.BillingClient
@ -32,16 +33,17 @@ import com.veloria.now.shortapp.civil.JActivityAdapter
import com.veloria.now.shortapp.civil.RYAction import com.veloria.now.shortapp.civil.RYAction
import com.veloria.now.shortapp.civil.TranslationHelper import com.veloria.now.shortapp.civil.TranslationHelper
import com.veloria.now.shortapp.civil.YFHome import com.veloria.now.shortapp.civil.YFHome
import com.veloria.now.shortapp.civil.singleOnClick
import com.veloria.now.shortapp.civil.toast import com.veloria.now.shortapp.civil.toast
import com.veloria.now.shortapp.databinding.LayoutVePlayerBuyDialogBinding import com.veloria.now.shortapp.databinding.LayoutVePlayerBuyDialogBinding
import com.veloria.now.shortapp.subtractionCroll.bidirectional.coordinate.VeStoreViewModel import com.veloria.now.shortapp.subtractionCroll.bidirectional.coordinate.VeStoreViewModel
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeBannerVipPayAdapter
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinAdapter import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinAdapter
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinBigAdapter
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreVipAdapter
import com.veloria.now.shortapp.texturedAsink.VeCreatePayOrderReqBean import com.veloria.now.shortapp.texturedAsink.VeCreatePayOrderReqBean
import com.veloria.now.shortapp.texturedAsink.VePayBean import com.veloria.now.shortapp.texturedAsink.VePayBean
import com.veloria.now.shortapp.texturedAsink.VePaySettingsBean import com.veloria.now.shortapp.texturedAsink.VePaySettingsBean
import com.veloria.now.shortapp.texturedAsink.XAboutBean import com.veloria.now.shortapp.texturedAsink.XAboutBean
import com.youth.banner.listener.OnPageChangeListener
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
@ -52,7 +54,8 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
private val viewModel by lazy { ViewModelProvider(this)[VeStoreViewModel::class.java] } private val viewModel by lazy { ViewModelProvider(this)[VeStoreViewModel::class.java] }
private var coinAdapter: VeStoreCoinAdapter? = null private var coinAdapter: VeStoreCoinAdapter? = null
private var bannerAdapter: VeBannerVipPayAdapter? = null private var coinBigAdapter: VeStoreCoinBigAdapter? = null
private var vipAdapter: VeStoreVipAdapter? = null
private var promise_view_ad: Int? = -1 private var promise_view_ad: Int? = -1
private var connectNum = 0 private var connectNum = 0
private var short_play_id: Int? = 0 private var short_play_id: Int? = 0
@ -65,6 +68,7 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
private var order_code = "" private var order_code = ""
private var vipData: VePaySettingsBean.VipBean? = null private var vipData: VePaySettingsBean.VipBean? = null
private var coinsData: VePaySettingsBean.CoinsBean? = null private var coinsData: VePaySettingsBean.CoinsBean? = null
private var coinsBigData: VePaySettingsBean.CoinsBean? = null
private var isBuy = false private var isBuy = false
private var purchaseData: Purchase? = null private var purchaseData: Purchase? = null
@ -90,27 +94,17 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
if (TranslationHelper.getTranslation() != null) { if (TranslationHelper.getTranslation() != null) {
binding?.tvCoinsText?.text = TranslationHelper.getTranslation()?.veloria_your_coins binding?.tvCoinsText?.text = TranslationHelper.getTranslation()?.veloria_your_coins
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
binding?.tvTips?.text = Html.fromHtml( binding?.tvTips?.text = Html.fromHtml(
TranslationHelper.getTranslation()?.veloria_store_tips TranslationHelper.getTranslation()?.veloria_store_tips
?: getString(R.string.ve_store_tips_br), ?: getString(R.string.ve_store_tips_br),
Html.FROM_HTML_MODE_COMPACT Html.FROM_HTML_MODE_COMPACT
) )
binding?.tvBuyHint?.text = Html.fromHtml(
TranslationHelper.getTranslation()?.veloria_unlimited_access_to
?: getString(R.string.unlimited_access_to_all_series_for_1_br),
Html.FROM_HTML_MODE_COMPACT
)
} else { } else {
binding?.tvTips?.text = Html.fromHtml( binding?.tvTips?.text = Html.fromHtml(
TranslationHelper.getTranslation()?.veloria_store_tips TranslationHelper.getTranslation()?.veloria_store_tips
?: getString(R.string.ve_store_tips_br) ?: getString(R.string.ve_store_tips_br)
) )
binding?.tvBuyHint?.text = Html.fromHtml(
TranslationHelper.getTranslation()?.veloria_unlimited_access_to
?: getString(R.string.unlimited_access_to_all_series_for_1_br)
)
} }
} }
@ -122,6 +116,10 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
dismiss() dismiss()
} }
vipAdapter = VeStoreVipAdapter()
binding?.recyclerVip?.layoutManager = LinearLayoutManager(requireContext())
binding?.recyclerVip?.adapter = vipAdapter
coinAdapter = VeStoreCoinAdapter() coinAdapter = VeStoreCoinAdapter()
binding?.recyclerCoin?.layoutManager = GridLayoutManager(requireContext(), 3) binding?.recyclerCoin?.layoutManager = GridLayoutManager(requireContext(), 3)
binding?.recyclerCoin?.adapter = coinAdapter binding?.recyclerCoin?.adapter = coinAdapter
@ -138,38 +136,64 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
} }
}) })
coinBigAdapter = VeStoreCoinBigAdapter()
binding?.recyclerCoinBig?.layoutManager = GridLayoutManager(requireContext(), 2)
binding?.recyclerCoinBig?.adapter = coinBigAdapter
binding?.recyclerCoinBig?.addItemDecoration(object : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
outRect.left = resources.getDimension(R.dimen.dp_5).toInt()
outRect.right = resources.getDimension(R.dimen.dp_5).toInt()
outRect.bottom = resources.getDimension(R.dimen.dp_10).toInt()
}
})
showLoading() showLoading()
viewModel.getPaySettingsV3(0, 0) viewModel.getPaySettingsV3(0, 0)
vipAdapter?.setOnItemClickListener { adapter, view, position ->
if (typeOnClick != 1) {
coinAdapter?.currentPosition = -1
coinAdapter?.notifyDataSetChanged()
coinBigAdapter?.currentPosition = -1
coinBigAdapter?.notifyDataSetChanged()
}
typeOnClick = 1
vipAdapter?.currentPosition = position
vipAdapter?.notifyDataSetChanged()
setOnPayNowClick()
}
coinAdapter?.setOnItemClickListener { adapter, view, position -> coinAdapter?.setOnItemClickListener { adapter, view, position ->
if (typeOnClick == 1) { if (typeOnClick != 0) {
if (bannerAdapter?.currentPosition!! >= 0) { vipAdapter?.currentPosition = -1
bannerAdapter?.notifyItemChanged(bannerAdapter?.currentPosition!!) vipAdapter?.notifyDataSetChanged()
} coinBigAdapter?.currentPosition = -1
bannerAdapter?.oldPosition = -1 coinBigAdapter?.notifyDataSetChanged()
bannerAdapter?.currentPosition = -1
} }
typeOnClick = 0 typeOnClick = 0
coinAdapter?.currentPosition = position coinAdapter?.currentPosition = position
coinAdapter?.notifyDataSetChanged() coinAdapter?.notifyDataSetChanged()
coinsData = setOnPayNowClick()
coinAdapter!!.getItem(position) as VePaySettingsBean.CoinsBean }
coinBigAdapter?.setOnItemClickListener { adapter, view, position ->
if (parcelable != null) { if (typeOnClick != 2) {
short_play_id?.let { vipAdapter?.currentPosition = -1
VeCreatePayOrderReqBean( vipAdapter?.notifyDataSetChanged()
coinsData?.id.toString(), coinAdapter?.currentPosition = -1
"google", coinAdapter?.notifyDataSetChanged()
it,
parcelable!!.short_play_video_id
)
}?.let {
viewModel.setCreatePayOrder(
it
)
}
} }
typeOnClick = 2
coinBigAdapter?.currentPosition = position
coinBigAdapter?.notifyDataSetChanged()
setOnPayNowClick()
} }
observeData() observeData()
@ -184,34 +208,44 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
window?.setGravity(Gravity.BOTTOM) window?.setGravity(Gravity.BOTTOM)
val layoutParams = window?.attributes val layoutParams = window?.attributes
layoutParams?.width = WindowManager.LayoutParams.MATCH_PARENT layoutParams?.width = WindowManager.LayoutParams.MATCH_PARENT
layoutParams?.height = resources.getDimensionPixelSize(R.dimen.dp_600) layoutParams?.height = (requireActivity().resources.displayMetrics.heightPixels - requireActivity().resources.getDimension(R.dimen.dp_90)).toInt()
window?.attributes = layoutParams window?.attributes = layoutParams
return dialog return dialog
} }
private fun setBannerListener() {
binding?.bannerVip?.setOnBannerListener { data, position ->
if (typeOnClick == 0) {
coinAdapter?.currentPosition = -1
coinAdapter?.notifyDataSetChanged()
}
if (bannerAdapter?.currentPosition!! >= 0) {
bannerAdapter?.oldPosition = bannerAdapter?.currentPosition!!
}
typeOnClick = 1
bannerAdapter?.currentPosition = position
bannerAdapter?.notifyItemChanged(position)
if (bannerAdapter?.oldPosition!! >= 0) {
bannerAdapter?.notifyItemChanged(bannerAdapter?.oldPosition!!)
}
vipData = fun setOnPayNowClick() {
bannerAdapter?.getData(bannerAdapter!!.currentPosition) as VePaySettingsBean.VipBean singleOnClick {
if (!isConnect) {
if (TranslationHelper.getTranslation() != null) {
} else {
toast(getString(R.string.ve_google_pay_error))
}
return@singleOnClick
}
if (typeOnClick == 0) {
coinsData =
coinAdapter?.getItem(coinAdapter!!.currentPosition) as VePaySettingsBean.CoinsBean
} else if (typeOnClick == 1) {
vipData =
vipAdapter?.getItem(vipAdapter!!.currentPosition) as VePaySettingsBean.VipBean
} else {
coinsBigData =
coinBigAdapter?.getItem(coinBigAdapter!!.currentPosition) as VePaySettingsBean.CoinsBean
}
showLoading() showLoading()
var idStr = ""
if (typeOnClick == 0) {
idStr = coinsData?.id.toString()
} else if (typeOnClick == 1) {
idStr = vipData?.id.toString()
} else {
idStr = coinsBigData?.id.toString()
}
if (parcelable != null) { if (parcelable != null) {
short_play_id?.let { short_play_id?.let {
VeCreatePayOrderReqBean( VeCreatePayOrderReqBean(
vipData?.id.toString(), idStr,
"google", "google",
it, it,
parcelable!!.short_play_video_id parcelable!!.short_play_video_id
@ -222,62 +256,48 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
) )
} }
} }
} }
binding?.bannerVip?.addOnPageChangeListener(object : OnPageChangeListener {
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
}
override fun onPageSelected(position: Int) {
val data = bannerAdapter?.getData(position)
data?.let { setVipContentText(it) }
}
override fun onPageScrollStateChanged(state: Int) {
}
})
val itemData = bannerAdapter?.getData(0)
itemData?.let { setVipContentText(it) }
}
private fun setVipContentText(data: VePaySettingsBean.VipBean) {
val vipContent1 = TranslationHelper.replaces(
getString(R.string.unlimited_access_to_all_series_for_1_br),
data?.vip_type_key.toString(),
data.send_coin_ttl.toString()
)
binding?.tvBuyHint?.text =
Html.fromHtml(vipContent1, Html.FROM_HTML_MODE_LEGACY)
} }
fun observeData() { fun observeData() {
viewModel.PaySettingsV3.observe(this) { viewModel.PaySettingsV3.observe(this) {
if (it?.data != null) { if (it?.data != null) {
coinAdapter?.submitList(it.data.list_coins)
if (it.data.list_sub_vip.isNotEmpty()) { if (it.data.list_sub_vip.isNotEmpty()) {
binding?.tvBuyHint?.visibility = View.VISIBLE vipAdapter?.submitList(it.data.list_sub_vip)
binding?.bannerVip?.visibility = View.VISIBLE binding?.recyclerVip?.visibility = View.VISIBLE
bannerAdapter =
VeBannerVipPayAdapter(it.data.list_sub_vip) it.data.list_sub_vip.let { it1 -> querySubVipProductDetails(it1) }
binding?.bannerVip?.setBannerGalleryEffect(
resources.getDimension(R.dimen.dp_5).toInt(), } else {
resources.getDimension(R.dimen.dp_5).toInt() binding?.recyclerVip?.visibility = View.GONE
) }
binding?.bannerVip?.setAdapter(bannerAdapter) if (it.data.list_coins.isNotEmpty()) {
setBannerListener() val small = it.data.list_coins.filter { coins -> coins.size == "small" }
val big = it.data.list_coins.filter { coins -> coins.size == "big" }
if (small.isNotEmpty()) {
coinAdapter?.submitList(small)
binding?.recyclerCoin?.visibility = View.VISIBLE
} else {
binding?.recyclerCoin?.visibility = View.GONE
}
if (big.isNotEmpty()) {
coinBigAdapter?.submitList(big)
binding?.recyclerCoinBig?.visibility = View.VISIBLE
} else {
binding?.recyclerCoinBig?.visibility = View.GONE
}
if (small?.isNotEmpty() == true) {
small?.let { it1 -> queryInAppCoinsProductDetails(it1, "small") }
}
if (big?.isNotEmpty() == true) {
big?.let { it1 -> queryInAppCoinsProductDetails(it1, "big") }
}
binding?.tvCoinTitle?.visibility = View.VISIBLE
} else {
binding?.recyclerCoin?.visibility = View.GONE
binding?.recyclerCoinBig?.visibility = View.GONE
binding?.tvCoinTitle?.visibility = View.GONE
} }
it.data.list_sub_vip.let { it1 -> querySubVipProductDetails(it1) }
it.data.list_coins.let { it1 -> queryInAppCoinsProductDetails(it1) }
} }
binding?.root?.postDelayed({ binding?.root?.postDelayed({
@ -290,8 +310,10 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
order_code = it.data.order_code.toString() order_code = it.data.order_code.toString()
if (typeOnClick == 0) { if (typeOnClick == 0) {
coinsData?.android_template_id?.let { it1 -> getProduct(it1) } coinsData?.android_template_id?.let { it1 -> getProduct(it1) }
} else { } else if (typeOnClick == 1) {
vipData?.android_template_id?.let { it1 -> getProduct(it1) } vipData?.android_template_id?.let { it1 -> getProduct(it1) }
} else {
coinsBigData?.android_template_id?.let { it1 -> getProduct(it1) }
} }
} else { } else {
if (TranslationHelper.getTranslation() != null) { if (TranslationHelper.getTranslation() != null) {
@ -333,10 +355,10 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
BillingClient.BillingResponseCode.OK -> { BillingClient.BillingResponseCode.OK -> {
for (purchase in purchases!!) { for (purchase in purchases!!) {
if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) { if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {
if (typeOnClick == 0) { if (typeOnClick == 1) {
consumePurchase(purchase)
} else {
consumePurchaseSub(purchase) consumePurchaseSub(purchase)
} else {
consumePurchase(purchase)
} }
} }
} }
@ -443,7 +465,7 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
} }
binding?.root?.postDelayed({ binding?.root?.postDelayed({
bannerAdapter?.setDatas(updatedVipList) vipAdapter?.submitList(updatedVipList)
hideLoading() hideLoading()
}, 500) }, 500)
} else { } else {
@ -473,7 +495,8 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
} }
private fun queryInAppCoinsProductDetails( private fun queryInAppCoinsProductDetails(
coinsList: List<VePaySettingsBean.CoinsBean> coinsList: List<VePaySettingsBean.CoinsBean>,
type: String
) { ) {
val productDetailsResponseListener = val productDetailsResponseListener =
ProductDetailsResponseListener { billingResult, productDetailsList -> ProductDetailsResponseListener { billingResult, productDetailsList ->
@ -492,7 +515,11 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
} }
coinAdapter?.recyclerView?.postDelayed({ coinAdapter?.recyclerView?.postDelayed({
coinAdapter?.submitList(updatedCoinsList) if (type == "small") {
coinAdapter?.submitList(updatedCoinsList)
} else {
coinBigAdapter?.submitList(updatedCoinsList)
}
}, 500) }, 500)
} else { } else {
hideLoading() hideLoading()
@ -533,10 +560,10 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
} }
} }
} }
val productType: String = if (typeOnClick == 0) { val productType: String = if (typeOnClick == 1) {
BillingClient.ProductType.INAPP
} else {
BillingClient.ProductType.SUBS BillingClient.ProductType.SUBS
} else {
BillingClient.ProductType.INAPP
} }
val inAppProductInfo = ArrayList<QueryProductDetailsParams.Product>() val inAppProductInfo = ArrayList<QueryProductDetailsParams.Product>()
@ -597,12 +624,12 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
ConsumeResponseListener { billingResult, purchaseToken -> ConsumeResponseListener { billingResult, purchaseToken ->
val vePayBean = VePayBean( val vePayBean = VePayBean(
order_code, order_code,
if (typeOnClick == 0) coinsData?.id.toString() else vipData?.id.toString(), if (typeOnClick == 0) coinsData?.id.toString() else coinsBigData?.id.toString(),
YFHome.getPackageName(), YFHome.getPackageName(),
if (typeOnClick == 0) coinsData?.android_template_id.toString() else vipData?.android_template_id.toString(), if (typeOnClick == 0) coinsData?.android_template_id.toString() else coinsBigData?.android_template_id.toString(),
purchaseToken, purchaseToken,
purchaseData?.orderId.toString(), purchaseData?.orderId.toString(),
if (typeOnClick == 0) coinsData?.price.toString() else vipData?.price.toString() if (typeOnClick == 0) coinsData?.price.toString() else coinsBigData?.price.toString()
) )
payBeanReq = vePayBean payBeanReq = vePayBean
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) { if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
@ -642,7 +669,6 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() {
billingClientData?.endConnection() billingClientData?.endConnection()
billingClientData = null billingClientData = null
System.gc() System.gc()
System.gc()
EventBus.getDefault() EventBus.getDefault()
.post(JActivityAdapter.VIDEO_PAY_REFRESH_DISMISS) .post(JActivityAdapter.VIDEO_PAY_REFRESH_DISMISS)
super.onDismiss(dialog) super.onDismiss(dialog)

View File

@ -30,13 +30,12 @@ import com.veloria.now.shortapp.civil.toast
import com.veloria.now.shortapp.databinding.ActivityVeStoreBinding import com.veloria.now.shortapp.databinding.ActivityVeStoreBinding
import com.veloria.now.shortapp.newsletter.AIXTextActivity import com.veloria.now.shortapp.newsletter.AIXTextActivity
import com.veloria.now.shortapp.subtractionCroll.bidirectional.coordinate.VeStoreViewModel import com.veloria.now.shortapp.subtractionCroll.bidirectional.coordinate.VeStoreViewModel
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeBannerVipPayAdapter
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinAdapter import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinAdapter
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinBigAdapter
import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreVipAdapter import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreVipAdapter
import com.veloria.now.shortapp.texturedAsink.VeCreatePayOrderReqBean import com.veloria.now.shortapp.texturedAsink.VeCreatePayOrderReqBean
import com.veloria.now.shortapp.texturedAsink.VePayBean import com.veloria.now.shortapp.texturedAsink.VePayBean
import com.veloria.now.shortapp.texturedAsink.VePaySettingsBean import com.veloria.now.shortapp.texturedAsink.VePaySettingsBean
import com.youth.banner.listener.OnPageChangeListener
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel>() { class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel>() {
@ -46,11 +45,15 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
override fun getViewBinding() = ActivityVeStoreBinding.inflate(layoutInflater) override fun getViewBinding() = ActivityVeStoreBinding.inflate(layoutInflater)
private var coinAdapter: VeStoreCoinAdapter? = null private var coinAdapter: VeStoreCoinAdapter? = null
private var coinBigAdapter: VeStoreCoinBigAdapter? = null
private var vipAdapter: VeStoreVipAdapter? = null
private var typeOnClick = 0 private var typeOnClick = 0
private var isConnect = false private var isConnect = false
private var vipData: VePaySettingsBean.VipBean? = null private var vipData: VePaySettingsBean.VipBean? = null
private var coinsData: VePaySettingsBean.CoinsBean? = null private var coinsData: VePaySettingsBean.CoinsBean? = null
private var bannerAdapter: VeBannerVipPayAdapter? = null private var coinsBigData: VePaySettingsBean.CoinsBean? = null
// private var bannerAdapter: VeBannerVipPayAdapter? = null
private var payBeanReq: VePayBean? = null private var payBeanReq: VePayBean? = null
private var billingClientData: BillingClient? = null private var billingClientData: BillingClient? = null
@ -63,17 +66,6 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
override fun initView() { override fun initView() {
if (TranslationHelper.getTranslation() != null) { if (TranslationHelper.getTranslation() != null) {
binding.tvTitle1.text = TranslationHelper.getTranslation()?.veloria_limited_time_offer
binding.tvTitle2.text = TranslationHelper.getTranslation()?.veloria_recharge_unlock_more
binding.tvTab2.text = TranslationHelper.getTranslation()?.veloria_coins
binding.tvVipText.text = TranslationHelper.getTranslation()?.veloria_membership_benefits
binding.tvVipContent1.text = TranslationHelper.getTranslation()?.veloria_store_no_ads
binding.tvVipContent2.text =
TranslationHelper.getTranslation()?.veloria_store_donate_coins
binding.tvVipContent3.text =
TranslationHelper.getTranslation()?.veloria_store_auto_renew
binding.tvMoreCoin.text = TranslationHelper.getTranslation()?.veloria_get_more_coins
binding.tvCoinText.text = TranslationHelper.getTranslation()?.veloria_your_coins
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
binding.tvTips.text = Html.fromHtml( binding.tvTips.text = Html.fromHtml(
TranslationHelper.getTranslation()?.veloria_store_tips TranslationHelper.getTranslation()?.veloria_store_tips
@ -90,25 +82,15 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
showLoading() showLoading()
binding.tvCoin.text = RYAction.getAllCoinTotal().toString()
binding.ivBack.setOnClickListener { binding.ivBack.setOnClickListener {
finish() finish()
} }
binding.tvTab1.setOnClickListener {
binding.tvTab1.setBackgroundResource(R.mipmap.iv_store_tab_left)
binding.tvTab2.setBackgroundResource(R.drawable.bg_transparent)
binding.clOne.visibility = View.GONE
binding.clTwo.visibility = View.VISIBLE
}
binding.tvTab2.setOnClickListener {
binding.tvTab1.setBackgroundResource(R.drawable.bg_transparent)
binding.tvTab2.setBackgroundResource(R.mipmap.iv_store_tab_right)
binding.clOne.visibility = View.VISIBLE
binding.clTwo.visibility = View.GONE
}
vipAdapter = VeStoreVipAdapter()
binding.recyclerVip.layoutManager = LinearLayoutManager(this)
binding.recyclerVip.adapter = vipAdapter
coinAdapter = VeStoreCoinAdapter() coinAdapter = VeStoreCoinAdapter()
binding.recyclerCoin.layoutManager = GridLayoutManager(this, 3) binding.recyclerCoin.layoutManager = GridLayoutManager(this, 3)
binding.recyclerCoin.adapter = coinAdapter binding.recyclerCoin.adapter = coinAdapter
@ -124,17 +106,44 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
outRect.bottom = resources.getDimension(R.dimen.dp_10).toInt() outRect.bottom = resources.getDimension(R.dimen.dp_10).toInt()
} }
}) })
coinBigAdapter = VeStoreCoinBigAdapter()
binding.recyclerCoinBig.layoutManager = GridLayoutManager(this, 2)
binding.recyclerCoinBig.adapter = coinBigAdapter
binding.recyclerCoinBig.addItemDecoration(object : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
outRect.left = resources.getDimension(R.dimen.dp_5).toInt()
outRect.right = resources.getDimension(R.dimen.dp_5).toInt()
outRect.bottom = resources.getDimension(R.dimen.dp_10).toInt()
}
})
viewModel.getPaySettingsV3(0, 0) viewModel.getPaySettingsV3(0, 0)
vipAdapter?.setOnItemClickListener { adapter, view, position ->
if (typeOnClick != 1) {
coinAdapter?.currentPosition = -1
coinAdapter?.notifyDataSetChanged()
coinBigAdapter?.currentPosition = -1
coinBigAdapter?.notifyDataSetChanged()
}
typeOnClick = 1
vipAdapter?.currentPosition = position
vipAdapter?.notifyDataSetChanged()
setOnPayNowClick()
}
coinAdapter?.setOnItemClickListener { adapter, view, position -> coinAdapter?.setOnItemClickListener { adapter, view, position ->
if (typeOnClick == 1) { if (typeOnClick != 0) {
if (bannerAdapter?.currentPosition!! >= 0) { vipAdapter?.currentPosition = -1
bannerAdapter?.notifyItemChanged(bannerAdapter?.currentPosition!!) vipAdapter?.notifyDataSetChanged()
} coinBigAdapter?.currentPosition = -1
bannerAdapter?.oldPosition = -1 coinBigAdapter?.notifyDataSetChanged()
bannerAdapter?.currentPosition = -1
} }
typeOnClick = 0 typeOnClick = 0
coinAdapter?.currentPosition = position coinAdapter?.currentPosition = position
@ -142,64 +151,23 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
setOnPayNowClick() setOnPayNowClick()
} }
coinBigAdapter?.setOnItemClickListener { adapter, view, position ->
if (typeOnClick != 2) {
vipAdapter?.currentPosition = -1
vipAdapter?.notifyDataSetChanged()
coinAdapter?.currentPosition = -1
coinAdapter?.notifyDataSetChanged()
}
typeOnClick = 2
coinBigAdapter?.currentPosition = position
coinBigAdapter?.notifyDataSetChanged()
setOnPayNowClick()
}
initPayData() initPayData()
} }
private fun setBannerListener() {
binding.bannerVip.setOnBannerListener { data, position ->
if (typeOnClick == 0) {
coinAdapter?.currentPosition = -1
coinAdapter?.notifyDataSetChanged()
}
if (bannerAdapter?.currentPosition!! >= 0) {
bannerAdapter?.oldPosition = bannerAdapter?.currentPosition!!
}
typeOnClick = 1
bannerAdapter?.currentPosition = position
bannerAdapter?.notifyItemChanged(position)
if (bannerAdapter?.oldPosition!! >= 0) {
bannerAdapter?.notifyItemChanged(bannerAdapter?.oldPosition!!)
}
setOnPayNowClick()
}
binding.bannerVip.addOnPageChangeListener(object : OnPageChangeListener {
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
}
override fun onPageSelected(position: Int) {
val data = bannerAdapter?.getData(position)
data?.let { setVipContentText(it) }
}
override fun onPageScrollStateChanged(state: Int) {
}
})
val itemData = bannerAdapter?.getData(0)
itemData?.let { setVipContentText(it) }
}
private fun setVipContentText(data: VePaySettingsBean.VipBean) {
val vipContent1 =
"Unlimited access to all series for <font color='#05CEA0'>1 ".plus(data?.vip_type_key)
.plus("</font> (No Ads)")
binding.tvVipContent1.text =
Html.fromHtml(vipContent1, Html.FROM_HTML_MODE_LEGACY)
val vipContent2 =
"The donate coins will expire in <font color='#05CEA0'>".plus(data.send_coin_ttl.toString())
.plus(" days</font>")
binding.tvVipContent2.text =
Html.fromHtml(vipContent2, Html.FROM_HTML_MODE_LEGACY)
}
fun setOnPayNowClick() { fun setOnPayNowClick() {
singleOnClick { singleOnClick {
@ -212,15 +180,26 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
} }
if (typeOnClick == 0) { if (typeOnClick == 0) {
coinsData = coinsData =
coinAdapter!!.getItem(coinAdapter!!.currentPosition) as VePaySettingsBean.CoinsBean coinAdapter?.getItem(coinAdapter!!.currentPosition) as VePaySettingsBean.CoinsBean
} else { } else if (typeOnClick == 1) {
vipData = vipData =
bannerAdapter?.getData(bannerAdapter!!.currentPosition) as VePaySettingsBean.VipBean vipAdapter?.getItem(vipAdapter!!.currentPosition) as VePaySettingsBean.VipBean
} else {
coinsBigData =
coinBigAdapter?.getItem(coinBigAdapter!!.currentPosition) as VePaySettingsBean.CoinsBean
} }
showLoading() showLoading()
var idStr = ""
if (typeOnClick == 0) {
idStr = coinsData?.id.toString()
} else if (typeOnClick == 1) {
idStr = vipData?.id.toString()
} else {
idStr = coinsBigData?.id.toString()
}
viewModel.setCreatePayOrder( viewModel.setCreatePayOrder(
VeCreatePayOrderReqBean( VeCreatePayOrderReqBean(
if (typeOnClick == 0) coinsData?.id.toString() else vipData?.id.toString(), idStr,
"google", "google",
0, 0,
0 0
@ -232,28 +211,42 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
override fun observeData() { override fun observeData() {
viewModel.PaySettingsV3.observe(this) { viewModel.PaySettingsV3.observe(this) {
if (it?.data != null) { if (it?.data != null) {
if (it.data.list_sub_vip.isNotEmpty()) {
vipAdapter?.submitList(it.data.list_sub_vip)
binding.recyclerVip.visibility = View.VISIBLE
if (it.data.list_coins.isNotEmpty() && it.data.list_sub_vip.isNotEmpty()){ it.data.list_sub_vip.let { it1 -> querySubVipProductDetails(it1) }
binding.llTab.visibility = View.VISIBLE
}
if (it.data.list_sub_vip.isNotEmpty()){
binding.clTwo.visibility = View.VISIBLE
bannerAdapter =
VeBannerVipPayAdapter(it.data.list_sub_vip)
binding.bannerVip.setBannerGalleryEffect(
resources.getDimension(R.dimen.dp_5).toInt(),
resources.getDimension(R.dimen.dp_5).toInt()
)
binding.bannerVip.setAdapter(bannerAdapter)
setBannerListener()
}else {
binding.clTwo.visibility = View.GONE
binding.clOne.visibility = View.VISIBLE
}
coinAdapter?.submitList(it.data.list_coins)
it.data.list_sub_vip.let { it1 -> querySubVipProductDetails(it1) } } else {
it.data.list_coins.let { it1 -> queryInAppCoinsProductDetails(it1) } binding.recyclerVip.visibility = View.GONE
}
if (it.data.list_coins.isNotEmpty()) {
val small = it.data.list_coins.filter { coins -> coins.size == "small" }
val big = it.data.list_coins.filter { coins -> coins.size == "big" }
if (small.isNotEmpty()) {
coinAdapter?.submitList(small)
binding.recyclerCoin.visibility = View.VISIBLE
} else {
binding.recyclerCoin.visibility = View.GONE
}
if (big.isNotEmpty()) {
coinBigAdapter?.submitList(big)
binding.recyclerCoinBig.visibility = View.VISIBLE
} else {
binding.recyclerCoinBig.visibility = View.GONE
}
if (small?.isNotEmpty() == true) {
small?.let { it1 -> queryInAppCoinsProductDetails(it1, "small") }
}
if (big?.isNotEmpty() == true) {
big?.let { it1 -> queryInAppCoinsProductDetails(it1, "big") }
}
binding.tvCoinTitle.visibility = View.VISIBLE
} else {
binding.recyclerCoin.visibility = View.GONE
binding.recyclerCoinBig.visibility = View.GONE
binding.tvCoinTitle.visibility = View.GONE
}
} }
hideLoading() hideLoading()
@ -263,8 +256,10 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
order_code = it.data.order_code.toString() order_code = it.data.order_code.toString()
if (typeOnClick == 0) { if (typeOnClick == 0) {
coinsData?.android_template_id?.let { it1 -> getProduct(it1) } coinsData?.android_template_id?.let { it1 -> getProduct(it1) }
} else { } else if (typeOnClick == 1) {
vipData?.android_template_id?.let { it1 -> getProduct(it1) } vipData?.android_template_id?.let { it1 -> getProduct(it1) }
} else {
coinsBigData?.android_template_id?.let { it1 -> getProduct(it1) }
} }
} else { } else {
if (TranslationHelper.getTranslation() != null) { if (TranslationHelper.getTranslation() != null) {
@ -296,7 +291,6 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
viewModel.userInfo.observe(this) { viewModel.userInfo.observe(this) {
if (it?.data != null) { if (it?.data != null) {
RYAction.saveUserInfoBean(it.data) RYAction.saveUserInfoBean(it.data)
binding.tvCoin.text = RYAction.getAllCoinTotal().toString()
} }
hideLoading() hideLoading()
} }
@ -309,10 +303,10 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
BillingClient.BillingResponseCode.OK -> { BillingClient.BillingResponseCode.OK -> {
for (purchase in purchases!!) { for (purchase in purchases!!) {
if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) { if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {
if (typeOnClick == 0) { if (typeOnClick == 1) {
consumePurchase(purchase)
} else {
consumePurchaseSub(purchase) consumePurchaseSub(purchase)
} else {
consumePurchase(purchase)
} }
} }
} }
@ -419,7 +413,7 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
} }
binding.root.postDelayed({ binding.root.postDelayed({
bannerAdapter?.setDatas(updatedVipList) vipAdapter?.submitList(updatedVipList)
hideLoading() hideLoading()
}, 500) }, 500)
} else { } else {
@ -449,7 +443,8 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
} }
private fun queryInAppCoinsProductDetails( private fun queryInAppCoinsProductDetails(
coinsList: List<VePaySettingsBean.CoinsBean> coinsList: List<VePaySettingsBean.CoinsBean>,
type: String
) { ) {
val productDetailsResponseListener = val productDetailsResponseListener =
ProductDetailsResponseListener { billingResult, productDetailsList -> ProductDetailsResponseListener { billingResult, productDetailsList ->
@ -468,7 +463,11 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
} }
coinAdapter?.recyclerView?.postDelayed({ coinAdapter?.recyclerView?.postDelayed({
coinAdapter?.submitList(updatedCoinsList) if (type == "small") {
coinAdapter?.submitList(updatedCoinsList)
} else {
coinBigAdapter?.submitList(updatedCoinsList)
}
}, 500) }, 500)
} else { } else {
hideLoading() hideLoading()
@ -509,10 +508,10 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
} }
} }
} }
val productType: String = if (typeOnClick == 0) { val productType: String = if (typeOnClick == 1) {
BillingClient.ProductType.INAPP
} else {
BillingClient.ProductType.SUBS BillingClient.ProductType.SUBS
} else {
BillingClient.ProductType.INAPP
} }
val inAppProductInfo = ArrayList<QueryProductDetailsParams.Product>() val inAppProductInfo = ArrayList<QueryProductDetailsParams.Product>()
@ -591,12 +590,12 @@ class VeStoreActivity : AIXTextActivity<ActivityVeStoreBinding, VeStoreViewModel
ConsumeResponseListener { billingResult, purchaseToken -> ConsumeResponseListener { billingResult, purchaseToken ->
val vePayBean = VePayBean( val vePayBean = VePayBean(
order_code, order_code,
if (typeOnClick == 0) coinsData?.id.toString() else vipData?.id.toString(), if (typeOnClick == 0) coinsData?.id.toString() else coinsBigData?.id.toString(),
YFHome.getPackageName(), YFHome.getPackageName(),
if (typeOnClick == 0) coinsData?.android_template_id.toString() else vipData?.android_template_id.toString(), if (typeOnClick == 0) coinsData?.android_template_id.toString() else coinsBigData?.android_template_id.toString(),
purchaseToken, purchaseToken,
purchaseData?.orderId.toString(), purchaseData?.orderId.toString(),
if (typeOnClick == 0) coinsData?.price.toString() else vipData?.price.toString() if (typeOnClick == 0) coinsData?.price.toString() else coinsBigData?.price.toString()
) )
payBeanReq = vePayBean payBeanReq = vePayBean
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) { if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {

View File

@ -53,7 +53,7 @@ class VeStoreCoinAdapter :
} else { } else {
holder.binding.tvSelect.visibility = View.GONE holder.binding.tvSelect.visibility = View.GONE
holder.binding.root.setBackgroundResource(R.drawable.bg_store_coin_bg) holder.binding.root.setBackgroundResource(R.mipmap.bg_store_coin_bg)
} }
val sendCoins = item?.send_coins?.toDouble() val sendCoins = item?.send_coins?.toDouble()
if (sendCoins != null) { if (sendCoins != null) {

View File

@ -0,0 +1,74 @@
package com.veloria.now.shortapp.subtractionCroll.modificationsPretch
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter4.BaseQuickAdapter
import com.veloria.now.shortapp.R
import com.veloria.now.shortapp.databinding.ItemVeStoreCoinBigBinding
import com.veloria.now.shortapp.texturedAsink.VePaySettingsBean
import kotlin.math.floor
class VeStoreCoinBigAdapter :
BaseQuickAdapter<VePaySettingsBean.CoinsBean, VeStoreCoinBigAdapter.VH>() {
var currentPosition = -1
class VH(
parent: ViewGroup,
val binding: ItemVeStoreCoinBigBinding = ItemVeStoreCoinBigBinding.inflate(
LayoutInflater.from(parent.context), parent, false
),
) : RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): VH {
return VH(parent)
}
override fun onBindViewHolder(
holder: VH,
position: Int,
item: VePaySettingsBean.CoinsBean?
) {
if (null != item) {
holder.binding.tvCoins.text = "+".plus(item.coins.toString())
holder.binding.tvPrice.text = item.price_google
if (item.send_coins > 0) {
holder.binding.tvBonus.text = "+".plus(item.send_coins).plus(" Bonus")
} else {
holder.binding.tvBonus.text = ""
}
if (item.corner_marker.isNotEmpty()) {
holder.binding.tvHot.visibility = View.VISIBLE
} else {
holder.binding.tvHot.visibility = View.INVISIBLE
}
if (currentPosition == position) {
holder.binding.tvSelect.visibility = View.VISIBLE
holder.binding.root.setBackgroundResource(R.drawable.bg_store_coin_on)
} else {
holder.binding.tvSelect.visibility = View.GONE
holder.binding.root.setBackgroundResource(R.drawable.bg_store_coin_off)
}
val sendCoins = item?.send_coins?.toDouble()
if (sendCoins != null) {
if (sendCoins > 0) {
val coins = item?.coins?.toDouble()
val let = coins?.let { sendCoins?.div(it) }
val times = let?.times(100)
if (times != null) {
val floor = floor(times).toInt()
holder.binding.tvCorner.text = "+".plus(floor).plus("%")
holder.binding.tvCorner.visibility = View.VISIBLE
}
} else {
holder.binding.tvCorner.visibility = View.INVISIBLE
}
}
}
}
}

View File

@ -37,12 +37,33 @@ class VeStoreVipAdapter :
holder.binding.tvDay.text = item.brief holder.binding.tvDay.text = item.brief
holder.binding.tvMoney.text = item.price_google holder.binding.tvMoney.text = item.price_google
holder.binding.tvMoneyDay.text = "/".plus(item.vip_type_key) holder.binding.tvMoneyDay.text = "/".plus(item.vip_type_key)
holder.binding.tvDescription.text = item.description
holder.binding.tvInfo.text = item.auto_sub
if ((item.send_coins ?: 0) > 0) { if ((item.send_coins ?: 0) > 0) {
holder.binding.tvExtra.text = holder.binding.tvExtra.text =
"+".plus(TranslationHelper.getTranslation()?.let { TranslationHelper.getTranslation()?.veloria_extra } ?: "Extra").plus(" ").plus(item.send_coins) "+".plus(
TranslationHelper.getTranslation()
?.let { TranslationHelper.getTranslation()?.veloria_extra } ?: "Extra")
.plus(" ").plus(item.send_coins)
if (TranslationHelper.getTranslation() != null) {
holder.binding.tvExpire.text =
TranslationHelper.getTranslation()?.veloria_donate_expire?.let {
TranslationHelper.replace(
it,
item.send_coin_ttl.toString()
)
}
} else {
holder.binding.tvExpire.text =
"The donate coins will expire in ".plus(item.send_coin_ttl.toString())
.plus(" days")
}
holder.binding.tvExtra.visibility = View.VISIBLE holder.binding.tvExtra.visibility = View.VISIBLE
holder.binding.tvExpire.visibility = View.VISIBLE
} else { } else {
holder.binding.tvExtra.visibility = View.GONE holder.binding.tvExtra.visibility = View.GONE
holder.binding.tvExpire.visibility = View.GONE
} }
if (currentPosition == position) { if (currentPosition == position) {
@ -53,40 +74,56 @@ class VeStoreVipAdapter :
when (item.vip_type_key) { when (item.vip_type_key) {
"week" -> { "month" -> {
holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_1) holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_1)
holder.binding.tvDay.setTextColor(Color.parseColor("#647DA7"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#647DA7"))
holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#647DA7"))
holder.binding.tvExtra.setTextColor(Color.parseColor("#214170"))
holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_1)
holder.binding.tvDescription.setTextColor(Color.parseColor("#303962"))
holder.binding.tvDescription.setBackgroundResource(R.drawable.bg_store_vip_text_1)
holder.binding.tvInfo.setTextColor(Color.parseColor("#8790B7"))
holder.binding.tvExpire.setTextColor(Color.parseColor("#8790B7"))
}
"week" -> {
holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_2)
holder.binding.tvDay.setTextColor(Color.parseColor("#64A3A7")) holder.binding.tvDay.setTextColor(Color.parseColor("#64A3A7"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#64A3A7")) holder.binding.tvMoney.setTextColor(Color.parseColor("#64A3A7"))
holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#64A3A7")) holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#64A3A7"))
holder.binding.tvExtra.setTextColor(Color.parseColor("#416767")) holder.binding.tvExtra.setTextColor(Color.parseColor("#16706A"))
holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_1)
}
"month" -> {
holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_2)
holder.binding.tvDay.setTextColor(Color.parseColor("#9C7565"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#9C7565"))
holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#9C7565"))
holder.binding.tvExtra.setTextColor(Color.parseColor("#573D31"))
holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_2) holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_2)
holder.binding.tvDescription.setTextColor(Color.parseColor("#416767"))
holder.binding.tvDescription.setBackgroundResource(R.drawable.bg_store_vip_text_2)
holder.binding.tvInfo.setTextColor(Color.parseColor("#8AAEA6"))
holder.binding.tvExpire.setTextColor(Color.parseColor("#8AAEA6"))
} }
"quarter" -> { "quarter" -> {
holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_3) holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_3)
holder.binding.tvDay.setTextColor(Color.parseColor("#647DA7")) holder.binding.tvDay.setTextColor(Color.parseColor("#7869FF"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#647DA7")) holder.binding.tvMoney.setTextColor(Color.parseColor("#7869FF"))
holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#647DA7")) holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#7869FF"))
holder.binding.tvExtra.setTextColor(Color.parseColor("#303962")) holder.binding.tvExtra.setTextColor(Color.parseColor("#510087"))
holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_3) holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_3)
holder.binding.tvDescription.setTextColor(Color.parseColor("#5F1EB9"))
holder.binding.tvDescription.setBackgroundResource(R.drawable.bg_store_vip_text_3)
holder.binding.tvInfo.setTextColor(Color.parseColor("#A395D9"))
holder.binding.tvExpire.setTextColor(Color.parseColor("#A395D9"))
} }
"year" -> { "year" -> {
holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_4) holder.binding.root.setBackgroundResource(R.mipmap.iv_store_vip_bg_4)
holder.binding.tvDay.setTextColor(Color.parseColor("#9C6586")) holder.binding.tvDay.setTextColor(Color.parseColor("#573D31"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#9C6586")) holder.binding.tvMoney.setTextColor(Color.parseColor("#573D31"))
holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#9C6586")) holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#573D31"))
holder.binding.tvExtra.setTextColor(Color.parseColor("#674162")) holder.binding.tvExtra.setTextColor(Color.parseColor("#683D00"))
holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_4) holder.binding.tvExtra.setBackgroundResource(R.drawable.bg_store_vip_4)
holder.binding.tvDescription.setTextColor(Color.parseColor("#573D31"))
holder.binding.tvDescription.setBackgroundResource(R.drawable.bg_store_vip_text_4)
holder.binding.tvInfo.setTextColor(Color.parseColor("#AC978D"))
holder.binding.tvExpire.setTextColor(Color.parseColor("#AC978D"))
} }
} }
} }

View File

@ -16,6 +16,7 @@ class VeTranslationBean(
) )
data class Translation( data class Translation(
val veloria_donate_expire : String,
val veloria_not_found_string : String, val veloria_not_found_string : String,
val veloria_not_found : String, val veloria_not_found : String,
val veloria_episode : String, val veloria_episode : String,

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FF9500" />
<corners android:topRightRadius="@dimen/dp_8" android:bottomLeftRadius="@dimen/dp_8" />
</shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFBE55" />
<corners android:topLeftRadius="@dimen/dp_8" android:bottomRightRadius="@dimen/dp_8" />
</shape>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#05CEA0" /> <solid android:color="#8005CEA0" />
<corners android:topRightRadius="@dimen/dp_8" android:bottomLeftRadius="@dimen/dp_8" /> <corners android:topRightRadius="@dimen/dp_8" android:bottomLeftRadius="@dimen/dp_8" />
</shape> </shape>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#3D05CEA0" />
<corners android:bottomRightRadius="@dimen/dp_8" android:bottomLeftRadius="@dimen/dp_8" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:endColor="#E6A87A46" android:startColor="#E6FBF2C7" android:type="linear" />
<corners android:bottomLeftRadius="@dimen/dp_8"
android:bottomRightRadius="@dimen/dp_8"
/>
</shape>
</item>
</selector>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:endColor="#80A87A46" android:startColor="#80FBF2C7" android:type="linear" />
<corners android:radius="@dimen/dp_8" />
</shape>
</item>
</selector>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:endColor="#80A87A46" android:startColor="#80FBF2C7" android:type="linear" />
<corners android:radius="@dimen/dp_8" />
<stroke android:width="@dimen/dp_1" android:color="#FFBE55" />
</shape>
</item>
</selector>

View File

@ -2,8 +2,10 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#B2E7EA" android:type="linear" /> <gradient android:endColor="#7CA1D7" android:startColor="#ADCFFF" android:type="linear" />
<corners android:radius="@dimen/dp_6" /> <corners android:topLeftRadius="@dimen/dp_10"
android:bottomRightRadius="@dimen/dp_10"
/>
</shape> </shape>
</item> </item>
</selector> </selector>

View File

@ -2,8 +2,10 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#FFE6CE" android:type="linear" /> <gradient android:endColor="#7AD9D4" android:startColor="#BDFFFB" android:type="linear" />
<corners android:radius="@dimen/dp_6" /> <corners android:topLeftRadius="@dimen/dp_10"
android:bottomRightRadius="@dimen/dp_10"
/>
</shape> </shape>
</item> </item>
</selector> </selector>

View File

@ -2,8 +2,10 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#D6E5F9" android:type="linear" /> <gradient android:endColor="#975DFF" android:startColor="#DBC7FF" android:type="linear" />
<corners android:radius="@dimen/dp_6" /> <corners android:topLeftRadius="@dimen/dp_10"
android:bottomRightRadius="@dimen/dp_10"
/>
</shape> </shape>
</item> </item>
</selector> </selector>

View File

@ -2,8 +2,10 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item> <item>
<shape android:shape="rectangle"> <shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#FFD8F5" android:type="linear" /> <gradient android:endColor="#A87A46" android:startColor="#FBF2C7" android:type="linear" />
<corners android:radius="@dimen/dp_6" /> <corners android:topLeftRadius="@dimen/dp_10"
android:bottomRightRadius="@dimen/dp_10"
/>
</shape> </shape>
</item> </item>
</selector> </selector>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#D6E5F9" android:type="linear" />
<corners android:radius="@dimen/dp_10" />
</shape>
</item>
</selector>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#B2E7EA" android:type="linear" />
<corners android:radius="@dimen/dp_10" />
</shape>
</item>
</selector>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#CABCFF" android:type="linear" />
<corners android:radius="@dimen/dp_10" />
</shape>
</item>
</selector>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:endColor="@color/transparent" android:startColor="#FFE6CE" android:type="linear" />
<corners android:radius="@dimen/dp_10" />
</shape>
</item>
</selector>

View File

@ -5,286 +5,94 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@mipmap/playfair_selected_gradle"> android:background="@mipmap/playfair_selected_gradle">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:src="@mipmap/iv_store_top"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_160"
android:text="Limited Time Offer"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:text="Recharge &amp; Unlock More"
android:textColor="#CC05CEA0"
android:textSize="@dimen/sp_22"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title_1" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/dp_20"
android:background="@drawable/bg_store_bottom"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title_2">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ll_tab"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_tab_1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@mipmap/iv_store_tab_left"
android:gravity="center"
android:text="VIP"
android:textColor="@color/white"
android:textSize="@dimen/sp_15"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_tab_2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="Coins"
android:textColor="@color/utilsUtils"
android:textSize="@dimen/sp_15" />
</androidx.appcompat.widget.LinearLayoutCompat>
<FrameLayout
android:id="@+id/fl_tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_tab">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_one"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="@dimen/dp_10"
android:paddingTop="@dimen/dp_15"
android:visibility="gone">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_more_coin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_5"
android:drawableStart="@mipmap/start_text"
android:drawablePadding="@dimen/dp_5"
android:text="Get More Coins"
android:textColor="@color/white"
android:textSize="@dimen/sp_15"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_coin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_5"
android:text="0"
android:textColor="@color/ve_be0069"
android:textSize="@dimen/sp_13"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_coin_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dp_5"
android:text="Your Coins:"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintEnd_toStartOf="@+id/tv_coin"
app:layout_constraintTop_toTopOf="parent" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_coin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_12"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_more_coin" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_two"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingHorizontal="@dimen/dp_10"
android:paddingTop="@dimen/dp_15"
android:visibility="visible">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_vip_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_5"
android:drawableStart="@mipmap/iv_store_vip"
android:drawablePadding="@dimen/dp_5"
android:text="Membership Benefits"
android:textColor="@color/white"
android:textSize="@dimen/sp_15"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_vip_content1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_5"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_12"
android:background="@mipmap/iv_store_benefits_bg"
android:ellipsize="end"
android:gravity="center"
android:lineSpacingExtra="@dimen/dp_2"
android:maxLines="3"
android:minLines="3"
android:paddingHorizontal="@dimen/dp_5"
android:paddingBottom="@dimen/dp_15"
android:text="Unlimited access to all series for 1 week (No Ads)"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
app:drawableTopCompat="@mipmap/vertical_selected"
app:layout_constraintEnd_toStartOf="@+id/tv_vip_content2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_vip_text" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_vip_content2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_5"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_12"
android:background="@mipmap/iv_store_benefits_bg"
android:ellipsize="end"
android:gravity="center"
android:lineSpacingExtra="@dimen/dp_2"
android:maxLines="3"
android:minLines="3"
android:paddingHorizontal="@dimen/dp_5"
android:paddingBottom="@dimen/dp_15"
android:text="The donate coins will expire in 8 days"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
app:drawableTopCompat="@mipmap/register___bbfdebaffd_coins"
app:layout_constraintEnd_toStartOf="@+id/tv_vip_content3"
app:layout_constraintStart_toEndOf="@+id/tv_vip_content1"
app:layout_constraintTop_toBottomOf="@+id/tv_vip_text" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_vip_content3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_5"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_12"
android:background="@mipmap/iv_store_benefits_bg"
android:ellipsize="end"
android:gravity="center"
android:lineSpacingExtra="@dimen/dp_2"
android:maxLines="3"
android:minLines="3"
android:paddingHorizontal="@dimen/dp_5"
android:paddingBottom="@dimen/dp_15"
android:text="Auto renew, cancel anytime"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
app:drawableTopCompat="@mipmap/styles_system"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_vip_content2"
app:layout_constraintTop_toBottomOf="@+id/tv_vip_text" />
<com.youth.banner.Banner
android:id="@+id/banner_vip"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_135"
android:layout_marginTop="@dimen/dp_12"
app:banner_auto_loop="false"
app:banner_infinite_loop="false"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_vip_content1"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_tips"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_10"
android:lineSpacingExtra="@dimen/dp_2"
android:text="@string/ve_store_tips"
android:textColor="@color/white50"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/fl_tab" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_back" android:id="@+id/iv_back"
android:layout_width="@dimen/dp_35" android:layout_width="wrap_content"
android:layout_height="@dimen/dp_35" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10" android:layout_marginTop="@dimen/dp_35"
android:layout_marginTop="@dimen/dp_40" android:padding="@dimen/dp_15"
android:padding="@dimen/dp_10" android:src="@mipmap/right_dimens" />
android:src="@mipmap/right_dimens"
/> <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/iv_back"
android:layout_alignBottom="@+id/iv_back"
android:layout_centerHorizontal="true"
android:singleLine="true"
android:text="Store"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/sp_16" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/iv_back">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_vip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_coin_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_10"
android:text="Top Up | Indefinitely use"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintBottom_toTopOf="@+id/recycler_coin_big"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_vip" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_coin_big"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coin_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_coin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_coin_big" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_tips"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_15"
android:lineSpacingExtra="@dimen/dp_2"
android:text="@string/ve_store_tips"
android:textColor="@color/white50"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_coin" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.core.widget.NestedScrollView>
</RelativeLayout> </RelativeLayout>

View File

@ -1,13 +1,11 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ll_item" android:id="@+id/ll_item"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_108" android:layout_height="@dimen/dp_108"
android:background="@drawable/bg_store_coin_bg" android:background="@mipmap/bg_store_coin_bg"
android:orientation="vertical" android:orientation="vertical">
tools:background="@color/black">
<com.hjq.shape.view.ShapeTextView <com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_hot" android:id="@+id/tv_hot"
@ -37,18 +35,17 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/tv_coins" android:id="@+id/tv_coins"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_25" android:layout_marginTop="@dimen/dp_25"
android:drawableEnd="@mipmap/start_text"
android:drawablePadding="@dimen/dp_3"
android:fontFamily="sans-serif-medium" android:fontFamily="sans-serif-medium"
android:text="+500" android:text="+500"
android:textColor="@color/white" android:textColor="@color/white"
android:drawableEnd="@mipmap/start_text"
android:drawablePadding="@dimen/dp_3"
android:textSize="@dimen/sp_16" android:textSize="@dimen/sp_16"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -68,16 +65,17 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_price" android:id="@+id/tv_price"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10" android:background="@drawable/bg_store_coin_money_bottom"
android:gravity="center" android:gravity="center"
android:paddingVertical="@dimen/dp_5"
android:text="" android:text=""
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintTop_toBottomOf="@+id/tv_bonus" />
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/tv_select" android:id="@+id/tv_select"

View File

@ -0,0 +1,93 @@
<?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"
android:id="@+id/ll_item"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_108"
android:background="@drawable/bg_store_coin_off"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/tv_hot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_2"
android:layout_marginTop="@dimen/dp_2"
android:src="@mipmap/iv_store_vip_big_hot"
android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_corner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_coin_big_right"
android:paddingHorizontal="@dimen/dp_2"
android:paddingVertical="@dimen/dp_2"
android:text=""
android:textColor="@color/white"
android:textSize="@dimen/sp_10"
android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_coins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_25"
android:drawableEnd="@mipmap/start_text"
android:drawablePadding="@dimen/dp_3"
android:fontFamily="sans-serif-medium"
android:text="+500"
android:textColor="@color/white"
android:textSize="@dimen/sp_16"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_bonus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:singleLine="true"
android:textColor="#FFC779"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coins" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginHorizontal="@dimen/dp_1"
android:background="@drawable/bg_store_coin_money_bottom_big"
android:gravity="center"
android:paddingVertical="@dimen/dp_5"
android:text=""
android:textColor="#683D00"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_bonus" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/tv_select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/bg_coin_left_big"
android:gravity="center"
android:paddingHorizontal="@dimen/dp_5"
android:src="@mipmap/iv_yes"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,57 +1,95 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rl_layout" android:id="@+id/rl_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_135"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginBottom="@dimen/dp_10"
android:background="@mipmap/iv_store_vip_bg_1"> android:background="@mipmap/iv_store_vip_bg_1">
<TextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_day" android:id="@+id/tv_day"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginStart="@dimen/dp_14" android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_32" android:layout_marginTop="@dimen/dp_20"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="Weekly VIP" android:text="Weekly VIP"
android:textColor="#64A3A7" android:textColor="#647DA7"
android:textSize="@dimen/sp_16" android:textSize="@dimen/sp_12" />
android:textStyle="bold" />
<TextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_money" android:id="@+id/tv_money"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/tv_day" android:layout_below="@+id/tv_day"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginStart="@dimen/dp_14" android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_5"
android:text="0" android:text="0"
android:textColor="#64A3A7" android:textColor="#647DA7"
android:textSize="@dimen/sp_22" android:textSize="@dimen/sp_32"
android:textStyle="bold" /> android:textStyle="bold" />
<TextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_money_day" android:id="@+id/tv_money_day"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignBottom="@+id/tv_money" android:layout_alignBottom="@+id/tv_money"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginBottom="@dimen/dp_3" android:layout_marginBottom="@dimen/dp_6"
android:layout_toEndOf="@+id/tv_money" android:layout_toEndOf="@+id/tv_money"
android:text="/Week" android:text="/Week"
android:textColor="#64A3A7" android:textColor="#647DA7"
android:textSize="@dimen/sp_14" /> android:textSize="@dimen/sp_16" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_money"
android:layout_marginStart="@dimen/dp_14"
android:background="@drawable/bg_store_vip_text_1"
android:paddingHorizontal="@dimen/dp_7"
android:paddingVertical="@dimen/dp_3"
android:singleLine="true"
android:text="Unlimited access to all series for 1 week"
android:textColor="#303962"
android:textSize="@dimen/sp_10" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_description"
android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_2"
android:layout_toStartOf="@+id/tv_extra"
android:singleLine="true"
android:text="Auto renew, cancel anytime"
android:textColor="#8790B7"
android:textSize="@dimen/sp_10" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_expire"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_info"
android:layout_marginStart="@dimen/dp_14"
android:layout_marginTop="@dimen/dp_2"
android:layout_toStartOf="@+id/tv_extra"
android:singleLine="true"
android:text="The donate coins will expire in 8 days"
android:textColor="#8790B7"
android:textSize="@dimen/sp_10" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_extra" android:id="@+id/tv_extra"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/tv_money_day" android:layout_alignParentEnd="true"
android:layout_marginStart="@dimen/dp_15" android:layout_alignParentBottom="true"
android:layout_marginTop="@dimen/dp_8"
android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_store_vip_1" android:background="@drawable/bg_store_vip_1"
android:drawableEnd="@mipmap/start_text" android:drawableEnd="@mipmap/start_text"
android:drawablePadding="@dimen/dp_5" android:drawablePadding="@dimen/dp_5"
@ -59,14 +97,14 @@
android:paddingHorizontal="@dimen/dp_10" android:paddingHorizontal="@dimen/dp_10"
android:paddingVertical="@dimen/dp_3" android:paddingVertical="@dimen/dp_3"
android:text="+Extra 500" android:text="+Extra 500"
android:textColor="#416767" android:textColor="#214170"
android:textSize="@dimen/sp_12" /> android:textSize="@dimen/sp_12" />
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/tv_select" android:id="@+id/tv_select"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_18" android:layout_marginTop="@dimen/dp_10"
android:background="@drawable/bg_coin_left" android:background="@drawable/bg_coin_left"
android:gravity="center" android:gravity="center"
android:paddingHorizontal="@dimen/dp_8" android:paddingHorizontal="@dimen/dp_8"

View File

@ -1,104 +1,114 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@mipmap/strings_layout"> android:background="@mipmap/strings_layout">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginEnd="@dimen/dp_15"
android:padding="10dp"
android:src="@mipmap/banner_bean"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_coins_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/your_coins"
android:textColor="@color/white"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_coins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/tv_coins_text"
android:layout_marginStart="@dimen/dp_5"
android:layout_toRightOf="@+id/tv_coins_text"
android:drawablePadding="@dimen/dp_2"
android:gravity="center_vertical"
android:text=""
android:textColor="#05CEA0"
app:drawableEndCompat="@mipmap/start_text"
app:layout_constraintBottom_toBottomOf="@+id/tv_coins_text"
app:layout_constraintStart_toEndOf="@+id/tv_coins_text"
app:layout_constraintTop_toTopOf="@+id/tv_coins_text" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:layout_below="@+id/iv_close_dialog"
android:layout_marginTop="@dimen/dp_7">
<TextView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/tv_coins_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_42"
android:text="@string/your_coins"
android:textColor="@color/white"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_coins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_5"
android:drawablePadding="@dimen/dp_2"
android:gravity="center_vertical"
android:text=""
android:textColor="#05CEA0"
app:drawableEndCompat="@mipmap/start_text"
app:layout_constraintBottom_toBottomOf="@+id/tv_coins_text"
app:layout_constraintStart_toEndOf="@+id/tv_coins_text"
app:layout_constraintTop_toTopOf="@+id/tv_coins_text" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close_dialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_15"
android:padding="10dp"
android:src="@mipmap/banner_bean"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.youth.banner.Banner
android:id="@+id/banner_vip"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/dp_135" android:layout_height="match_parent">
android:layout_marginTop="@dimen/dp_12"
android:visibility="gone"
app:banner_auto_loop="false"
app:banner_infinite_loop="false"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coins_text"
/>
<androidx.appcompat.widget.AppCompatTextView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/tv_buy_hint" android:id="@+id/recycler_vip"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_15" app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="@dimen/dp_10" app:layout_constraintTop_toTopOf="parent" />
android:background="@drawable/bg_player_buy_hint"
android:visibility="gone"
android:lineSpacingExtra="@dimen/dp_5"
android:paddingHorizontal="@dimen/dp_15"
android:paddingVertical="@dimen/dp_10"
android:text="@string/unlimited_access_to_all_series_for_1"
android:textColor="@color/white80"
android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/banner_vip" />
<androidx.recyclerview.widget.RecyclerView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/recycler_coin" android:id="@+id/tv_coin_title"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15" android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_15" android:layout_marginTop="@dimen/dp_10"
app:layout_constraintStart_toStartOf="parent" android:text="Top Up | Indefinitely use"
app:layout_constraintTop_toBottomOf="@+id/tv_buy_hint" /> android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintBottom_toTopOf="@+id/recycler_coin_big"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_vip" />
<androidx.appcompat.widget.AppCompatTextView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/tv_tips" android:id="@+id/recycler_coin_big"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_15" android:layout_marginHorizontal="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_12" android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_15" app:layout_constraintStart_toStartOf="parent"
android:lineSpacingExtra="@dimen/dp_2" app:layout_constraintTop_toBottomOf="@+id/tv_coin_title" />
android:text="@string/ve_store_tips"
android:textColor="@color/white50"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_coin" />
</androidx.constraintlayout.widget.ConstraintLayout> <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_coin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_coin_big" />
</androidx.core.widget.NestedScrollView> <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_tips"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_12"
android:layout_marginBottom="@dimen/dp_15"
android:lineSpacingExtra="@dimen/dp_2"
android:text="@string/ve_store_tips"
android:textColor="@color/white50"
android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_coin" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</RelativeLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB