mireo 1.2.4

This commit is contained in:
yuyl 2025-06-20 16:14:56 +08:00
parent 02ffc22f4e
commit 933350c7a9
29 changed files with 850 additions and 606 deletions

View File

@ -16,6 +16,9 @@ class TranslatesBean(
) )
data class Translates( data class Translates(
val mireo_unlock: String,
val mireo_bonus_count_text: String,
val mrieo_store_vip_title: String,
val mireo_order_record: String, val mireo_order_record: String,
val mireo_activate_vip_content: String, val mireo_activate_vip_content: String,
val mireo_activate_vip_title: String, val mireo_activate_vip_title: String,

View File

@ -91,6 +91,7 @@ object MsConstants {
const val CONSTANTS_web_notification = "CONSTANTS_web_notification" const val CONSTANTS_web_notification = "CONSTANTS_web_notification"
const val CONSTANTS_SEARCH_STRING = "CONSTANTS_SEARCH_STRING" const val CONSTANTS_SEARCH_STRING = "CONSTANTS_SEARCH_STRING"
const val CONSTANTS_PREF_LAST_POPUP_TIME_VIP = "CONSTANTS_PREF_LAST_POPUP_TIME_VIP" const val CONSTANTS_PREF_LAST_POPUP_TIME_VIP = "CONSTANTS_PREF_LAST_POPUP_TIME_VIP"
const val CONSTANTS_PAY_REFRESH_DISMISS = "CONSTANTS_PAY_REFRESH_DISMISS"
} }

View File

@ -347,6 +347,7 @@ class HomeActivity : AppActivity(), NavigationAdapter.OnNavigationListener,
) )
} }
}) })
GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this) GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this)
.addOnCompleteListener { .addOnCompleteListener {
if (it.isSuccessful) { if (it.isSuccessful) {

View File

@ -167,8 +167,8 @@ class LanguageSwitchActivity : AppActivity(), StatusAction {
.request(object : HttpCallbackProxy<HttpData<TranslatesBean>>(this) { .request(object : HttpCallbackProxy<HttpData<TranslatesBean>>(this) {
override fun onHttpSuccess(result: HttpData<TranslatesBean>) { override fun onHttpSuccess(result: HttpData<TranslatesBean>) {
result.getData()?.let { result.getData()?.let {
MsMMKVUtils.getMMKV() // MsMMKVUtils.getMMKV()
.putString(MsConstants.Constants_Main_Video_info, "") // .putString(MsConstants.Constants_Main_Video_info, "")
lifecycleScope.launch { lifecycleScope.launch {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
TranslatesUtils.saveTranslates(it.translates) TranslatesUtils.saveTranslates(it.translates)

View File

@ -1,10 +1,12 @@
package com.localee.mireo.app.ui.activity package com.localee.mireo.app.ui.activity
import android.graphics.Rect
import android.os.Build import android.os.Build
import android.text.Html import android.text.Html
import android.view.View import android.view.View
import android.widget.TextView import android.widget.TextView
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager 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
@ -40,6 +42,7 @@ import com.localee.mireo.app.http.model.HttpData
import com.localee.mireo.app.other.AppConfig import com.localee.mireo.app.other.AppConfig
import com.localee.mireo.app.other.Logger import com.localee.mireo.app.other.Logger
import com.localee.mireo.app.ui.adapter.MyCoinBuyAdapter import com.localee.mireo.app.ui.adapter.MyCoinBuyAdapter
import com.localee.mireo.app.ui.adapter.MyCoinBuyBigAdapter
import com.localee.mireo.app.ui.adapter.MyVipBuyAdapter import com.localee.mireo.app.ui.adapter.MyVipBuyAdapter
import com.localee.mireo.app.utils.DHStringUtils.getPublicRequest import com.localee.mireo.app.utils.DHStringUtils.getPublicRequest
import com.localee.mireo.app.utils.MsMMKVUtils import com.localee.mireo.app.utils.MsMMKVUtils
@ -56,24 +59,16 @@ import kotlinx.coroutines.launch
class StoreActivity : AppActivity() { class StoreActivity : AppActivity() {
private val title: TitleBar? by lazy { findViewById(R.id.title) } private val title: TitleBar? by lazy { findViewById(R.id.title) }
private val tvCoins: TextView? by lazy { findViewById(R.id.tv_coins) } private val recyclerCoinBig: RecyclerView? by lazy { findViewById(R.id.recycler_coin_big) }
private val recyclerCoin: RecyclerView? by lazy { findViewById(R.id.recycler_coin) } private val recyclerCoin: RecyclerView? by lazy { findViewById(R.id.recycler_coin) }
private val recyclerView: RecyclerView? by lazy { findViewById(R.id.recyclerView) } private val recyclerView: RecyclerView? by lazy { findViewById(R.id.recyclerView) }
private val tvBuy: TextView? by lazy { findViewById(R.id.tv_buy) } private val tvTitle: TextView? by lazy { findViewById(R.id.tv_title) }
private val tvVipExpires: TextView? by lazy { findViewById(R.id.tv_vip_expires) } private val tvTitleVip: TextView? by lazy { findViewById(R.id.tv_title_vip) }
private val tvName: TextView? by lazy { findViewById(R.id.tv_name) }
private val tvCoinRecharge: TextView? by lazy { findViewById(R.id.tv_coin_recharge) }
private val tvCoinsText: TextView? by lazy { findViewById(R.id.tv_coins_text) }
private val tvMemberTitle: TextView? by lazy { findViewById(R.id.tv_member_title) }
private val tvMembership: TextView? by lazy { findViewById(R.id.tv_membership) }
private val tvMember1: TextView? by lazy { findViewById(R.id.tv_member_1) }
private val tvMember2: TextView? by lazy { findViewById(R.id.tv_member_2) }
private val tvMember3: TextView? by lazy { findViewById(R.id.tv_member_3) }
private val tvMember4: TextView? by lazy { findViewById(R.id.tv_member_4) }
private val tvHint: TextView? by lazy { findViewById(R.id.tv_hint) } private val tvHint: TextView? by lazy { findViewById(R.id.tv_hint) }
private var mAdapter: MyVipBuyAdapter? = null private var mAdapter: MyVipBuyAdapter? = null
private var mCoinAdapter: MyCoinBuyAdapter? = null private var mCoinAdapter: MyCoinBuyAdapter? = null
private var mCoinBigAdapter: MyCoinBuyBigAdapter? = null
private var type = 0 private var type = 0
private var billingClient: BillingClient? = null private var billingClient: BillingClient? = null
@ -82,6 +77,7 @@ class StoreActivity : AppActivity() {
private var order_code = "" private var order_code = ""
private var vipData: PaySettingsBean.Vip? = null private var vipData: PaySettingsBean.Vip? = null
private var coinsData: PaySettingsBean.Coins? = null private var coinsData: PaySettingsBean.Coins? = null
private var coinsDataBig: PaySettingsBean.Coins? = null
private var payReq: PayBean? = null private var payReq: PayBean? = null
private val scope = CoroutineScope(Dispatchers.Main) private val scope = CoroutineScope(Dispatchers.Main)
@ -96,17 +92,8 @@ class StoreActivity : AppActivity() {
if (TranslatesUtils.translates() != null) { if (TranslatesUtils.translates() != null) {
title?.setTitle(TranslatesUtils.translates()?.mireo_store) title?.setTitle(TranslatesUtils.translates()?.mireo_store)
title?.setRightTitle(TranslatesUtils.translates()?.mireo_restore) title?.setRightTitle(TranslatesUtils.translates()?.mireo_restore)
tvName?.text = TranslatesUtils.translates()?.mireo_store_recharge_discount tvTitle?.text = TranslatesUtils.translates()?.mireo_coin_recharege
tvVipExpires?.text = TranslatesUtils.translates()?.mireo_store_limited tvTitleVip?.text = TranslatesUtils.translates()?.mrieo_store_vip_title
tvCoinRecharge?.text = TranslatesUtils.translates()?.mireo_coin_recharege
tvCoinsText?.text = TranslatesUtils.translates()?.mireo_store_coins
tvMemberTitle?.text = TranslatesUtils.translates()?.mireo_store_benefits
tvMembership?.text = TranslatesUtils.translates()?.mireo_store_recharge
tvMember1?.text = TranslatesUtils.translates()?.mireo_store_ad_free
tvMember2?.text = TranslatesUtils.translates()?.mireo_store_exclusive
tvMember3?.text = TranslatesUtils.translates()?.mireo_store_free_coins
tvMember4?.text = TranslatesUtils.translates()?.mireo_store_only
tvBuy?.text = TranslatesUtils.translates()?.mireo_buy_now
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
tvHint?.text = Html.fromHtml( tvHint?.text = Html.fromHtml(
TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips), TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips),
@ -122,33 +109,83 @@ class StoreActivity : AppActivity() {
recyclerCoin?.layoutManager = recyclerCoin?.layoutManager =
LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
recyclerView?.layoutManager = recyclerCoin?.layoutManager = GridLayoutManager(this, 3)
recyclerCoin?.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()
}
})
recyclerCoinBig?.layoutManager =
LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
recyclerCoinBig?.layoutManager = GridLayoutManager(this, 2)
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()
}
})
mCoinAdapter = MyCoinBuyAdapter() mCoinAdapter = MyCoinBuyAdapter()
recyclerCoin?.adapter = mCoinAdapter recyclerCoin?.adapter = mCoinAdapter
recyclerView?.layoutManager = LinearLayoutManager(this)
mAdapter = MyVipBuyAdapter() mAdapter = MyVipBuyAdapter()
recyclerView?.adapter = mAdapter recyclerView?.adapter = mAdapter
mCoinBigAdapter = MyCoinBuyBigAdapter()
recyclerCoinBig?.adapter = mCoinBigAdapter
mCoinAdapter?.setOnItemClickListener { adapter, view, position ->
if (type == 1) {
mAdapter?.currentPosition = -1
mAdapter?.notifyDataSetChanged()
}
type = 0
mCoinAdapter?.currentPosition = position
mCoinAdapter?.notifyDataSetChanged()
}
mAdapter?.setOnItemClickListener { adapter, view, position -> mAdapter?.setOnItemClickListener { adapter, view, position ->
if (type == 0) { if (type != 1) {
mCoinAdapter?.currentPosition = -1 mCoinAdapter?.currentPosition = -1
mCoinAdapter?.notifyDataSetChanged() mCoinAdapter?.notifyDataSetChanged()
mCoinBigAdapter?.currentPosition = -1
mCoinBigAdapter?.notifyDataSetChanged()
} }
type = 1 type = 1
mAdapter?.currentPosition = position mAdapter?.currentPosition = position
mAdapter?.notifyDataSetChanged() mAdapter?.notifyDataSetChanged()
setOnPayNowClick()
}
mCoinAdapter?.setOnItemClickListener { adapter, view, position ->
if (type != 0) {
mAdapter?.currentPosition = -1
mAdapter?.notifyDataSetChanged()
mCoinBigAdapter?.currentPosition = -1
mCoinBigAdapter?.notifyDataSetChanged()
}
type = 0
mCoinAdapter?.currentPosition = position
mCoinAdapter?.notifyDataSetChanged()
setOnPayNowClick()
}
mCoinBigAdapter?.setOnItemClickListener { adapter, view, position ->
if (type != 2) {
mAdapter?.currentPosition = -1
mAdapter?.notifyDataSetChanged()
mCoinAdapter?.currentPosition = -1
mCoinAdapter?.notifyDataSetChanged()
}
type = 2
mCoinBigAdapter?.currentPosition = position
mCoinBigAdapter?.notifyDataSetChanged()
setOnPayNowClick()
} }
title?.setOnTitleBarListener(object : OnTitleBarListener { title?.setOnTitleBarListener(object : OnTitleBarListener {
@ -183,28 +220,10 @@ class StoreActivity : AppActivity() {
} }
}) })
setUI()
initPay() initPay()
} }
private fun setUI() { fun setOnPayNowClick() {
tvCoins?.text = MsMMKVUtils.getAllCoin().toString()
}
override fun initData() {
getPaySettings(null, null)
tvBuy?.setOnClickListener {
if (mAdapter?.currentPosition == -1 && mCoinAdapter?.currentPosition == -1) {
if (TranslatesUtils.translates() != null) {
toast(TranslatesUtils.translates()?.mireo_select_a_payment_item.toString())
} else {
toast(getString(R.string.select_a_payment_item))
}
return@setOnClickListener
}
singleClick { singleClick {
if (!isConnect) { if (!isConnect) {
if (TranslatesUtils.translates() != null) { if (TranslatesUtils.translates() != null) {
@ -216,13 +235,25 @@ class StoreActivity : AppActivity() {
} }
if (type == 0) { if (type == 0) {
coinsData = coinsData =
mCoinAdapter!!.getItem(mCoinAdapter!!.currentPosition) as PaySettingsBean.Coins mCoinAdapter?.getItem(mCoinAdapter!!.currentPosition) as PaySettingsBean.Coins
} else if (type == 1) {
vipData =
mAdapter?.getItem(mAdapter!!.currentPosition) as PaySettingsBean.Vip
} else { } else {
vipData = mAdapter!!.getItem(mAdapter!!.currentPosition) as PaySettingsBean.Vip coinsDataBig =
mCoinBigAdapter?.getItem(mCoinBigAdapter!!.currentPosition) as PaySettingsBean.Coins
}
var idStr = ""
if (type == 0) {
idStr = coinsData?.id.toString()
} else if (type == 1) {
idStr = vipData?.id.toString()
} else {
idStr = coinsDataBig?.id.toString()
} }
getCreateOrder( getCreateOrder(
CreateOrderReqBean( CreateOrderReqBean(
if (type == 0) coinsData?.id.toString() else vipData?.id.toString(), idStr,
"google", "google",
0, 0,
0 0
@ -231,6 +262,10 @@ class StoreActivity : AppActivity() {
} }
} }
override fun initData() {
getPaySettings(null, null)
} }
private fun getPaySettings(shortPlayId: Int?, videoId: Int?) { private fun getPaySettings(shortPlayId: Int?, videoId: Int?) {
@ -242,11 +277,45 @@ class StoreActivity : AppActivity() {
.request(object : HttpCallbackProxy<HttpData<PaySettingsBean>>(this) { .request(object : HttpCallbackProxy<HttpData<PaySettingsBean>>(this) {
override fun onHttpSuccess(result: HttpData<PaySettingsBean>) { override fun onHttpSuccess(result: HttpData<PaySettingsBean>) {
result.getData()?.let { result.getData()?.let {
mCoinAdapter?.submitList(it.list_coins) if (it.list_sub_vip.isNotEmpty()) {
mAdapter?.submitList(it.list_sub_vip) mAdapter?.submitList(it.list_sub_vip)
recyclerView?.visibility = View.VISIBLE
tvTitleVip?.visibility = View.VISIBLE
it.list_sub_vip.let { it1 -> querySubProductDetails(it1) }
} else {
recyclerView?.visibility = View.GONE
tvTitleVip?.visibility = View.GONE
}
if (it.list_coins.isNotEmpty()) {
val small = it.list_coins.filter { coins -> coins.size == "small" }
val big = it.list_coins.filter { coins -> coins.size == "big" }
if (small.isNotEmpty()) {
mCoinAdapter?.submitList(small)
recyclerCoin?.visibility = View.VISIBLE
} else {
recyclerCoin?.visibility = View.GONE
}
if (big.isNotEmpty()) {
mCoinBigAdapter?.submitList(big)
recyclerCoinBig?.visibility = View.VISIBLE
} else {
recyclerCoinBig?.visibility = View.GONE
}
if (small?.isNotEmpty() == true) {
small?.let { it1 -> queryInAppProductDetails(it1, "small") }
}
if (big?.isNotEmpty() == true) {
big?.let { it1 -> queryInAppProductDetails(it1, "big") }
}
tvTitle?.visibility = View.VISIBLE
} else {
recyclerCoin?.visibility = View.GONE
recyclerCoinBig?.visibility = View.GONE
tvTitle?.visibility = View.GONE
}
it.list_sub_vip?.let { it1 -> querySubProductDetails(it1) }
it.list_coins?.let { it1 -> queryInAppProductDetails(it1) }
} }
} }
}) })
@ -260,10 +329,10 @@ class StoreActivity : AppActivity() {
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 (type == 0) { if (type == 1) {
consumePurchase(purchase)
} else {
consumePurchaseSub(purchase) consumePurchaseSub(purchase)
} else {
consumePurchase(purchase)
} }
} }
} }
@ -405,7 +474,8 @@ class StoreActivity : AppActivity() {
} }
private fun queryInAppProductDetails( private fun queryInAppProductDetails(
coinsList: List<PaySettingsBean.Coins> coinsList: List<PaySettingsBean.Coins>,
type: String
) { ) {
val productDetailsResponseListener = val productDetailsResponseListener =
ProductDetailsResponseListener { billingResult, productDetailsList -> ProductDetailsResponseListener { billingResult, productDetailsList ->
@ -424,7 +494,11 @@ class StoreActivity : AppActivity() {
} }
mCoinAdapter?.recyclerView?.postDelayed({ mCoinAdapter?.recyclerView?.postDelayed({
if (type == "small") {
mCoinAdapter?.submitList(updatedCoinsList) mCoinAdapter?.submitList(updatedCoinsList)
} else {
mCoinBigAdapter?.submitList(updatedCoinsList)
}
}, 500) }, 500)
} else { } else {
hideDialog() hideDialog()
@ -465,10 +539,10 @@ class StoreActivity : AppActivity() {
} }
} }
} }
val productType: String = if (type == 0) { val productType: String = if (type == 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>()
@ -541,8 +615,10 @@ class StoreActivity : AppActivity() {
order_code = it.order_code.toString() order_code = it.order_code.toString()
if (type == 0) { if (type == 0) {
coinsData?.android_template_id?.let { it1 -> getProduct(it1) } coinsData?.android_template_id?.let { it1 -> getProduct(it1) }
} else { } else if (type == 1) {
vipData?.android_template_id?.let { it1 -> getProduct(it1) } vipData?.android_template_id?.let { it1 -> getProduct(it1) }
} else {
coinsDataBig?.android_template_id?.let { it1 -> getProduct(it1) }
} }
} ?: run { } ?: run {
@ -646,12 +722,12 @@ class StoreActivity : AppActivity() {
ConsumeResponseListener { billingResult, purchaseToken -> ConsumeResponseListener { billingResult, purchaseToken ->
val examplePayReq = PayBean( val examplePayReq = PayBean(
order_code, order_code,
if (type == 0) coinsData?.id.toString() else vipData?.id.toString(), if (type == 0) coinsData?.id.toString() else coinsDataBig?.id.toString(),
AppConfig.getPackageName(), AppConfig.getPackageName(),
if (type == 0) coinsData?.android_template_id.toString() else vipData?.android_template_id.toString(), if (type == 0) coinsData?.android_template_id.toString() else coinsDataBig?.android_template_id.toString(),
purchaseToken, purchaseToken,
purchaseData?.orderId.toString(), purchaseData?.orderId.toString(),
if (type == 0) coinsData?.price.toString() else vipData?.price.toString() if (type == 0) coinsData?.price.toString() else coinsDataBig?.price.toString()
) )
payReq = examplePayReq payReq = examplePayReq
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) { if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
@ -674,7 +750,6 @@ class StoreActivity : AppActivity() {
override fun onHttpSuccess(result: HttpData<UserInfoRes>) { override fun onHttpSuccess(result: HttpData<UserInfoRes>) {
result.getData()?.let { result.getData()?.let {
MsMMKVUtils.saveUserInfo(it) MsMMKVUtils.saveUserInfo(it)
setUI()
} }
} }
}) })

View File

@ -91,6 +91,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
private var first: Boolean = true private var first: Boolean = true
private var play: Boolean = true private var play: Boolean = true
private var isBuyDialog: Boolean = false
private var qualityRefresh: Boolean = false private var qualityRefresh: Boolean = false
private var needRefresh: Boolean = false private var needRefresh: Boolean = false
private var needRestart: Boolean = false private var needRestart: Boolean = false
@ -99,6 +100,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
// private val exampleRecommendViewModel by lazy { ViewModelProvider(this)[ExampleRecommendViewModel::class.java] } // private val exampleRecommendViewModel by lazy { ViewModelProvider(this)[ExampleRecommendViewModel::class.java] }
private var currentPage = 1 private var currentPage = 1
private val currentSize = 10 private val currentSize = 10
private var notLockPosition = 0
private var currentPosition = 0 private var currentPosition = 0
private var bannerPosition = 0 private var bannerPosition = 0
private var recommendAdapter: VideoPlayAdapter? = null private var recommendAdapter: VideoPlayAdapter? = null
@ -338,6 +340,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
detailPlayerView()?.pause() detailPlayerView()?.pause()
}, 500) }, 500)
} else { } else {
notLockPosition = position + 1
MsConstants.ExampleLock = false MsConstants.ExampleLock = false
viewLock?.visibility = View.INVISIBLE viewLock?.visibility = View.INVISIBLE
createHistory( createHistory(
@ -412,10 +415,13 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
super.onResume() super.onResume()
if (!play) { if (!play) {
detailPlayerView()?.play() detailPlayerView()?.play()
player?.play()
} else { } else {
if (!isBuyDialog) {
play = false play = false
} }
} }
}
private fun qualityLogic() { private fun qualityLogic() {
if (qualityRefresh) { if (qualityRefresh) {
@ -433,7 +439,10 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
MsConstants.ExampleIsCurrentPage = false MsConstants.ExampleIsCurrentPage = false
srRecommend?.postDelayed({ detailPlayerView()?.pause() }, 300) srRecommend?.postDelayed({
detailPlayerView()?.pause()
player?.pause()
}, 300)
} }
fun getVideoDetails( fun getVideoDetails(
@ -746,6 +755,9 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
if (MsConstants.CONSTANTS_start_play == event) { if (MsConstants.CONSTANTS_start_play == event) {
viewLock?.postDelayed({ detailPlayerView()?.play() }, 500) viewLock?.postDelayed({ detailPlayerView()?.play() }, 500)
} }
if (MsConstants.CONSTANTS_PAY_REFRESH_DISMISS == event) {
isBuyDialog = false
}
} }
override fun collection(episode: VideoDetailsApi.Bean.Episode) { override fun collection(episode: VideoDetailsApi.Bean.Episode) {
@ -970,6 +982,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
supportFragmentManager, supportFragmentManager,
"ExampleRechargeDialogFragment" "ExampleRechargeDialogFragment"
) )
isBuyDialog = true
play = true play = true
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
@ -1142,7 +1155,6 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
it.short_play_video_id it.short_play_video_id
) )
) )
}
val toJson = Gson().toJson( val toJson = Gson().toJson(
shortPlayId?.let { it1 -> shortPlayId?.let { it1 ->
HomeDataHistoryBean( HomeDataHistoryBean(
@ -1157,6 +1169,22 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle
.putString(MsConstants.Constants_Main_Video_info, toJson) .putString(MsConstants.Constants_Main_Video_info, toJson)
MsMMKVUtils.getMMKV() MsMMKVUtils.getMMKV()
.putBoolean(MsConstants.Constants_Main_Video_status, true) .putBoolean(MsConstants.Constants_Main_Video_status, true)
} else {
val toJson = Gson().toJson(
shortPlayId?.let { it1 ->
HomeDataHistoryBean(
shortVideo?.name.toString(),
it1,
notLockPosition.toString(),
shortVideo?.image_url.toString()
)
}
)
MsMMKVUtils.getMMKV()
.putString(MsConstants.Constants_Main_Video_info, toJson)
MsMMKVUtils.getMMKV()
.putBoolean(MsConstants.Constants_Main_Video_status, true)
}
} }
} }
} }

View File

@ -8,6 +8,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter4.BaseQuickAdapter import com.chad.library.adapter4.BaseQuickAdapter
import com.localee.mireo.shortapp.databinding.ItemCoinBuyBinding import com.localee.mireo.shortapp.databinding.ItemCoinBuyBinding
import com.localee.mireo.app.http.bean.PaySettingsBean import com.localee.mireo.app.http.bean.PaySettingsBean
import com.localee.mireo.app.utils.TranslatesUtils
import kotlin.math.floor import kotlin.math.floor
class MyCoinBuyAdapter : BaseQuickAdapter<PaySettingsBean.Coins, MyCoinBuyAdapter.VH>() { class MyCoinBuyAdapter : BaseQuickAdapter<PaySettingsBean.Coins, MyCoinBuyAdapter.VH>() {
@ -29,6 +30,11 @@ class MyCoinBuyAdapter : BaseQuickAdapter<PaySettingsBean.Coins, MyCoinBuyAdapte
if (null != item) { if (null != item) {
holder.binding.tvCoins.text = "+" + item.coins.toString() holder.binding.tvCoins.text = "+" + item.coins.toString()
holder.binding.tvPrice.text = item.price_google holder.binding.tvPrice.text = item.price_google
if (item.send_coins > 0) {
holder.binding.tvBonus.text = "+".plus(item.send_coins)
} else {
holder.binding.tvBonus.text = ""
}
if (item.corner_marker.isNotEmpty()) { if (item.corner_marker.isNotEmpty()) {
holder.binding.tvHot.text = item.corner_marker holder.binding.tvHot.text = item.corner_marker
holder.binding.tvHot.visibility = View.VISIBLE holder.binding.tvHot.visibility = View.VISIBLE

View File

@ -0,0 +1,73 @@
package com.localee.mireo.app.ui.adapter
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.localee.mireo.app.http.bean.PaySettingsBean
import com.localee.mireo.shortapp.databinding.ItemCoinBuyBigBinding
import kotlin.math.floor
class MyCoinBuyBigAdapter : BaseQuickAdapter<PaySettingsBean.Coins, MyCoinBuyBigAdapter.VH>() {
var currentPosition = -1
class VH(
parent: ViewGroup,
val binding: ItemCoinBuyBigBinding = ItemCoinBuyBigBinding.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: PaySettingsBean.Coins?) {
if (null != item) {
holder.binding.tvCoins.text = "+" + item.coins.toString()
holder.binding.tvPrice.text = item.price_google
if (item.send_coins > 0) {
holder.binding.tvBonus.text = "+".plus(item.send_coins)
} else {
holder.binding.tvBonus.text = ""
}
if (item.corner_marker.isNotEmpty()) {
holder.binding.tvHot.visibility = View.VISIBLE
} else {
holder.binding.tvHot.visibility = View.INVISIBLE
}
holder.binding.tvPrice.shapeDrawableBuilder?.setSolidGradientColors(
0xFFFFD280.toInt(),
0xFFFF9333.toInt()
)
?.intoBackground()
if (currentPosition == position) {
holder.binding.root.shapeDrawableBuilder?.setStrokeColor(0xFFFFB06A.toInt())
?.setStrokeSize(1)
?.intoBackground()
} else {
holder.binding.root.shapeDrawableBuilder?.setStrokeColor(0x40FFFFFF.toInt())
?.setStrokeSize(1)
?.intoBackground()
}
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

@ -32,30 +32,29 @@ class MyVipBuyAdapter : BaseQuickAdapter<PaySettingsBean.Vip, MyVipBuyAdapter.VH
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.tvDes.text = item.description holder.binding.tvDes.text = item.description
holder.binding.tvInfo.text = item.auto_sub // if (item.corner_marker.isNotEmpty()) {
if (item.corner_marker.isNotEmpty()) { // holder.binding.tvHot.text = item.corner_marker
holder.binding.tvHot.text = item.corner_marker // holder.binding.tvHot.visibility = View.VISIBLE
holder.binding.tvHot.visibility = View.VISIBLE // } else {
} else { // holder.binding.tvHot.visibility = View.INVISIBLE
holder.binding.tvHot.visibility = View.INVISIBLE // }
}
if ((item?.send_coins ?: 0) > 0) { if ((item?.send_coins ?: 0) > 0) {
holder.binding.tvExtra.text = holder.binding.tvExtra.text =
"+ ".plus(TranslatesUtils.translates()?.mireo_extra).plus(" ") "+ ".plus(TranslatesUtils.translates()?.mireo_extra).plus(" ")
.plus(item?.send_coins) .plus(item?.send_coins)
holder.binding.tvExpire.text = // holder.binding.tvExpire.text =
TranslatesUtils.translates()?.mireo_donate_expire?.let { // TranslatesUtils.translates()?.mireo_donate_expire?.let {
TranslatesUtils.replace( // TranslatesUtils.replace(
it, // it,
item?.send_coin_ttl.toString() // item?.send_coin_ttl.toString()
) // )
} // }
holder.binding.llExtra.visibility = View.VISIBLE holder.binding.llExtra.visibility = View.VISIBLE
holder.binding.tvExpire.visibility = View.VISIBLE // holder.binding.tvExpire.visibility = View.VISIBLE
} else { } else {
holder.binding.llExtra.visibility = View.GONE holder.binding.llExtra.visibility = View.GONE
holder.binding.tvExpire.visibility = View.GONE // holder.binding.tvExpire.visibility = View.GONE
} }
holder.binding.tvMoneyDay.text = "/".plus(item?.short_type) holder.binding.tvMoneyDay.text = "/".plus(item?.short_type)
@ -63,57 +62,65 @@ class MyVipBuyAdapter : BaseQuickAdapter<PaySettingsBean.Vip, MyVipBuyAdapter.VH
when (item.vip_type_key) { when (item.vip_type_key) {
"week" -> { "week" -> {
holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_week_bg) holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_week_bg)
holder.binding.tvDay.setTextColor(Color.parseColor("#712B2B")) holder.binding.tvDay.setTextColor(Color.parseColor("#2493A4"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#712B2B")) holder.binding.tvMoney.setTextColor(Color.parseColor("#2493A4"))
holder.binding.tvDes.setTextColor(Color.parseColor("#712B2B")) holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#2493A4"))
holder.binding.tvDes.setTextColor(Color.parseColor("#006574"))
holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors(
0xFFFFCDCB.toInt(), 0xFFA3F3FF.toInt(),
0x00000000 0x00000000
) )
?.intoBackground() ?.intoBackground()
holder.binding.tvExpire.setTextColor(Color.parseColor("#6CADB7"))
} }
"month" -> { "month" -> {
holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_month_bg) holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_month_bg)
holder.binding.tvDay.setTextColor(Color.parseColor("#714F00")) holder.binding.tvDay.setTextColor(Color.parseColor("#712B2B"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#714F00")) holder.binding.tvMoney.setTextColor(Color.parseColor("#712B2B"))
holder.binding.tvDes.setTextColor(Color.parseColor("#714F00")) holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#712B2B"))
holder.binding.tvDes.setTextColor(Color.parseColor("#712B2B"))
holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors(
0xFFFFEAC9.toInt(), 0xFFFFADAD.toInt(),
0x00000000 0x00000000
) )
?.intoBackground() ?.intoBackground()
holder.binding.tvExpire.setTextColor(Color.parseColor("#A66969"))
} }
"quarter" -> { "quarter" -> {
holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_quarter_bg) holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_quarter_bg)
holder.binding.tvDay.setTextColor(Color.parseColor("#472B71")) holder.binding.tvDay.setTextColor(Color.parseColor("#532C8D"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#472B71")) holder.binding.tvMoney.setTextColor(Color.parseColor("#532C8D"))
holder.binding.tvDes.setTextColor(Color.parseColor("#472B71")) holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#532C8D"))
holder.binding.tvDes.setTextColor(Color.parseColor("#532C8D"))
holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors(
0xFFE6D8FF.toInt(), 0xFFD2B4FF.toInt(),
0x00000000 0x00000000
) )
?.intoBackground() ?.intoBackground()
holder.binding.tvExpire.setTextColor(Color.parseColor("#947ABA"))
} }
"year" -> { "year" -> {
holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_year_bg) holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_year_bg)
holder.binding.tvDay.setTextColor(Color.parseColor("#006574")) holder.binding.tvDay.setTextColor(Color.parseColor("#CF9100"))
holder.binding.tvMoney.setTextColor(Color.parseColor("#006574")) holder.binding.tvMoney.setTextColor(Color.parseColor("#CF9100"))
holder.binding.tvDes.setTextColor(Color.parseColor("#006574")) holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#CF9100"))
holder.binding.tvDes.setTextColor(Color.parseColor("#714F00"))
holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors(
0xFFD5FAFF.toInt(), 0xFFFFDA84.toInt(),
0x00000000 0x00000000
) )
?.intoBackground() ?.intoBackground()
holder.binding.tvExpire.setTextColor(Color.parseColor("#B8984F"))
} }
} }
if (currentPosition == position) { if (currentPosition == position) {
holder.binding.checkbox.isChecked = true holder.binding.checkbox.visibility = View.VISIBLE
} else { } else {
holder.binding.checkbox.isChecked = false holder.binding.checkbox.visibility = View.GONE
} }
} }

View File

@ -287,7 +287,8 @@ class MineFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener
} }
R.id.ll_vip -> { R.id.ll_vip -> {
startActivity(MyVipActivity::class.java) // startActivity(MyVipActivity::class.java)
startActivity(StoreActivity::class.java)
} }
R.id.ll_store -> { R.id.ll_store -> {
@ -359,7 +360,8 @@ class MineFragment : TitleBarFragment<HomeActivity>(), OnRefreshLoadMoreListener
MsConstants.CONSTANTS_PREF_LAST_POPUP_TIME_VIP, MsConstants.CONSTANTS_PREF_LAST_POPUP_TIME_VIP,
System.currentTimeMillis() System.currentTimeMillis()
) )
startActivity(MyVipActivity::class.java) startActivity(StoreActivity::class.java)
// startActivity(MyVipActivity::class.java)
vipSplashDialog?.dismiss() vipSplashDialog?.dismiss()
isVipSplash = false isVipSplash = false
System.gc() System.gc()

View File

@ -3,6 +3,7 @@ package com.localee.mireo.app.ui.fragment
import android.app.AlertDialog import android.app.AlertDialog
import android.app.Dialog import android.app.Dialog
import android.content.DialogInterface import android.content.DialogInterface
import android.graphics.Rect
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.text.Html import android.text.Html
@ -10,7 +11,9 @@ import android.view.Gravity
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
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
import com.android.billingclient.api.BillingClientStateListener import com.android.billingclient.api.BillingClientStateListener
@ -44,6 +47,7 @@ import com.localee.mireo.app.http.model.HttpData
import com.localee.mireo.app.other.AppConfig import com.localee.mireo.app.other.AppConfig
import com.localee.mireo.app.other.MsConstants import com.localee.mireo.app.other.MsConstants
import com.localee.mireo.app.ui.adapter.MyCoinBuyAdapter import com.localee.mireo.app.ui.adapter.MyCoinBuyAdapter
import com.localee.mireo.app.ui.adapter.MyCoinBuyBigAdapter
import com.localee.mireo.app.ui.adapter.MyVipBuyAdapter import com.localee.mireo.app.ui.adapter.MyVipBuyAdapter
import com.localee.mireo.app.utils.DHStringUtils.getPublicRequest import com.localee.mireo.app.utils.DHStringUtils.getPublicRequest
import com.localee.mireo.app.utils.MsMMKVUtils import com.localee.mireo.app.utils.MsMMKVUtils
@ -64,14 +68,17 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
private var short_play_id: Int? = 0 private var short_play_id: Int? = 0
private var mAdapter: MyVipBuyAdapter? = null private var mAdapter: MyVipBuyAdapter? = null
private var mCoinAdapter: MyCoinBuyAdapter? = null private var mCoinAdapter: MyCoinBuyAdapter? = null
private var mCoinBigAdapter: MyCoinBuyBigAdapter? = null
private var order_code = "" private var order_code = ""
private var vipData: PaySettingsBean.Vip? = null private var vipData: PaySettingsBean.Vip? = null
private var coinsData: PaySettingsBean.Coins? = null private var coinsData: PaySettingsBean.Coins? = null
private var coinsDataBig: PaySettingsBean.Coins? = null
private var billingClient: BillingClient? = null private var billingClient: BillingClient? = null
private var purchaseData: Purchase? = null private var purchaseData: Purchase? = null
private var payReq: PayBean? = null private var payReq: PayBean? = null
private var detainmentData: PaySettingsBean.Coins? = null private var detainmentData: PaySettingsBean.Coins? = null
private var parcelable: VideoDetailsApi.Bean.Episode? = null
interface OnDataPass { interface OnDataPass {
fun onDataPass(data: PaySettingsBean.Coins?) fun onDataPass(data: PaySettingsBean.Coins?)
@ -85,34 +92,29 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
val inflater = requireActivity().layoutInflater val inflater = requireActivity().layoutInflater
val view = inflater.inflate(R.layout.dialog_recharge_fragment, null) val view = inflater.inflate(R.layout.dialog_recharge_fragment, null)
dialogRechargeFragmentBinding = DialogRechargeFragmentBinding.bind(view) dialogRechargeFragmentBinding = DialogRechargeFragmentBinding.bind(view)
val parcelable = parcelable =
arguments?.getParcelable<VideoDetailsApi.Bean.Episode>(MsConstants.CONSTANTS_Episode) arguments?.getParcelable(MsConstants.CONSTANTS_Episode)
short_play_id = parcelable?.short_play_id short_play_id = parcelable?.short_play_id
promise_view_ad = parcelable?.promise_view_ad promise_view_ad = parcelable?.promise_view_ad
dialogRechargeFragmentBinding?.tvCoins?.text = MsMMKVUtils.getAllCoin().toString() dialogRechargeFragmentBinding?.tvCoins?.text = MsMMKVUtils.getAllCoin().toString()
dialogRechargeFragmentBinding?.tvUnlock?.text = parcelable?.coins.toString()
dialogRechargeFragmentBinding?.ivLoading?.let { dialogRechargeFragmentBinding?.ivLoading?.let {
Glide.with(requireContext()) Glide.with(requireContext())
.asGif() .asGif()
.load(R.mipmap.iv_loading) .load(R.mipmap.iv_loading)
.into(it) .into(it)
} }
dialogRechargeFragmentBinding?.recyclerCoin?.layoutManager = dialogRechargeFragmentBinding?.ivClose?.setOnClickListener {
LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) dismiss()
dialogRechargeFragmentBinding?.recyclerView?.layoutManager = }
LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
mCoinAdapter = MyCoinBuyAdapter()
dialogRechargeFragmentBinding?.recyclerCoin?.adapter = mCoinAdapter
mAdapter = MyVipBuyAdapter()
dialogRechargeFragmentBinding?.recyclerView?.adapter = mAdapter
if (TranslatesUtils.translates() != null) { if (TranslatesUtils.translates() != null) {
dialogRechargeFragmentBinding?.tvCoinsText?.text = TranslatesUtils.translates()?.mireo_store_coins dialogRechargeFragmentBinding?.tvCoinsText?.text =
dialogRechargeFragmentBinding?.tvCoinRecharge?.text = TranslatesUtils.translates()?.mireo_coin_recharege TranslatesUtils.translates()?.mireo_store_coins
dialogRechargeFragmentBinding?.tvMembership?.text = TranslatesUtils.translates()?.mireo_store_recharge dialogRechargeFragmentBinding?.tvTitle?.text = TranslatesUtils.translates()?.mireo_coin_recharege
dialogRechargeFragmentBinding?.tvBuy?.text = TranslatesUtils.translates()?.mireo_buy_now dialogRechargeFragmentBinding?.tvTitleVip?.text = TranslatesUtils.translates()?.mrieo_store_vip_title
dialogRechargeFragmentBinding?.tvUnlockText?.text = TranslatesUtils.translates()?.mireo_unlock
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
dialogRechargeFragmentBinding?.tvHint?.text = Html.fromHtml( dialogRechargeFragmentBinding?.tvHint?.text = Html.fromHtml(
TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips), TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips),
@ -125,68 +127,92 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
} }
} }
dialogRechargeFragmentBinding?.recyclerCoin?.layoutManager =
LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
dialogRechargeFragmentBinding?.recyclerCoin?.layoutManager =
GridLayoutManager(requireContext(), 3)
dialogRechargeFragmentBinding?.recyclerCoin?.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()
}
})
dialogRechargeFragmentBinding?.recyclerCoinBig?.layoutManager =
LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
dialogRechargeFragmentBinding?.recyclerCoinBig?.layoutManager =
GridLayoutManager(requireContext(), 2)
dialogRechargeFragmentBinding?.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()
}
})
mCoinAdapter?.setOnItemClickListener { adapter, view, position -> mCoinAdapter = MyCoinBuyAdapter()
if (type == 1) { dialogRechargeFragmentBinding?.recyclerCoin?.adapter = mCoinAdapter
mAdapter?.currentPosition = -1
mAdapter?.notifyDataSetChanged() dialogRechargeFragmentBinding?.recyclerView?.layoutManager =
} LinearLayoutManager(requireContext())
type = 0 mAdapter = MyVipBuyAdapter()
mCoinAdapter?.currentPosition = position dialogRechargeFragmentBinding?.recyclerView?.adapter = mAdapter
mCoinAdapter?.notifyDataSetChanged() mCoinBigAdapter = MyCoinBuyBigAdapter()
}
dialogRechargeFragmentBinding?.recyclerCoinBig?.adapter = mCoinBigAdapter
mAdapter?.setOnItemClickListener { adapter, view, position -> mAdapter?.setOnItemClickListener { adapter, view, position ->
if (type == 0) { if (type != 1) {
mCoinAdapter?.currentPosition = -1 mCoinAdapter?.currentPosition = -1
mCoinAdapter?.notifyDataSetChanged() mCoinAdapter?.notifyDataSetChanged()
mCoinBigAdapter?.currentPosition = -1
mCoinBigAdapter?.notifyDataSetChanged()
} }
type = 1 type = 1
mAdapter?.currentPosition = position mAdapter?.currentPosition = position
mAdapter?.notifyDataSetChanged() mAdapter?.notifyDataSetChanged()
}
dialogRechargeFragmentBinding?.tvBuy?.setOnClickListener {
if (mAdapter?.currentPosition == -1 && mCoinAdapter?.currentPosition == -1) {
if (TranslatesUtils.translates() != null) {
ToastUtils.show(TranslatesUtils.translates()?.mireo_select_a_payment_item.toString())
} else {
ToastUtils.show(getString(R.string.select_a_payment_item))
}
return@setOnClickListener
}
singleClick {
if (!isConnect) {
if (TranslatesUtils.translates() != null) {
ToastUtils.show(TranslatesUtils.translates()?.mireo_g_pay_error.toString())
} else {
ToastUtils.show(getString(R.string.google_pay_error))
}
return@singleClick
}
dialogRechargeFragmentBinding?.ivLoading?.visibility = View.VISIBLE
if (type == 0) {
coinsData =
mCoinAdapter!!.getItem(mCoinAdapter!!.currentPosition) as PaySettingsBean.Coins
} else {
vipData = mAdapter!!.getItem(mAdapter!!.currentPosition) as PaySettingsBean.Vip
}
if (parcelable != null) {
short_play_id?.let { it1 ->
CreateOrderReqBean(
if (type == 0) coinsData?.id.toString() else vipData?.id.toString(),
"google",
it1,
parcelable.short_play_video_id
)
}?.let { it2 ->
getCreateOrder(
it2
)
}
}
}
}
setOnPayNowClick()
}
mCoinAdapter?.setOnItemClickListener { adapter, view, position ->
if (type != 0) {
mAdapter?.currentPosition = -1
mAdapter?.notifyDataSetChanged()
mCoinBigAdapter?.currentPosition = -1
mCoinBigAdapter?.notifyDataSetChanged()
}
type = 0
mCoinAdapter?.currentPosition = position
mCoinAdapter?.notifyDataSetChanged()
setOnPayNowClick()
}
mCoinBigAdapter?.setOnItemClickListener { adapter, view, position ->
if (type != 2) {
mAdapter?.currentPosition = -1
mAdapter?.notifyDataSetChanged()
mCoinAdapter?.currentPosition = -1
mCoinAdapter?.notifyDataSetChanged()
}
type = 2
mCoinBigAdapter?.currentPosition = position
mCoinBigAdapter?.notifyDataSetChanged()
setOnPayNowClick()
}
getPaySettings(parcelable?.short_play_id, parcelable?.short_play_video_id) getPaySettings(parcelable?.short_play_id, parcelable?.short_play_video_id)
initPay() initPay()
@ -199,11 +225,60 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
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_500) layoutParams?.height =
(requireActivity().resources.displayMetrics.heightPixels - requireActivity().resources.getDimension(
R.dimen.dp_90
)).toInt()
window?.attributes = layoutParams window?.attributes = layoutParams
return dialog return dialog
} }
fun setOnPayNowClick() {
singleClick {
if (!isConnect) {
if (TranslatesUtils.translates() != null) {
ToastUtils.show(TranslatesUtils.translates()?.mireo_g_pay_error.toString())
} else {
ToastUtils.show(getString(R.string.google_pay_error))
}
return@singleClick
}
if (type == 0) {
coinsData =
mCoinAdapter?.getItem(mCoinAdapter!!.currentPosition) as PaySettingsBean.Coins
} else if (type == 1) {
vipData =
mAdapter?.getItem(mAdapter!!.currentPosition) as PaySettingsBean.Vip
} else {
coinsDataBig =
mCoinBigAdapter?.getItem(mCoinBigAdapter!!.currentPosition) as PaySettingsBean.Coins
}
var idStr = ""
if (type == 0) {
idStr = coinsData?.id.toString()
} else if (type == 1) {
idStr = vipData?.id.toString()
} else {
idStr = coinsDataBig?.id.toString()
}
if (parcelable != null) {
short_play_id?.let { it1 ->
CreateOrderReqBean(
idStr,
"google",
it1,
parcelable!!.short_play_video_id
)
}?.let { it2 ->
getCreateOrder(
it2
)
}
}
}
}
private fun getPaySettings(shortPlayId: Int?, videoId: Int?) { private fun getPaySettings(shortPlayId: Int?, videoId: Int?) {
EasyHttp.get(this) EasyHttp.get(this)
.api(PaySettingsApi().apply { .api(PaySettingsApi().apply {
@ -213,12 +288,47 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
.request(object : HttpCallbackProxy<HttpData<PaySettingsBean>>(this) { .request(object : HttpCallbackProxy<HttpData<PaySettingsBean>>(this) {
override fun onHttpSuccess(result: HttpData<PaySettingsBean>) { override fun onHttpSuccess(result: HttpData<PaySettingsBean>) {
result.getData()?.let { result.getData()?.let {
mCoinAdapter?.submitList(it.list_coins) if (it.list_sub_vip.isNotEmpty()) {
mAdapter?.submitList(it.list_sub_vip) mAdapter?.submitList(it.list_sub_vip)
dialogRechargeFragmentBinding?.recyclerView?.visibility = View.VISIBLE
dialogRechargeFragmentBinding?.tvTitleVip?.visibility = View.VISIBLE
it.list_sub_vip?.let { it1 -> querySubProductDetails(it1) } it.list_sub_vip.let { it1 -> querySubProductDetails(it1) }
it.list_coins?.let { it1 -> queryInAppProductDetails(it1) }
} else {
dialogRechargeFragmentBinding?.recyclerView?.visibility = View.GONE
dialogRechargeFragmentBinding?.tvTitleVip?.visibility = View.GONE
}
if (it.list_coins.isNotEmpty()) {
val small = it.list_coins.filter { coins -> coins.size == "small" }
val big = it.list_coins.filter { coins -> coins.size == "big" }
if (small.isNotEmpty()) {
mCoinAdapter?.submitList(small)
dialogRechargeFragmentBinding?.recyclerCoin?.visibility =
View.VISIBLE
} else {
dialogRechargeFragmentBinding?.recyclerCoin?.visibility = View.GONE
}
if (big.isNotEmpty()) {
mCoinBigAdapter?.submitList(big)
dialogRechargeFragmentBinding?.recyclerCoinBig?.visibility =
View.VISIBLE
} else {
dialogRechargeFragmentBinding?.recyclerCoinBig?.visibility =
View.GONE
}
if (small?.isNotEmpty() == true) {
small?.let { it1 -> queryInAppProductDetails(it1, "small") }
}
if (big?.isNotEmpty() == true) {
big?.let { it1 -> queryInAppProductDetails(it1, "big") }
}
dialogRechargeFragmentBinding?.tvTitle?.visibility = View.VISIBLE
} else {
dialogRechargeFragmentBinding?.recyclerCoin?.visibility = View.GONE
dialogRechargeFragmentBinding?.recyclerCoinBig?.visibility = View.GONE
dialogRechargeFragmentBinding?.tvTitle?.visibility = View.GONE
}
} }
} }
}) })
@ -232,10 +342,10 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
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 (type == 0) { if (type == 1) {
consumePurchase(purchase)
} else {
consumePurchaseSub(purchase) consumePurchaseSub(purchase)
} else {
consumePurchase(purchase)
} }
} }
} }
@ -314,10 +424,10 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
} }
} }
val productType: String = if (type == 0) { val productType: String = if (type == 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>()
inAppProductInfo.add( inAppProductInfo.add(
@ -380,7 +490,8 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
} }
private fun queryInAppProductDetails( private fun queryInAppProductDetails(
coinsList: List<PaySettingsBean.Coins> coinsList: List<PaySettingsBean.Coins>,
type: String
) { ) {
val productDetailsResponseListener = val productDetailsResponseListener =
ProductDetailsResponseListener { billingResult, productDetailsList -> ProductDetailsResponseListener { billingResult, productDetailsList ->
@ -399,7 +510,11 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
} }
mCoinAdapter?.recyclerView?.postDelayed({ mCoinAdapter?.recyclerView?.postDelayed({
if (type == "small") {
mCoinAdapter?.submitList(updatedCoinsList) mCoinAdapter?.submitList(updatedCoinsList)
} else {
mCoinBigAdapter?.submitList(updatedCoinsList)
}
}, 500) }, 500)
} }
} }
@ -560,8 +675,10 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
order_code = it.order_code.toString() order_code = it.order_code.toString()
if (type == 0) { if (type == 0) {
coinsData?.android_template_id?.let { it1 -> getProduct(it1) } coinsData?.android_template_id?.let { it1 -> getProduct(it1) }
} else { } else if (type == 1) {
vipData?.android_template_id?.let { it1 -> getProduct(it1) } vipData?.android_template_id?.let { it1 -> getProduct(it1) }
} else {
coinsDataBig?.android_template_id?.let { it1 -> getProduct(it1) }
} }
} ?: run { } ?: run {
@ -639,10 +756,9 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener<Any>
payReq = null payReq = null
dataPasser?.onDataPass(detainmentData) dataPasser?.onDataPass(detainmentData)
System.gc() System.gc()
EventBus.getDefault()
.post(MsConstants.CONSTANTS_PAY_REFRESH_DISMISS)
super.onDismiss(dialog) super.onDismiss(dialog)
// if (!isPay) {
// EventBus.getDefault().post(Constants_close_recharge)
// }
} }
} }

View File

@ -13,7 +13,7 @@ object MsMMKVUtils {
fun getMMKV(): MMKV { fun getMMKV(): MMKV {
if (mmkv == null) { if (mmkv == null) {
mmkv = MMKV.defaultMMKV() mmkv = MMKV.mmkvWithID("mireotv")
} }
return mmkv!! return mmkv!!
} }

View File

@ -0,0 +1,10 @@
<?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="#80F24C92" android:startColor="#80F8726D" android:type="linear" />
<corners android:radius="@dimen/dp_20"
/>
</shape>
</item>
</selector>

View File

@ -5,20 +5,6 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/example_color_121418"> android:background="@color/example_color_121418">
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_buy"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:layout_alignParentBottom="true"
android:layout_marginHorizontal="@dimen/dp_16"
android:layout_marginVertical="@dimen/dp_15"
android:gravity="center"
android:text="Buy Now"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:shape_radius="@dimen/dp_25"
app:shape_solidGradientEndColor="#F24C92"
app:shape_solidGradientStartColor="#F8726D" />
<com.hjq.bar.TitleBar <com.hjq.bar.TitleBar
android:id="@+id/title" android:id="@+id/title"
@ -37,224 +23,64 @@
<androidx.core.widget.NestedScrollView <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_above="@+id/tv_buy"
android:layout_below="@+id/title"> android:layout_below="@+id/title">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_top_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/ic_store_top_bg"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.hjq.shape.view.ShapeImageView
android:id="@+id/iv_v"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_23"
android:src="@mipmap/ic_store_v"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/iv_top_bg" />
<TextView <TextView
android:id="@+id/tv_name" android:id="@+id/tv_title_vip"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10" android:layout_marginHorizontal="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
android:text="Vip Recharge Discount" android:text="VIP | Auto renew, cancel anytime"
android:textColor="#E5BCA7"
android:textSize="@dimen/sp_15"
app:layout_constraintStart_toEndOf="@+id/iv_v"
app:layout_constraintTop_toTopOf="@+id/iv_v" />
<TextView
android:id="@+id/tv_vip_expires"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_3"
android:text="Limited-time offer!"
android:textColor="#919191"
android:textSize="@dimen/sp_11"
app:layout_constraintStart_toEndOf="@+id/iv_v"
app:layout_constraintTop_toBottomOf="@+id/tv_name" />
<ImageView
android:id="@+id/iv_right_coin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_25"
android:layout_marginEnd="@dimen/dp_20"
android:src="@mipmap/ic_store_right_coin"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_v" />
<TextView
android:id="@+id/tv_coins_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:text="Your Coins: "
android:textColor="@color/white" android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/iv_right_coin" android:textSize="@dimen/sp_13"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/iv_right_coin" />
<TextView
android:id="@+id/tv_coins"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_5"
android:text="0"
android:textColor="@color/example_color_F56490"
app:layout_constraintBottom_toBottomOf="@+id/iv_right_coin"
app:layout_constraintStart_toEndOf="@+id/tv_coins_text"
app:layout_constraintTop_toTopOf="@+id/iv_right_coin" />
<TextView
android:id="@+id/tv_coin_recharge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:drawableStart="@mipmap/ic_vip_member"
android:drawableEnd="@mipmap/ic_vip_member"
android:drawablePadding="@dimen/dp_20"
android:text="COIN RECHARGE"
android:textColor="#FCACB8"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/>
app:layout_constraintTop_toBottomOf="@+id/iv_right_coin" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_coin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_14"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coin_recharge" />
<TextView
android:id="@+id/tv_member_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:drawableStart="@mipmap/ic_vip_member"
android:drawableEnd="@mipmap/ic_vip_member"
android:drawablePadding="@dimen/dp_20"
android:text="MEMBER BENEFITS"
android:textColor="#FCACB8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_coin" />
<TextView
android:id="@+id/tv_member_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_no_ads"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Ad-Free Streaming"
android:textColor="#c4c4c4"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toStartOf="@+id/tv_member_2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_member_title" />
<TextView
android:id="@+id/tv_member_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_free"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Exclusive Episodes"
android:textColor="#c4c4c4"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toStartOf="@+id/tv_member_3"
app:layout_constraintStart_toEndOf="@+id/tv_member_1"
app:layout_constraintTop_toBottomOf="@+id/tv_member_title" />
<TextView
android:id="@+id/tv_member_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_exclusive"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="Daily free coins"
android:textColor="#c4c4c4"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toStartOf="@+id/tv_member_4"
app:layout_constraintStart_toEndOf="@+id/tv_member_2"
app:layout_constraintTop_toBottomOf="@+id/tv_member_title" />
<TextView
android:id="@+id/tv_member_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_8"
android:layout_marginTop="@dimen/dp_15"
android:drawableTop="@mipmap/ic_vip_only_coupons"
android:drawablePadding="@dimen/dp_8"
android:ellipsize="end"
android:gravity="center_horizontal"
android:maxLines="2"
android:text="VIP-Only Coupons"
android:textColor="#c4c4c4"
android:textSize="@dimen/sp_12"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tv_member_3"
app:layout_constraintTop_toBottomOf="@+id/tv_member_title" />
<TextView
android:id="@+id/tv_membership"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:drawableStart="@mipmap/ic_vip_member"
android:drawableEnd="@mipmap/ic_vip_member"
android:drawablePadding="@dimen/dp_20"
android:text="MEMBERSHIP RECHARGE"
android:textColor="#FCACB8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_member_1" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16" android:layout_marginHorizontal="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_15" android:layout_marginTop="@dimen/dp_10"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_membership" /> app:layout_constraintTop_toBottomOf="@+id/tv_title_vip" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_10"
android:text="Coin Recharge"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerView"/>
<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_12"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_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" />
<TextView <TextView
android:id="@+id/tv_hint" android:id="@+id/tv_hint"
@ -268,7 +94,7 @@
android:textColor="#9D9D9D" android:textColor="#9D9D9D"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerView" /> app:layout_constraintTop_toBottomOf="@+id/recycler_coin" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -3,53 +3,16 @@
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:paddingBottom="@dimen/dp_20"
app:shape_radiusInTopLeft="@dimen/dp_12" app:shape_radiusInTopLeft="@dimen/dp_12"
app:shape_radiusInTopRight="@dimen/dp_12" app:shape_radiusInTopRight="@dimen/dp_12"
app:shape_solidColor="#0F1013"> app:shape_solidColor="#0F1013">
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_buy"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_45"
android:layout_marginHorizontal="@dimen/dp_16"
android:gravity="center"
android:text="Buy Now"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
android:layout_alignParentBottom="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:shape_radius="@dimen/dp_25"
app:shape_solidGradientEndColor="#F24C92"
app:shape_solidGradientStartColor="#F8726D" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/dp_15"
android:layout_above="@+id/tv_buy"
>
<com.hjq.shape.layout.ShapeConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_right_coin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_25"
android:layout_marginEnd="@dimen/dp_20"
android:src="@mipmap/ic_store_right_coin"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/tv_coins_text" android:id="@+id/tv_coins_text"
android:layout_width="wrap_content" 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_22"
android:text="Your Coins: " android:text="Your Coins: "
android:textColor="@color/white" android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/iv_right_coin" app:layout_constraintBottom_toBottomOf="@+id/iv_right_coin"
@ -60,62 +23,113 @@
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_marginStart="@dimen/dp_5" android:layout_alignTop="@+id/tv_coins_text"
android:layout_toRightOf="@+id/tv_coins_text"
android:text="0" android:text="0"
android:textColor="@color/example_color_F56490" android:textColor="@color/example_color_F56490"
app:layout_constraintBottom_toBottomOf="@+id/iv_right_coin" app:layout_constraintBottom_toBottomOf="@+id/iv_right_coin"
app:layout_constraintStart_toEndOf="@+id/tv_coins_text" app:layout_constraintStart_toEndOf="@+id/tv_coins_text"
app:layout_constraintTop_toTopOf="@+id/iv_right_coin" /> app:layout_constraintTop_toTopOf="@+id/iv_right_coin" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_26"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_17"
android:layout_toRightOf="@+id/tv_coins"
android:background="@drawable/bg_store_unlock"
android:gravity="center"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/dp_12">
<TextView <TextView
android:id="@+id/tv_coin_recharge" android:id="@+id/tv_unlock_text"
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_20" android:text="Unlock: "
android:drawableStart="@mipmap/ic_vip_member" android:textColor="@color/white" />
android:drawableEnd="@mipmap/ic_vip_member"
android:drawablePadding="@dimen/dp_20" <TextView
android:text="COIN RECHARGE" android:id="@+id/tv_unlock"
android:textColor="#FCACB8" android:layout_width="wrap_content"
app:layout_constraintEnd_toEndOf="parent" android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent" android:drawableEnd="@mipmap/ic_login_conins"
app:layout_constraintTop_toBottomOf="@+id/iv_right_coin" /> android:drawablePadding="@dimen/dp_3"
android:text="0"
android:textColor="@color/example_color_F56490" />
<androidx.recyclerview.widget.RecyclerView </androidx.appcompat.widget.LinearLayoutCompat>
android:id="@+id/recycler_coin"
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10"
android:padding="@dimen/dp_10"
android:src="@mipmap/ic_dialog_close_style_2" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tv_coins_text"
android:layout_marginTop="@dimen/dp_15">
<com.hjq.shape.layout.ShapeConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_title_vip"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16" android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_11" android:text="VIP | Auto renew, cancel anytime"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coin_recharge" /> app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_membership"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:drawableStart="@mipmap/ic_vip_member"
android:drawableEnd="@mipmap/ic_vip_member"
android:drawablePadding="@dimen/dp_20"
android:text="MEMBERSHIP RECHARGE"
android:textColor="#FCACB8"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recycler_coin" />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView" android:id="@+id/recyclerView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16" android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_15" android:layout_marginTop="@dimen/dp_10"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_membership" app:layout_constraintTop_toBottomOf="@+id/tv_title_vip" />
/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_10"
android:text="Coin Recharge"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerView" />
<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_12"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_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" />
<TextView <TextView
android:id="@+id/tv_hint" android:id="@+id/tv_hint"
@ -124,12 +138,12 @@
android:layout_marginHorizontal="@dimen/dp_16" android:layout_marginHorizontal="@dimen/dp_16"
android:layout_marginVertical="@dimen/dp_12" android:layout_marginVertical="@dimen/dp_12"
android:lineSpacingExtra="@dimen/dp_2" android:lineSpacingExtra="@dimen/dp_2"
android:paddingBottom="@dimen/dp_15"
android:text="@string/store_tips" android:text="@string/store_tips"
android:textColor="#9D9D9D" android:textColor="#9D9D9D"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/recyclerView" /> app:layout_constraintTop_toBottomOf="@+id/recycler_coin" />
<ImageView <ImageView
android:id="@+id/iv_loading" android:id="@+id/iv_loading"

View File

@ -2,20 +2,19 @@
<com.hjq.shape.layout.ShapeConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.hjq.shape.layout.ShapeConstraintLayout 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:id="@+id/ll_item" android:id="@+id/ll_item"
android:layout_width="@dimen/dp_105" android:layout_width="match_parent"
android:layout_height="@dimen/dp_107" android:layout_height="@dimen/dp_108"
android:layout_marginEnd="@dimen/dp_10"
android:orientation="vertical" android:orientation="vertical"
app:shape_radius="@dimen/dp_12" app:shape_radius="@dimen/dp_8"
app:shape_solidColor="#1A191C" app:shape_solidColor="#413B40"
app:shape_strokeColor="@color/example_color_F56490" app:shape_strokeColor="@color/white25"
app:shape_strokeSize="0dp"> app:shape_strokeSize="0dp">
<com.hjq.shape.view.ShapeTextView <com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_hot" android:id="@+id/tv_hot"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/dp_2" android:paddingHorizontal="@dimen/dp_4"
android:paddingVertical="@dimen/dp_2" android:paddingVertical="@dimen/dp_2"
android:text="" android:text=""
android:textColor="@color/white" android:textColor="@color/white"
@ -23,15 +22,15 @@
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:shape_radiusInBottomRight="@dimen/dp_12" app:shape_radiusInBottomRight="@dimen/dp_8"
app:shape_radiusInTopLeft="@dimen/dp_12" app:shape_radiusInTopLeft="@dimen/dp_8"
app:shape_solidColor="@color/example_color_F56490" /> app:shape_solidColor="@color/example_color_F56490" />
<com.hjq.shape.view.ShapeTextView <com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_corner" android:id="@+id/tv_corner"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/dp_2" android:paddingHorizontal="@dimen/dp_4"
android:paddingVertical="@dimen/dp_2" android:paddingVertical="@dimen/dp_2"
android:text="" android:text=""
android:textColor="@color/white" android:textColor="@color/white"
@ -39,9 +38,9 @@
android:visibility="invisible" android:visibility="invisible"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:shape_radiusInBottomLeft="@dimen/dp_12" app:shape_radiusInBottomLeft="@dimen/dp_8"
app:shape_radiusInTopRight="@dimen/dp_12" app:shape_radiusInTopRight="@dimen/dp_8"
app:shape_solidColor="#EB8A64" /> app:shape_solidColor="@color/example_color_F56490" />
<TextView <TextView
@ -49,20 +48,26 @@
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_10" android:layout_marginTop="@dimen/dp_8"
android:text="+500" android:text="+500"
android:textStyle="bold" android:fontFamily="sans-serif-medium"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="@dimen/sp_14" android:drawablePadding="@dimen/dp_5"
android:drawableEnd="@mipmap/ic_me_conins"
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"
app:layout_constraintTop_toBottomOf="@+id/tv_hot" /> app:layout_constraintTop_toBottomOf="@+id/tv_hot" />
<ImageView <TextView
android:layout_width="@dimen/dp_21" android:id="@+id/tv_bonus"
android:layout_height="@dimen/dp_21" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5" android:layout_marginTop="@dimen/dp_5"
android:src="@mipmap/ic_me_conins" android:textSize="@dimen/sp_12"
android:paddingHorizontal="@dimen/dp_10"
android:gravity="center_horizontal"
android:textColor="@color/example_color_F56490"
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_coins" /> app:layout_constraintTop_toBottomOf="@+id/tv_coins" />
@ -80,10 +85,10 @@
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:shape_radiusInBottomLeft="@dimen/dp_12" app:shape_radiusInBottomLeft="@dimen/dp_8"
app:shape_radiusInBottomRight="@dimen/dp_12" app:shape_radiusInBottomRight="@dimen/dp_8"
app:shape_solidGradientEndColor="#353739" app:shape_solidGradientEndColor="#F24C92"
app:shape_solidGradientOrientation="topToBottom" app:shape_solidGradientOrientation="startToEnd"
app:shape_solidGradientStartColor="#353739" /> app:shape_solidGradientStartColor="#F8726D" />
</com.hjq.shape.layout.ShapeConstraintLayout> </com.hjq.shape.layout.ShapeConstraintLayout>

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<com.hjq.shape.layout.ShapeConstraintLayout 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:orientation="vertical"
app:shape_radius="@dimen/dp_8"
app:shape_solidColor="#4B4331"
app:shape_strokeColor="@color/white25"
app:shape_strokeSize="@dimen/dp_1">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/tv_hot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_5"
android:layout_marginTop="@dimen/dp_5"
android:src="@mipmap/iv_store_coin_big_hot"
android:text=""
android:textColor="@color/white"
android:textSize="@dimen/sp_10"
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:paddingHorizontal="@dimen/dp_4"
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"
app:shape_radiusInBottomLeft="@dimen/dp_8"
app:shape_radiusInTopRight="@dimen/dp_8"
app:shape_solidColor="#E5FF8C27" />
<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_20"
android:drawableEnd="@mipmap/ic_me_conins"
android:drawablePadding="@dimen/dp_5"
android:fontFamily="sans-serif-medium"
android:text="+500"
android:textColor="@color/white"
android:textSize="@dimen/sp_20"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_bonus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:textColor="#FFE4BE"
android:textSize="@dimen/sp_12"
android:gravity="center"
android:paddingHorizontal="@dimen/dp_10"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_coins" />
<com.hjq.shape.view.ShapeTextView
android:id="@+id/tv_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
android:fontFamily="sans-serif-medium"
android:gravity="center"
android:paddingVertical="@dimen/dp_3"
android:text="50% Off"
android:textColor="@color/white"
android:textSize="@dimen/sp_15"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:shape_radiusInBottomLeft="@dimen/dp_8"
app:shape_radiusInBottomRight="@dimen/dp_8"
app:shape_solidGradientEndColor="#FF9333"
app:shape_solidGradientOrientation="startToEnd"
app:shape_solidGradientStartColor="#FFD280" />
</com.hjq.shape.layout.ShapeConstraintLayout>

View File

@ -2,9 +2,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"
android:id="@+id/cl_item" android:id="@+id/cl_item"
android:layout_width="@dimen/dp_310" android:layout_width="match_parent"
android:layout_height="@dimen/dp_165" android:layout_height="@dimen/dp_125"
android:layout_marginEnd="@dimen/dp_6"
android:background="@mipmap/ic_vip_week_bg" android:background="@mipmap/ic_vip_week_bg"
android:orientation="vertical"> android:orientation="vertical">
@ -31,11 +30,11 @@
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_25"
android:fontFamily="sans-serif-medium" android:fontFamily="sans-serif-medium"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="Weekly" android:text="Weekly"
android:textColor="#712B2B" android:textColor="#2493A4"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_12"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -46,10 +45,9 @@
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_6"
android:text="0" android:text="0"
android:textColor="#FFB69A" android:textColor="#2493A4"
android:textSize="@dimen/sp_19" android:textSize="@dimen/sp_30"
android:textStyle="bold" android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_day" /> app:layout_constraintTop_toBottomOf="@+id/tv_day" />
@ -59,10 +57,10 @@
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_marginBottom="@dimen/dp_3" android:layout_marginBottom="@dimen/dp_6"
android:text="/Week" android:text="/Week"
android:textColor="#FFB69A" android:textColor="#2493A4"
android:textSize="@dimen/sp_12" android:textSize="@dimen/sp_16"
app:layout_constraintBottom_toBottomOf="@+id/tv_money" app:layout_constraintBottom_toBottomOf="@+id/tv_money"
app:layout_constraintStart_toEndOf="@+id/tv_money" /> app:layout_constraintStart_toEndOf="@+id/tv_money" />
@ -71,56 +69,45 @@
android:id="@+id/tv_des" android:id="@+id/tv_des"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_5"
android:layout_marginEnd="@dimen/dp_5" android:layout_marginEnd="@dimen/dp_5"
android:paddingHorizontal="@dimen/dp_7" android:paddingHorizontal="@dimen/dp_7"
android:paddingVertical="@dimen/dp_3" android:paddingVertical="@dimen/dp_2"
android:layout_marginTop="@dimen/dp_5"
android:singleLine="true" android:singleLine="true"
android:text="Unlimited access to all series for 1 week (No Ads)" android:text="Unlimited access to all series for 1 week (No Ads)"
android:textColor="#712B2B" android:textColor="#006574"
android:textSize="@dimen/sp_11" android:textSize="@dimen/sp_10"
app:layout_constraintStart_toStartOf="@+id/tv_money" app:layout_constraintStart_toStartOf="@+id/tv_money"
app:layout_constraintTop_toBottomOf="@+id/tv_money" app:layout_constraintTop_toBottomOf="@+id/tv_money"
app:shape_radius="@dimen/dp_20" app:shape_radius="@dimen/dp_20"
app:shape_solidGradientEndColor="@color/transparent" app:shape_solidGradientEndColor="@color/transparent"
app:shape_solidGradientStartColor="#FFCDCB" /> app:shape_solidGradientStartColor="#A3F3FF" />
<TextView
android:id="@+id/tv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_3"
android:layout_marginEnd="@dimen/dp_5"
android:singleLine="true"
android:text="Auto renew, cancel anytime"
android:textColor="#45000000"
android:textSize="@dimen/sp_11"
app:layout_constraintStart_toStartOf="@+id/tv_des"
app:layout_constraintTop_toBottomOf="@+id/tv_des" />
<TextView <TextView
android:id="@+id/tv_expire" android:id="@+id/tv_expire"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_1" android:layout_marginTop="@dimen/dp_2"
android:layout_marginEnd="@dimen/dp_5" android:layout_marginEnd="@dimen/dp_16"
android:singleLine="true" android:singleLine="true"
android:visibility="gone"
android:text="The donate coins will expire in 8 days" android:text="The donate coins will expire in 8 days"
android:textColor="#45000000" android:textColor="#6CADB7"
android:textSize="@dimen/sp_11" android:textSize="@dimen/sp_10"
app:layout_constraintStart_toStartOf="@+id/tv_des" app:layout_constraintStart_toStartOf="@+id/tv_des"
app:layout_constraintTop_toBottomOf="@+id/tv_info" /> app:layout_constraintTop_toBottomOf="@+id/tv_des"
app:layout_constraintEnd_toEndOf="parent"/>
<com.hjq.shape.layout.ShapeLinearLayout <com.hjq.shape.layout.ShapeLinearLayout
android:id="@+id/ll_extra" android:id="@+id/ll_extra"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="@dimen/dp_20" android:layout_height="@dimen/dp_18"
android:gravity="center" android:gravity="center"
android:paddingHorizontal="@dimen/dp_10" android:paddingHorizontal="@dimen/dp_10"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:shape_radiusInBottomRight="@dimen/dp_15" app:shape_radiusInBottomRight="@dimen/dp_10"
app:shape_radiusInTopLeft="@dimen/dp_15" app:shape_radiusInTopLeft="@dimen/dp_15"
app:shape_solidGradientEndColor="#FFE4CC" app:shape_solidGradientEndColor="#FFE4CC"
app:shape_solidGradientStartColor="#FFDDBF"> app:shape_solidGradientStartColor="#FFDDBF">
@ -131,7 +118,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="+Extra 500" android:text="+Extra 500"
android:textColor="#8F5600" android:textColor="#8F5600"
android:textSize="@dimen/sp_10" /> android:textSize="@dimen/sp_12" />
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -142,16 +129,13 @@
</com.hjq.shape.layout.ShapeLinearLayout> </com.hjq.shape.layout.ShapeLinearLayout>
<com.hjq.shape.view.ShapeCheckBox <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/checkbox" android:id="@+id/checkbox"
android:layout_width="@dimen/dp_20" android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20" android:layout_height="@dimen/dp_20"
android:layout_marginTop="@dimen/dp_10" android:layout_marginTop="@dimen/dp_10"
android:background="@null" android:visibility="gone"
android:clickable="false" android:src="@mipmap/checkbox_checked_ic"
android:focusable="false"
android:focusableInTouchMode="false"
app:buttonCompat="@drawable/checkbox_selector"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 317 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -7,8 +7,8 @@ android {
defaultConfig { defaultConfig {
minSdk 24 minSdk 24
targetSdk 34 targetSdk 34
versionName '1.2.2' versionName '1.2.4'
versionCode 14 versionCode 16
} }
compileOptions { compileOptions {