From 41c7432edb428725d172b6789704ef89beac9c13 Mon Sep 17 00:00:00 2001 From: yuyl <765782212@qq.com> Date: Mon, 16 Jun 2025 20:29:42 +0800 Subject: [PATCH] veloria two 6.16 commit --- app/build.gradle.kts | 4 +- .../now/shortapp/civil/TranslationHelper.kt | 4 + .../avcintraRelock/PlayerBuyDialogFragment.kt | 141 ++++++++++++------ .../bidirectional/MQVAutoWidthActivity.kt | 6 +- .../bidirectional/PSVHomeSearchActivity.kt | 5 +- .../bidirectional/VeStoreActivity.kt | 106 ++++++++++--- .../VeBannerVipPayAdapter.kt | 119 +++++++++++++++ app/src/main/res/layout/activity_ve_store.xml | 20 ++- app/src/main/res/layout/item_ve_store_vip.xml | 6 +- .../layout/layout_ve_player_buy_dialog.xml | 20 +-- app/src/main/res/values/strings.xml | 8 +- 11 files changed, 346 insertions(+), 93 deletions(-) create mode 100644 app/src/main/java/com/veloria/now/shortapp/subtractionCroll/modificationsPretch/VeBannerVipPayAdapter.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index fcaad7d..cc8a6c7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "com.veloria.now.shortapp" minSdk = 24 targetSdk = 34 - versionCode = 3 - versionName = "1.0.2" + versionCode = 4 + versionName = "1.0.3" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/veloria/now/shortapp/civil/TranslationHelper.kt b/app/src/main/java/com/veloria/now/shortapp/civil/TranslationHelper.kt index 9ec7408..1bc1417 100644 --- a/app/src/main/java/com/veloria/now/shortapp/civil/TranslationHelper.kt +++ b/app/src/main/java/com/veloria/now/shortapp/civil/TranslationHelper.kt @@ -22,4 +22,8 @@ object TranslationHelper { } + fun replaces(string: String, new1: String, new2: String): String { + val replace = string.replace("##", new1) + return replace.replace("#1#", new2) + } } \ No newline at end of file diff --git a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/avcintraRelock/PlayerBuyDialogFragment.kt b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/avcintraRelock/PlayerBuyDialogFragment.kt index cf53150..3afa4dc 100644 --- a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/avcintraRelock/PlayerBuyDialogFragment.kt +++ b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/avcintraRelock/PlayerBuyDialogFragment.kt @@ -13,7 +13,6 @@ import android.view.WindowManager import androidx.lifecycle.ViewModelProvider 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 @@ -36,12 +35,13 @@ import com.veloria.now.shortapp.civil.YFHome import com.veloria.now.shortapp.civil.toast import com.veloria.now.shortapp.databinding.LayoutVePlayerBuyDialogBinding import com.veloria.now.shortapp.subtractionCroll.bidirectional.coordinate.VeStoreViewModel +import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeBannerVipPayAdapter import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinAdapter -import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreVipAdapter import com.veloria.now.shortapp.texturedAsink.VeCreatePayOrderReqBean import com.veloria.now.shortapp.texturedAsink.VePayBean import com.veloria.now.shortapp.texturedAsink.VePaySettingsBean import com.veloria.now.shortapp.texturedAsink.XAboutBean +import com.youth.banner.listener.OnPageChangeListener import kotlinx.coroutines.launch import org.greenrobot.eventbus.EventBus @@ -52,7 +52,7 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { private val viewModel by lazy { ViewModelProvider(this)[VeStoreViewModel::class.java] } private var coinAdapter: VeStoreCoinAdapter? = null - private var vipAdapter: VeStoreVipAdapter? = null + private var bannerAdapter: VeBannerVipPayAdapter? = null private var promise_view_ad: Int? = -1 private var connectNum = 0 private var short_play_id: Int? = 0 @@ -68,6 +68,7 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { private var isBuy = false private var purchaseData: Purchase? = null + private var parcelable: XAboutBean.Episode? = null interface OnDataPassOnClick { fun onDataPassOnClick(data: VePaySettingsBean.CoinsBean?) @@ -82,7 +83,7 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { val inflater = requireActivity().layoutInflater val view = inflater.inflate(R.layout.layout_ve_player_buy_dialog, null) binding = LayoutVePlayerBuyDialogBinding.bind(view) - val parcelable = + parcelable = arguments?.getParcelable(JActivityAdapter.BUY_EPISODE) short_play_id = parcelable?.short_play_id promise_view_ad = parcelable?.promise_view_ad @@ -137,44 +138,16 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { } }) - vipAdapter = VeStoreVipAdapter() - binding?.recyclerVip?.layoutManager = - LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) - binding?.recyclerVip?.adapter = vipAdapter showLoading() viewModel.getPaySettingsV3(0, 0) - vipAdapter?.setOnItemClickListener { adapter, view, position -> - if (typeOnClick == 0) { - coinAdapter?.currentPosition = -1 - coinAdapter?.notifyDataSetChanged() - } - typeOnClick = 1 - vipAdapter?.currentPosition = position - vipAdapter?.notifyDataSetChanged() - - vipData = vipAdapter!!.getItem(position) as VePaySettingsBean.VipBean - - if (parcelable != null) { - short_play_id?.let { - VeCreatePayOrderReqBean( - vipData?.id.toString(), - "google", - it, - parcelable.short_play_video_id - ) - }?.let { - viewModel.setCreatePayOrder( - it - ) - } - } - - } coinAdapter?.setOnItemClickListener { adapter, view, position -> if (typeOnClick == 1) { - vipAdapter?.currentPosition = -1 - vipAdapter?.notifyDataSetChanged() + if (bannerAdapter?.currentPosition!! >= 0) { + bannerAdapter?.notifyItemChanged(bannerAdapter?.currentPosition!!) + } + bannerAdapter?.oldPosition = -1 + bannerAdapter?.currentPosition = -1 } typeOnClick = 0 coinAdapter?.currentPosition = position @@ -189,7 +162,7 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { coinsData?.id.toString(), "google", it, - parcelable.short_play_video_id + parcelable!!.short_play_video_id ) }?.let { viewModel.setCreatePayOrder( @@ -216,12 +189,93 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { return dialog } + private fun setBannerListener() { + binding?.bannerVip?.setOnBannerListener { data, position -> + if (typeOnClick == 0) { + coinAdapter?.currentPosition = -1 + coinAdapter?.notifyDataSetChanged() + } + if (bannerAdapter?.currentPosition!! >= 0) { + bannerAdapter?.oldPosition = bannerAdapter?.currentPosition!! + } + typeOnClick = 1 + bannerAdapter?.currentPosition = position + bannerAdapter?.notifyItemChanged(position) + if (bannerAdapter?.oldPosition!! >= 0) { + bannerAdapter?.notifyItemChanged(bannerAdapter?.oldPosition!!) + } + + vipData = + bannerAdapter?.getData(bannerAdapter!!.currentPosition) as VePaySettingsBean.VipBean + showLoading() + if (parcelable != null) { + short_play_id?.let { + VeCreatePayOrderReqBean( + vipData?.id.toString(), + "google", + it, + parcelable!!.short_play_video_id + ) + }?.let { + viewModel.setCreatePayOrder( + it + ) + } + } + + } + + binding?.bannerVip?.addOnPageChangeListener(object : OnPageChangeListener { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + val data = bannerAdapter?.getData(position) + data?.let { setVipContentText(it) } + + } + + override fun onPageScrollStateChanged(state: Int) { + } + + }) + + val itemData = bannerAdapter?.getData(0) + itemData?.let { setVipContentText(it) } + + } + + private fun setVipContentText(data: VePaySettingsBean.VipBean) { + val vipContent1 = TranslationHelper.replaces( + getString(R.string.unlimited_access_to_all_series_for_1_br), + data?.vip_type_key.toString(), + data.send_coin_ttl.toString() + ) + binding?.tvBuyHint?.text = + Html.fromHtml(vipContent1, Html.FROM_HTML_MODE_LEGACY) + + } + fun observeData() { viewModel.PaySettingsV3.observe(this) { if (it?.data != null) { coinAdapter?.submitList(it.data.list_coins) - vipAdapter?.submitList(it.data.list_sub_vip) - + if (it.data.list_sub_vip.isNotEmpty()) { + binding?.tvBuyHint?.visibility = View.VISIBLE + binding?.bannerVip?.visibility = View.VISIBLE + bannerAdapter = + VeBannerVipPayAdapter(it.data.list_sub_vip) + binding?.bannerVip?.setBannerGalleryEffect( + resources.getDimension(R.dimen.dp_5).toInt(), + resources.getDimension(R.dimen.dp_5).toInt() + ) + binding?.bannerVip?.setAdapter(bannerAdapter) + setBannerListener() + } it.data.list_sub_vip.let { it1 -> querySubVipProductDetails(it1) } it.data.list_coins.let { it1 -> queryInAppCoinsProductDetails(it1) } } @@ -266,9 +320,8 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { } else { toast(getString(R.string.shapeSelected)) } - hideLoading() } - + hideLoading() } } @@ -389,8 +442,8 @@ class PlayerBuyDialogFragment : BottomSheetDialogFragment() { } ?: vip } - vipAdapter?.recyclerView?.postDelayed({ - vipAdapter?.submitList(updatedVipList) + binding?.root?.postDelayed({ + bannerAdapter?.setDatas(updatedVipList) hideLoading() }, 500) } else { diff --git a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/MQVAutoWidthActivity.kt b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/MQVAutoWidthActivity.kt index cb9acc3..fc20774 100644 --- a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/MQVAutoWidthActivity.kt +++ b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/MQVAutoWidthActivity.kt @@ -571,7 +571,7 @@ class MQVAutoWidthActivity : if (marqueeo < 162.0f) { } - + showLoading() viewModel.getVideoPlayDetails(shortPlayId, 0, activityId, revolution) } @@ -624,7 +624,6 @@ class MQVAutoWidthActivity : - showLoading() var appendK: MutableMap = mutableMapOf() appendK.put("decklink", 519.0f) appendK.put("flattened", 285.0f) @@ -1904,10 +1903,11 @@ class MQVAutoWidthActivity : } viewModel.detailsRecommendLiveData.observe(this) { + hideLoading() it?.data?.let { setDetailsRecommendation(it) } ?: finish() - hideLoading() + } viewModel.userInfo.observe(this) { diff --git a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/PSVHomeSearchActivity.kt b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/PSVHomeSearchActivity.kt index 465ff42..0356c0b 100644 --- a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/PSVHomeSearchActivity.kt +++ b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/PSVHomeSearchActivity.kt @@ -845,6 +845,7 @@ class PSVHomeSearchActivity : AIXTextActivity( ) needSave = true w2aSelfAttribution(clipContent) + RYAction.getMMKV().putString(JActivityAdapter.HOME_DDL_URL, "") } } } @@ -976,7 +977,9 @@ class PSVHomeSearchActivity : AIXTextActivity( // setDeeplinkFbApi(facebook_id) } } - data?.let { viewModel.setW2aSelfAttribution(it) } + singleOnClick { + data?.let { viewModel.setW2aSelfAttribution(it) } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/VeStoreActivity.kt b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/VeStoreActivity.kt index 3a149bf..36e3c3c 100644 --- a/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/VeStoreActivity.kt +++ b/app/src/main/java/com/veloria/now/shortapp/subtractionCroll/bidirectional/VeStoreActivity.kt @@ -30,11 +30,13 @@ import com.veloria.now.shortapp.civil.toast import com.veloria.now.shortapp.databinding.ActivityVeStoreBinding import com.veloria.now.shortapp.newsletter.AIXTextActivity import com.veloria.now.shortapp.subtractionCroll.bidirectional.coordinate.VeStoreViewModel +import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeBannerVipPayAdapter import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreCoinAdapter import com.veloria.now.shortapp.subtractionCroll.modificationsPretch.VeStoreVipAdapter import com.veloria.now.shortapp.texturedAsink.VeCreatePayOrderReqBean import com.veloria.now.shortapp.texturedAsink.VePayBean import com.veloria.now.shortapp.texturedAsink.VePaySettingsBean +import com.youth.banner.listener.OnPageChangeListener import kotlinx.coroutines.launch class VeStoreActivity : AIXTextActivity() { @@ -44,11 +46,11 @@ class VeStoreActivity : AIXTextActivity - if (typeOnClick == 0) { - coinAdapter?.currentPosition = -1 - coinAdapter?.notifyDataSetChanged() - } - typeOnClick = 1 - vipAdapter?.currentPosition = position - vipAdapter?.notifyDataSetChanged() - - setOnPayNowClick() - } coinAdapter?.setOnItemClickListener { adapter, view, position -> if (typeOnClick == 1) { - vipAdapter?.currentPosition = -1 - vipAdapter?.notifyDataSetChanged() + if (bannerAdapter?.currentPosition!! >= 0) { + bannerAdapter?.notifyItemChanged(bannerAdapter?.currentPosition!!) + } + bannerAdapter?.oldPosition = -1 + bannerAdapter?.currentPosition = -1 } typeOnClick = 0 coinAdapter?.currentPosition = position @@ -156,6 +146,61 @@ class VeStoreActivity : AIXTextActivity + if (typeOnClick == 0) { + coinAdapter?.currentPosition = -1 + coinAdapter?.notifyDataSetChanged() + } + if (bannerAdapter?.currentPosition!! >= 0) { + bannerAdapter?.oldPosition = bannerAdapter?.currentPosition!! + } + typeOnClick = 1 + bannerAdapter?.currentPosition = position + bannerAdapter?.notifyItemChanged(position) + if (bannerAdapter?.oldPosition!! >= 0) { + bannerAdapter?.notifyItemChanged(bannerAdapter?.oldPosition!!) + } + setOnPayNowClick() + } + + binding.bannerVip.addOnPageChangeListener(object : OnPageChangeListener { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + } + + override fun onPageSelected(position: Int) { + val data = bannerAdapter?.getData(position) + data?.let { setVipContentText(it) } + + } + + override fun onPageScrollStateChanged(state: Int) { + } + + }) + + val itemData = bannerAdapter?.getData(0) + itemData?.let { setVipContentText(it) } + + } + + private fun setVipContentText(data: VePaySettingsBean.VipBean) { + val vipContent1 = + "Unlimited access to all series for 1 ".plus(data?.vip_type_key) + .plus(" (No Ads)") + binding.tvVipContent1.text = + Html.fromHtml(vipContent1, Html.FROM_HTML_MODE_LEGACY) + val vipContent2 = + "The donate coins will expire in ".plus(data.send_coin_ttl.toString()) + .plus(" days") + binding.tvVipContent2.text = + Html.fromHtml(vipContent2, Html.FROM_HTML_MODE_LEGACY) + } + fun setOnPayNowClick() { singleOnClick { if (!isConnect) { @@ -170,7 +215,7 @@ class VeStoreActivity : AIXTextActivity querySubVipProductDetails(it1) } it.data.list_coins.let { it1 -> queryInAppCoinsProductDetails(it1) } @@ -356,8 +418,8 @@ class VeStoreActivity : AIXTextActivity?) : + BannerAdapter( + items + ) { + + var oldPosition = -1 + var currentPosition = -1 + + override fun onCreateHolder(parent: ViewGroup, viewType: Int): BannerViewHolder { + val view: View = LayoutInflater.from(parent.context) + .inflate(R.layout.item_ve_store_vip, parent, false) + view.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + return BannerViewHolder(view) + } + + override fun onBindView( + holder: BannerViewHolder?, + item: VePaySettingsBean.VipBean?, + position: Int, + size: Int + ) { + if (null != item) { + val tvDay = + holder?.view?.findViewById(R.id.tv_day) + val tvMoney = + holder?.view?.findViewById(R.id.tv_money) + val tvMoneyDay = + holder?.view?.findViewById(R.id.tv_money_day) + val tvExtra = + holder?.view?.findViewById(R.id.tv_extra) + val tvSelect = + holder?.view?.findViewById(R.id.tv_select) + val rlLayout = + holder?.view?.findViewById(R.id.rl_layout) + + tvDay?.text = item.brief + tvMoney?.text = item.price_google + tvMoneyDay?.text = "/".plus(item.vip_type_key) + if ((item.send_coins ?: 0) > 0) { + tvExtra?.text = + "+".plus( + TranslationHelper.getTranslation() + ?.let { TranslationHelper.getTranslation()?.veloria_extra } ?: "Extra") + .plus(" ").plus(item.send_coins) + tvExtra?.visibility = View.VISIBLE + } else { + tvExtra?.visibility = View.GONE + } + + if (currentPosition == position) { + tvSelect?.visibility = View.VISIBLE + } else { + tvSelect?.visibility = View.GONE + } + + + when (item.vip_type_key) { + "week" -> { + rlLayout?.setBackgroundResource(R.mipmap.iv_store_vip_bg_1) + tvDay?.setTextColor(Color.parseColor("#64A3A7")) + tvMoney?.setTextColor(Color.parseColor("#64A3A7")) + tvMoneyDay?.setTextColor(Color.parseColor("#64A3A7")) + tvExtra?.setTextColor(Color.parseColor("#416767")) + tvExtra?.setBackgroundResource(R.drawable.bg_store_vip_1) + } + + "month" -> { + rlLayout?.setBackgroundResource(R.mipmap.iv_store_vip_bg_2) + tvDay?.setTextColor(Color.parseColor("#9C7565")) + tvMoney?.setTextColor(Color.parseColor("#9C7565")) + tvMoneyDay?.setTextColor(Color.parseColor("#9C7565")) + tvExtra?.setTextColor(Color.parseColor("#573D31")) + tvExtra?.setBackgroundResource(R.drawable.bg_store_vip_2) + } + + "quarter" -> { + rlLayout?.setBackgroundResource(R.mipmap.iv_store_vip_bg_3) + tvDay?.setTextColor(Color.parseColor("#647DA7")) + tvMoney?.setTextColor(Color.parseColor("#647DA7")) + tvMoneyDay?.setTextColor(Color.parseColor("#647DA7")) + tvExtra?.setTextColor(Color.parseColor("#303962")) + tvExtra?.setBackgroundResource(R.drawable.bg_store_vip_3) + } + + "year" -> { + rlLayout?.setBackgroundResource(R.mipmap.iv_store_vip_bg_4) + tvDay?.setTextColor(Color.parseColor("#9C6586")) + tvMoney?.setTextColor(Color.parseColor("#9C6586")) + tvMoneyDay?.setTextColor(Color.parseColor("#9C6586")) + tvExtra?.setTextColor(Color.parseColor("#674162")) + tvExtra?.setBackgroundResource(R.drawable.bg_store_vip_4) + } + } + } + } + + inner class BannerViewHolder(var view: View) : RecyclerView.ViewHolder( + view + ) + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_ve_store.xml b/app/src/main/res/layout/activity_ve_store.xml index ccdba6d..dacdfc5 100644 --- a/app/src/main/res/layout/activity_ve_store.xml +++ b/app/src/main/res/layout/activity_ve_store.xml @@ -60,6 +60,7 @@ android:id="@+id/ll_tab" android:layout_width="match_parent" android:layout_height="@dimen/dp_45" + android:visibility="gone" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -92,6 +93,7 @@ android:id="@+id/fl_tab" android:layout_width="match_parent" android:layout_height="wrap_content" + android:visibility="visible" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/ll_tab"> @@ -100,7 +102,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:paddingHorizontal="@dimen/dp_10" - android:paddingVertical="@dimen/dp_15" + android:paddingTop="@dimen/dp_15" android:visibility="gone"> - - - + app:layout_constraintTop_toBottomOf="@+id/tv_vip_content1" + /> @@ -260,6 +263,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="@dimen/dp_15" + android:layout_marginTop="@dimen/dp_10" android:lineSpacingExtra="@dimen/dp_2" android:text="@string/ve_store_tips" android:textColor="@color/white50" diff --git a/app/src/main/res/layout/item_ve_store_vip.xml b/app/src/main/res/layout/item_ve_store_vip.xml index f1e88d0..2a95600 100644 --- a/app/src/main/res/layout/item_ve_store_vip.xml +++ b/app/src/main/res/layout/item_ve_store_vip.xml @@ -1,9 +1,9 @@ - - - + app:layout_constraintTop_toBottomOf="@+id/tv_coins_text" + /> + app:layout_constraintTop_toBottomOf="@+id/banner_vip" /> Feedback History Feedback Detail · Unlimited access to all series for 1 week (No Ads).\n· The donate coins will expire in 8 days.\n· Auto renew, cancel anytime. - · The donate coins will expire in 8 days.
· Auto renew, cancel anytime.]]>
+ + 1 ## (No Ads).
+ · The donate coins will expire in #1# days.
+ · Auto renew, cancel anytime. + ]]> +
Your Coins: Language Welcome to Veloria