Просмотр исходного кода

feat: 每日充值-奖励调整,动画调整 (#4)

* feat: 每日充值,代币修改

* feat: 替换头图

* feat: 每日充值,代币修改

* feat: 每日充值,代币修改

* feat: 每日充值,动画和弹窗的冲突

* feat: 每日充值,动画和弹窗的冲突

* feat: 每日充值,动画和弹窗的冲突

* feat: Coin Value

* feat: inflateBannerInfo逻辑优化

* feat: UI 问题
LXD312569496 8 месяцев назад
Родитель
Сommit
7c03216333
26 измененных файлов с 387 добавлено и 147 удалено
  1. 20 0
      app/src/main/java/com/adealink/weparty/commonui/dialogchain/DialogShowManager.kt
  2. 1 1
      app/src/main/java/com/adealink/weparty/module/operation/data/RewardData.kt
  3. 4 0
      app/src/main/java/com/adealink/weparty/module/userlist/viewmodel/UserListViewModel.kt
  4. 2 0
      app/src/main/res/values/strings.xml
  5. 38 8
      module/operation/src/main/java/com/adealink/weparty/operation/rechargepackage/RechargeDailyFragment.kt
  6. 12 3
      module/operation/src/main/java/com/adealink/weparty/operation/rechargepackage/adapter/RechargeDailyItemViewBinder.kt
  7. BIN
      module/operation/src/main/res/drawable-ar-xhdpi/operation_recharge_daily_top_bg.webp
  8. BIN
      module/operation/src/main/res/drawable-xhdpi/operation_day_recharge_glod_coin.png
  9. BIN
      module/operation/src/main/res/drawable-xhdpi/operation_day_recharge_luck_coin.png
  10. BIN
      module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_today_filed_bg.webp
  11. BIN
      module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_today_num_bg.png
  12. BIN
      module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_today_num_bg.webp
  13. BIN
      module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_top_bg.webp
  14. 56 15
      module/operation/src/main/res/layout/fragment_recharge_daily.xml
  15. 49 35
      module/operation/src/main/res/layout/layout_recharge_daily_v_item.xml
  16. 15 0
      module/wallet/src/main/java/com/adealink/weparty/wallet/coin/CoinFragment.kt
  17. 32 5
      module/wallet/src/main/java/com/adealink/weparty/wallet/component/RechargeDailyTaskItemView.kt
  18. BIN
      module/wallet/src/main/res/drawable-xhdpi/wallet_day_recharge_glod_coin.png
  19. BIN
      module/wallet/src/main/res/drawable-xhdpi/wallet_day_recharge_luck_coin.png
  20. BIN
      module/wallet/src/main/res/drawable-xhdpi/wallet_icon_day_bottom.png
  21. BIN
      module/wallet/src/main/res/drawable-xhdpi/wallet_recharge_next_task_bg.9.png
  22. 14 0
      module/wallet/src/main/res/drawable/wallet_recharge_next_task_bg.xml
  23. 13 7
      module/wallet/src/main/res/layout/layout_recharge_daily.xml
  24. 103 71
      module/wallet/src/main/res/layout/layout_recharge_daily_item.xml
  25. 2 2
      module/wallet/src/main/res/layout/layout_recharge_daily_task_list.xml
  26. 26 0
      module/webview/src/main/java/com/adealink/weparty/webview/jsnativemethod/PauseDialogManagerJSNativeMethod.kt

+ 20 - 0
app/src/main/java/com/adealink/weparty/commonui/dialogchain/DialogShowManager.kt

@@ -31,6 +31,12 @@ interface IDialogShowManager {
 
     fun logout()
 
+    /**
+     * 手动暂停/恢复弹窗分发
+     */
+    fun pause()
+
+    fun resume()
 }
 
 object DialogShowManager : IDialogShowManager {
@@ -109,6 +115,10 @@ object DialogShowManager : IDialogShowManager {
 
 
     override fun tryShowNextDialog(activity: FragmentActivity) {
+        if (paused){
+            Log.i(TAG, "tryShowNextDialog: paused, not showing dialog")
+            return
+        }
         //在当前页面中寻找第一个可展示的任务
         Log.i(
             TAG,
@@ -167,4 +177,14 @@ object DialogShowManager : IDialogShowManager {
         waitToShowDialogQueue.clear()
     }
 
+    private var paused = false
+    override fun resume() {
+        paused = false
+        tryShowNextDialog(AppUtil.currentActivity as? FragmentActivity ?: return)
+    }
+
+    override fun pause() {
+        paused = true
+    }
+
 }

+ 1 - 1
app/src/main/java/com/adealink/weparty/module/operation/data/RewardData.kt

@@ -346,7 +346,7 @@ enum class ProductTypeConstant(val type: Int) {
 
     SID(509),//字母靓号
     CUSTOM_CHAT_PRICE(510), //自定义聊天价格
-
+    LUCKY_COIN(520),//幸运币
 
 
     //  以下暂时没用到,如用到需要跟后端对齐

+ 4 - 0
app/src/main/java/com/adealink/weparty/module/userlist/viewmodel/UserListViewModel.kt

@@ -251,6 +251,10 @@ class UserListViewModel(
             if (topBannerRlt is Rlt.Success) {
                 topBannerData = topBannerRlt.data[BannerType.HOME_USER_LIST_BANNER] ?: listOf()
                 bannerInfoLastUpdateTime = System.currentTimeMillis()
+            } else {
+                //拉取失败的话,重置一下
+                isPullBannerInfo = false
+                bannerInfoLastUpdateTime = 0L
             }
         }
     }

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -794,4 +794,6 @@
    <string name="time_hours_ago">%1$s hours ago</string>
    <string name="time_days_ago">%1$s days ago</string>
    <string name="time_month_ago">1 month ago</string>
+   <string name="common_lucky_coins">Lucky coins</string>
+   <string name="common_coin_value">%1$s Coin Value</string>
 </resources>

+ 38 - 8
module/operation/src/main/java/com/adealink/weparty/operation/rechargepackage/RechargeDailyFragment.kt

@@ -21,6 +21,8 @@ import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.dialogfragment.showDialogFragment
 import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.commonui.ext.gone
+import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.diffutil.BaseListDiffUtil
 import com.adealink.weparty.commonui.recycleview.itemdecoration.TimeLineItemDecoration
 import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceItemDecoration
@@ -54,7 +56,7 @@ class RechargeDailyFragment : BottomDialogFragment(R.layout.fragment_recharge_da
 
     // 是否来自充值页的弹窗
     private val fromRechargeFragment by lazy {
-        arguments?.getBoolean(Operation.RechargeDaily.EXTRA_FROM_RECHARGE, false)?: false
+        arguments?.getBoolean(Operation.RechargeDaily.EXTRA_FROM_RECHARGE, false) ?: false
     }
 
     private var countDownTimer: CountDownTimer? = null
@@ -118,7 +120,7 @@ class RechargeDailyFragment : BottomDialogFragment(R.layout.fragment_recharge_da
     private fun startCountDownIfNeed(countDownTime: Long) {
         if (countDownTime < 1) return
         countDownTimer?.cancel()
-        countDownTimer = object: CountDownTimer(countDownTime, 1000){
+        countDownTimer = object : CountDownTimer(countDownTime, 1000) {
             override fun onTick(p0: Long) {
                 if (!isViewBindingValid()) {
                     return
@@ -150,7 +152,8 @@ class RechargeDailyFragment : BottomDialogFragment(R.layout.fragment_recharge_da
 
             var highestCoins: Long = 0
             var rechargeTotal: Long = 0
-            var rewardTotal: Long = 0 // 累计奖励金币
+            var rewardTotalGoldCount: Long = 0 // 累计奖励金币
+            var rewardTotalLukcyCount: Long = 0 // 累计奖励幸运币
             var nextReceivedIndex = -1
             //奖励项
             val rewardList = it?.dailyTaskItems ?: emptyList()
@@ -164,7 +167,14 @@ class RechargeDailyFragment : BottomDialogFragment(R.layout.fragment_recharge_da
                         val rewardCoinNum = subReward.rewardNum.toLong()
                         highestCoins += rewardCoinNum
                         if (reward.isTaskCompleted()) {
-                            rewardTotal += rewardCoinNum
+                            rewardTotalGoldCount += rewardCoinNum
+                        }
+                    }
+                    if (subReward.rewardResourceType == ProductTypeConstant.LUCKY_COIN.type) {
+                        val rewardCoinNum = subReward.rewardNum.toLong()
+                        highestCoins += rewardCoinNum
+                        if (reward.isTaskCompleted()) {
+                            rewardTotalLukcyCount += rewardCoinNum
                         }
                     }
                 }
@@ -176,9 +186,15 @@ class RechargeDailyFragment : BottomDialogFragment(R.layout.fragment_recharge_da
             // 数据设置
             listAdapter.nextReceivedIndex = nextReceivedIndex
             listAdapter.submitList(rewardList)
-            binding.tvHighestCount.text = getCompatString(APP_R.string.common_coins, highestCoins)
+            binding.tvHighestCount.text = getCompatString(APP_R.string.common_coin_value, highestCoins)
             binding.tvRechargeTotal.text = getSpanCoins(rechargeTotal.toString())
-            binding.tvRewardTotal.text = getSpanCoins(rewardTotal.toString())
+            binding.tvRewardTotal.text = getSpanCoins(rewardTotalGoldCount.toString())
+            if (rewardTotalLukcyCount > 0) {
+                binding.tvRewardTotalLucky.text = getSpanLuckyCoins(rewardTotalLukcyCount.toString())
+                binding.tvRewardTotalLucky.show()
+            } else {
+                binding.tvRewardTotalLucky.gone()
+            }
 
             // 时间线
             if (nextReceivedIndex > 0 || isAllReceived) {
@@ -189,8 +205,8 @@ class RechargeDailyFragment : BottomDialogFragment(R.layout.fragment_recharge_da
                             5.dp(),
                             getCompatColor(com.adealink.weparty.R.color.color_FFFFDB8E),
                             getCompatColor(com.adealink.weparty.R.color.color_FFFFB452),
-                            anchorPosition = if(isAllReceived) Int.MAX_VALUE else nextReceivedIndex - 1,
-                            anchorExtLine = if(isAllReceived) 0 else 56.dp()
+                            anchorPosition = if (isAllReceived) Int.MAX_VALUE else nextReceivedIndex - 1,
+                            anchorExtLine = if (isAllReceived) 0 else 56.dp()
                         )
                     )
                 }
@@ -219,6 +235,20 @@ class RechargeDailyFragment : BottomDialogFragment(R.layout.fragment_recharge_da
         }
     }
 
+    private fun getSpanLuckyCoins(coins: String): SpannedString {
+        return buildSpannedString {
+            append(coins).apply {
+                safeSetSpan(
+                    StyleSpan(Typeface.BOLD),
+                    0, coins.length,
+                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                )
+            }
+            append(" ")
+            append(getCompatString(APP_R.string.common_lucky_coins)) // 占位
+        }
+    }
+
     override fun onDestroy() {
         super.onDestroy()
         countDownTimer?.cancel()

+ 12 - 3
module/operation/src/main/java/com/adealink/weparty/operation/rechargepackage/adapter/RechargeDailyItemViewBinder.kt

@@ -14,6 +14,7 @@ import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
 import com.adealink.weparty.module.operation.adapter.RechargeDailyAdapter
 import com.adealink.weparty.module.operation.data.ActivityTaskItem
+import com.adealink.weparty.module.operation.data.ProductTypeConstant
 import com.adealink.weparty.operation.R
 import com.adealink.weparty.operation.data.RechargeDailyEffect.Companion.RECHARGE_DAILY_GIFT
 import com.adealink.weparty.operation.databinding.LayoutRechargeDailyVItemBinding
@@ -51,9 +52,17 @@ class RechargeDailyItemViewBinder :
 
             // 金币
             val coinInfo =
-                if (rewardItem.rewardInfo.isNotEmpty()) rewardItem.rewardInfo[0] else null
-            binding.nivCoin.setImageURI(coinInfo?.rewardResourceUrl)
-            binding.ivItemIconNum.text = formatDotNotNull(coinInfo?.rewardNum?.toLong())
+                if (rewardItem.rewardInfo.isNotEmpty()) rewardItem.rewardInfo.firstOrNull { it.rewardResourceType==ProductTypeConstant.Coin.type } else null
+            val luckyCoinInfo =
+                if (rewardItem.rewardInfo.isNotEmpty()) rewardItem.rewardInfo.firstOrNull { it.rewardResourceType==ProductTypeConstant.LUCKY_COIN.type } else null
+            binding.ivNextTaskGoldCoinNum.text = formatDotNotNull(coinInfo?.rewardNum?.toLong())
+            if (luckyCoinInfo!=null){
+                binding.ivNextTaskLuckyCoinNum.text = formatDotNotNull(luckyCoinInfo.rewardNum.toLong())
+                binding.ivNextTaskLuckyCoinNum.show()
+            } else {
+                binding.ivNextTaskLuckyCoinNum.gone()
+            }
+
             getNumberOfCPUCores()
 
             if (rewardItem.isTaskCompleted()) {

BIN
module/operation/src/main/res/drawable-ar-xhdpi/operation_recharge_daily_top_bg.webp


BIN
module/operation/src/main/res/drawable-xhdpi/operation_day_recharge_glod_coin.png


BIN
module/operation/src/main/res/drawable-xhdpi/operation_day_recharge_luck_coin.png


BIN
module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_today_filed_bg.webp


BIN
module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_today_num_bg.png


BIN
module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_today_num_bg.webp


BIN
module/operation/src/main/res/drawable-xhdpi/operation_recharge_daily_top_bg.webp


+ 56 - 15
module/operation/src/main/res/layout/fragment_recharge_daily.xml

@@ -146,7 +146,7 @@
 
                     <androidx.constraintlayout.widget.ConstraintLayout
                         android:layout_width="351dp"
-                        android:layout_height="104.5dp"
+                        android:layout_height="127dp"
                         android:layout_marginTop="16.5dp"
                         android:background="@drawable/operation_recharge_daily_today_filed_bg">
 
@@ -170,12 +170,22 @@
                             app:layout_constraintStart_toEndOf="@+id/ic_today_a"
                             app:layout_constraintTop_toTopOf="@+id/ic_today_a" />
 
+                        <androidx.appcompat.widget.AppCompatImageView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:src="@drawable/operation_recharge_daily_today_num_bg"
+                            app:layout_constraintBottom_toBottomOf="@+id/tv_recharge_total"
+                            app:layout_constraintEnd_toEndOf="@+id/tv_recharge_total"
+                            app:layout_constraintStart_toStartOf="@+id/tv_recharge_total"
+                            app:layout_constraintTop_toTopOf="@+id/tv_recharge_total" />
+
                         <com.adealink.weparty.commonui.text.WenextTextView
                             android:id="@+id/tv_recharge_total"
                             android:layout_width="wrap_content"
-                            android:layout_height="27dp"
+                            android:layout_height="48dp"
                             android:layout_marginTop="7dp"
-                            android:background="@drawable/operation_recharge_daily_today_num_bg"
+                            android:drawableStart="@drawable/operation_day_recharge_glod_coin"
+                            android:drawablePadding="3dp"
                             android:gravity="center"
                             android:includeFontPadding="false"
                             android:text="@string/common_coins"
@@ -185,24 +195,55 @@
                             app:gradient_position="0.2, 0.8"
                             app:layout_constraintEnd_toEndOf="@+id/ic_today_a"
                             app:layout_constraintStart_toStartOf="@+id/ic_today_a"
-                            app:layout_constraintTop_toBottomOf="@+id/ic_today_a"/>
+                            app:layout_constraintTop_toBottomOf="@+id/ic_today_a" />
 
-                        <com.adealink.weparty.commonui.text.WenextTextView
-                            android:id="@+id/tv__reward_total"
+                        <androidx.appcompat.widget.AppCompatImageView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:src="@drawable/operation_recharge_daily_today_num_bg"
+                            app:layout_constraintBottom_toBottomOf="@+id/ll_today_reward"
+                            app:layout_constraintEnd_toEndOf="@+id/ll_today_reward"
+                            app:layout_constraintStart_toStartOf="@+id/ll_today_reward"
+                            app:layout_constraintTop_toTopOf="@+id/ll_today_reward" />
+
+
+                        <androidx.appcompat.widget.LinearLayoutCompat
+                            android:id="@+id/ll_today_reward"
                             android:layout_width="wrap_content"
-                            android:layout_height="27dp"
+                            android:layout_height="48dp"
                             android:layout_marginTop="7dp"
-                            android:background="@drawable/operation_recharge_daily_today_num_bg"
                             android:gravity="center"
-                            android:includeFontPadding="false"
-                            android:text="@string/common_coins"
-                            android:textSize="14sp"
-                            app:gradient_colors="#FFDAA9,#FFDAA9"
-                            app:gradient_orientation="vertical"
-                            app:gradient_position="0.2, 0.8"
+                            android:orientation="vertical"
                             app:layout_constraintEnd_toEndOf="@+id/ic_today_b"
                             app:layout_constraintStart_toStartOf="@+id/ic_today_b"
-                            app:layout_constraintTop_toBottomOf="@+id/ic_today_b" />
+                            app:layout_constraintTop_toBottomOf="@+id/ic_today_b">
+
+                            <com.adealink.weparty.commonui.text.WenextTextView
+                                android:id="@+id/tv__reward_total"
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:drawableStart="@drawable/operation_day_recharge_glod_coin"
+                                android:gravity="center"
+                                android:includeFontPadding="false"
+                                android:text="@string/common_coins"
+                                android:textSize="14sp"
+                                app:gradient_colors="#FFDAA9,#FFDAA9"
+                                app:gradient_orientation="vertical"
+                                app:gradient_position="0.2, 0.8" />
+
+                            <com.adealink.weparty.commonui.text.WenextTextView
+                                android:id="@+id/tv__reward_total_lucky"
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:layout_marginTop="5dp"
+                                android:drawableStart="@drawable/operation_day_recharge_luck_coin"
+                                android:gravity="center"
+                                android:includeFontPadding="false"
+                                android:text="@string/common_coins"
+                                android:textColor="#DDFFE4"
+                                android:textSize="14sp" />
+
+                        </androidx.appcompat.widget.LinearLayoutCompat>
 
                     </androidx.constraintlayout.widget.ConstraintLayout>
 

+ 49 - 35
module/operation/src/main/res/layout/layout_recharge_daily_v_item.xml

@@ -12,22 +12,22 @@
         android:layout_height="wrap_content"
         android:layout_marginEnd="18dp"
         android:gravity="end"
-        android:textSize="11sp"
         android:textColor="@color/color_FFDFAA5F"
+        android:textSize="11sp"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/v_g_line"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintBottom_toBottomOf="parent"
-        tools:text="888888"
-        />
+        tools:text="888888" />
+
     <View
         android:id="@+id/ic_received"
         android:layout_width="13dp"
         android:layout_height="13dp"
         android:background="@drawable/operation_recharge_daily_today_item_point_status"
-        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="@+id/v_g_line"
         app:layout_constraintStart_toStartOf="@id/v_g_line"
-        app:layout_constraintEnd_toEndOf="@+id/v_g_line"/>
+        app:layout_constraintTop_toTopOf="parent" />
 
     <androidx.constraintlayout.widget.Guideline
         android:id="@+id/v_g_line"
@@ -42,64 +42,78 @@
         android:layout_height="50dp"
         android:layout_marginStart="18dp"
         android:src="@drawable/operation_recharge_daily_today_item_gift"
-        app:layout_constraintStart_toStartOf="@+id/v_g_line"
-        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        />
+        app:layout_constraintStart_toStartOf="@+id/v_g_line"
+        app:layout_constraintTop_toTopOf="parent" />
 
     <com.opensource.svgaplayer.WenextSvgaView
         android:id="@+id/effect_gift"
         android:layout_width="80dp"
         android:layout_height="80dp"
-        app:layout_constraintTop_toTopOf="@+id/iv_gift"
-        app:layout_constraintStart_toStartOf="@+id/iv_gift"
         app:layout_constraintBottom_toBottomOf="@+id/iv_gift"
-        app:layout_constraintEnd_toEndOf="@+id/iv_gift"/>
+        app:layout_constraintEnd_toEndOf="@+id/iv_gift"
+        app:layout_constraintStart_toStartOf="@+id/iv_gift"
+        app:layout_constraintTop_toTopOf="@+id/iv_gift" />
+
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_received"
         android:layout_width="wrap_content"
         android:layout_height="15.dp"
+        android:background="@drawable/operation_recharge_daily_item_status_bg"
+        android:gravity="center"
         android:includeFontPadding="false"
         android:paddingHorizontal="5dp"
-        android:gravity="center"
+        android:text="@string/common_received"
         android:textColor="@color/color_FFFFFF"
         android:textSize="10sp"
-        android:text="@string/common_received"
-        android:background="@drawable/operation_recharge_daily_item_status_bg"
-        app:layout_constraintStart_toStartOf="@+id/iv_gift"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_gift"
         app:layout_constraintEnd_toEndOf="@+id/iv_gift"
-        app:layout_constraintBottom_toBottomOf="@+id/iv_gift"/>
+        app:layout_constraintStart_toStartOf="@+id/iv_gift" />
+
     <View
         android:id="@+id/iv_coin_bg"
         android:layout_width="92dp"
         android:layout_height="87dp"
         android:layout_marginStart="18dp"
         android:background="@drawable/operation_recharge_daily_today_item_gift_bg"
-        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintStart_toEndOf="@+id/iv_gift"
-        />
-    <com.adealink.frame.image.view.NetworkImageView
-        android:id="@+id/niv_coin"
-        android:layout_width="36dp"
-        android:layout_height="30dp"
-        android:layout_marginTop="21.dp"
-        android:layout_marginStart="3.5dp"
-        app:actualImageScaleType="centerInside"
-        app:layout_constraintTop_toTopOf="@+id/iv_coin_bg"
-        app:layout_constraintStart_toStartOf="@+id/iv_coin_bg"
-        app:layout_constraintEnd_toEndOf="@+id/iv_coin_bg"/>
+        app:layout_constraintTop_toTopOf="parent" />
+
 
     <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/iv_item_icon_num"
+        android:id="@+id/iv_next_task_gold_coin_num"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:textSize="12sp"
+        android:layout_marginBottom="4dp"
+        android:drawableStart="@drawable/operation_day_recharge_glod_coin"
+        android:drawablePadding="2dp"
         android:textColor="@color/color_FFFFE6AB"
+        android:textSize="12sp"
         android:textStyle="bold"
-        app:layout_constraintTop_toBottomOf="@+id/niv_coin"
-        app:layout_constraintStart_toStartOf="@+id/niv_coin"
-        app:layout_constraintEnd_toEndOf="@+id/niv_coin"
-        tools:text="88888"/>
+        app:layout_constraintBottom_toTopOf="@+id/iv_next_task_lucky_coin_num"
+        app:layout_constraintEnd_toEndOf="@id/iv_coin_bg"
+        app:layout_constraintStart_toStartOf="@id/iv_coin_bg"
+        app:layout_constraintTop_toTopOf="@id/iv_coin_bg"
+        app:layout_constraintVertical_chainStyle="packed"
+        tools:text="8888" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/iv_next_task_lucky_coin_num"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:drawableStart="@drawable/operation_day_recharge_luck_coin"
+        android:drawablePadding="2dp"
+        android:textColor="#DDFFE4"
+        android:textSize="12sp"
+        android:textStyle="bold"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="@id/iv_coin_bg"
+        app:layout_constraintStart_toStartOf="@id/iv_coin_bg"
+        app:layout_constraintTop_toBottomOf="@+id/iv_next_task_gold_coin_num"
+        tools:text="8888"
+        tools:visibility="visible" />
+
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 15 - 0
module/wallet/src/main/java/com/adealink/weparty/wallet/coin/CoinFragment.kt

@@ -5,6 +5,7 @@ import android.animation.AnimatorListenerAdapter
 import android.animation.ValueAnimator
 import android.view.animation.DecelerateInterpolator
 import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.postDelayed
 import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.activityViewModels
 import androidx.recyclerview.widget.GridLayoutManager
@@ -21,9 +22,11 @@ import com.adealink.frame.router.Router
 import com.adealink.frame.statistics.CommonEventValue
 import com.adealink.frame.util.DisplayUtil
 import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.commonui.dialogchain.DialogShowManager
 import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
 import com.adealink.weparty.commonui.ext.dp
 import com.adealink.weparty.commonui.ext.gone
+import com.adealink.weparty.commonui.ext.isUiValid
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
 import com.adealink.weparty.commonui.recycleview.diffutil.BaseListDiffUtil
@@ -124,9 +127,20 @@ class CoinFragment : BaseFragment(R.layout.fragment_coin),
             override fun onFinished() {
                 if (isViewBindingValid()){
                     binding.coinAnimationView.gone()
+                    binding.root.postDelayed(2500){
+                        if (isUiValid()){
+                            DialogShowManager.resume()
+                        }
+                    }
                 }
             }
         }
+        DialogShowManager.pause()
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        DialogShowManager.resume()
     }
 
     override fun loadData() {
@@ -334,6 +348,7 @@ class CoinFragment : BaseFragment(R.layout.fragment_coin),
                 }
             }
         }
+        DialogShowManager.pause()
     }
 
     override fun onPause() {

+ 32 - 5
module/wallet/src/main/java/com/adealink/weparty/wallet/component/RechargeDailyTaskItemView.kt

@@ -16,8 +16,10 @@ import androidx.core.view.isVisible
 import com.adealink.frame.aab.util.getCompatDrawable
 import com.adealink.weparty.commonui.ext.dpf
 import com.adealink.weparty.commonui.ext.gone
+import com.adealink.weparty.commonui.ext.hide
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.module.operation.data.ActivityTaskItem
+import com.adealink.weparty.module.operation.data.ProductTypeConstant
 import com.adealink.weparty.util.formatDotNotNull
 import com.adealink.weparty.util.formatNumberStrFull
 import com.adealink.weparty.wallet.R
@@ -46,11 +48,21 @@ class RechargeDailyTaskItemView @JvmOverloads constructor(
     fun update(rewardItem: ActivityTaskItem, isNextReceived: Boolean) {
         // 金币
         val coinInfo =
-            if (rewardItem.rewardInfo.isNotEmpty()) rewardItem.rewardInfo[0] else null
+            if (rewardItem.rewardInfo.isNotEmpty()) rewardItem.rewardInfo.firstOrNull { it.rewardResourceType == ProductTypeConstant.Coin.type } else null
+        val luckyCoinInfo =
+            if (rewardItem.rewardInfo.isNotEmpty()) rewardItem.rewardInfo.firstOrNull { it.rewardResourceType == ProductTypeConstant.LUCKY_COIN.type } else null
+
         if (rewardItem.isTaskCompleted()) {
             binding.nonNextTaskCoinContainer.show()
             binding.nextTaskCoinContainer.gone()
-            binding.ivNonNextTaskCoinNum.text = formatDotNotNull(coinInfo?.rewardNum?.toLong())
+            binding.ivNonNextTaskGoldCoinNum.text = formatDotNotNull(coinInfo?.rewardNum?.toLong())
+            if (luckyCoinInfo != null) {
+                binding.ivNonNextTaskLuckyCoinNum.text =
+                    formatDotNotNull(luckyCoinInfo.rewardNum?.toLong())
+                binding.ivNonNextTaskLuckyCoinNum.show()
+            } else {
+                binding.ivNonNextTaskLuckyCoinNum.gone()
+            }
             binding.taskNode.show()
             binding.taskGift.gone()
             binding.taskNode.setImageDrawable(getCompatDrawable(R.drawable.wallet_recharge_daily_item_received))
@@ -65,8 +77,15 @@ class RechargeDailyTaskItemView @JvmOverloads constructor(
             if (isNextReceived) {
                 binding.nonNextTaskCoinContainer.gone()
                 binding.nextTaskCoinContainer.show()
-                binding.ivNextTaskCoinNum.text = formatDotNotNull(coinInfo?.rewardNum?.toLong())
-                binding.taskNode.gone()
+                binding.ivNextTaskGoldCoinNum.text = formatDotNotNull(coinInfo?.rewardNum?.toLong())
+                if (luckyCoinInfo != null) {
+                    binding.ivNextTaskLuckyCoinNum.text =
+                        formatDotNotNull(luckyCoinInfo.rewardNum.toLong())
+                    binding.ivNextTaskLuckyCoinNum.show()
+                } else {
+                    binding.ivNextTaskLuckyCoinNum.gone()
+                }
+                binding.taskNode.hide()
                 binding.taskGift.show()
                 //展示第一帧
                 binding.taskGift.setAsset(
@@ -79,7 +98,15 @@ class RechargeDailyTaskItemView @JvmOverloads constructor(
             } else {
                 binding.nonNextTaskCoinContainer.show()
                 binding.nextTaskCoinContainer.gone()
-                binding.ivNonNextTaskCoinNum.text = formatDotNotNull(coinInfo?.rewardNum?.toLong())
+                binding.ivNonNextTaskGoldCoinNum.text =
+                    formatDotNotNull(coinInfo?.rewardNum?.toLong())
+                if (luckyCoinInfo != null) {
+                    binding.ivNonNextTaskLuckyCoinNum.text =
+                        formatDotNotNull(luckyCoinInfo.rewardNum?.toLong())
+                    binding.ivNonNextTaskLuckyCoinNum.show()
+                } else {
+                    binding.ivNonNextTaskLuckyCoinNum.gone()
+                }
                 binding.taskNode.show()
                 binding.taskGift.gone()
                 binding.taskNode.setImageDrawable(getCompatDrawable(R.drawable.wallet_recharge_daily_item_received_not))

BIN
module/wallet/src/main/res/drawable-xhdpi/wallet_day_recharge_glod_coin.png


BIN
module/wallet/src/main/res/drawable-xhdpi/wallet_day_recharge_luck_coin.png


BIN
module/wallet/src/main/res/drawable-xhdpi/wallet_icon_day_bottom.png


BIN
module/wallet/src/main/res/drawable-xhdpi/wallet_recharge_next_task_bg.9.png


+ 14 - 0
module/wallet/src/main/res/drawable/wallet_recharge_next_task_bg.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <!-- 设置圆角 -->
+    <corners android:radius="8.5dp" />
+
+    <!-- 设置线性渐变背景 -->
+    <gradient
+        android:angle="180"
+        android:centerColor="#FF882C"
+        android:endColor="#FF4362"
+        android:startColor="#FF882C"
+        android:type="linear" />
+</shape>

+ 13 - 7
module/wallet/src/main/res/layout/layout_recharge_daily.xml

@@ -5,8 +5,8 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginHorizontal="12dp"
-    android:visibility="gone"
     android:layout_marginTop="16dp"
+    android:visibility="gone"
     tools:visibility="visible">
 
     <View
@@ -45,20 +45,26 @@
         app:layout_constraintTop_toTopOf="parent"
         tools:visibility="visible" />
 
-    <HorizontalScrollView
-        android:id="@+id/list"
+    <View
         android:layout_width="0dp"
-        android:layout_height="0dp"
+        android:layout_height="76dp"
         android:layout_marginHorizontal="2dp"
-        android:layout_marginTop="30dp"
         android:layout_marginBottom="2dp"
         android:background="@drawable/wallet_recharge_daily_reward_bg"
+        app:layout_constraintBottom_toBottomOf="@id/bg"
+        app:layout_constraintEnd_toEndOf="@id/bg"
+        app:layout_constraintStart_toStartOf="@id/bg" />
+
+    <HorizontalScrollView
+        android:id="@+id/list"
+        android:layout_width="0dp"
+        android:layout_height="77dp"
+        android:layout_marginBottom="8dp"
         android:clipChildren="true"
         android:scrollbars="none"
         app:layout_constraintBottom_toBottomOf="@id/bg"
         app:layout_constraintEnd_toEndOf="@id/bg"
-        app:layout_constraintStart_toStartOf="@id/bg"
-        app:layout_constraintTop_toTopOf="@id/bg">
+        app:layout_constraintStart_toStartOf="@id/bg">
 
         <com.adealink.weparty.wallet.component.RechargeDailyTaskListView
             android:id="@+id/task_list"

+ 103 - 71
module/wallet/src/main/res/layout/layout_recharge_daily_item.xml

@@ -2,138 +2,170 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="71dp"
-    android:layout_height="wrap_content">
+    android:layout_width="wrap_content"
+    android:minWidth="71dp"
+    android:layout_height="76dp">
 
-    <LinearLayout
+    <androidx.appcompat.widget.LinearLayoutCompat
         android:id="@+id/non_next_task_coin_container"
         android:layout_width="wrap_content"
-        android:layout_height="15dp"
-        android:layout_marginTop="14dp"
-        android:gravity="center_vertical"
-        android:orientation="horizontal"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="6dp"
+        android:orientation="vertical"
         android:visibility="gone"
+        app:layout_constraintBottom_toTopOf="@+id/task_node"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        tools:ignore="MissingConstraints">
+        tools:visibility="visible">
 
         <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/iv_non_next_task_coin_num"
+            android:id="@+id/iv_non_next_task_gold_coin_num"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:includeFontPadding="false"
+            android:layout_marginHorizontal="10dp"
+            android:drawableEnd="@drawable/wallet_day_recharge_glod_coin"
+            android:drawablePadding="2dp"
             android:textColor="@color/color_CE6006"
-            android:textSize="12sp"
-            tools:text="88888" />
+            android:textSize="11sp"
+            android:textStyle="bold"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="8888" />
 
-        <androidx.appcompat.widget.AppCompatImageView
-            android:layout_width="18dp"
-            android:layout_height="15dp"
-            android:src="@drawable/wallet_recharge_non_next_task_coin_ic" />
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/iv_non_next_task_lucky_coin_num"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="10dp"
+            android:drawableEnd="@drawable/wallet_day_recharge_luck_coin"
+            android:drawablePadding="2dp"
+            android:textColor="#3E903E"
+            android:textSize="11sp"
+            android:textStyle="bold"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/iv_non_next_task_gold_coin_num"
+            tools:text="8888"
+            tools:visibility="visible" />
 
-    </LinearLayout>
+    </androidx.appcompat.widget.LinearLayoutCompat>
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/next_task_coin_container"
         android:layout_width="wrap_content"
-        android:layout_height="20dp"
-        android:layout_marginTop="10dp"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="2dp"
         android:visibility="gone"
+        app:layout_constraintBottom_toTopOf="@+id/task_node"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
         tools:ignore="MissingConstraints"
         tools:visibility="visible">
 
         <androidx.constraintlayout.widget.ConstraintLayout
-            android:layout_width="0dp"
-            android:layout_height="0dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent">
+            android:id="@+id/layout"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:layout_constraintBottom_toTopOf="@+id/bottom">
 
             <androidx.appcompat.widget.AppCompatImageView
-                android:layout_width="match_parent"
-                android:layout_height="17dp"
+                android:id="@+id/iv_bg"
+                android:layout_width="0dp"
+                android:layout_height="0dp"
                 android:background="@drawable/wallet_recharge_next_task_bg"
+                app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />
 
-            <androidx.appcompat.widget.AppCompatImageView
-                android:layout_width="9dp"
-                android:layout_height="4dp"
-                android:background="@drawable/wallet_recharge_next_task_arrow_ic"
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/iv_next_task_gold_coin_num"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="10dp"
+                android:layout_marginTop="3dp"
+                android:layout_marginBottom="2dp"
+                android:drawableEnd="@drawable/wallet_day_recharge_glod_coin"
+                android:drawablePadding="2dp"
+                android:textColor="@color/white"
+                android:textSize="11sp"
+                android:textStyle="bold"
+                app:layout_constraintBottom_toTopOf="@+id/iv_next_task_lucky_coin_num"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:text="8888" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/iv_next_task_lucky_coin_num"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="10dp"
+                android:layout_marginBottom="3dp"
+                android:drawableEnd="@drawable/wallet_day_recharge_luck_coin"
+                android:drawablePadding="2dp"
+                android:textColor="@color/white"
+                android:textSize="11sp"
+                android:textStyle="bold"
+                android:visibility="gone"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent" />
-
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/iv_next_task_gold_coin_num"
+                tools:text="8888"
+                tools:visibility="visible" />
         </androidx.constraintlayout.widget.ConstraintLayout>
 
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/iv_next_task_coin_num"
-            android:layout_width="wrap_content"
-            android:layout_height="17dp"
-            android:layout_marginStart="6dp"
-            android:gravity="center"
-            android:includeFontPadding="false"
-            android:textColor="@color/color_FFFFFF"
-            android:textSize="11sp"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            tools:text="88888" />
-
         <androidx.appcompat.widget.AppCompatImageView
-            android:layout_width="18dp"
-            android:layout_height="15dp"
-            android:layout_marginEnd="6dp"
-            android:src="@drawable/wallet_recharge_next_task_coin_ic"
-            app:layout_constraintBottom_toBottomOf="@+id/iv_next_task_coin_num"
+            android:id="@+id/bottom"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/wallet_icon_day_bottom"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@+id/iv_next_task_coin_num"
-            app:layout_constraintTop_toTopOf="@+id/iv_next_task_coin_num" />
+            app:layout_constraintStart_toStartOf="parent" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-    <androidx.appcompat.widget.AppCompatImageView
-        android:id="@+id/task_node"
-        android:layout_width="13dp"
-        android:layout_height="13dp"
-        android:layout_marginTop="35dp"
-        android:visibility="gone"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        tools:ignore="MissingConstraints"
-        tools:visibility="visible" />
-
     <com.opensource.svgaplayer.WenextSvgaView
         android:id="@+id/task_gift"
         android:layout_width="35dp"
         android:layout_height="35dp"
-        android:layout_marginTop="25dp"
         android:visibility="gone"
         app:autoPlay="false"
+        app:layout_constraintBottom_toBottomOf="@id/task_node"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/task_node"
         app:loopCount="1"
         tools:ignore="MissingConstraints"
         tools:visibility="visible" />
 
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/task_node"
+        android:layout_width="13dp"
+        android:layout_height="13dp"
+        android:layout_marginBottom="6dp"
+        android:visibility="gone"
+        app:layout_constraintBottom_toTopOf="@+id/tv_recharge_count"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        tools:visibility="visible" />
+
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_recharge_count"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="54dp"
         android:gravity="center"
+        android:includeFontPadding="false"
         android:textColor="@color/color_CE6006"
         android:textSize="12sp"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
         tools:text="888888" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 2
module/wallet/src/main/res/layout/layout_recharge_daily_task_list.xml

@@ -11,12 +11,12 @@
         android:layout_width="0dp"
         android:layout_height="5dp"
         android:layout_marginHorizontal="35dp"
-        android:layout_marginTop="39dp"
+        android:layout_marginBottom="25dp"
         android:max="100"
         android:progressDrawable="@drawable/wallet_recharge_daily_task_progress"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="@+id/task_container"
         app:layout_constraintStart_toStartOf="@+id/task_container"
-        app:layout_constraintTop_toTopOf="parent"
         tools:progress="50"
         tools:secondaryProgress="60" />
 

+ 26 - 0
module/webview/src/main/java/com/adealink/weparty/webview/jsnativemethod/PauseDialogManagerJSNativeMethod.kt

@@ -0,0 +1,26 @@
+package com.adealink.weparty.webview.jsnativemethod
+
+import com.adealink.weparty.commonui.dialogchain.DialogShowManager
+import com.adealink.weparty.webview.jsbridge.callback.JSBridgeCallback
+import com.adealink.weparty.webview.jsbridge.method.JSNativeMethod
+
+/**
+ * 调用了pause之后,必须记得resume
+ * Created by XiaoDongLin.
+ * Date: 2025/7/15
+ */
+class PauseDialogManagerJSNativeMethod: JSNativeMethod<Any, Any> {
+    override val methodName: String = "PauseDialogManager"
+
+    override fun handleMethodCall(data: Any, callback: JSBridgeCallback<Any>?) {
+        DialogShowManager.pause()
+    }
+}
+
+class ResumeDialogManagerJSNativeMethod: JSNativeMethod<Any, Any> {
+    override val methodName: String = "ResumeDialogManager"
+
+    override fun handleMethodCall(data: Any, callback: JSBridgeCallback<Any>?) {
+        DialogShowManager.resume()
+    }
+}