diff --git a/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt b/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt index 29d4840..d65c189 100644 --- a/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt +++ b/app/src/main/java/com/localee/mireo/app/http/bean/TranslatesBean.kt @@ -16,6 +16,9 @@ class TranslatesBean( ) 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_activate_vip_content: String, val mireo_activate_vip_title: String, diff --git a/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt b/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt index fb331cc..d5a6cf6 100644 --- a/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt +++ b/app/src/main/java/com/localee/mireo/app/other/MsConstants.kt @@ -91,6 +91,7 @@ object MsConstants { const val CONSTANTS_web_notification = "CONSTANTS_web_notification" 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_PAY_REFRESH_DISMISS = "CONSTANTS_PAY_REFRESH_DISMISS" } \ No newline at end of file diff --git a/app/src/main/java/com/localee/mireo/app/ui/activity/HomeActivity.kt b/app/src/main/java/com/localee/mireo/app/ui/activity/HomeActivity.kt index ccd895a..bc8d022 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/activity/HomeActivity.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/activity/HomeActivity.kt @@ -347,6 +347,7 @@ class HomeActivity : AppActivity(), NavigationAdapter.OnNavigationListener, ) } }) + GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this) .addOnCompleteListener { if (it.isSuccessful) { diff --git a/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt b/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt index c9e79b6..2a1a8ed 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/activity/LanguageSwitchActivity.kt @@ -167,8 +167,8 @@ class LanguageSwitchActivity : AppActivity(), StatusAction { .request(object : HttpCallbackProxy>(this) { override fun onHttpSuccess(result: HttpData) { result.getData()?.let { - MsMMKVUtils.getMMKV() - .putString(MsConstants.Constants_Main_Video_info, "") +// MsMMKVUtils.getMMKV() +// .putString(MsConstants.Constants_Main_Video_info, "") lifecycleScope.launch { withContext(Dispatchers.IO) { TranslatesUtils.saveTranslates(it.translates) diff --git a/app/src/main/java/com/localee/mireo/app/ui/activity/StoreActivity.kt b/app/src/main/java/com/localee/mireo/app/ui/activity/StoreActivity.kt index 9ae6a44..93cc024 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/activity/StoreActivity.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/activity/StoreActivity.kt @@ -1,10 +1,12 @@ package com.localee.mireo.app.ui.activity +import android.graphics.Rect import android.os.Build import android.text.Html import android.view.View import android.widget.TextView import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView 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.Logger 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.utils.DHStringUtils.getPublicRequest import com.localee.mireo.app.utils.MsMMKVUtils @@ -56,24 +59,16 @@ import kotlinx.coroutines.launch class StoreActivity : AppActivity() { 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 recyclerView: RecyclerView? by lazy { findViewById(R.id.recyclerView) } - private val tvBuy: TextView? by lazy { findViewById(R.id.tv_buy) } - private val tvVipExpires: TextView? by lazy { findViewById(R.id.tv_vip_expires) } - 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 tvTitle: TextView? by lazy { findViewById(R.id.tv_title) } + private val tvTitleVip: TextView? by lazy { findViewById(R.id.tv_title_vip) } private val tvHint: TextView? by lazy { findViewById(R.id.tv_hint) } private var mAdapter: MyVipBuyAdapter? = null private var mCoinAdapter: MyCoinBuyAdapter? = null + private var mCoinBigAdapter: MyCoinBuyBigAdapter? = null private var type = 0 private var billingClient: BillingClient? = null @@ -82,6 +77,7 @@ class StoreActivity : AppActivity() { private var order_code = "" private var vipData: PaySettingsBean.Vip? = null private var coinsData: PaySettingsBean.Coins? = null + private var coinsDataBig: PaySettingsBean.Coins? = null private var payReq: PayBean? = null private val scope = CoroutineScope(Dispatchers.Main) @@ -96,17 +92,8 @@ class StoreActivity : AppActivity() { if (TranslatesUtils.translates() != null) { title?.setTitle(TranslatesUtils.translates()?.mireo_store) title?.setRightTitle(TranslatesUtils.translates()?.mireo_restore) - tvName?.text = TranslatesUtils.translates()?.mireo_store_recharge_discount - tvVipExpires?.text = TranslatesUtils.translates()?.mireo_store_limited - 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 + tvTitle?.text = TranslatesUtils.translates()?.mireo_coin_recharege + tvTitleVip?.text = TranslatesUtils.translates()?.mrieo_store_vip_title if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { tvHint?.text = Html.fromHtml( TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips), @@ -122,33 +109,83 @@ class StoreActivity : AppActivity() { recyclerCoin?.layoutManager = 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) + 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() recyclerCoin?.adapter = mCoinAdapter + recyclerView?.layoutManager = LinearLayoutManager(this) mAdapter = MyVipBuyAdapter() 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 -> - if (type == 0) { + if (type != 1) { mCoinAdapter?.currentPosition = -1 mCoinAdapter?.notifyDataSetChanged() + mCoinBigAdapter?.currentPosition = -1 + mCoinBigAdapter?.notifyDataSetChanged() } type = 1 mAdapter?.currentPosition = position 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 { @@ -183,54 +220,52 @@ class StoreActivity : AppActivity() { } }) - setUI() initPay() } - private fun setUI() { - tvCoins?.text = MsMMKVUtils.getAllCoin().toString() - + fun setOnPayNowClick() { + singleClick { + if (!isConnect) { + if (TranslatesUtils.translates() != null) { + toast(TranslatesUtils.translates()?.mireo_g_pay_error.toString()) + } else { + toast(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() + } + getCreateOrder( + CreateOrderReqBean( + idStr, + "google", + 0, + 0 + ) + ) + } } + 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 { - if (!isConnect) { - if (TranslatesUtils.translates() != null) { - toast(TranslatesUtils.translates()?.mireo_g_pay_error.toString()) - } else { - toast(getString(R.string.google_pay_error)) - } - return@singleClick - } - if (type == 0) { - coinsData = - mCoinAdapter!!.getItem(mCoinAdapter!!.currentPosition) as PaySettingsBean.Coins - } else { - vipData = mAdapter!!.getItem(mAdapter!!.currentPosition) as PaySettingsBean.Vip - } - getCreateOrder( - CreateOrderReqBean( - if (type == 0) coinsData?.id.toString() else vipData?.id.toString(), - "google", - 0, - 0 - ) - ) - } - } - } private fun getPaySettings(shortPlayId: Int?, videoId: Int?) { @@ -242,11 +277,45 @@ class StoreActivity : AppActivity() { .request(object : HttpCallbackProxy>(this) { override fun onHttpSuccess(result: HttpData) { result.getData()?.let { - mCoinAdapter?.submitList(it.list_coins) - mAdapter?.submitList(it.list_sub_vip) + if (it.list_sub_vip.isNotEmpty()) { + 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 -> { for (purchase in purchases!!) { if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) { - if (type == 0) { - consumePurchase(purchase) - } else { + if (type == 1) { consumePurchaseSub(purchase) + } else { + consumePurchase(purchase) } } } @@ -405,7 +474,8 @@ class StoreActivity : AppActivity() { } private fun queryInAppProductDetails( - coinsList: List + coinsList: List, + type: String ) { val productDetailsResponseListener = ProductDetailsResponseListener { billingResult, productDetailsList -> @@ -424,7 +494,11 @@ class StoreActivity : AppActivity() { } mCoinAdapter?.recyclerView?.postDelayed({ - mCoinAdapter?.submitList(updatedCoinsList) + if (type == "small") { + mCoinAdapter?.submitList(updatedCoinsList) + } else { + mCoinBigAdapter?.submitList(updatedCoinsList) + } }, 500) } else { hideDialog() @@ -465,10 +539,10 @@ class StoreActivity : AppActivity() { } } } - val productType: String = if (type == 0) { - BillingClient.ProductType.INAPP - } else { + val productType: String = if (type == 1) { BillingClient.ProductType.SUBS + } else { + BillingClient.ProductType.INAPP } val inAppProductInfo = ArrayList() @@ -541,8 +615,10 @@ class StoreActivity : AppActivity() { order_code = it.order_code.toString() if (type == 0) { coinsData?.android_template_id?.let { it1 -> getProduct(it1) } - } else { + } else if (type == 1) { vipData?.android_template_id?.let { it1 -> getProduct(it1) } + } else { + coinsDataBig?.android_template_id?.let { it1 -> getProduct(it1) } } } ?: run { @@ -646,12 +722,12 @@ class StoreActivity : AppActivity() { ConsumeResponseListener { billingResult, purchaseToken -> val examplePayReq = PayBean( order_code, - if (type == 0) coinsData?.id.toString() else vipData?.id.toString(), + if (type == 0) coinsData?.id.toString() else coinsDataBig?.id.toString(), 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, 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 if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) { @@ -674,7 +750,6 @@ class StoreActivity : AppActivity() { override fun onHttpSuccess(result: HttpData) { result.getData()?.let { MsMMKVUtils.saveUserInfo(it) - setUI() } } }) diff --git a/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt b/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt index 1d06dfb..bdf7ac0 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/activity/VideoPlayActivity.kt @@ -91,6 +91,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle private var first: Boolean = true private var play: Boolean = true + private var isBuyDialog: Boolean = false private var qualityRefresh: Boolean = false private var needRefresh: 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 var currentPage = 1 private val currentSize = 10 + private var notLockPosition = 0 private var currentPosition = 0 private var bannerPosition = 0 private var recommendAdapter: VideoPlayAdapter? = null @@ -338,6 +340,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle detailPlayerView()?.pause() }, 500) } else { + notLockPosition = position + 1 MsConstants.ExampleLock = false viewLock?.visibility = View.INVISIBLE createHistory( @@ -412,8 +415,11 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle super.onResume() if (!play) { detailPlayerView()?.play() + player?.play() } else { - play = false + if (!isBuyDialog) { + play = false + } } } @@ -433,7 +439,10 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle override fun onPause() { super.onPause() MsConstants.ExampleIsCurrentPage = false - srRecommend?.postDelayed({ detailPlayerView()?.pause() }, 300) + srRecommend?.postDelayed({ + detailPlayerView()?.pause() + player?.pause() + }, 300) } fun getVideoDetails( @@ -746,6 +755,9 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle if (MsConstants.CONSTANTS_start_play == event) { viewLock?.postDelayed({ detailPlayerView()?.play() }, 500) } + if (MsConstants.CONSTANTS_PAY_REFRESH_DISMISS == event) { + isBuyDialog = false + } } override fun collection(episode: VideoDetailsApi.Bean.Episode) { @@ -970,6 +982,7 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle supportFragmentManager, "ExampleRechargeDialogFragment" ) + isBuyDialog = true play = true } catch (e: Exception) { e.printStackTrace() @@ -1142,21 +1155,36 @@ open class VideoPlayActivity : AppActivity(), VideoPlayAdapter.PlayerDetailColle it.short_play_video_id ) ) + val toJson = Gson().toJson( + shortPlayId?.let { it1 -> + HomeDataHistoryBean( + shortVideo?.name.toString(), + it1, + it.episode.toString(), + shortVideo?.image_url.toString() + ) + } + ) + MsMMKVUtils.getMMKV() + .putString(MsConstants.Constants_Main_Video_info, toJson) + MsMMKVUtils.getMMKV() + .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) } - val toJson = Gson().toJson( - shortPlayId?.let { it1 -> - HomeDataHistoryBean( - shortVideo?.name.toString(), - it1, - it.episode.toString(), - shortVideo?.image_url.toString() - ) - } - ) - MsMMKVUtils.getMMKV() - .putString(MsConstants.Constants_Main_Video_info, toJson) - MsMMKVUtils.getMMKV() - .putBoolean(MsConstants.Constants_Main_Video_status, true) } } } diff --git a/app/src/main/java/com/localee/mireo/app/ui/adapter/MyCoinBuyAdapter.kt b/app/src/main/java/com/localee/mireo/app/ui/adapter/MyCoinBuyAdapter.kt index d406d6d..b4691ec 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/adapter/MyCoinBuyAdapter.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/adapter/MyCoinBuyAdapter.kt @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.RecyclerView import com.chad.library.adapter4.BaseQuickAdapter import com.localee.mireo.shortapp.databinding.ItemCoinBuyBinding import com.localee.mireo.app.http.bean.PaySettingsBean +import com.localee.mireo.app.utils.TranslatesUtils import kotlin.math.floor class MyCoinBuyAdapter : BaseQuickAdapter() { @@ -29,6 +30,11 @@ class MyCoinBuyAdapter : BaseQuickAdapter 0) { + holder.binding.tvBonus.text = "+".plus(item.send_coins) + } else { + holder.binding.tvBonus.text = "" + } if (item.corner_marker.isNotEmpty()) { holder.binding.tvHot.text = item.corner_marker holder.binding.tvHot.visibility = View.VISIBLE diff --git a/app/src/main/java/com/localee/mireo/app/ui/adapter/MyCoinBuyBigAdapter.kt b/app/src/main/java/com/localee/mireo/app/ui/adapter/MyCoinBuyBigAdapter.kt new file mode 100644 index 0000000..981557f --- /dev/null +++ b/app/src/main/java/com/localee/mireo/app/ui/adapter/MyCoinBuyBigAdapter.kt @@ -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() { + + 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 + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/localee/mireo/app/ui/adapter/MyVipBuyAdapter.kt b/app/src/main/java/com/localee/mireo/app/ui/adapter/MyVipBuyAdapter.kt index 14c0324..4db409e 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/adapter/MyVipBuyAdapter.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/adapter/MyVipBuyAdapter.kt @@ -32,30 +32,29 @@ class MyVipBuyAdapter : BaseQuickAdapter 0) { holder.binding.tvExtra.text = "+ ".plus(TranslatesUtils.translates()?.mireo_extra).plus(" ") .plus(item?.send_coins) - holder.binding.tvExpire.text = - TranslatesUtils.translates()?.mireo_donate_expire?.let { - TranslatesUtils.replace( - it, - item?.send_coin_ttl.toString() - ) - } +// holder.binding.tvExpire.text = +// TranslatesUtils.translates()?.mireo_donate_expire?.let { +// TranslatesUtils.replace( +// it, +// item?.send_coin_ttl.toString() +// ) +// } holder.binding.llExtra.visibility = View.VISIBLE - holder.binding.tvExpire.visibility = View.VISIBLE +// holder.binding.tvExpire.visibility = View.VISIBLE } else { 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) @@ -63,57 +62,65 @@ class MyVipBuyAdapter : BaseQuickAdapter { holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_week_bg) - holder.binding.tvDay.setTextColor(Color.parseColor("#712B2B")) - holder.binding.tvMoney.setTextColor(Color.parseColor("#712B2B")) - holder.binding.tvDes.setTextColor(Color.parseColor("#712B2B")) + holder.binding.tvDay.setTextColor(Color.parseColor("#2493A4")) + holder.binding.tvMoney.setTextColor(Color.parseColor("#2493A4")) + holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#2493A4")) + holder.binding.tvDes.setTextColor(Color.parseColor("#006574")) holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( - 0xFFFFCDCB.toInt(), + 0xFFA3F3FF.toInt(), 0x00000000 ) ?.intoBackground() + holder.binding.tvExpire.setTextColor(Color.parseColor("#6CADB7")) } "month" -> { holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_month_bg) - holder.binding.tvDay.setTextColor(Color.parseColor("#714F00")) - holder.binding.tvMoney.setTextColor(Color.parseColor("#714F00")) - holder.binding.tvDes.setTextColor(Color.parseColor("#714F00")) + holder.binding.tvDay.setTextColor(Color.parseColor("#712B2B")) + holder.binding.tvMoney.setTextColor(Color.parseColor("#712B2B")) + holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#712B2B")) + holder.binding.tvDes.setTextColor(Color.parseColor("#712B2B")) holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( - 0xFFFFEAC9.toInt(), + 0xFFFFADAD.toInt(), 0x00000000 ) ?.intoBackground() + holder.binding.tvExpire.setTextColor(Color.parseColor("#A66969")) } "quarter" -> { holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_quarter_bg) - holder.binding.tvDay.setTextColor(Color.parseColor("#472B71")) - holder.binding.tvMoney.setTextColor(Color.parseColor("#472B71")) - holder.binding.tvDes.setTextColor(Color.parseColor("#472B71")) + holder.binding.tvDay.setTextColor(Color.parseColor("#532C8D")) + holder.binding.tvMoney.setTextColor(Color.parseColor("#532C8D")) + holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#532C8D")) + holder.binding.tvDes.setTextColor(Color.parseColor("#532C8D")) holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( - 0xFFE6D8FF.toInt(), + 0xFFD2B4FF.toInt(), 0x00000000 ) ?.intoBackground() + holder.binding.tvExpire.setTextColor(Color.parseColor("#947ABA")) } "year" -> { holder.binding.clItem.setBackgroundResource(R.mipmap.ic_vip_year_bg) - holder.binding.tvDay.setTextColor(Color.parseColor("#006574")) - holder.binding.tvMoney.setTextColor(Color.parseColor("#006574")) - holder.binding.tvDes.setTextColor(Color.parseColor("#006574")) + holder.binding.tvDay.setTextColor(Color.parseColor("#CF9100")) + holder.binding.tvMoney.setTextColor(Color.parseColor("#CF9100")) + holder.binding.tvMoneyDay.setTextColor(Color.parseColor("#CF9100")) + holder.binding.tvDes.setTextColor(Color.parseColor("#714F00")) holder.binding.tvDes.shapeDrawableBuilder?.setSolidGradientColors( - 0xFFD5FAFF.toInt(), + 0xFFFFDA84.toInt(), 0x00000000 ) ?.intoBackground() + holder.binding.tvExpire.setTextColor(Color.parseColor("#B8984F")) } } if (currentPosition == position) { - holder.binding.checkbox.isChecked = true + holder.binding.checkbox.visibility = View.VISIBLE } else { - holder.binding.checkbox.isChecked = false + holder.binding.checkbox.visibility = View.GONE } } diff --git a/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt b/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt index 234a63a..a41a235 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/fragment/MineFragment.kt @@ -287,7 +287,8 @@ class MineFragment : TitleBarFragment(), OnRefreshLoadMoreListener } R.id.ll_vip -> { - startActivity(MyVipActivity::class.java) +// startActivity(MyVipActivity::class.java) + startActivity(StoreActivity::class.java) } R.id.ll_store -> { @@ -359,7 +360,8 @@ class MineFragment : TitleBarFragment(), OnRefreshLoadMoreListener MsConstants.CONSTANTS_PREF_LAST_POPUP_TIME_VIP, System.currentTimeMillis() ) - startActivity(MyVipActivity::class.java) + startActivity(StoreActivity::class.java) +// startActivity(MyVipActivity::class.java) vipSplashDialog?.dismiss() isVipSplash = false System.gc() diff --git a/app/src/main/java/com/localee/mireo/app/ui/fragment/RechargeDialogFragment.kt b/app/src/main/java/com/localee/mireo/app/ui/fragment/RechargeDialogFragment.kt index bd5e145..3af90c3 100644 --- a/app/src/main/java/com/localee/mireo/app/ui/fragment/RechargeDialogFragment.kt +++ b/app/src/main/java/com/localee/mireo/app/ui/fragment/RechargeDialogFragment.kt @@ -3,6 +3,7 @@ package com.localee.mireo.app.ui.fragment import android.app.AlertDialog import android.app.Dialog import android.content.DialogInterface +import android.graphics.Rect import android.os.Build import android.os.Bundle import android.text.Html @@ -10,7 +11,9 @@ import android.view.Gravity import android.view.View import android.view.WindowManager import androidx.lifecycle.lifecycleScope +import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.android.billingclient.api.AcknowledgePurchaseParams import com.android.billingclient.api.BillingClient 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.MsConstants 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.utils.DHStringUtils.getPublicRequest import com.localee.mireo.app.utils.MsMMKVUtils @@ -64,14 +68,17 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener private var short_play_id: Int? = 0 private var mAdapter: MyVipBuyAdapter? = null private var mCoinAdapter: MyCoinBuyAdapter? = null + private var mCoinBigAdapter: MyCoinBuyBigAdapter? = null private var order_code = "" private var vipData: PaySettingsBean.Vip? = null private var coinsData: PaySettingsBean.Coins? = null + private var coinsDataBig: PaySettingsBean.Coins? = null private var billingClient: BillingClient? = null private var purchaseData: Purchase? = null private var payReq: PayBean? = null private var detainmentData: PaySettingsBean.Coins? = null + private var parcelable: VideoDetailsApi.Bean.Episode? = null interface OnDataPass { fun onDataPass(data: PaySettingsBean.Coins?) @@ -85,108 +92,127 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener val inflater = requireActivity().layoutInflater val view = inflater.inflate(R.layout.dialog_recharge_fragment, null) dialogRechargeFragmentBinding = DialogRechargeFragmentBinding.bind(view) - val parcelable = - arguments?.getParcelable(MsConstants.CONSTANTS_Episode) + parcelable = + arguments?.getParcelable(MsConstants.CONSTANTS_Episode) short_play_id = parcelable?.short_play_id promise_view_ad = parcelable?.promise_view_ad dialogRechargeFragmentBinding?.tvCoins?.text = MsMMKVUtils.getAllCoin().toString() + dialogRechargeFragmentBinding?.tvUnlock?.text = parcelable?.coins.toString() dialogRechargeFragmentBinding?.ivLoading?.let { Glide.with(requireContext()) .asGif() .load(R.mipmap.iv_loading) .into(it) } - dialogRechargeFragmentBinding?.recyclerCoin?.layoutManager = - LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) - dialogRechargeFragmentBinding?.recyclerView?.layoutManager = - LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) - - mCoinAdapter = MyCoinBuyAdapter() - dialogRechargeFragmentBinding?.recyclerCoin?.adapter = mCoinAdapter - - mAdapter = MyVipBuyAdapter() - dialogRechargeFragmentBinding?.recyclerView?.adapter = mAdapter + dialogRechargeFragmentBinding?.ivClose?.setOnClickListener { + dismiss() + } if (TranslatesUtils.translates() != null) { - dialogRechargeFragmentBinding?.tvCoinsText?.text = TranslatesUtils.translates()?.mireo_store_coins - dialogRechargeFragmentBinding?.tvCoinRecharge?.text = TranslatesUtils.translates()?.mireo_coin_recharege - dialogRechargeFragmentBinding?.tvMembership?.text = TranslatesUtils.translates()?.mireo_store_recharge - dialogRechargeFragmentBinding?.tvBuy?.text = TranslatesUtils.translates()?.mireo_buy_now + dialogRechargeFragmentBinding?.tvCoinsText?.text = + TranslatesUtils.translates()?.mireo_store_coins + dialogRechargeFragmentBinding?.tvTitle?.text = TranslatesUtils.translates()?.mireo_coin_recharege + 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) { dialogRechargeFragmentBinding?.tvHint?.text = Html.fromHtml( TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips), Html.FROM_HTML_MODE_COMPACT ) - }else{ + } else { dialogRechargeFragmentBinding?.tvHint?.text = Html.fromHtml( TranslatesUtils.translates()?.mireo_pay_hint ?: getString(R.string.store_tips) ) } } - - - mCoinAdapter?.setOnItemClickListener { adapter, view, position -> - if (type == 1) { - mAdapter?.currentPosition = -1 - mAdapter?.notifyDataSetChanged() + 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() } - type = 0 - mCoinAdapter?.currentPosition = position - mCoinAdapter?.notifyDataSetChanged() - } + }) + 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 = MyCoinBuyAdapter() + dialogRechargeFragmentBinding?.recyclerCoin?.adapter = mCoinAdapter + + dialogRechargeFragmentBinding?.recyclerView?.layoutManager = + LinearLayoutManager(requireContext()) + mAdapter = MyVipBuyAdapter() + dialogRechargeFragmentBinding?.recyclerView?.adapter = mAdapter + mCoinBigAdapter = MyCoinBuyBigAdapter() + + dialogRechargeFragmentBinding?.recyclerCoinBig?.adapter = mCoinBigAdapter + mAdapter?.setOnItemClickListener { adapter, view, position -> - if (type == 0) { + if (type != 1) { mCoinAdapter?.currentPosition = -1 mCoinAdapter?.notifyDataSetChanged() + mCoinBigAdapter?.currentPosition = -1 + mCoinBigAdapter?.notifyDataSetChanged() } type = 1 mAdapter?.currentPosition = position 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) initPay() @@ -199,11 +225,60 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener window?.setGravity(Gravity.BOTTOM) val layoutParams = window?.attributes 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 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?) { EasyHttp.get(this) .api(PaySettingsApi().apply { @@ -213,12 +288,47 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener .request(object : HttpCallbackProxy>(this) { override fun onHttpSuccess(result: HttpData) { result.getData()?.let { - mCoinAdapter?.submitList(it.list_coins) - mAdapter?.submitList(it.list_sub_vip) + if (it.list_sub_vip.isNotEmpty()) { + 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_coins?.let { it1 -> queryInAppProductDetails(it1) } + it.list_sub_vip.let { it1 -> querySubProductDetails(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 BillingClient.BillingResponseCode.OK -> { for (purchase in purchases!!) { if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) { - if (type == 0) { - consumePurchase(purchase) - } else { + if (type == 1) { consumePurchaseSub(purchase) + } else { + consumePurchase(purchase) } } } @@ -314,10 +424,10 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener } } - val productType: String = if (type == 0) { - BillingClient.ProductType.INAPP - } else { + val productType: String = if (type == 1) { BillingClient.ProductType.SUBS + } else { + BillingClient.ProductType.INAPP } val inAppProductInfo = ArrayList() inAppProductInfo.add( @@ -380,7 +490,8 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener } private fun queryInAppProductDetails( - coinsList: List + coinsList: List, + type: String ) { val productDetailsResponseListener = ProductDetailsResponseListener { billingResult, productDetailsList -> @@ -399,7 +510,11 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener } mCoinAdapter?.recyclerView?.postDelayed({ - mCoinAdapter?.submitList(updatedCoinsList) + if (type == "small") { + mCoinAdapter?.submitList(updatedCoinsList) + } else { + mCoinBigAdapter?.submitList(updatedCoinsList) + } }, 500) } } @@ -560,8 +675,10 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener order_code = it.order_code.toString() if (type == 0) { coinsData?.android_template_id?.let { it1 -> getProduct(it1) } - } else { + } else if (type == 1) { vipData?.android_template_id?.let { it1 -> getProduct(it1) } + } else { + coinsDataBig?.android_template_id?.let { it1 -> getProduct(it1) } } } ?: run { @@ -639,10 +756,9 @@ class RechargeDialogFragment : BottomSheetDialogFragment(), OnHttpListener payReq = null dataPasser?.onDataPass(detainmentData) System.gc() + EventBus.getDefault() + .post(MsConstants.CONSTANTS_PAY_REFRESH_DISMISS) super.onDismiss(dialog) -// if (!isPay) { -// EventBus.getDefault().post(Constants_close_recharge) -// } } } \ No newline at end of file diff --git a/app/src/main/java/com/localee/mireo/app/utils/MsMMKVUtils.kt b/app/src/main/java/com/localee/mireo/app/utils/MsMMKVUtils.kt index 9c9d9dc..8df069f 100644 --- a/app/src/main/java/com/localee/mireo/app/utils/MsMMKVUtils.kt +++ b/app/src/main/java/com/localee/mireo/app/utils/MsMMKVUtils.kt @@ -13,7 +13,7 @@ object MsMMKVUtils { fun getMMKV(): MMKV { if (mmkv == null) { - mmkv = MMKV.defaultMMKV() + mmkv = MMKV.mmkvWithID("mireotv") } return mmkv!! } diff --git a/app/src/main/res/drawable/bg_store_unlock.xml b/app/src/main/res/drawable/bg_store_unlock.xml new file mode 100644 index 0000000..2ad7f6a --- /dev/null +++ b/app/src/main/res/drawable/bg_store_unlock.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_store.xml b/app/src/main/res/layout/activity_store.xml index 5edda8f..da7eced 100644 --- a/app/src/main/res/layout/activity_store.xml +++ b/app/src/main/res/layout/activity_store.xml @@ -5,20 +5,6 @@ android:layout_height="match_parent" android:background="@color/example_color_121418"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toBottomOf="@+id/tv_title_vip" /> + + + + + + + app:layout_constraintTop_toBottomOf="@+id/recycler_coin" /> diff --git a/app/src/main/res/layout/dialog_recharge_fragment.xml b/app/src/main/res/layout/dialog_recharge_fragment.xml index a9ae2f4..550b715 100644 --- a/app/src/main/res/layout/dialog_recharge_fragment.xml +++ b/app/src/main/res/layout/dialog_recharge_fragment.xml @@ -3,119 +3,133 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingBottom="@dimen/dp_20" app:shape_radiusInTopLeft="@dimen/dp_12" app:shape_radiusInTopRight="@dimen/dp_12" app:shape_solidColor="#0F1013"> - + app:layout_constraintTop_toTopOf="@+id/iv_right_coin" /> + + + + + + + + + + + + + + android:layout_below="@+id/tv_coins_text" + android:layout_marginTop="@dimen/dp_15"> - - - - - - - - - - - - - + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toBottomOf="@+id/tv_title_vip" /> + + + + + + - + app:layout_constraintTop_toBottomOf="@+id/recycler_coin" /> + app:shape_radiusInBottomLeft="@dimen/dp_8" + app:shape_radiusInTopRight="@dimen/dp_8" + app:shape_solidColor="@color/example_color_F56490" /> - @@ -80,10 +85,10 @@ android:textSize="@dimen/sp_12" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" - app:shape_radiusInBottomLeft="@dimen/dp_12" - app:shape_radiusInBottomRight="@dimen/dp_12" - app:shape_solidGradientEndColor="#353739" - app:shape_solidGradientOrientation="topToBottom" - app:shape_solidGradientStartColor="#353739" /> + app:shape_radiusInBottomLeft="@dimen/dp_8" + app:shape_radiusInBottomRight="@dimen/dp_8" + app:shape_solidGradientEndColor="#F24C92" + app:shape_solidGradientOrientation="startToEnd" + app:shape_solidGradientStartColor="#F8726D" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_coin_buy_big.xml b/app/src/main/res/layout/item_coin_buy_big.xml new file mode 100644 index 0000000..318e511 --- /dev/null +++ b/app/src/main/res/layout/item_coin_buy_big.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_vip_buy.xml b/app/src/main/res/layout/item_vip_buy.xml index b749136..ecaa0f2 100644 --- a/app/src/main/res/layout/item_vip_buy.xml +++ b/app/src/main/res/layout/item_vip_buy.xml @@ -2,9 +2,8 @@ @@ -31,11 +30,11 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginStart="@dimen/dp_14" - android:layout_marginTop="@dimen/dp_32" + android:layout_marginTop="@dimen/dp_25" android:fontFamily="sans-serif-medium" android:gravity="center_horizontal" android:text="Weekly" - android:textColor="#712B2B" + android:textColor="#2493A4" android:textSize="@dimen/sp_12" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -46,10 +45,9 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginStart="@dimen/dp_14" - android:layout_marginTop="@dimen/dp_6" android:text="0" - android:textColor="#FFB69A" - android:textSize="@dimen/sp_19" + android:textColor="#2493A4" + android:textSize="@dimen/sp_30" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tv_day" /> @@ -59,10 +57,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:layout_marginBottom="@dimen/dp_3" + android:layout_marginBottom="@dimen/dp_6" android:text="/Week" - android:textColor="#FFB69A" - android:textSize="@dimen/sp_12" + android:textColor="#2493A4" + android:textSize="@dimen/sp_16" app:layout_constraintBottom_toBottomOf="@+id/tv_money" app:layout_constraintStart_toEndOf="@+id/tv_money" /> @@ -71,56 +69,45 @@ android:id="@+id/tv_des" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/dp_5" android:layout_marginEnd="@dimen/dp_5" 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:text="Unlimited access to all series for 1 week (No Ads)" - android:textColor="#712B2B" - android:textSize="@dimen/sp_11" + android:textColor="#006574" + android:textSize="@dimen/sp_10" app:layout_constraintStart_toStartOf="@+id/tv_money" app:layout_constraintTop_toBottomOf="@+id/tv_money" app:shape_radius="@dimen/dp_20" app:shape_solidGradientEndColor="@color/transparent" - app:shape_solidGradientStartColor="#FFCDCB" /> + app:shape_solidGradientStartColor="#A3F3FF" /> - - + app:layout_constraintTop_toBottomOf="@+id/tv_des" + app:layout_constraintEnd_toEndOf="parent"/> @@ -131,7 +118,7 @@ android:layout_height="wrap_content" android:text="+Extra 500" android:textColor="#8F5600" - android:textSize="@dimen/sp_10" /> + android:textSize="@dimen/sp_12" /> - diff --git a/app/src/main/res/mipmap-xxhdpi/ic_dialog_close_style_2.png b/app/src/main/res/mipmap-xxhdpi/ic_dialog_close_style_2.png new file mode 100644 index 0000000..89d1599 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_dialog_close_style_2.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_month_bg.png b/app/src/main/res/mipmap-xxhdpi/ic_vip_month_bg.png new file mode 100644 index 0000000..7beace3 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_month_bg.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_month_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_month_bg.webp deleted file mode 100644 index 73cc455..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_month_bg.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_quarter_bg.png b/app/src/main/res/mipmap-xxhdpi/ic_vip_quarter_bg.png new file mode 100644 index 0000000..39ef68d Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_quarter_bg.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_quarter_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_quarter_bg.webp deleted file mode 100644 index 508e116..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_quarter_bg.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_week_bg.png b/app/src/main/res/mipmap-xxhdpi/ic_vip_week_bg.png new file mode 100644 index 0000000..929e4b5 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_week_bg.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_week_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_week_bg.webp deleted file mode 100644 index 481b8bd..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_week_bg.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_year_bg.png b/app/src/main/res/mipmap-xxhdpi/ic_vip_year_bg.png new file mode 100644 index 0000000..7e7bf7d Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_vip_year_bg.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_vip_year_bg.webp b/app/src/main/res/mipmap-xxhdpi/ic_vip_year_bg.webp deleted file mode 100644 index 9d73c6e..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_vip_year_bg.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/iv_store_coin_big_hot.png b/app/src/main/res/mipmap-xxhdpi/iv_store_coin_big_hot.png new file mode 100644 index 0000000..4c0dd23 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/iv_store_coin_big_hot.png differ diff --git a/common.gradle b/common.gradle index ff6adf9..fcfe6b5 100644 --- a/common.gradle +++ b/common.gradle @@ -7,8 +7,8 @@ android { defaultConfig { minSdk 24 targetSdk 34 - versionName '1.2.2' - versionCode 14 + versionName '1.2.4' + versionCode 16 } compileOptions {