Quellcode durchsuchen

feat: 概率游戏补充 (#44)

* feat: 概率游戏入口梳理

* feat: 概率游戏入口梳理

* feat: 概率游戏入口

* feat: appName补充

* feat: cocos游戏版本控制

* feat: cocos游戏版本控制

* feat: 全服横幅跳转游戏

* feat: 概率游戏P1

* feat: teen-patti不走changeJSBridge桥接

* feat: 生产测试P0游戏

* feat: 音效补充

* feat: gameLoading资源

* feat: gameLoading资源

* feat: 游戏横幅接入、图标更换

* feat: 多语言、根据配置显示入口

* feat: teen-patti宽高修改

* feat: 头图添加

* feat: jackpot半屏显示

* feat: 俄罗斯转盘入口

* feat: 横幅、广播开关控制

* feat: 多语言

* feat: 横幅、广播开关控制

* feat: 游戏组件入口

* feat: 首充入口恢复

* feat: 多语言
WilliumP vor 10 Monaten
Ursprung
Commit
1867701cfc
95 geänderte Dateien mit 1105 neuen und 638 gelöschten Zeilen
  1. 1 0
      app/src/main/java/com/adealink/weparty/config/Data.kt
  2. 56 15
      app/src/main/java/com/adealink/weparty/module/room/data/RoomNotifyData.kt
  3. 2 2
      app/src/main/java/com/adealink/weparty/url/UrlConfig.kt
  4. BIN
      app/src/main/res/drawable-xhdpi/common_dragon_tiger_ic.webp
  5. BIN
      app/src/main/res/drawable-xhdpi/common_greedy_box_ic.webp
  6. BIN
      app/src/main/res/drawable-xhdpi/common_greedy_pro_ic.webp
  7. BIN
      app/src/main/res/drawable-xhdpi/common_jackpot_ic.webp
  8. BIN
      app/src/main/res/drawable-xhdpi/common_jackpot_slot_ic.webp
  9. BIN
      app/src/main/res/drawable-xhdpi/common_lucky_fruit_ic.webp
  10. BIN
      app/src/main/res/drawable-xhdpi/common_lucky_pro_ic.webp
  11. BIN
      app/src/main/res/drawable-xhdpi/common_russian_roulette_ic.webp
  12. BIN
      app/src/main/res/drawable-xhdpi/common_teen_patti_ic.webp
  13. BIN
      app/src/main/res/drawable-xhdpi/common_texas_cowboy_ic.webp
  14. 4 1
      app/src/main/res/values-ar/strings.xml
  15. 4 0
      app/src/main/res/values-zh/strings.xml
  16. 3 0
      app/src/main/res/values/strings.xml
  17. BIN
      audio/dragontiger_backgroup.mp3
  18. BIN
      audio/dragontiger_card_flip.mp3
  19. BIN
      audio/dragontiger_countDpwnTime5_1.mp3
  20. BIN
      audio/dragontiger_dragon_shout.mp3
  21. BIN
      audio/dragontiger_draw_shout.mp3
  22. BIN
      audio/dragontiger_no_win.mp3
  23. BIN
      audio/dragontiger_petchips.mp3
  24. BIN
      audio/dragontiger_stamp.mp3
  25. BIN
      audio/dragontiger_tiger_shout.mp3
  26. BIN
      audio/dragontiger_time_end.mp3
  27. BIN
      audio/dragontiger_vs.mp3
  28. BIN
      audio/dragontiger_win.mp3
  29. BIN
      audio/greedy_personal_bg.mp3
  30. BIN
      audio/roulette_background.mp3
  31. BIN
      audio/roulette_ballroutate.mp3
  32. BIN
      audio/roulette_ballstop.mp3
  33. BIN
      audio/roulette_btnclick.mp3
  34. BIN
      audio/roulette_cake.mp3
  35. BIN
      audio/roulette_openballtips.mp3
  36. BIN
      audio/roulette_pausebatting.mp3
  37. BIN
      audio/roulette_settlementwin.mp3
  38. BIN
      audio/roulette_wheelspin.mp3
  39. BIN
      audio/texasbull_5to1countdown.mp3
  40. BIN
      audio/texasbull_backgroup.mp3
  41. BIN
      audio/texasbull_boywin.mp3
  42. BIN
      audio/texasbull_countdownend.MP3
  43. BIN
      audio/texasbull_cowwin.mp3
  44. BIN
      audio/texasbull_gamedraw.MP3
  45. BIN
      audio/texasbull_gamewin.mp3
  46. BIN
      audio/texasbull_getcoin.mp3
  47. BIN
      audio/texasbull_onclick.mp3
  48. BIN
      audio/texasbull_opencard.mp3
  49. BIN
      audio/texasbull_petchips.mp3
  50. BIN
      module/headline/src/main/assets/headline_dragon_tiger_fight_global.svga
  51. BIN
      module/headline/src/main/assets/headline_russia_roulette_global.svga
  52. BIN
      module/headline/src/main/assets/headline_texas_cowboy_global.svga
  53. 185 141
      module/headline/src/main/java/com/adealink/weparty/headline/fragment/HeadlineFragment.kt
  54. 68 0
      module/headline/src/main/java/com/adealink/weparty/headline/view/DragonTigerGlobalHeadline.kt
  55. 23 26
      module/headline/src/main/java/com/adealink/weparty/headline/view/HeadlineViewBuilder.kt
  56. 68 0
      module/headline/src/main/java/com/adealink/weparty/headline/view/RussiaRouletteGlobalHeadline.kt
  57. 5 4
      module/headline/src/main/java/com/adealink/weparty/headline/view/TeenPattiGlobalHeadline.kt
  58. 69 0
      module/headline/src/main/java/com/adealink/weparty/headline/view/TexasCowboyGlobalHeadline.kt
  59. 30 13
      module/headline/src/main/java/com/adealink/weparty/headline/viewmodel/HeadlineViewModel.kt
  60. 197 284
      module/room/src/main/java/com/adealink/weparty/room/game/GameComp.kt
  61. 11 32
      module/room/src/main/java/com/adealink/weparty/room/game/adapter/GameEntranceAdapter.kt
  62. 45 22
      module/room/src/main/java/com/adealink/weparty/room/game/data/GameEntranceData.kt
  63. 48 10
      module/room/src/main/java/com/adealink/weparty/room/micseat/globalbroadcast/data/RoomGlobalBroadcastData.kt
  64. 47 10
      module/room/src/main/java/com/adealink/weparty/room/micseat/globalbroadcast/manager/RoomGlobalBroadcastManager.kt
  65. 43 16
      module/room/src/main/java/com/adealink/weparty/room/micseat/globalbroadcast/viewmodel/RoomGlobalBroadcastViewModel.kt
  66. 37 23
      module/room/src/main/java/com/adealink/weparty/room/playcenter/RoomPlayCenterPanelFragment.kt
  67. 3 3
      module/room/src/main/java/com/adealink/weparty/room/playcenter/data/RoomPlayCenterData.kt
  68. 18 0
      module/room/src/main/java/com/adealink/weparty/room/playcenter/manager/PlayCenterManager.kt
  69. 8 1
      module/room/src/main/java/com/adealink/weparty/room/playcenter/util/PlayCenterUtil.kt
  70. 0 16
      module/room/src/main/res/layout/item_game_entrance.xml
  71. 3 0
      module/room/src/main/res/values-ar/strings.xml
  72. 5 0
      module/room/src/main/res/values-zh/strings.xml
  73. 3 0
      module/room/src/main/res/values/strings.xml
  74. BIN
      module/webview/src/main/assets/loading_greedy_box.svga
  75. BIN
      module/webview/src/main/assets/loading_roulette.svga
  76. BIN
      module/webview/src/main/assets/loading_texas.svga
  77. BIN
      module/webview/src/main/assets/loading_texas_top.svga
  78. 4 1
      module/webview/src/main/java/com/adealink/weparty/webview/WebViewDialogFragment.kt
  79. 102 17
      module/webview/src/main/java/com/adealink/weparty/webview/component/GameLoadingComp.kt
  80. BIN
      module/webview/src/main/res/drawable-xhdpi/game_loading_progress_roulette.9.png
  81. BIN
      module/webview/src/main/res/drawable-xhdpi/game_loading_progress_teen_patti.9.png
  82. BIN
      module/webview/src/main/res/drawable-xhdpi/game_loading_progress_texas_cowboy.9.png
  83. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg.webp
  84. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg_dragon_tiger.webp
  85. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg_russia_roulette.webp
  86. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg_texas_cowboy.webp
  87. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_dragon_tiger.webp
  88. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_jackpot_slot.webp
  89. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_russia_roulette.webp
  90. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_teen_patti.webp
  91. BIN
      module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_texas_cowboy.webp
  92. BIN
      module/webview/src/main/res/drawable-xhdpi/web_progress_bg_roulette.9.png
  93. BIN
      module/webview/src/main/res/drawable-xhdpi/web_progress_bg_teen_patti.png
  94. BIN
      module/webview/src/main/res/drawable-xhdpi/web_progress_bg_texas.9.png
  95. 13 1
      module/webview/src/main/res/layout/layout_game_loading.xml

+ 1 - 0
app/src/main/java/com/adealink/weparty/config/Data.kt

@@ -77,6 +77,7 @@ enum class GlobalConfigType(val value: Int) {
     GLOBAL_GREEDYBOX_VERSION_INFO(82), //greedy_box游戏版本信息
     GLOBAL_TEXAS_COWBOY_VERSION_INFO(83), //texas cowboy游戏版本信息
     GLOBAL_JACKPOT_SLOT_VERSION_INFO(84), //jackpot slot游戏版本信息
+    GLOBAL_DRAGON_TIGER_FIGHT_VERSION_INFO(85), //dragon tiger fight游戏版本信息
     GLOBAL_APPROVING_VERSION(90),//提审版本信息
     GLOBAL_CALL_1V1(97), //1v1Call
     GLOBAL_MALE_DAILY_CHARGE_ACTIVITY_SWITCH(99), // 男性每日充值活动开关配置

+ 56 - 15
app/src/main/java/com/adealink/weparty/module/room/data/RoomNotifyData.kt

@@ -5,6 +5,7 @@ import com.adealink.weparty.module.anchor.data.AnchorMessageButton
 import com.adealink.weparty.module.level.data.CommonLevelChangeNotify
 import com.adealink.weparty.module.level.data.CongratulateUserLevelUpNotify
 import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.module.profile.decorate.data.DecorType
 import com.google.gson.annotations.GsonNullable
 import com.google.gson.annotations.JsonAdapter
 import com.google.gson.annotations.Must
@@ -44,36 +45,57 @@ data class FlagRaisingNotify(
 enum class RoomNotifyType(val uri: String) {
     SendGift("GIFT_SEND_NOTIFY"),
     SendBackPack("GOODS_SEND_NOTIFY"),
-    LuckyFruit("GREEDYO_REWARD_NOTIFY"),
     SendRedPacket("NEW_REDPACKET"),
-
     //    InviteReward("INVITE_REWARD_NOTIFY"),
     GiftWish("RAMADAN_GIFT_SEND_NOTIFY"),
     SuperGift("SUPER_GIFT_REWARD_NOTIFY"),
-    Slot("SLOT_REWARD_NOTIFY"),
-    SlotPro("NEW_SLOT_PRO_REWARD_NOTIFY"),
-    NEW_SLOT_REWARD_NOTIFY("NEW_SLOT_REWARD_NOTIFY"),
     RTC_CHANGED_NOTIFY("RTC_CHANGED_NOTIFY"),
-
     //    FAMILY_TOP_ROOM("FAMILY_TOP_ROOM"),
-//    FLAG_RAISING("FLAG_RAISING"),
-//    WORLD_CUP_POINTS_REACH_THRESHOLD("WORLDCUP_POINTS_REACH_THRESHOLD"),
+    //    FLAG_RAISING("FLAG_RAISING"),
+    //    WORLD_CUP_POINTS_REACH_THRESHOLD("WORLDCUP_POINTS_REACH_THRESHOLD"),
     COMMON_GLOBAL_ROOM_BROADCAST_NOTIFY("COMMON_GLOBAL_NOTIFY"),
     DAILY_RECHARGE_REWARD_NOTIFY("URI_USER_DAILY_CHARGE_REWARD_NOTIFY"),
-
     //    LEVEL_UP_NOTIFY("URI_LEVEL_UP_OTHER_NOTIFY"),
-//    BETTING_PK_NOTIFY("SUPER_PK_GLOBAL_NOTIFY"),
-//    TEEN_PATTI_REWARD_NOTIFY("TEEN_PATTI_REWARD_NOTIFY"),
-    GREEDY_PRO_NOTIFY("NEW_GREEDYO_REWARD_NOTIFY"),
+    //    BETTING_PK_NOTIFY("SUPER_PK_GLOBAL_NOTIFY"),
     ADMIN_LOTTERY_ACTIVITY_REWARD_NOTIFY("URI_USER_ADMIN_LOTTERY_ACTIVITY_REWARD_NOTIFY"),
-    NEW_GREEDY_PRO_REWARD_NOTIFY("NEW_GREEDYO_PRO_REWARD_NOTIFY"),
-    GREEDY_BOX_NOTIFY("GREEDY_BOX_REWARD_NOTIFY"),
+
+    //游戏全服横幅
+    LuckyFruit("GREEDYO_REWARD_NOTIFY"),//lucky fruit
+    Slot("SLOT_REWARD_NOTIFY"),//jackpot
+    SlotPro("NEW_SLOT_PRO_REWARD_NOTIFY"),//jackpot slot
+    NEW_SLOT_REWARD_NOTIFY("NEW_SLOT_REWARD_NOTIFY"),//new slot
+    TEEN_PATTI_REWARD_NOTIFY("TEEN_PATTI_REWARD_NOTIFY"),//teen-patti
+    GREEDY_PRO_NOTIFY("NEW_GREEDYO_REWARD_NOTIFY"),//greedy pro
+    NEW_GREEDY_PRO_REWARD_NOTIFY("NEW_GREEDYO_PRO_REWARD_NOTIFY"),//lucky pro
+    GREEDY_BOX_NOTIFY("GREEDY_BOX_REWARD_NOTIFY"), //greedy box
+    DRAGON_TIGER_FIGHT_REWARD_NOTIFY("DRAGON_TIGER_FIGHT_REWARD_NOTIFY"),
+    RUSSIA_ROULETTE_REWARD_NOTIFY("RUSSIAN_TURNTABLE_REWARD_NOTIFY"),
+    TEXAS_COWBOY_REWARD_NOTIFY("TEXAS_POKER_REWARD_NOTIFY"),
+
 
     //    SVIP_GLOBAL_NOTIFY("URI_SVIP_GLOBAL_NOTIFY");   // SVIP 升级全服通知
     COMMON_LEVEL_CHANGE_NOTIFY("COMMON_LEVEL_CHANGE_NOTIFY"),
     URI_CONGRATULATE_LEVEL_UP_NOTIFY("URI_CONGRATULATE_LEVEL_UP_NOTIFY"),  //财富等级升级通知
     // Q:拉新活动相关奖励的Notify应不仅仅隶属Room,目前只有房间可见通知横幅,故沿用写法;
-    URI_INVITE_TASK_REWARD_NOTIFY("URI_INVITE_TASK_REWARD_NOTIFY") // 拉新活动相关奖励
+    URI_INVITE_TASK_REWARD_NOTIFY("URI_INVITE_TASK_REWARD_NOTIFY"); // 拉新活动相关奖励
+
+    companion object {
+        fun getGameDecorTypeValue(uri: String): Int {
+            return when(uri) {
+                LuckyFruit.uri -> DecorType.LUCKY_FRUIT_GAME.value
+                Slot.uri -> DecorType.JACKPOT_GAME.value
+                SlotPro.uri -> DecorType.JACKPOT_SLOT_GAME.value
+                TEEN_PATTI_REWARD_NOTIFY.uri -> DecorType.TEEN_PATTI_GAME.value
+                GREEDY_PRO_NOTIFY.uri -> DecorType.GREEDY_PRO_GAME.value
+                NEW_GREEDY_PRO_REWARD_NOTIFY.uri -> DecorType.LUCKY_PRO_GAME.value
+                GREEDY_BOX_NOTIFY.uri -> DecorType.GREEDY_BOX_GAME.value
+                DRAGON_TIGER_FIGHT_REWARD_NOTIFY.uri -> DecorType.DRAGON_TIGER_FIGHT_GAME.value
+                RUSSIA_ROULETTE_REWARD_NOTIFY.uri -> DecorType.RUSSIAN_TURNTABLE_GAME.value
+                TEXAS_COWBOY_REWARD_NOTIFY.uri -> DecorType.TEXAS_GAME.value
+                else -> -1
+            }
+        }
+    }
 }
 
 @JsonAdapter(ExtReflectiveTypeAdapterFactory::class)
@@ -120,6 +142,8 @@ data class GlobalRoomBroadcastNotify(
     val commonLevelChangeNotify: CommonLevelChangeNotify? = null,
     @SerializedName("congratulateUserLevelUpNotify")
     val congratulateUserLevelUpNotify: CongratulateUserLevelUpNotify? = null,
+    @SerializedName("dragonTigerFightRewardNotify")
+    val dragonTigerFightRewardNotify: DragonTigerFightRewardNotify? = null,
 ) {
     //每日充值奖励
     var dailyRechargeRewardNotify: DailyRechargeRewardBroadcastNotify? = null
@@ -486,4 +510,21 @@ data class InviteTaskRewardBroadcastNotify(
     @SerializedName("uid") val uid: Long,
     @SerializedName("nickName") var nickName: String,
     @SerializedName("avatar") var avatar: String,
+)
+
+/**
+ * 龙虎斗
+ */
+@JsonAdapter(ExtReflectiveTypeAdapterFactory::class)
+data class DragonTigerFightRewardNotify(
+    @SerializedName("rewardCoin")
+    val rewardCoin: Int,
+    @SerializedName("rewardUid")
+    val rewardUid: Long,
+    @SerializedName("rewardUidImgUrl")
+    val rewardUidImgUrl: String,
+    @SerializedName("rewardUidName")
+    val rewardUidName: String,
+    @SerializedName("seqId")
+    val seqId: Long,
 )

+ 2 - 2
app/src/main/java/com/adealink/weparty/url/UrlConfig.kt

@@ -59,8 +59,8 @@ object UrlConfig {
     }
 
     internal val slot = when {
-        isProdEnv -> "https://web.wenext.chat/web/h5-slot"
-        else -> "http://web-test.wenext.chat/web/h5-slot"
+        isProdEnv -> "http://web.yoki.chat/index?projectname=yoki-jackpot"
+        else -> "http://web-test.yoki.chat/index?projectname=yoki-jackpot"
     }
 
     internal val coupleRules = when {

BIN
app/src/main/res/drawable-xhdpi/common_dragon_tiger_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_greedy_box_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_greedy_pro_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_jackpot_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_jackpot_slot_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_lucky_fruit_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_lucky_pro_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_russian_roulette_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_teen_patti_ic.webp


BIN
app/src/main/res/drawable-xhdpi/common_texas_cowboy_ic.webp


+ 4 - 1
app/src/main/res/values-ar/strings.xml

@@ -196,7 +196,7 @@
     <string name="common_lucky_fruit">فاكهة محظوظة</string>
     <string name="common_jackpot">الفوز بالجائزة الكبرى</string>
     <string name="common_greedy_pro">الجشع برو</string>
-    <string name="common_greedy_box">الصندوق الجشع</string>
+    <string name="common_greedy_box">صندوق الجشع</string>
     <string name="common_copy">ينسخ</string>
     <string name="common_skip">تخطي</string>
     <string name="common_skip_after_second">تخطي %d ثانية</string>
@@ -659,4 +659,7 @@
     <string name="task_reward_more_task">المزيد من المهام</string>
     <string name="chat_and_get_diamonds_btn">ابدأ الدردشة</string>
     <string name="task_welcome_text">مرحباً</string>
+    <string name="common_texas_cowboy">راعي البقر في تكساس</string>
+    <string name="common_russian_turntable">الروليت</string>
+    <string name="common_dragon_tiger_fight">فتحة التنين النمر</string>
 </resources>

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

@@ -657,4 +657,8 @@
     <string name="task_reward_more_task">更多任务</string>
     <string name="chat_and_get_diamonds_btn">开始聊天</string>
     <string name="task_welcome_text">欢迎</string>
+    <string name="common_greedy_box">贪婪盒子</string>
+    <string name="common_texas_cowboy">德州牛仔</string>
+    <string name="common_russian_turntable">俄罗斯转盘</string>
+    <string name="common_dragon_tiger_fight">龙虎斗</string>
 </resources>

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

@@ -200,6 +200,9 @@
     <string name="common_fishing">Fishing</string>
     <string name="common_teen_patti">Teen Patti</string>
     <string name="common_pyramid_slots">Pyramid Slots</string>
+    <string name="common_russian_turntable">Roulette</string>
+    <string name="common_texas_cowboy">Texas Cowboy</string>
+    <string name="common_dragon_tiger_fight">Dragon Tiger Slot</string>
     <string name="common_backpack_no_married_tip">Only users who are married can use this product, go and propose/get married</string>
     <string name="common_lucky_fruit">Lucky fruit</string>
     <string name="common_jackpot">Jackpot</string>

BIN
audio/dragontiger_backgroup.mp3


BIN
audio/dragontiger_card_flip.mp3


BIN
audio/dragontiger_countDpwnTime5_1.mp3


BIN
audio/dragontiger_dragon_shout.mp3


BIN
audio/dragontiger_draw_shout.mp3


BIN
audio/dragontiger_no_win.mp3


BIN
audio/dragontiger_petchips.mp3


BIN
audio/dragontiger_stamp.mp3


BIN
audio/dragontiger_tiger_shout.mp3


BIN
audio/dragontiger_time_end.mp3


BIN
audio/dragontiger_vs.mp3


BIN
audio/dragontiger_win.mp3


BIN
audio/greedy_personal_bg.mp3


BIN
audio/roulette_background.mp3


BIN
audio/roulette_ballroutate.mp3


BIN
audio/roulette_ballstop.mp3


BIN
audio/roulette_btnclick.mp3


BIN
audio/roulette_cake.mp3


BIN
audio/roulette_openballtips.mp3


BIN
audio/roulette_pausebatting.mp3


BIN
audio/roulette_settlementwin.mp3


BIN
audio/roulette_wheelspin.mp3


BIN
audio/texasbull_5to1countdown.mp3


BIN
audio/texasbull_backgroup.mp3


BIN
audio/texasbull_boywin.mp3


BIN
audio/texasbull_countdownend.MP3


BIN
audio/texasbull_cowwin.mp3


BIN
audio/texasbull_gamedraw.MP3


BIN
audio/texasbull_gamewin.mp3


BIN
audio/texasbull_getcoin.mp3


BIN
audio/texasbull_onclick.mp3


BIN
audio/texasbull_opencard.mp3


BIN
audio/texasbull_petchips.mp3


BIN
module/headline/src/main/assets/headline_dragon_tiger_fight_global.svga


BIN
module/headline/src/main/assets/headline_russia_roulette_global.svga


BIN
module/headline/src/main/assets/headline_texas_cowboy_global.svga


+ 185 - 141
module/headline/src/main/java/com/adealink/weparty/headline/fragment/HeadlineFragment.kt

@@ -66,14 +66,9 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
     IPlayListener, IRoomListener, IHeadlineBtnClickListener, IHeadlineClickListener {
     private val binding by viewBinding(FragmentHealineBinding::bind)
     private val headlineViewModel by viewModels<HeadlineViewModel> { HeadlineViewModelFactory() }
-    private var isShowLuckyFruit: Boolean? = null
     private var isShowInviteRebate: Boolean? = null
-    private var isShowSlot: Boolean? = null
-    private var slotProShowConfig: GameShowConfig? = null
-    private var greedyBoxShowConfig: GameShowConfig? = null
-    private var teenPattiShowConfig: GameShowConfig? = null
-    private var greedyProShowConfig: GameShowConfig? = null
-    private var luckyProShowConfig: GameShowConfig? = null
+    private val gameShowConfigMap = hashMapOf<Int, GameShowConfig>()
+
     private val gameViewModel by fastLazy { GameModule.getGameViewModel(this) }
     private val shareViewModel by fastLazy { ShareModule.getShareViewModel(this) }
     private val giftTreasureViewMode by fastLazy { GiftModule.getTreasureGiftViewModel(requireActivity()) }
@@ -265,36 +260,25 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
 
     override fun loadData() {
         super.loadData()
-        gameViewModel?.isShowLuckyFruit()?.observe(viewLifecycleOwner) {
-            isShowLuckyFruit = when (it) {
-                is Rlt.Success -> {
-                    it.data.data!!.show
-                }
-
-                is Rlt.Failed -> {
-                    null
-                }
-            }
-        }
         shareViewModel?.isShowInviteRebate()?.observe(viewLifecycleOwner) {
             val show = (it as? Rlt.Success)?.data?.data?.show
             isShowInviteRebate = (show == true)
         }
-        gameViewModel?.isShowSlot()?.observe(viewLifecycleOwner) {
-            isShowSlot = when (it) {
-                is Rlt.Success -> {
-                    it.data.data!!.show
-                }
-
-                is Rlt.Failed -> {
-                    null
-                }
-            }
-        }
-        gameViewModel?.isGameShow(listOf(DecorType.TEEN_PATTI_GAME.value, DecorType.GREEDY_PRO_GAME.value))
-            ?.observe(viewLifecycleOwner) { configMap ->
-                teenPattiShowConfig = configMap[DecorType.TEEN_PATTI_GAME.value]
-                greedyProShowConfig = configMap[DecorType.GREEDY_PRO_GAME.value]
+        gameViewModel?.isGameShow(
+            listOf(
+                DecorType.LUCKY_FRUIT_GAME.value,
+                DecorType.JACKPOT_GAME.value,
+                DecorType.JACKPOT_SLOT_GAME.value,
+                DecorType.GREEDY_BOX_GAME.value,
+                DecorType.TEEN_PATTI_GAME.value,
+                DecorType.DRAGON_TIGER_FIGHT_GAME.value,
+                DecorType.RUSSIAN_TURNTABLE_GAME.value,
+                DecorType.TEXAS_GAME.value,
+                DecorType.LUCKY_PRO_GAME.value,
+                DecorType.GREEDY_PRO_GAME.value,
+            )
+        )?.observe(viewLifecycleOwner) { configMap ->
+                gameShowConfigMap.putAll(configMap)
             }
 
         headlineViewModel.getHeadlineQueueRandomConfig().observe(viewLifecycleOwner) {
@@ -332,101 +316,147 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
     }
 
     private fun checkAndShowLuckyFruitEntry() {
-        if (isShowLuckyFruit == null) {
+        val luckyFruitShowConfig = gameShowConfigMap[DecorType.LUCKY_FRUIT_GAME.value]
+        if (luckyFruitShowConfig == null) {
             gameViewModel?.isShowLuckyFruit()?.observe(viewLifecycleOwner) {
                 if (it is Rlt.Success) {
                     showLuckyFruitEntry()
                 }
             }
-        } else if (isShowLuckyFruit == true) {
+        } else if (luckyFruitShowConfig.show) {
             showLuckyFruitEntry()
         }
     }
 
     private fun checkAndShowTeenPattiEntry() {
+        val teenPattiShowConfig = gameShowConfigMap[DecorType.TEEN_PATTI_GAME.value]
         if (teenPattiShowConfig == null) {
             gameViewModel?.isGameShow(listOf(DecorType.TEEN_PATTI_GAME.value))
                 ?.observe(viewLifecycleOwner) { configMap ->
-                    teenPattiShowConfig = configMap[DecorType.TEEN_PATTI_GAME.value]
-                    if (teenPattiShowConfig?.show == true) {
-                        showTeenPattiEntry(teenPattiShowConfig?.loadingUrl)
+                    val config = configMap[DecorType.TEEN_PATTI_GAME.value]
+                    if (config?.show == true) {
+                        showTeenPattiEntry(config.loadingUrl)
                     }
                 }
-        } else if (teenPattiShowConfig?.show == true) {
-            showTeenPattiEntry(teenPattiShowConfig?.loadingUrl)
+        } else if (teenPattiShowConfig.show) {
+            showTeenPattiEntry(teenPattiShowConfig.loadingUrl)
         }
     }
 
     private fun checkAndShowSlotProEntry() {
+        val slotProShowConfig = gameShowConfigMap[DecorType.JACKPOT_SLOT_GAME.value]
         if (slotProShowConfig == null) {
             gameViewModel?.isGameShow(listOf(DecorType.JACKPOT_SLOT_GAME.value))
                 ?.observe(viewLifecycleOwner) { configMap ->
-                    slotProShowConfig = configMap[DecorType.JACKPOT_SLOT_GAME.value]
-                    if (slotProShowConfig?.show == true) {
-                        showSlotProEntry(slotProShowConfig?.loadingUrl)
+                    val config = configMap[DecorType.JACKPOT_SLOT_GAME.value]
+                    if (config?.show == true) {
+                        showSlotProEntry(config.loadingUrl)
                     }
                 }
-        } else if (slotProShowConfig?.show == true) {
-            showSlotProEntry(slotProShowConfig?.loadingUrl)
+        } else if (slotProShowConfig.show) {
+            showSlotProEntry(slotProShowConfig.loadingUrl)
         }
     }
 
     private fun checkAndShowGreedyBoxEntry() {
+        val greedyBoxShowConfig = gameShowConfigMap[DecorType.GREEDY_BOX_GAME.value]
         if (greedyBoxShowConfig == null) {
             gameViewModel?.isGameShow(listOf(DecorType.GREEDY_BOX_GAME.value))
                 ?.observe(viewLifecycleOwner) { configMap ->
-                    greedyBoxShowConfig = configMap[DecorType.GREEDY_BOX_GAME.value]
-                    if (greedyBoxShowConfig?.show == true) {
-                        showGreedyBoxEntry(greedyBoxShowConfig?.loadingUrl)
+                    val config = configMap[DecorType.GREEDY_BOX_GAME.value]
+                    if (config?.show == true) {
+                        showGreedyBoxEntry(config.loadingUrl)
                     }
                 }
-        } else if (greedyBoxShowConfig?.show == true) {
-            showGreedyBoxEntry(greedyBoxShowConfig?.loadingUrl)
+        } else if (greedyBoxShowConfig.show) {
+            showGreedyBoxEntry(greedyBoxShowConfig.loadingUrl)
         }
     }
 
     private fun checkAndShowGreedyProEntry() {
+        val greedyProShowConfig = gameShowConfigMap[DecorType.GREEDY_PRO_GAME.value]
         if (greedyProShowConfig == null) {
             gameViewModel?.isGameShow(listOf(DecorType.GREEDY_PRO_GAME.value))
                 ?.observe(viewLifecycleOwner) { configMap ->
-                    greedyProShowConfig = configMap[DecorType.GREEDY_PRO_GAME.value]
-                    if (greedyProShowConfig?.show == true) {
+                    val config = configMap[DecorType.GREEDY_PRO_GAME.value]
+                    if (config?.show == true) {
                         showGreedyProEntry()
                     }
                 }
-        } else if (greedyProShowConfig?.show == true) {
+        } else if (greedyProShowConfig.show) {
             showGreedyProEntry()
         }
     }
 
     private fun checkAndShowLuckyProEntry() {
+        val luckyProShowConfig = gameShowConfigMap[DecorType.LUCKY_PRO_GAME.value]
         if (luckyProShowConfig == null) {
             gameViewModel?.isGameShow(listOf(DecorType.LUCKY_PRO_GAME.value))
                 ?.observe(viewLifecycleOwner) { configMap ->
-                    luckyProShowConfig = configMap[DecorType.LUCKY_PRO_GAME.value]
-                    if (luckyProShowConfig?.show == true) {
+                    val config = configMap[DecorType.LUCKY_PRO_GAME.value]
+                    if (config?.show == true) {
                         showLuckyProEntry()
                     }
                 }
             return
-        }
-        if (luckyProShowConfig?.show == true) {
+        } else if (luckyProShowConfig.show) {
             showLuckyProEntry()
         }
     }
 
+    private fun checkAndShowDragonTigerEntry() {
+        val dragonTigerShowConfig = gameShowConfigMap[DecorType.DRAGON_TIGER_FIGHT_GAME.value]
+        if (dragonTigerShowConfig == null) {
+            gameViewModel?.isGameShow(listOf(DecorType.DRAGON_TIGER_FIGHT_GAME.value))
+                ?.observe(viewLifecycleOwner) { configMap ->
+                    val config = configMap[DecorType.DRAGON_TIGER_FIGHT_GAME.value]
+                    if (config?.show == true) {
+                        showDragonFightEntry(config.loadingUrl)
+                    }
+                }
+            return
+        } else if (dragonTigerShowConfig.show) {
+            showDragonFightEntry(dragonTigerShowConfig.loadingUrl)
+        }
+    }
+
+    private fun checkAndShowTexasCowboyEntry() {
+        val texasCowboyShowConfig = gameShowConfigMap[DecorType.TEXAS_GAME.value]
+        if (texasCowboyShowConfig == null) {
+            gameViewModel?.isGameShow(listOf(DecorType.TEXAS_GAME.value))
+                ?.observe(viewLifecycleOwner) { configMap ->
+                    val config = configMap[DecorType.TEXAS_GAME.value]
+                    if (config?.show == true) {
+                        showTexasCowboyEntry(config.loadingUrl)
+                    }
+                }
+            return
+        } else if (texasCowboyShowConfig.show) {
+            showTexasCowboyEntry(texasCowboyShowConfig.loadingUrl)
+        }
+    }
+
+    private fun checkAndShowRussianRouletteEntry() {
+        val russianRouletteShowConfig = gameShowConfigMap[DecorType.RUSSIAN_TURNTABLE_GAME.value]
+        if (russianRouletteShowConfig == null) {
+            gameViewModel?.isGameShow(listOf(DecorType.RUSSIAN_TURNTABLE_GAME.value))
+                ?.observe(viewLifecycleOwner) { configMap ->
+                    val config = configMap[DecorType.RUSSIAN_TURNTABLE_GAME.value]
+                    if (config?.show == true) {
+                        showRussianRouletteEntry(config.loadingUrl)
+                    }
+                }
+            return
+        } else if (russianRouletteShowConfig.show) {
+            showRussianRouletteEntry(russianRouletteShowConfig.loadingUrl)
+        }
+    }
+
     private fun showLuckyFruitEntry() {
         val activity = activity ?: return
         goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.LUCKY_FRUIT))
     }
 
-//    private fun goGiftWishWeb() {
-//        val activity = activity ?: return
-//        Router.build(activity, Web.FullScreen.PATH)
-//            .putExtra(Web.Common.EXTRA_URL, UrlConfig.giftWish)
-//            .start()
-//    }
-
     private fun goSuperGiftWeb() {
         if (!GameModule.isShowSuperGift()) {
             showToast(R.string.headline_super_gift_level_limit)
@@ -439,23 +469,27 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
             .start()
     }
 
-    private fun checkAndGoSlot() {
-        if (isShowSlot == null) {
-            gameViewModel?.isShowSlot()?.observe(viewLifecycleOwner) {
-                if (it is Rlt.Success && it.data.data!!.show) {
-                    goSlotWeb()
+    private fun checkAndShowSlotEntry() {
+        val jackpotShowConfig = gameShowConfigMap[DecorType.JACKPOT_GAME.value]
+        if (jackpotShowConfig == null) {
+            gameViewModel?.isGameShow(listOf(DecorType.JACKPOT_GAME.value))
+                ?.observe(viewLifecycleOwner) { configMap ->
+                    val config = configMap[DecorType.JACKPOT_GAME.value]
+                    if (config?.show == true) {
+                        goSlotWeb()
+                    }
                 }
-            }
-        } else if (isShowSlot == true) {
+        } else if (jackpotShowConfig.show) {
             goSlotWeb()
         }
     }
 
     private fun goSlotWeb() {
         val activity = activity ?: return
-        Router.build(activity, Web.FullScreen.PATH)
-            .putExtra(Web.Common.EXTRA_URL, urlConfigService.getH5Url(H5Page.SLOT))
-            .start()
+        WebViewDialogFragmentBuilder()
+            .height(1300 * DisplayUtil.getScreenWidth() / 750)
+            .build()
+            ?.showUrl(activity.supportFragmentManager, urlConfigService.getH5Url(H5Page.SLOT))
     }
 
     private fun showSlotProEntry(loadingUrl: String?) {
@@ -490,6 +524,22 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
             }
     }
 
+    private fun showDragonFightEntry(loadingUrl: String?) {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_DRAGON_TIGER_FIGHT_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1070 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.DRAGON_TIGER_FIGHT_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
     private fun showTeenPattiEntry(loadingUrl: String?) {
         gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_TEENPATTI_VERSION_INFO)
             ?.observe(viewLifecycleOwner) {
@@ -498,7 +548,7 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
                 val needDownload = it.second?.needDownload ?: true
                 val activity = activity ?: return@observe
                 WebViewDialogFragmentBuilder()
-                    .height(1340 * DisplayUtil.getScreenWidth() / 750)
+                    .height(1170 * DisplayUtil.getScreenWidth() / 750)
                     .loadingUrl(loadingUrl)
                     .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.TEEN_PATTI_GAME.value, needDownload))
                     .build()
@@ -506,6 +556,38 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
             }
     }
 
+    private fun showTexasCowboyEntry(loadingUrl: String?) {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_TEXAS_COWBOY_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1230 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.TEXAS_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
+    private fun showRussianRouletteEntry(loadingUrl: String?) {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_RUSSIAN_TURNTABLE_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1123 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.RUSSIAN_TURNTABLE_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
     private fun showGreedyProEntry() {
         val activity = activity ?: return
         goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.GREEDY_PRO))
@@ -535,24 +617,23 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
                 }
             }
 
-            RoomNotifyType.LuckyFruit -> {
-                checkAndShowLuckyFruitEntry()
+            RoomNotifyType.SuperGift -> {
+                goSuperGiftWeb()
             }
 
-//            RoomNotifyType.InviteReward -> {
-//                checkAndGoInviteRebate()
-//            }
-
-//            RoomNotifyType.GiftWish -> {
-//                goGiftWishWeb()
-//            }
+            RoomNotifyType.COMMON_GLOBAL_ROOM_BROADCAST_NOTIFY -> {
+                params?.getString(Headline.Common.EXTRA_DEEPLINK)?.let {
+                    val activity = activity ?: return
+                    goLocalLinkPage(activity, it)
+                }
+            }
 
-            RoomNotifyType.SuperGift -> {
-                goSuperGiftWeb()
+            RoomNotifyType.LuckyFruit -> {
+                checkAndShowLuckyFruitEntry()
             }
 
             RoomNotifyType.Slot -> {
-                checkAndGoSlot()
+                checkAndShowSlotEntry()
             }
 
             RoomNotifyType.SlotPro -> {
@@ -563,54 +644,28 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
                 checkAndShowGreedyBoxEntry()
             }
 
-//            RoomNotifyType.NEW_SLOT_REWARD_NOTIFY -> {
-//                checkAndGoNewSlot()
-//            }
+            RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY -> {
+                checkAndShowTeenPattiEntry()
+            }
 
-//            RoomNotifyType.WORLD_CUP_POINTS_REACH_THRESHOLD -> {
-//                goWorldCupWeb()
-//            }
+            RoomNotifyType.GREEDY_PRO_NOTIFY -> {
+                checkAndShowGreedyProEntry()
+            }
 
-            RoomNotifyType.COMMON_GLOBAL_ROOM_BROADCAST_NOTIFY -> {
-                params?.getString(Headline.Common.EXTRA_DEEPLINK)?.let {
-                    val activity = activity ?: return
-                    goLocalLinkPage(activity, it)
-                }
+            RoomNotifyType.NEW_GREEDY_PRO_REWARD_NOTIFY -> {
+                checkAndShowLuckyProEntry()
             }
 
-//            RoomNotifyType.DAILY_RECHARGE_REWARD_NOTIFY -> {
-//                val act = activity ?: return
-//                Router.build(act, Web.FullScreen.PATH)
-//                    .putExtra(Web.Common.EXTRA_URL, UrlConfig.rechargeActivity)
-//                    .start()
-//            }
-
-//            RoomNotifyType.LEVEL_UP_NOTIFY -> {
-//                val act = activity ?: return
-//                Router.build(act, Level.LevelDetail.PATH)
-//                    .putExtra(
-//                        Level.Common.EXTRA_UID,
-//                        ProfileModule.getMyUid()
-//                    )
-//                    .start()
-//            }
-
-//            RoomNotifyType.BETTING_PK_NOTIFY -> {
-//                val act = activity ?: return
-//                Router.getRouterInstance<BaseDialogFragment>(BettingPK.BettingPK.PATH)?.apply {
-//                    arguments = Bundle().apply {
-//                        putInt(BettingPK.BettingPK.EXTRA_TAB, BettingPK.BettingPK.TAB_WAIT_FOR_PK)
-//                    }
-//                    show(act.supportFragmentManager)
-//                }
-//            }
-
-//            RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY -> {
-//                checkAndShowTeenPattiEntry()
-//            }
+            RoomNotifyType.DRAGON_TIGER_FIGHT_REWARD_NOTIFY -> {
+                checkAndShowDragonTigerEntry()
+            }
 
-            RoomNotifyType.GREEDY_PRO_NOTIFY -> {
-                checkAndShowGreedyProEntry()
+            RoomNotifyType.RUSSIA_ROULETTE_REWARD_NOTIFY -> {
+                checkAndShowRussianRouletteEntry()
+            }
+
+            RoomNotifyType.TEXAS_COWBOY_REWARD_NOTIFY -> {
+                checkAndShowTexasCowboyEntry()
             }
 
             RoomNotifyType.ADMIN_LOTTERY_ACTIVITY_REWARD_NOTIFY -> {
@@ -621,17 +676,6 @@ class HeadlineFragment : BaseFragment(R.layout.fragment_healine), IHeadlineOpLis
                     .start()
             }
 
-            RoomNotifyType.NEW_GREEDY_PRO_REWARD_NOTIFY -> {
-                checkAndShowLuckyProEntry()
-            }
-
-//            RoomNotifyType.SVIP_GLOBAL_NOTIFY -> {
-//                val roomId = params?.getLong(Headline.Common.EXTRA_ROOM_ID) ?: 0
-//                val from = params?.getString(Headline.Common.EXTRA_ENTER_ROOM_FROM, "") ?: ""
-//                val uid = params?.getLong(Headline.Common.EXTRA_UID) ?: 0
-//                onSvipLevelUpClick(roomId, from, uid)
-//            }
-
             else -> {
                 //ntd.
             }

+ 68 - 0
module/headline/src/main/java/com/adealink/weparty/headline/view/DragonTigerGlobalHeadline.kt

@@ -0,0 +1,68 @@
+package com.adealink.weparty.headline.view
+
+import android.content.Context
+import android.text.SpannableStringBuilder
+import android.text.Spanned
+import android.text.style.ForegroundColorSpan
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import androidx.core.view.updateLayoutParams
+import com.adealink.frame.aab.util.getCompatColor
+import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.ext.safeSetSpan
+import com.adealink.weparty.commonui.ext.hide
+import com.adealink.weparty.headline.R
+import com.adealink.weparty.headline.databinding.LayoutCommonGlobalHeadlineBinding
+import com.adealink.weparty.module.headline.view.BaseHeadlineView
+import com.adealink.weparty.module.room.data.DragonTigerFightRewardNotify
+import com.adealink.weparty.module.room.data.GlobalRoomBroadcastNotify
+import com.adealink.weparty.module.room.data.RoomNotifyType
+import com.adealink.weparty.R as APP_R
+
+class DragonTigerGlobalHeadline @JvmOverloads constructor(
+    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0,
+) : BaseHeadlineView(context, attrs, defStyleAttr) {
+    private val binding =
+        LayoutCommonGlobalHeadlineBinding.inflate(LayoutInflater.from(context), this, true)
+
+    private fun updateUI(notify: DragonTigerFightRewardNotify?) {
+        if (notify == null) {
+            return
+        }
+        playBackgroundSvga()
+        binding.clLeftContent.updateLayoutParams<LayoutParams> {
+            verticalBias = 0.54f
+        }
+        binding.btnPlay.updateLayoutParams<LayoutParams> {
+            verticalBias = 0.54f
+        }
+        binding.ivAvatar.setImageUrl(notify.rewardUidImgUrl)
+        binding.tvName.text = notify.rewardUidName
+        binding.ivRightIcon.hide()
+        binding.btnPlay.text = getCompatString(R.string.headline_go)
+        val rewardCoin = "${notify.rewardCoin}"
+        val desc = getCompatString(R.string.headline_win, rewardCoin, getCompatString(APP_R.string.common_dragon_tiger_fight))
+        val descSb = SpannableStringBuilder(desc)
+        val rewardCoinIndex = desc.indexOf(rewardCoin)
+        descSb.safeSetSpan(
+            ForegroundColorSpan(getCompatColor(com.adealink.weparty.R.color.color_FFFFEF29)),
+            rewardCoinIndex,
+            rewardCoinIndex +
+                    rewardCoin.length,
+            Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
+        binding.tvDesc.text = descSb
+        binding.btnPlay.setOnClickListener {
+            headlineOpListener?.onHeadlineRightBtnClick(RoomNotifyType.DRAGON_TIGER_FIGHT_REWARD_NOTIFY, null)
+        }
+    }
+
+    private fun playBackgroundSvga() {
+        binding.svgaBg.setAsset("headline_dragon_tiger_fight_global.svga")
+    }
+
+    override fun updateUI(notify: GlobalRoomBroadcastNotify) {
+        if (notify.broadcastUri == RoomNotifyType.DRAGON_TIGER_FIGHT_REWARD_NOTIFY.uri) {
+            updateUI(notify.dragonTigerFightRewardNotify)
+        }
+    }
+}

+ 23 - 26
module/headline/src/main/java/com/adealink/weparty/headline/view/HeadlineViewBuilder.kt

@@ -39,18 +39,21 @@ class HeadlineViewBuilder {
             RoomNotifyType.SendRedPacket.uri -> {
                 RedPacketGlobalHeadline(context)
             }
-            RoomNotifyType.LuckyFruit.uri -> {
-                LuckyFruitGlobalHeadline(context)
-            }
-//            RoomNotifyType.InviteReward.uri -> {
-//                InviteRewardGlobalHeadline(context)
-//            }
             RoomNotifyType.GiftWish.uri -> {
                 GiftWishGlobalHeadline(context)
             }
             RoomNotifyType.SuperGift.uri -> {
                 SuperGiftGlobalHeadline(context)
             }
+            RoomNotifyType.COMMON_GLOBAL_ROOM_BROADCAST_NOTIFY.uri -> {
+                CommonGlobalHeadline(context)
+            }
+            RoomNotifyType.DAILY_RECHARGE_REWARD_NOTIFY.uri -> {
+                DailyRechargeRewardGlobalHeadline(context)
+            }
+            RoomNotifyType.LuckyFruit.uri -> {
+                LuckyFruitGlobalHeadline(context)
+            }
             RoomNotifyType.Slot.uri -> {
                 SlotGlobalHeadline(context)
             }
@@ -63,33 +66,27 @@ class HeadlineViewBuilder {
             RoomNotifyType.NEW_SLOT_REWARD_NOTIFY.uri -> {
                 NewSlotGlobalHeadline(context)
             }
-//            RoomNotifyType.WORLD_CUP_POINTS_REACH_THRESHOLD.uri -> {
-//                WorldCupPointsReachThresholdGlobalHeadline(context)
-//            }
-            RoomNotifyType.COMMON_GLOBAL_ROOM_BROADCAST_NOTIFY.uri -> {
-                CommonGlobalHeadline(context)
+            RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri -> {
+                TeenPattiGlobalHeadline(context)
             }
-            RoomNotifyType.DAILY_RECHARGE_REWARD_NOTIFY.uri -> {
-                DailyRechargeRewardGlobalHeadline(context)
-            }
-//            RoomNotifyType.LEVEL_UP_NOTIFY.uri -> {
-//                LevelUpOtherGlobalHeadline(context)
-//            }
-//            RoomNotifyType.BETTING_PK_NOTIFY.uri -> {
-//                BettingPkGlobalHeadline(context)
-//            }
-//            RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri -> {
-//                TeenPattiGlobalHeadline(context)
-//            }
             RoomNotifyType.GREEDY_PRO_NOTIFY.uri -> {
                 GreedyProGlobalHeadline(context)
             }
-            RoomNotifyType.ADMIN_LOTTERY_ACTIVITY_REWARD_NOTIFY.uri -> {
-                LotteryActivityGlobalHeadline(context)
-            }
             RoomNotifyType.NEW_GREEDY_PRO_REWARD_NOTIFY.uri -> {
                 LuckyProGlobalHeadline(context)
             }
+            RoomNotifyType.RUSSIA_ROULETTE_REWARD_NOTIFY.uri -> {
+                RussiaRouletteGlobalHeadline(context)
+            }
+            RoomNotifyType.TEXAS_COWBOY_REWARD_NOTIFY.uri -> {
+                TexasCowboyGlobalHeadline(context)
+            }
+            RoomNotifyType.DRAGON_TIGER_FIGHT_REWARD_NOTIFY.uri -> {
+                DragonTigerGlobalHeadline(context)
+            }
+            RoomNotifyType.ADMIN_LOTTERY_ACTIVITY_REWARD_NOTIFY.uri -> {
+                LotteryActivityGlobalHeadline(context)
+            }
             RoomNotifyType.URI_CONGRATULATE_LEVEL_UP_NOTIFY.uri -> {
                 WealthLevelUpgradeGlobalHeadline(context)
             }

+ 68 - 0
module/headline/src/main/java/com/adealink/weparty/headline/view/RussiaRouletteGlobalHeadline.kt

@@ -0,0 +1,68 @@
+package com.adealink.weparty.headline.view
+
+import android.content.Context
+import android.text.SpannableStringBuilder
+import android.text.Spanned
+import android.text.style.ForegroundColorSpan
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import androidx.core.view.updateLayoutParams
+import com.adealink.frame.aab.util.getCompatColor
+import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.ext.safeSetSpan
+import com.adealink.weparty.commonui.ext.hide
+import com.adealink.weparty.headline.R
+import com.adealink.weparty.headline.databinding.LayoutCommonGlobalHeadlineBinding
+import com.adealink.weparty.module.headline.view.BaseHeadlineView
+import com.adealink.weparty.module.room.data.GlobalRoomBroadcastNotify
+import com.adealink.weparty.module.room.data.LotteryRewardNotify
+import com.adealink.weparty.module.room.data.RoomNotifyType
+import com.adealink.weparty.R as APP_R
+
+class RussiaRouletteGlobalHeadline @JvmOverloads constructor(
+    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0,
+) : BaseHeadlineView(context, attrs, defStyleAttr) {
+    private val binding =
+        LayoutCommonGlobalHeadlineBinding.inflate(LayoutInflater.from(context), this, true)
+
+    private fun updateUI(notify: LotteryRewardNotify?) {
+        if (notify == null) {
+            return
+        }
+        playBackgroundSvga()
+        binding.clLeftContent.updateLayoutParams<LayoutParams> {
+            verticalBias = 0.54f
+        }
+        binding.btnPlay.updateLayoutParams<LayoutParams> {
+            verticalBias = 0.54f
+        }
+        binding.ivAvatar.setImageUrl(notify.rewardUidImgUrl)
+        binding.tvName.text = notify.rewardUidName
+        binding.ivRightIcon.hide()
+        binding.btnPlay.text = getCompatString(R.string.headline_go)
+        val rewardCoin = "${notify.rewardCoin}"
+        val desc = getCompatString(R.string.headline_win, rewardCoin, getCompatString(APP_R.string.common_russian_turntable))
+        val descSb = SpannableStringBuilder(desc)
+        val rewardCoinIndex = desc.indexOf(rewardCoin)
+        descSb.safeSetSpan(
+            ForegroundColorSpan(getCompatColor(com.adealink.weparty.R.color.color_FFFFEF29)),
+            rewardCoinIndex,
+            rewardCoinIndex +
+                    rewardCoin.length,
+            Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
+        binding.tvDesc.text = descSb
+        binding.btnPlay.setOnClickListener {
+            headlineOpListener?.onHeadlineRightBtnClick(RoomNotifyType.RUSSIA_ROULETTE_REWARD_NOTIFY, null)
+        }
+    }
+
+    private fun playBackgroundSvga() {
+        binding.svgaBg.setAsset("headline_russia_roulette_global.svga")
+    }
+
+    override fun updateUI(notify: GlobalRoomBroadcastNotify) {
+        if (notify.broadcastUri == RoomNotifyType.RUSSIA_ROULETTE_REWARD_NOTIFY.uri) {
+            updateUI(notify.lotteryRewardNotify)
+        }
+    }
+}

+ 5 - 4
module/headline/src/main/java/com/adealink/weparty/headline/view/TeenPattiGlobalHeadline.kt

@@ -14,6 +14,7 @@ import com.adealink.weparty.headline.databinding.LayoutLotteryCommonGlobalHeadli
 import com.adealink.weparty.module.headline.view.BaseHeadlineView
 import com.adealink.weparty.module.profile.view.UserNameTextView.Companion.getDisplayName
 import com.adealink.weparty.module.room.data.GlobalRoomBroadcastNotify
+import com.adealink.weparty.module.room.data.RoomNotifyType
 import com.adealink.weparty.module.room.data.TeenPattiRewardNotify
 
 class TeenPattiGlobalHeadline @JvmOverloads constructor(
@@ -42,7 +43,7 @@ class TeenPattiGlobalHeadline @JvmOverloads constructor(
             Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
         binding.tvDesc.text = descSb
         binding.btnPlay.setOnClickListener {
-//            headlineOpListener?.onHeadlineRightBtnClick(RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY, null)
+            headlineOpListener?.onHeadlineRightBtnClick(RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY, null)
         }
     }
 
@@ -51,8 +52,8 @@ class TeenPattiGlobalHeadline @JvmOverloads constructor(
     }
 
     override fun updateUI(notify: GlobalRoomBroadcastNotify) {
-//        if (notify.broadcastUri == RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri) {
-//            updateUI(notify.teenPattiRewardNotify)
-//        }
+        if (notify.broadcastUri == RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri) {
+            updateUI(notify.teenPattiRewardNotify)
+        }
     }
 }

+ 69 - 0
module/headline/src/main/java/com/adealink/weparty/headline/view/TexasCowboyGlobalHeadline.kt

@@ -0,0 +1,69 @@
+package com.adealink.weparty.headline.view
+
+import android.content.Context
+import android.text.SpannableStringBuilder
+import android.text.Spanned
+import android.text.style.ForegroundColorSpan
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import androidx.core.view.updateLayoutParams
+import com.adealink.frame.aab.util.getCompatColor
+import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.ext.safeSetSpan
+import com.adealink.weparty.commonui.ext.hide
+import com.adealink.weparty.headline.R
+import com.adealink.weparty.headline.databinding.LayoutCommonGlobalHeadlineBinding
+import com.adealink.weparty.module.headline.view.BaseHeadlineView
+import com.adealink.weparty.module.profile.view.UserNameTextView.Companion.getDisplayName
+import com.adealink.weparty.module.room.data.GlobalRoomBroadcastNotify
+import com.adealink.weparty.module.room.data.LotteryRewardNotify
+import com.adealink.weparty.module.room.data.RoomNotifyType
+import com.adealink.weparty.R as APP_R
+
+class TexasCowboyGlobalHeadline @JvmOverloads constructor(
+    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0,
+) : BaseHeadlineView(context, attrs, defStyleAttr) {
+    private val binding =
+        LayoutCommonGlobalHeadlineBinding.inflate(LayoutInflater.from(context), this, true)
+
+    private fun updateUI(notify: LotteryRewardNotify?) {
+        if (notify == null) {
+            return
+        }
+        playBackgroundSvga()
+        binding.clLeftContent.updateLayoutParams<LayoutParams> {
+            verticalBias = 0.54f
+        }
+        binding.btnPlay.updateLayoutParams<LayoutParams> {
+            verticalBias = 0.54f
+        }
+        binding.ivAvatar.setImageUrl(notify.rewardUidImgUrl)
+        binding.tvName.text = getDisplayName(notify.rewardUid, notify.rewardUidName)
+        binding.ivRightIcon.hide()
+        binding.btnPlay.text = getCompatString(R.string.headline_go)
+        val rewardCoin = "${notify.rewardCoin}"
+        val desc = getCompatString(R.string.headline_win, rewardCoin, getCompatString(APP_R.string.common_texas_cowboy))
+        val descSb = SpannableStringBuilder(desc)
+        val rewardCoinIndex = desc.indexOf(rewardCoin)
+        descSb.safeSetSpan(
+            ForegroundColorSpan(getCompatColor(com.adealink.weparty.R.color.color_FFFFEF29)),
+            rewardCoinIndex,
+            rewardCoinIndex +
+                    rewardCoin.length,
+            Spanned.SPAN_INCLUSIVE_EXCLUSIVE)
+        binding.tvDesc.text = descSb
+        binding.btnPlay.setOnClickListener {
+            headlineOpListener?.onHeadlineRightBtnClick(RoomNotifyType.TEXAS_COWBOY_REWARD_NOTIFY, null)
+        }
+    }
+
+    private fun playBackgroundSvga() {
+        binding.svgaBg.setAsset("headline_texas_cowboy_global.svga")
+    }
+
+    override fun updateUI(notify: GlobalRoomBroadcastNotify) {
+        if (notify.broadcastUri == RoomNotifyType.TEXAS_COWBOY_REWARD_NOTIFY.uri) {
+            updateUI(notify.lotteryRewardNotify)
+        }
+    }
+}

+ 30 - 13
module/headline/src/main/java/com/adealink/weparty/headline/viewmodel/HeadlineViewModel.kt

@@ -11,11 +11,13 @@ import com.adealink.frame.room.data.TAG_ROOM_GLOBAL_BROADCAST
 import com.adealink.weparty.config.GlobalConfigType
 import com.adealink.weparty.config.globalConfigManager
 import com.adealink.weparty.headline.manager.headlineManager
+import com.adealink.weparty.module.game.GameModule
 import com.adealink.weparty.module.headline.listener.IHeadlineListener
 import com.adealink.weparty.module.headline.viewmodel.IHeadlineViewModel
 import com.adealink.weparty.module.level.LevelModule
 import com.adealink.weparty.module.level.data.LevelType
 import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.decorate.data.DecorType
 import com.adealink.weparty.module.room.RoomModule
 import com.adealink.weparty.module.room.data.GlobalRoomBroadcastNotify
 import com.adealink.weparty.module.room.data.GuardTreasureSuccessBroadcastNotify
@@ -36,14 +38,30 @@ class HeadlineViewModel : IHeadlineViewModel, BaseViewModel(), IHeadlineListener
         RoomNotifyType.Slot.uri to 3,
         RoomNotifyType.SlotPro.uri to 5,
         RoomNotifyType.GREEDY_BOX_NOTIFY.uri to 5,
-//        RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri to 5,
+        RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri to 5,
         RoomNotifyType.GREEDY_PRO_NOTIFY.uri to 3,
         RoomNotifyType.NEW_SLOT_REWARD_NOTIFY.uri to 3,
-//        RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri to 5,
-        RoomNotifyType.NEW_GREEDY_PRO_REWARD_NOTIFY.uri to 3
+        RoomNotifyType.NEW_GREEDY_PRO_REWARD_NOTIFY.uri to 3,
+        RoomNotifyType.DRAGON_TIGER_FIGHT_REWARD_NOTIFY.uri to 5,
+        RoomNotifyType.RUSSIA_ROULETTE_REWARD_NOTIFY.uri to 5,
+        RoomNotifyType.TEXAS_COWBOY_REWARD_NOTIFY.uri to 5,
+    )
+
+    private val gameDecorTypeList = listOf(
+        DecorType.LUCKY_FRUIT_GAME.value,
+        DecorType.JACKPOT_GAME.value,
+        DecorType.JACKPOT_SLOT_GAME.value,
+        DecorType.GREEDY_BOX_GAME.value,
+        DecorType.TEEN_PATTI_GAME.value,
+        DecorType.DRAGON_TIGER_FIGHT_GAME.value,
+        DecorType.RUSSIAN_TURNTABLE_GAME.value,
+        DecorType.TEXAS_GAME.value,
+        DecorType.LUCKY_PRO_GAME.value,
+        DecorType.GREEDY_PRO_GAME.value
     )
 
     override fun onHeadlineNotify(notify: GlobalRoomBroadcastNotify) {
+        Log.i(TAG_ROOM_GLOBAL_BROADCAST, "onHeadlineNotify uri: ${notify.broadcastUri}")
         if (RoomModule.showHeadlineBroadcast(notify.broadcastUri).not()) {
             Log.d(
                 TAG_ROOM_GLOBAL_BROADCAST,
@@ -51,12 +69,6 @@ class HeadlineViewModel : IHeadlineViewModel, BaseViewModel(), IHeadlineListener
             )
             return
         }
-        if (notify.broadcastUri == RoomNotifyType.NEW_SLOT_REWARD_NOTIFY.uri
-            && RoomModule.showHeadlineBroadcast(notify.broadcastUri).not()
-        ) {
-            Log.d(TAG_ROOM_GLOBAL_BROADCAST, "onHeadlineNotify new slot should not be displayed")
-            return
-        }
 
         if (notify.broadcastUri == RoomNotifyType.COMMON_LEVEL_CHANGE_NOTIFY.uri) {
             val commonLevelChangeNotify = notify.commonLevelChangeNotify ?: return
@@ -79,16 +91,21 @@ class HeadlineViewModel : IHeadlineViewModel, BaseViewModel(), IHeadlineListener
             notify.broadcastUri == RoomNotifyType.Slot.uri ||
             notify.broadcastUri == RoomNotifyType.SlotPro.uri ||
             notify.broadcastUri == RoomNotifyType.GREEDY_BOX_NOTIFY.uri ||
-//            notify.broadcastUri == RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri ||
+            notify.broadcastUri == RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri ||
             notify.broadcastUri == RoomNotifyType.GREEDY_PRO_NOTIFY.uri ||
             notify.broadcastUri == RoomNotifyType.NEW_SLOT_REWARD_NOTIFY.uri ||
-            notify.broadcastUri == RoomNotifyType.NEW_GREEDY_PRO_REWARD_NOTIFY.uri
+            notify.broadcastUri == RoomNotifyType.TEXAS_COWBOY_REWARD_NOTIFY.uri ||
+            notify.broadcastUri == RoomNotifyType.DRAGON_TIGER_FIGHT_REWARD_NOTIFY.uri ||
+            notify.broadcastUri == RoomNotifyType.NEW_GREEDY_PRO_REWARD_NOTIFY.uri ||
+            notify.broadcastUri == RoomNotifyType.RUSSIA_ROULETTE_REWARD_NOTIFY.uri
         ) {
             viewModelScope.launch {
                 val myUserInfoRlt = ProfileModule.getUserInfoByUid(ProfileModule.getMyUid(), true)
+                val gameConfigMap = GameModule.isGameShow(gameDecorTypeList)
                 if (myUserInfoRlt is Rlt.Success) {
-                    if ((myUserInfoRlt.data.level?:0) >= (uri2LevelLimitMap[notify.broadcastUri] ?: 0)) {
-                        //水果机、Greedy Pro、slot全服头条只对3级及以上的人外显 TeenPatti全服头条只对5级及以上的人外显
+                    //水果机、Greedy Pro、slot全服头条只对3级及以上的人外显 TeenPatti全服头条只对5级及以上的人外显
+                    if ((myUserInfoRlt.data.level ?: 0) >= (uri2LevelLimitMap[notify.broadcastUri]
+                            ?: 0) && gameConfigMap[RoomNotifyType.getGameDecorTypeValue(notify.broadcastUri)]?.show == true) {
                         globalHeadlineNotifyLD.send(notify, false)
                     }
                 }

+ 197 - 284
module/room/src/main/java/com/adealink/weparty/room/game/GameComp.kt

@@ -5,43 +5,37 @@ import android.os.Bundle
 import android.view.View
 import androidx.lifecycle.LifecycleOwner
 import com.adealink.frame.base.fastLazy
-import com.adealink.frame.guide.GuideCenter
-import com.adealink.frame.guide.core.GuideLabel
-import com.adealink.frame.locale.language.languageManager
 import com.adealink.frame.router.Router
 import com.adealink.frame.util.DisplayUtil
 import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
 import com.adealink.weparty.commonui.layout.DynamicLayers
 import com.adealink.weparty.commonui.layout.IDynamicView
-import com.adealink.weparty.module.game.Game
+import com.adealink.weparty.config.GlobalConfigType
 import com.adealink.weparty.module.game.GameModule
-import com.adealink.weparty.module.game.data.GameShowConfig
 import com.adealink.weparty.module.operation.Operation
 import com.adealink.weparty.module.operation.Operation.RechargePackage.Companion.EXTRA_SOURCE
 import com.adealink.weparty.module.operation.Operation.RechargePackage.Companion.SOURCE_ROOM_OPERATION
 import com.adealink.weparty.module.operation.OperationModule
 import com.adealink.weparty.module.operation.rechargepackage.data.EntranceType
 import com.adealink.weparty.module.profile.decorate.data.DecorType
-import com.adealink.weparty.module.room.RoomModule
-import com.adealink.weparty.module.webview.Web
+import com.adealink.weparty.module.room.base.BaseRoomComp
 import com.adealink.weparty.module.webview.WebViewDialogFragmentBuilder
 import com.adealink.weparty.module.webview.data.OfflineH5GameInfo
 import com.adealink.weparty.room.R
-import com.adealink.weparty.module.room.base.BaseRoomComp
 import com.adealink.weparty.room.game.adapter.GameEntranceAdapter
+import com.adealink.weparty.room.game.data.DragonTigerEntrance
 import com.adealink.weparty.room.game.data.GameEntrance
 import com.adealink.weparty.room.game.data.GameEntranceType
 import com.adealink.weparty.room.game.data.GreedyBoxEntrance
 import com.adealink.weparty.room.game.data.GreedyProEntrance
 import com.adealink.weparty.room.game.data.LuckyFruitEntrance
-import com.adealink.weparty.room.game.data.LuckyGameLevelEntrance
 import com.adealink.weparty.room.game.data.LuckyProEntrance
 import com.adealink.weparty.room.game.data.RechargePackageEntrance
+import com.adealink.weparty.room.game.data.RussianRouletteEntrance
 import com.adealink.weparty.room.game.data.SlotEntrance
 import com.adealink.weparty.room.game.data.SlotProEntrance
-import com.adealink.weparty.room.guide.GameOpenGuide
-import com.adealink.weparty.room.guide.data.RoomGuideLabel
-import com.adealink.weparty.room.guide.data.RoomGuideType
+import com.adealink.weparty.room.game.data.TeenPattiEntrance
+import com.adealink.weparty.room.game.data.TexasCowboyEntrance
 import com.adealink.weparty.url.H5Page
 import com.adealink.weparty.url.urlConfigService
 import com.adealink.weparty.util.goLocalLinkPage
@@ -62,74 +56,9 @@ class GameComp(
                     setIndicator(viewBinding.indicator, false)
                     setAdapter(gameEntranceAdapter)
                     setOnBannerListener { data, _ ->
-                        when (data) {
-                            is LuckyFruitEntrance -> {
-                                goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.LUCKY_FRUIT))
-                            }
-
-                            is RechargePackageEntrance -> {
-                                Router.getRouterInstance<BaseDialogFragment>(Operation.RechargePackage.PATH)
-                                    ?.apply {
-                                        arguments = Bundle()
-                                            .apply {
-                                                putInt(EXTRA_SOURCE, SOURCE_ROOM_OPERATION)
-                                            }
-                                    }
-                                    ?.show(fragmentManager)
-                            }
-
-                            is SlotEntrance -> {
-                                activity?.let {
-                                    Router.build(it, Web.FullScreen.PATH)
-                                        .putExtra(Web.Common.EXTRA_URL, urlConfigService.getH5Url(H5Page.SLOT))
-                                        .start()
-                                }
-                            }
-
-                            is GreedyProEntrance -> {
-                                goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.GREEDY_PRO))
-                            }
-
-                            is GreedyBoxEntrance -> {
-                                showGreedyBox()
-                            }
-
-                            is SlotProEntrance -> {
-                                showSlotPro()
-                            }
-
-//                            is LuckyGameLevelEntrance -> {
-//                                activity?.let {
-//                                    Router.build(it, Web.FullScreen.PATH)
-//                                        .putExtra(Web.Common.EXTRA_URL, UrlConfig.luckyGame)
-//                                        .start()
-//                                }
-//                            }
-
-                            is LuckyProEntrance -> {
-                                goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.LUCKY_PRO))
-                            }
-                        }
+                        handleBannerClick(data)
                     }
                 }
-
-//                viewBinding.enlargeIv.setOnClickListener {
-//                    viewBinding.banner.show()
-//                    viewBinding.indicator.show()
-//                    viewBinding.enlargeIv.gone()
-//                    viewBinding.shrinkIv.show()
-//                }
-//                viewBinding.shrinkIv.setOnClickListener {
-//                    viewBinding.banner.hide()
-//                    viewBinding.indicator.hide()
-//                    viewBinding.enlargeIv.show()
-//                    viewBinding.shrinkIv.gone()
-//                }
-//                if (isSmallScreenDevice()) {
-//                    viewBinding.shrinkIv.performClick()
-//                } else {
-//                    viewBinding.enlargeIv.performClick()
-//                }
             }
         }
     }
@@ -140,186 +69,148 @@ class GameComp(
     private val rechargePackageViewModel by fastLazy {
         OperationModule.getRechargePackageViewModel(requireActivity())
     }
-    private val rouletteViewModel by fastLazy {
-        GameModule.getRouletteViewModel(viewModelStoreOwner)
-    }
     private val gameEntrances = arrayListOf<GameEntrance>()
     private val gameEntranceMap = hashMapOf<GameEntranceType, GameEntrance>()
     private val gameEntranceAdapter by fastLazy { GameEntranceAdapter(arrayListOf()) }
 
-    private var greedyBoxShowConfig: GameShowConfig? = null
-    private var slotProShowConfig: GameShowConfig? = null
-
-    override fun onCreate() {
-        super.onCreate()
-        GameOpenGuide.register(activity)
-    }
-
     override fun onNewIntent(intent: Intent?) {
         super.onNewIntent(intent)
         loadData()
     }
 
-    private fun showSlotPro() {
-        val activity = activity ?: return
-        WebViewDialogFragmentBuilder()
-            .height(1340 * DisplayUtil.getScreenWidth() / 750)
-            .loadingUrl(slotProShowConfig?.loadingUrl)
-            .offlineGameInfo(OfflineH5GameInfo(slotProShowConfig?.url, DecorType.JACKPOT_SLOT_GAME.value))
-            .build()
-            ?.showUrl(activity.supportFragmentManager, "")
-    }
-
-    private fun showGreedyBox() {
-        val activity = activity ?: return
-        WebViewDialogFragmentBuilder()
-            .height(761 * DisplayUtil.getScreenWidth() / 750)
-            .loadingUrl(greedyBoxShowConfig?.loadingUrl)
-            .offlineGameInfo(OfflineH5GameInfo(greedyBoxShowConfig?.offlineUrl, DecorType.GREEDY_BOX_GAME.value))
-            .build()
-            ?.showUrl(activity.supportFragmentManager, "")
-    }
-
     override fun observeViewModel() {
         rechargePackageViewModel?.entranceConfigLDMap?.get(EntranceType.ROOM_OPERATION)
             ?.observe(viewLifecycleOwner) {
                 if (it == null) {
                     removeEntrance(GameEntranceType.RECHARGE_PACKAGE)
                 } else {
-                    addEntrance(RechargePackageEntrance(it.getIcon(languageManager?.getLanguageCode())))
+                    addEntrance(RechargePackageEntrance(it))
                 }
             }
     }
 
-    private fun checkAndShowGameOpenGuide() {
-        val hasShowGameOpenGuide = GuideLabel.isGuideFinished(RoomGuideLabel.GAME_OPEN)
-        if (hasShowGameOpenGuide) {
-            return
-        }
-        GuideCenter.activeGuide(RoomGuideType.GAME_OPEN)
+    private fun showSlotPro(loadingUrl: String? = "") {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_JACKPOT_SLOT_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1340 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.JACKPOT_SLOT_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
+    private fun showGreedyBox(loadingUrl: String? = "") {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_GREEDYBOX_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(761 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.GREEDY_BOX_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
+    private fun showDragonFightEntry(loadingUrl: String? = "") {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_DRAGON_TIGER_FIGHT_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1070 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.DRAGON_TIGER_FIGHT_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
+    private fun showTeenPattiEntry(loadingUrl: String? = "") {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_TEENPATTI_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1170 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.TEEN_PATTI_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
+    private fun showTexasCowboyEntry(loadingUrl: String? = "") {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_TEXAS_COWBOY_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1230 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.TEXAS_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
+    }
+
+    private fun showRussianRouletteEntry(loadingUrl: String? = "") {
+        gameViewModel?.checkGameValid(GlobalConfigType.GLOBAL_RUSSIAN_TURNTABLE_VERSION_INFO)
+            ?.observe(viewLifecycleOwner) {
+                if(it.first.not()) return@observe
+                val resourceUrl = it.second?.resourceUrl
+                val needDownload = it.second?.needDownload ?: true
+                val activity = activity ?: return@observe
+                WebViewDialogFragmentBuilder()
+                    .height(1123 * DisplayUtil.getScreenWidth() / 750)
+                    .loadingUrl(loadingUrl)
+                    .offlineGameInfo(OfflineH5GameInfo(resourceUrl, DecorType.RUSSIAN_TURNTABLE_GAME.value, needDownload))
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, "")
+            }
     }
 
     override fun loadData() {
-//        checkAndShowGameOpenGuide()
-//        gameViewModel?.isShowLuckyFruit()?.observe(viewLifecycleOwner) {
-//            when (it) {
-//                is Rlt.Success -> {
-//                    if (it.data.data!!.show) {
-//                        addEntrance(
-//                            LuckyFruitEntrance(
-//                                UriUtil.getUriForResourceId(R.drawable.lucky_fruit_entry_ic)
-//                                    .toString(), getCompatString(APP_R.string.game_luck_fruit)
-//                            )
-//                        )
-//                    } else {
-//                        removeEntrance(GameEntranceType.LUCKY_FRUIT)
-//                    }
-//                }
-//
-//                is Rlt.Failed -> {
-//                    removeEntrance(GameEntranceType.LUCKY_FRUIT)
-//                }
-//            }
-//        }
         rechargePackageViewModel?.refreshConfig()
-//        RoomModule.getJoinedRoomId()?.let { roomId ->
-//            rouletteViewModel?.getRouletteGameInfo(roomId)?.observe(viewLifecycleOwner) {
-//                if (it is Rlt.Success && it.data.show) {
-//                    if (it.data.playerInfoList.size > 0) {
-//                        showRouletteDialog()
-//                    }
-//                }
-//            }
-//        }
-//        gameViewModel?.isShowSlot()?.observe(viewLifecycleOwner) {
-//            when (it) {
-//                is Rlt.Success -> {
-//                    if (it.data.data!!.show) {
-//                        addEntrance(
-//                            SlotEntrance(
-//                                UriUtil.getUriForResourceId(R.drawable.room_slot_entry_ic)
-//                                    .toString()
-//                            )
-//                        )
-//                    } else {
-//                        removeEntrance(GameEntranceType.SLOT)
-//                    }
-//                }
-//
-//                is Rlt.Failed -> {
-//                    removeEntrance(GameEntranceType.SLOT)
-//                }
-//            }
-//        }
-//        gameViewModel?.isGameShow(
-//            listOf(
-//                DecorType.GREEDY_PRO_GAME.value,
-//                DecorType.GREEDY_BOX_GAME.value,
-//                DecorType.GAME_TAB_SWITCH.value,
-//                DecorType.LUCKY_PRO_GAME.value,
-//                DecorType.JACKPOT_SLOT.value,
-//            )
-//        )?.observe(viewLifecycleOwner) {
-//            val greedyProShow = it[DecorType.GREEDY_PRO_GAME.value]?.show == true
-//            val luckyGameLevelShow = it[DecorType.GAME_TAB_SWITCH.value]?.show == true
-//            val showLuckyProGame = it[DecorType.LUCKY_PRO_GAME.value]?.show == true
-//            greedyBoxShowConfig = it[DecorType.GREEDY_BOX_GAME.value]
-//            slotProShowConfig = it[DecorType.JACKPOT_SLOT.value]
-//
-//            if (greedyProShow) {
-//                addEntrance(
-//                    GreedyProEntrance(
-//                        UriUtil.getUriForResourceId(R.drawable.room_greedy_pro_entry_ic)
-//                            .toString()
-//                    )
-//                )
-//            } else {
-//                removeEntrance(GameEntranceType.GREEDY_PRO_GAME)
-//            }
-//
-//            if (greedyBoxShowConfig?.show == true) {
-//                addEntrance(
-//                    GreedyBoxEntrance(
-//                        UriUtil.getUriForResourceId(R.drawable.room_greedy_box_entry_ic)
-//                            .toString()
-//                    )
-//                )
-//            } else {
-//                removeEntrance(GameEntranceType.GREEDY_BOX_GAME)
-//            }
-//
-//            if (slotProShowConfig?.show == true) {
-//                addEntrance(
-//                    SlotProEntrance(
-//                        UriUtil.getUriForResourceId(R.drawable.room_slot_pro_entry_ic)
-//                            .toString()
-//                    )
-//                )
-//            } else {
-//                removeEntrance(GameEntranceType.JACKPOT_SLOT)
-//            }
-//
-////            if (luckyGameLevelShow) {
-////                addEntrance(
-////                    LuckyGameLevelEntrance(
-////                        UriUtil.getUriForResourceId(R.drawable.room_lucky_game_level_entry_ic)
-////                            .toString()
-////                    )
-////                )
-////            } else {
-//                removeEntrance(GameEntranceType.LUCKY_GAME_LEVEL)
-////            }
-//            if (showLuckyProGame) {
-//                addEntrance(
-//                    LuckyProEntrance(
-//                        UriUtil.getUriForResourceId(R.drawable.lucky_pro_entry_ic)
-//                            .toString()
-//                    )
-//                )
-//            } else {
-//                removeEntrance(GameEntranceType.LUCKY_PRO_GAME)
-//            }
-//        }
+        gameViewModel?.isGameShow(
+            listOf(
+                DecorType.LUCKY_FRUIT_GAME.value,
+                DecorType.JACKPOT_GAME.value,
+                DecorType.JACKPOT_SLOT_GAME.value,
+                DecorType.GREEDY_BOX_GAME.value,
+                DecorType.TEEN_PATTI_GAME.value,
+                DecorType.DRAGON_TIGER_FIGHT_GAME.value,
+                DecorType.RUSSIAN_TURNTABLE_GAME.value,
+                DecorType.TEXAS_GAME.value,
+                DecorType.LUCKY_PRO_GAME.value,
+                DecorType.GREEDY_PRO_GAME.value
+            )
+        )?.observe(viewLifecycleOwner) { configMap ->
+            for((key, value) in configMap) {
+                if(value.show) {
+                    val entrance = getEntrance(key) ?: continue
+                    addEntrance(entrance)
+                } else {
+                    val entranceType = getEntranceType(key)?: continue
+                    removeEntrance(entranceType)
+                }
+            }
+        }
     }
 
     private fun addEntrance(entrance: GameEntrance) {
@@ -344,74 +235,96 @@ class GameComp(
         }
     }
 
-    private fun updateEntrance(entranceType: GameEntranceType, newEntrance: GameEntrance) {
-        val oldEntrance = gameEntranceMap[entranceType] ?: return
-        when (entranceType) {
-            GameEntranceType.LUCKY_FRUIT -> {
-                val oldData = (oldEntrance as? LuckyFruitEntrance) ?: return
-                val newData = (newEntrance as? LuckyFruitEntrance) ?: return
-                oldData.icon = newData.icon
-                oldData.title = newData.title
+    private fun handleBannerClick(data: Any) {
+        when (data) {
+            is RechargePackageEntrance -> {
+                Router.getRouterInstance<BaseDialogFragment>(Operation.RechargePackage.PATH)
+                    ?.apply {
+                        arguments = Bundle()
+                            .apply {
+                                putInt(EXTRA_SOURCE, SOURCE_ROOM_OPERATION)
+                            }
+                    }
+                    ?.show(fragmentManager)
+            }
+
+            is LuckyFruitEntrance -> {
+                goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.LUCKY_FRUIT))
+            }
+
+            is SlotEntrance -> {
+                val activity = activity ?: return
+                WebViewDialogFragmentBuilder()
+                    .height(1300 * DisplayUtil.getScreenWidth() / 750)
+                    .build()
+                    ?.showUrl(activity.supportFragmentManager, urlConfigService.getH5Url(H5Page.SLOT))
+            }
+
+            is GreedyProEntrance -> {
+                val activity = activity?: return
+                goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.GREEDY_PRO))
             }
 
-            GameEntranceType.RECHARGE_PACKAGE -> {
-                val oldData = (oldEntrance as? RechargePackageEntrance) ?: return
-                val newData = (newEntrance as? RechargePackageEntrance) ?: return
-                oldData.icon = newData.icon
+            is GreedyBoxEntrance -> {
+                showGreedyBox()
             }
 
-            GameEntranceType.SLOT -> {
-                val oldData = (oldEntrance as? SlotEntrance) ?: return
-                val newData = (newEntrance as? SlotEntrance) ?: return
-                oldData.icon = newData.icon
+            is SlotProEntrance -> {
+                showSlotPro()
             }
 
-            GameEntranceType.GREEDY_PRO -> {
-                val oldData = (oldEntrance as? GreedyProEntrance) ?: return
-                val newData = (newEntrance as? GreedyProEntrance) ?: return
-                oldData.icon = newData.icon
+            is LuckyProEntrance -> {
+                val activity = activity?: return
+                goLocalLinkPage(activity, urlConfigService.getH5Url(H5Page.LUCKY_PRO))
             }
 
-            GameEntranceType.GREEDY_BOX -> {
-                val oldData = (oldEntrance as? GreedyBoxEntrance) ?: return
-                val newData = (newEntrance as? GreedyBoxEntrance) ?: return
-                oldData.icon = newData.icon
+            is TeenPattiEntrance -> {
+                showTeenPattiEntry()
             }
 
-            GameEntranceType.LUCKY_GAME_LEVEL -> {
-                val oldData = (oldEntrance as? LuckyGameLevelEntrance) ?: return
-                val newData = (newEntrance as? LuckyGameLevelEntrance) ?: return
-                oldData.icon = newData.icon
+            is RussianRouletteEntrance -> {
+                showRussianRouletteEntry()
             }
 
-            GameEntranceType.LUCKY_PRO -> {
-                val oldData = (oldEntrance as? LuckyProEntrance) ?: return
-                val newData = (newEntrance as? LuckyProEntrance) ?: return
-                oldData.icon = newData.icon
+            is TexasCowboyEntrance -> {
+                showTexasCowboyEntry()
             }
 
-            GameEntranceType.SLOT_PRO -> {
-                val oldData = (oldEntrance as? SlotProEntrance) ?: return
-                val newData = (newEntrance as? SlotProEntrance) ?: return
-                oldData.icon = newData.icon
+            is DragonTigerEntrance -> {
+                showDragonFightEntry()
             }
         }
-        gameEntranceAdapter.notifyDataSetChanged()
     }
 
-    private fun showRouletteDialog() {
-        Router.getRouterInstance<BaseDialogFragment>(Game.Roulette.PATH)?.apply {
-            arguments = Bundle().apply {
-                putLong(
-                    Game.Common.EXTRA_ROOM_ID,
-                    RoomModule.getJoinedRoomId() ?: 0
-                )
-            }
-        }?.show(fragmentManager)
+    private fun getEntrance(id: Int): GameEntrance? {
+        return when(id) {
+            DecorType.LUCKY_FRUIT_GAME.value -> LuckyFruitEntrance()
+            DecorType.LUCKY_PRO_GAME.value -> LuckyProEntrance()
+            DecorType.GREEDY_PRO_GAME.value -> GreedyProEntrance()
+            DecorType.JACKPOT_GAME.value -> SlotEntrance()
+            DecorType.JACKPOT_SLOT_GAME.value -> SlotProEntrance()
+            DecorType.GREEDY_BOX_GAME.value -> GreedyBoxEntrance()
+            DecorType.TEEN_PATTI_GAME.value -> TeenPattiEntrance()
+            DecorType.RUSSIAN_TURNTABLE_GAME.value -> RussianRouletteEntrance()
+            DecorType.TEXAS_GAME.value -> TexasCowboyEntrance()
+            DecorType.DRAGON_TIGER_FIGHT_GAME.value -> DragonTigerEntrance()
+            else -> null
+        }
     }
 
-    override fun onDestroy() {
-        super.onDestroy()
-        GameOpenGuide.unregister()
+    private fun getEntranceType(id: Int): GameEntranceType? {
+        return when(id) {
+            DecorType.LUCKY_FRUIT_GAME.value -> GameEntranceType.LUCKY_FRUIT
+            DecorType.LUCKY_PRO_GAME.value -> GameEntranceType.LUCKY_PRO
+            DecorType.GREEDY_PRO_GAME.value -> GameEntranceType.GREEDY_PRO
+            DecorType.JACKPOT_GAME.value -> GameEntranceType.SLOT
+            DecorType.JACKPOT_SLOT_GAME.value -> GameEntranceType.SLOT_PRO
+            DecorType.GREEDY_BOX_GAME.value -> GameEntranceType.GREEDY_BOX
+            DecorType.TEEN_PATTI_GAME.value -> GameEntranceType.TEEN_PATTI
+            DecorType.RUSSIAN_TURNTABLE_GAME.value -> GameEntranceType.RUSSIAN_ROULETTE
+            DecorType.TEXAS_GAME.value -> GameEntranceType.TEXAS_COWBOY
+            DecorType.DRAGON_TIGER_FIGHT_GAME.value -> GameEntranceType.DRAGON_TIGER_SLOT
+            else -> null
+        }
     }
 }

+ 11 - 32
module/room/src/main/java/com/adealink/weparty/room/game/adapter/GameEntranceAdapter.kt

@@ -7,16 +7,19 @@ import androidx.recyclerview.widget.RecyclerView
 import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.widget.banner.adapter.BannerAdapter
 import com.adealink.weparty.room.databinding.ItemGameEntranceBinding
+import com.adealink.weparty.room.game.data.DragonTigerEntrance
 import com.adealink.weparty.room.game.data.GameEntrance
 import com.adealink.weparty.room.game.data.GameEntranceType
 import com.adealink.weparty.room.game.data.GreedyBoxEntrance
 import com.adealink.weparty.room.game.data.GreedyProEntrance
 import com.adealink.weparty.room.game.data.LuckyFruitEntrance
-import com.adealink.weparty.room.game.data.LuckyGameLevelEntrance
 import com.adealink.weparty.room.game.data.LuckyProEntrance
 import com.adealink.weparty.room.game.data.RechargePackageEntrance
+import com.adealink.weparty.room.game.data.RussianRouletteEntrance
 import com.adealink.weparty.room.game.data.SlotEntrance
 import com.adealink.weparty.room.game.data.SlotProEntrance
+import com.adealink.weparty.room.game.data.TeenPattiEntrance
+import com.adealink.weparty.room.game.data.TexasCowboyEntrance
 
 /**
  * Created by sunxiaodong on 2021/8/2.
@@ -40,14 +43,17 @@ class GameEntranceAdapter(entrances: List<GameEntrance>) :
 
     override fun getItemViewType(position: Int): Int {
         return when (getRealData(position)) {
-            is LuckyFruitEntrance -> GameEntranceType.LUCKY_FRUIT.type
             is RechargePackageEntrance -> GameEntranceType.RECHARGE_PACKAGE.type
+            is LuckyFruitEntrance -> GameEntranceType.LUCKY_FRUIT.type
             is SlotEntrance -> GameEntranceType.SLOT.type
             is GreedyProEntrance -> GameEntranceType.GREEDY_PRO.type
             is GreedyBoxEntrance -> GameEntranceType.GREEDY_BOX.type
-            is LuckyGameLevelEntrance -> GameEntranceType.LUCKY_GAME_LEVEL.type
             is LuckyProEntrance -> GameEntranceType.LUCKY_PRO.type
             is SlotProEntrance -> GameEntranceType.SLOT_PRO.type
+            is TeenPattiEntrance -> GameEntranceType.TEEN_PATTI.type
+            is RussianRouletteEntrance -> GameEntranceType.RUSSIAN_ROULETTE.type
+            is TexasCowboyEntrance -> GameEntranceType.TEXAS_COWBOY.type
+            is DragonTigerEntrance -> GameEntranceType.DRAGON_TIGER_SLOT.type
         }
     }
 
@@ -66,35 +72,8 @@ class GameEntranceAdapter(entrances: List<GameEntrance>) :
         BindingViewHolder<ItemGameEntranceBinding>(binding) {
 
         fun update(data: GameEntrance) {
-            when (data) {
-                is LuckyFruitEntrance -> {
-                    binding.icon.setImageUrl(data.icon)
-                    binding.title.visibility = View.VISIBLE
-                    binding.title.text = data.title
-                    binding.desc.visibility = View.GONE
-                }
-
-                is RechargePackageEntrance -> {
-                    binding.icon.setImageUrl(data.icon)
-                    binding.title.visibility = View.GONE
-                    binding.desc.visibility = View.GONE
-                }
-
-                is SlotEntrance,
-                is GreedyProEntrance,
-                is GreedyBoxEntrance,
-                is SlotProEntrance,
-                is LuckyGameLevelEntrance,
-                is LuckyProEntrance -> {
-                    binding.icon.setImageUrl(data.icon)
-                    binding.title.visibility = View.GONE
-                    binding.desc.visibility = View.GONE
-                }
-
-                else -> {
-
-                }
-            }
+            binding.icon.setImageUrl(data.icon)
+            binding.desc.visibility = View.GONE
         }
     }
 

+ 45 - 22
module/room/src/main/java/com/adealink/weparty/room/game/data/GameEntranceData.kt

@@ -1,5 +1,9 @@
 package com.adealink.weparty.room.game.data
 
+import com.adealink.frame.locale.language.languageManager
+import com.adealink.weparty.module.operation.rechargepackage.data.RechargePackageConfig
+import com.opensource.svgaplayer.utils.UriUtil
+
 /**
  * Created by sunxiaodong on 2021/8/2.
  */
@@ -9,50 +13,69 @@ enum class GameEntranceType(val type: Int) {
     RECHARGE_PACKAGE(1),
     SLOT(2),
     GREEDY_PRO(4),
-    LUCKY_GAME_LEVEL(5),
     LUCKY_PRO(6),
     GREEDY_BOX(7),
     SLOT_PRO(8),
+    TEEN_PATTI(10),
+    RUSSIAN_ROULETTE(11),
+    TEXAS_COWBOY(12),
+    DRAGON_TIGER_SLOT(13);
 }
 
-sealed class GameEntrance(open var icon: String, val type: GameEntranceType)
+sealed class GameEntrance(val icon: String, val type: GameEntranceType)
 
-data class LuckyFruitEntrance(override var icon: String, var title: String) : GameEntrance(
-    icon,
-    GameEntranceType.LUCKY_FRUIT
-)
 
-data class RechargePackageEntrance(override var icon: String) : GameEntrance(
-    icon,
+class RechargePackageEntrance(val config: RechargePackageConfig) : GameEntrance(
+    config.getIcon(languageManager?.getLanguageCode()),
     GameEntranceType.RECHARGE_PACKAGE
 )
 
-data class SlotEntrance(override var icon: String) : GameEntrance(
-    icon,
+class LuckyFruitEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_lucky_fruit_ic).toString(),
+    GameEntranceType.LUCKY_FRUIT
+)
+
+class SlotEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_jackpot_ic).toString(),
     GameEntranceType.SLOT
 )
 
-data class GreedyProEntrance(override var icon: String) : GameEntrance(
-    icon,
+class GreedyProEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_greedy_pro_ic).toString(),
     GameEntranceType.GREEDY_PRO
 )
 
-data class GreedyBoxEntrance(override var icon: String) : GameEntrance(
-    icon,
+class GreedyBoxEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_greedy_box_ic).toString(),
     GameEntranceType.GREEDY_BOX
 )
 
-data class SlotProEntrance(override var icon: String) : GameEntrance(
-    icon,
+class SlotProEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_jackpot_slot_ic).toString(),
     GameEntranceType.SLOT_PRO
 )
 
-data class LuckyGameLevelEntrance(override var icon: String) : GameEntrance(
-    icon,
-    GameEntranceType.LUCKY_GAME_LEVEL
+class LuckyProEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_lucky_pro_ic).toString(),
+    GameEntranceType.LUCKY_PRO
+)
+
+class TeenPattiEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_teen_patti_ic).toString(),
+    GameEntranceType.TEEN_PATTI
 )
 
-data class LuckyProEntrance(override var icon: String) : GameEntrance(
-    icon,
-    GameEntranceType.LUCKY_PRO
+class RussianRouletteEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_russian_roulette_ic).toString(),
+    GameEntranceType.RUSSIAN_ROULETTE
+)
+
+class TexasCowboyEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_texas_cowboy_ic).toString(),
+    GameEntranceType.TEXAS_COWBOY
+)
+
+class DragonTigerEntrance : GameEntrance(
+    UriUtil.getUriForResourceId(com.adealink.weparty.R.drawable.common_dragon_tiger_ic).toString(),
+    GameEntranceType.DRAGON_TIGER_SLOT
 )

+ 48 - 10
module/room/src/main/java/com/adealink/weparty/room/micseat/globalbroadcast/data/RoomGlobalBroadcastData.kt

@@ -1,6 +1,7 @@
 package com.adealink.weparty.room.micseat.globalbroadcast.data
 
 import com.adealink.weparty.commonui.recycleview.diffutil.BaseListItemData
+import com.adealink.weparty.module.profile.decorate.data.DecorType
 import com.adealink.weparty.room.R
 import com.google.gson.annotations.SerializedName
 
@@ -18,7 +19,10 @@ data class RoomGlobalBroadcastData(
     @SerializedName("slotNewBroadcast") var slotNewBroadcast: Boolean = true,
     @SerializedName("luckyProBroadcast") var luckyProBroadcast: Boolean = true,
     @SerializedName("slotProBroadcast") var slotProBroadcast: Boolean = true,
-    @SerializedName("greedyBoxBroadcast") var greedyBoxBroadcast: Boolean = true
+    @SerializedName("greedyBoxBroadcast") var greedyBoxBroadcast: Boolean = true,
+    @SerializedName("dragonTigerBroadcast") var dragonTigerBroadcast: Boolean = true,
+    @SerializedName("texasCowboyBroadcast") var texasCowboyBroadcast: Boolean = true,
+    @SerializedName("russianRouletteBroadcast") var russianRouletteBroadcast: Boolean = true
 )
 
 
@@ -39,24 +43,58 @@ interface RoomGlobalBroadcastItem : BaseListItemData {
 
 enum class RoomGlobalBroadcastEnum(val id: Int, val textRes: Int) {
     SEND_GIFT(1, R.string.room_send_gift_global_broadcast),
-//    LUCKY_FRUIT(2, R.string.room_lucky_fruit_global_broadcast),
-//    SLOT(3, R.string.room_slot_global_broadcast),
+    VEHICLE_EFFECT(9, R.string.room_vehicle_effect_broadcast),
+    LUCKY_FRUIT(2, R.string.room_lucky_fruit_global_broadcast),
+    SLOT(3, R.string.room_slot_global_broadcast),
 //    LEVEL1_ROCKET(4, R.string.room_level1_rocket_global_broadcast),
 //    LEVEL2_ROCKET(5, R.string.room_level2_global_broadcast),
 //    LEVEL1_TREASURE(6, R.string.room_level1_treasure_global_broadcast),
 //    LEVEL2_TREASURE(7, R.string.room_level2_treasure_global_broadcast),
-//    TEEN_PATTI_GAME(8, R.string.room_teen_patti_global_broadcast),
-    VEHICLE_EFFECT(9, R.string.room_vehicle_effect_broadcast);
-//    GreedyPro(10, R.string.room_greedy_pro_global_broadcast),
-//    NEW_SLOT(11, R.string.room_slot_new_global_broadcast),
-//    LUCKY_PRO_GAME(12, R.string.room_lucky_pro_global_broadcast),
-    //JACKPOT_SLOT(14, R.string.room_slot_pro_global_broadcast),
-//    GREEDY_BOX_GAME(13, R.string.room_greedy_box_global_broadcast);
+    TEEN_PATTI_GAME(8, R.string.room_teen_patti_global_broadcast),
+    GREEDY_PRO(10, R.string.room_greedy_pro_global_broadcast),
+    LUCKY_PRO_GAME(12, R.string.room_lucky_pro_global_broadcast),
+    GREEDY_BOX_GAME(13, R.string.room_greedy_box_global_broadcast),
+    JACKPOT_SLOT(14, R.string.room_slot_pro_global_broadcast),
+    TEXAS_COWBOY_GAME(15, R.string.room_texas_cowboy_global_broadcast),
+    RUSSIAN_ROULETTE_GAME(16, R.string.room_russian_roulette_global_broadcast),
+    DRAGON_TIGER_GAME(17, R.string.room_dragon_fight_global_broadcast);
 
     companion object {
         fun get(id: Int): RoomGlobalBroadcastEnum? {
             return entries.find { it.id == id }
         }
+
+        fun isGameBroadcast(id: Int): Boolean {
+            return when(id) {
+                LUCKY_FRUIT.id -> true
+                SLOT.id -> true
+                TEEN_PATTI_GAME.id -> true
+                GREEDY_PRO.id -> true
+                LUCKY_PRO_GAME.id -> true
+                GREEDY_BOX_GAME.id -> true
+                JACKPOT_SLOT.id -> true
+                TEXAS_COWBOY_GAME.id -> true
+                RUSSIAN_ROULETTE_GAME.id -> true
+                DRAGON_TIGER_GAME.id -> true
+                else -> false
+            }
+        }
+
+        fun mapGameDecorTypeValue(id: Int): Int {
+            return when(id) {
+                LUCKY_FRUIT.id -> DecorType.LUCKY_FRUIT_GAME.value
+                SLOT.id -> DecorType.JACKPOT_GAME.value
+                TEEN_PATTI_GAME.id -> DecorType.TEEN_PATTI_GAME.value
+                GREEDY_PRO.id -> DecorType.GREEDY_PRO_GAME.value
+                LUCKY_PRO_GAME.id -> DecorType.LUCKY_PRO_GAME.value
+                GREEDY_BOX_GAME.id -> DecorType.GREEDY_BOX_GAME.value
+                JACKPOT_SLOT.id -> DecorType.JACKPOT_SLOT_GAME.value
+                TEXAS_COWBOY_GAME.id -> DecorType.TEXAS_GAME.value
+                RUSSIAN_ROULETTE_GAME.id -> DecorType.RUSSIAN_TURNTABLE_GAME.value
+                DRAGON_TIGER_GAME.id -> DecorType.DRAGON_TIGER_FIGHT_GAME.value
+                else -> -1
+            }
+        }
     }
 }
 

+ 47 - 10
module/room/src/main/java/com/adealink/weparty/room/micseat/globalbroadcast/manager/RoomGlobalBroadcastManager.kt

@@ -19,7 +19,8 @@ import kotlinx.coroutines.launch
 
 val roomGlobalBroadcastManager: IRoomGlobalBroadcastManager by lazy { RoomGlobalBroadcastManager() }
 
-class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastManager, IGlobalConfigListener {
+class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastManager,
+        IGlobalConfigListener {
 
     private var roomGlobalBroadcastData: RoomGlobalBroadcastData? = null
     private var cacheMap: ArrayMap<Long, RoomGlobalBroadcastData>? = null
@@ -40,15 +41,24 @@ class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastM
 
             var cacheLastMap = froJsonErrorNull<ArrayMap<Long, RoomGlobalBroadcastData>>(cacheJson)
             if (cacheLastMap == null) {
-                Log.d(TAG_ROOM_GLOBAL_BROADCAST, "initRoomGlobalBroadcastData userGlobalBroadcastCacheJson empty map")
+                Log.d(
+                    TAG_ROOM_GLOBAL_BROADCAST,
+                    "initRoomGlobalBroadcastData userGlobalBroadcastCacheJson empty map"
+                )
                 cacheLastMap = ArrayMap()
             }
             cacheMap = cacheLastMap
             roomGlobalBroadcastData = cacheLastMap.getOrPut(uid) {
                 RoomGlobalBroadcastData()
             }
-            Log.d(TAG_ROOM_GLOBAL_BROADCAST, "initRoomGlobalBroadcastData cacheLastMap: $cacheLastMap")
-            Log.d(TAG_ROOM_GLOBAL_BROADCAST, "initRoomGlobalBroadcastData userGlobalBroadcastCacheJson: $roomGlobalBroadcastData")
+            Log.d(
+                TAG_ROOM_GLOBAL_BROADCAST,
+                "initRoomGlobalBroadcastData cacheLastMap: $cacheLastMap"
+            )
+            Log.d(
+                TAG_ROOM_GLOBAL_BROADCAST,
+                "initRoomGlobalBroadcastData userGlobalBroadcastCacheJson: $roomGlobalBroadcastData"
+            )
         }
     }
 
@@ -78,9 +88,9 @@ class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastM
         if (uri == RoomNotifyType.NEW_SLOT_REWARD_NOTIFY.uri) {
             return showNewSlotBroadcast()
         }
-//        if (uri == RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri) {
-//            return showTeenPattiBroadcast()
-//        }
+        if (uri == RoomNotifyType.TEEN_PATTI_REWARD_NOTIFY.uri) {
+            return showTeenPattiBroadcast()
+        }
         if (uri == RoomNotifyType.GREEDY_PRO_NOTIFY.uri) {
             return showGreedyProBroadcast()
         }
@@ -93,6 +103,15 @@ class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastM
         if (uri == RoomNotifyType.GREEDY_BOX_NOTIFY.uri) {
             return showGreedyBoxBroadcast()
         }
+        if (uri == RoomNotifyType.DRAGON_TIGER_FIGHT_REWARD_NOTIFY.uri) {
+            return showDragonTigerBroadcast()
+        }
+        if (uri == RoomNotifyType.TEXAS_COWBOY_REWARD_NOTIFY.uri) {
+            return showTexasCowboyBroadcast()
+        }
+        if (uri == RoomNotifyType.RUSSIA_ROULETTE_REWARD_NOTIFY.uri) {
+            return showRussianRouletteBroadcast()
+        }
         return true
     }
 
@@ -148,6 +167,18 @@ class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastM
         return roomGlobalBroadcastData?.greedyBoxBroadcast ?: true
     }
 
+    private fun showDragonTigerBroadcast(): Boolean {
+        return roomGlobalBroadcastData?.dragonTigerBroadcast ?: true
+    }
+
+    private fun showTexasCowboyBroadcast(): Boolean {
+        return roomGlobalBroadcastData?.texasCowboyBroadcast ?: true
+    }
+
+    private fun showRussianRouletteBroadcast(): Boolean {
+        return roomGlobalBroadcastData?.russianRouletteBroadcast ?: true
+    }
+
     override fun getRoomGlobalBroadcastData(): RoomGlobalBroadcastData {
         if (roomGlobalBroadcastData == null) {
             initRoomGlobalBroadcastData()
@@ -160,10 +191,16 @@ class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastM
         launch {
             val newJSon = toJsonErrorNull(cacheMap)
             if (newJSon?.isNotEmpty() == true) {
-                Log.d(TAG_ROOM_GLOBAL_BROADCAST, "saveData sendGiftBroadcast: convert json $newJSon")
+                Log.d(
+                    TAG_ROOM_GLOBAL_BROADCAST,
+                    "saveData sendGiftBroadcast: convert json $newJSon"
+                )
                 RoomGlobalBroadcastLocalService.userGlobalBroadcastCacheJson = newJSon
             }
-            Log.d(TAG_ROOM_GLOBAL_BROADCAST, "saveData userGlobalBroadcastCacheJson: ${RoomGlobalBroadcastLocalService.userGlobalBroadcastCacheJson}")
+            Log.d(
+                TAG_ROOM_GLOBAL_BROADCAST,
+                "saveData userGlobalBroadcastCacheJson: ${RoomGlobalBroadcastLocalService.userGlobalBroadcastCacheJson}"
+            )
         }
     }
 
@@ -180,7 +217,7 @@ class RoomGlobalBroadcastManager : BaseFrame<IListener>(), IRoomGlobalBroadcastM
             val level = config.firstOrNull()?.safeToInt() ?: 0
             canSwitchBroadcastLevel = level
             val userInfo = ProfileModule.getMyUserInfo()
-            if (userInfo != null && (userInfo.level?:0) < level) {
+            if (userInfo != null && (userInfo.level ?: 0) < level) {
                 clearMyBroadcastData(ProfileModule.getMyUid())
             }
         }

+ 43 - 16
module/room/src/main/java/com/adealink/weparty/room/micseat/globalbroadcast/viewmodel/RoomGlobalBroadcastViewModel.kt

@@ -4,6 +4,8 @@ import androidx.lifecycle.LiveData
 import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.module.game.GameModule
+import com.adealink.weparty.module.profile.decorate.data.DecorType
 import com.adealink.weparty.room.micseat.globalbroadcast.data.RoomGlobalBroadcastData
 import com.adealink.weparty.room.micseat.globalbroadcast.data.RoomGlobalBroadcastEnum
 import com.adealink.weparty.room.micseat.globalbroadcast.data.RoomGlobalBroadcastItem
@@ -17,9 +19,23 @@ class RoomGlobalBroadcastViewModel : BaseViewModel() {
     private var roomGlobalBroadcastData: RoomGlobalBroadcastData =
         roomGlobalBroadcastManager.getRoomGlobalBroadcastData()
 
+    private val gameDecorTypeList = listOf(
+        DecorType.LUCKY_FRUIT_GAME.value,
+        DecorType.JACKPOT_GAME.value,
+        DecorType.JACKPOT_SLOT_GAME.value,
+        DecorType.GREEDY_BOX_GAME.value,
+        DecorType.TEEN_PATTI_GAME.value,
+        DecorType.DRAGON_TIGER_FIGHT_GAME.value,
+        DecorType.RUSSIAN_TURNTABLE_GAME.value,
+        DecorType.TEXAS_GAME.value,
+        DecorType.LUCKY_PRO_GAME.value,
+        DecorType.GREEDY_PRO_GAME.value
+    )
+
     fun loadData(): LiveData<List<RoomGlobalBroadcastItem>> {
         val liveData = OnceMutableLiveData<List<RoomGlobalBroadcastItem>>()
         viewModelScope.launch {
+            val gameConfigMap = GameModule.isGameShow(gameDecorTypeList)
             liveData.send(
                 RoomGlobalBroadcastEnum.entries
                     .map {
@@ -29,6 +45,13 @@ class RoomGlobalBroadcastViewModel : BaseViewModel() {
                             isEnabled(it.id)
                         )
                     }
+                    .filter {
+                        if(RoomGlobalBroadcastEnum.isGameBroadcast(it.id)) {
+                            gameConfigMap[RoomGlobalBroadcastEnum.mapGameDecorTypeValue(it.id)]?.show == true
+                        } else {
+                            true
+                        }
+                    }
                     .toMutableList())
         }
         return liveData
@@ -38,19 +61,21 @@ class RoomGlobalBroadcastViewModel : BaseViewModel() {
         val globalBroadcastEnum = RoomGlobalBroadcastEnum.get(id) ?: return true
         return when (globalBroadcastEnum) {
             RoomGlobalBroadcastEnum.SEND_GIFT -> roomGlobalBroadcastData.sendGiftBroadcast
-//            RoomGlobalBroadcastEnum.LUCKY_FRUIT -> roomGlobalBroadcastData.luckyFruitBroadcast
-//            RoomGlobalBroadcastEnum.SLOT -> roomGlobalBroadcastData.slotBroadcast
-//            RoomGlobalBroadcastEnum.NEW_SLOT -> roomGlobalBroadcastData.slotNewBroadcast
+            RoomGlobalBroadcastEnum.LUCKY_FRUIT -> roomGlobalBroadcastData.luckyFruitBroadcast
+            RoomGlobalBroadcastEnum.SLOT -> roomGlobalBroadcastData.slotBroadcast
 //            RoomGlobalBroadcastEnum.LEVEL1_ROCKET -> roomGlobalBroadcastData.level1Rocket
 //            RoomGlobalBroadcastEnum.LEVEL2_ROCKET -> roomGlobalBroadcastData.level2Rocket
 //            RoomGlobalBroadcastEnum.LEVEL1_TREASURE -> roomGlobalBroadcastData.level1Treasure
 //            RoomGlobalBroadcastEnum.LEVEL2_TREASURE -> roomGlobalBroadcastData.level2Treasure
             RoomGlobalBroadcastEnum.VEHICLE_EFFECT -> roomGlobalBroadcastData.vehicleEffect
-//            RoomGlobalBroadcastEnum.TEEN_PATTI_GAME -> roomGlobalBroadcastData.teenPattiBroadcast
-//            RoomGlobalBroadcastEnum.GreedyPro -> roomGlobalBroadcastData.greedyProBroadcast
-//            RoomGlobalBroadcastEnum.LUCKY_PRO_GAME -> roomGlobalBroadcastData.luckyProBroadcast
-            //RoomGlobalBroadcastEnum.JACKPOT_SLOT -> roomGlobalBroadcastData.slotProBroadcast
-//            RoomGlobalBroadcastEnum.GREEDY_BOX_GAME -> roomGlobalBroadcastData.greedyBoxBroadcast
+            RoomGlobalBroadcastEnum.TEEN_PATTI_GAME -> roomGlobalBroadcastData.teenPattiBroadcast
+            RoomGlobalBroadcastEnum.GREEDY_PRO -> roomGlobalBroadcastData.greedyProBroadcast
+            RoomGlobalBroadcastEnum.LUCKY_PRO_GAME -> roomGlobalBroadcastData.luckyProBroadcast
+            RoomGlobalBroadcastEnum.JACKPOT_SLOT -> roomGlobalBroadcastData.slotProBroadcast
+            RoomGlobalBroadcastEnum.GREEDY_BOX_GAME -> roomGlobalBroadcastData.greedyBoxBroadcast
+            RoomGlobalBroadcastEnum.DRAGON_TIGER_GAME -> roomGlobalBroadcastData.dragonTigerBroadcast
+            RoomGlobalBroadcastEnum.TEXAS_COWBOY_GAME -> roomGlobalBroadcastData.texasCowboyBroadcast
+            RoomGlobalBroadcastEnum.RUSSIAN_ROULETTE_GAME -> roomGlobalBroadcastData.russianRouletteBroadcast
         }
     }
 
@@ -58,19 +83,21 @@ class RoomGlobalBroadcastViewModel : BaseViewModel() {
         val globalBroadcastEnum = RoomGlobalBroadcastEnum.get(id) ?: return
         when (globalBroadcastEnum) {
             RoomGlobalBroadcastEnum.SEND_GIFT -> roomGlobalBroadcastData.sendGiftBroadcast = enabled
-//            RoomGlobalBroadcastEnum.LUCKY_FRUIT -> roomGlobalBroadcastData.luckyFruitBroadcast = enabled
-//            RoomGlobalBroadcastEnum.SLOT -> roomGlobalBroadcastData.slotBroadcast = enabled
-//            RoomGlobalBroadcastEnum.NEW_SLOT -> roomGlobalBroadcastData.slotNewBroadcast = enabled
+            RoomGlobalBroadcastEnum.LUCKY_FRUIT -> roomGlobalBroadcastData.luckyFruitBroadcast = enabled
+            RoomGlobalBroadcastEnum.SLOT -> roomGlobalBroadcastData.slotBroadcast = enabled
 //            RoomGlobalBroadcastEnum.LEVEL1_ROCKET -> roomGlobalBroadcastData.level1Rocket = enabled
 //            RoomGlobalBroadcastEnum.LEVEL2_ROCKET -> roomGlobalBroadcastData.level2Rocket = enabled
 //            RoomGlobalBroadcastEnum.LEVEL1_TREASURE -> roomGlobalBroadcastData.level1Treasure = enabled
 //            RoomGlobalBroadcastEnum.LEVEL2_TREASURE -> roomGlobalBroadcastData.level2Treasure = enabled
             RoomGlobalBroadcastEnum.VEHICLE_EFFECT -> roomGlobalBroadcastData.vehicleEffect = enabled
-//            RoomGlobalBroadcastEnum.TEEN_PATTI_GAME -> roomGlobalBroadcastData.teenPattiBroadcast = enabled
-//            RoomGlobalBroadcastEnum.GreedyPro -> roomGlobalBroadcastData.greedyProBroadcast = enabled
-//            RoomGlobalBroadcastEnum.LUCKY_PRO_GAME -> roomGlobalBroadcastData.luckyProBroadcast = enabled
-            //RoomGlobalBroadcastEnum.JACKPOT_SLOT -> roomGlobalBroadcastData.slotProBroadcast = enabled
-//            RoomGlobalBroadcastEnum.GREEDY_BOX_GAME -> roomGlobalBroadcastData.greedyBoxBroadcast = enabled
+            RoomGlobalBroadcastEnum.TEEN_PATTI_GAME -> roomGlobalBroadcastData.teenPattiBroadcast = enabled
+            RoomGlobalBroadcastEnum.GREEDY_PRO -> roomGlobalBroadcastData.greedyProBroadcast = enabled
+            RoomGlobalBroadcastEnum.LUCKY_PRO_GAME -> roomGlobalBroadcastData.luckyProBroadcast = enabled
+            RoomGlobalBroadcastEnum.JACKPOT_SLOT -> roomGlobalBroadcastData.slotProBroadcast = enabled
+            RoomGlobalBroadcastEnum.GREEDY_BOX_GAME -> roomGlobalBroadcastData.greedyBoxBroadcast = enabled
+            RoomGlobalBroadcastEnum.DRAGON_TIGER_GAME -> roomGlobalBroadcastData.dragonTigerBroadcast = enabled
+            RoomGlobalBroadcastEnum.TEXAS_COWBOY_GAME -> roomGlobalBroadcastData.texasCowboyBroadcast = enabled
+            RoomGlobalBroadcastEnum.RUSSIAN_ROULETTE_GAME -> roomGlobalBroadcastData.russianRouletteBroadcast = enabled
         }
         roomGlobalBroadcastManager.saveRoomGlobalBroadcastData()
 

+ 37 - 23
module/room/src/main/java/com/adealink/weparty/room/playcenter/RoomPlayCenterPanelFragment.kt

@@ -276,18 +276,23 @@ class RoomPlayCenterPanelFragment : BottomDialogFragment(R.layout.fragment_room_
                 }
             }
 
-//            RoomPlayCenterType.TEXAS_COWBOY-> {
-//                val first = globalConfigManager.getConfig(GlobalConfigType.GLOBAL_TEXAS_COWBOY_VERSION_INFO)?.firstOrNull()?:return
-//                val config = froJsonErrorNull<GameVersionConfig>(first)
-//                goTexasCowboy(data.loadingUrl, config?.resourceUrl)
-//            }
+            RoomPlayCenterType.TEXAS_COWBOY-> {
+                goGamePage(GlobalConfigType.GLOBAL_TEXAS_COWBOY_VERSION_INFO) {
+                    dismiss()
+                }
+            }
 
-//            RoomPlayCenterType.RUSSIAN_TURNTABLE -> {
-//                val first = globalConfigManager.getConfig(GlobalConfigType.GLOBAL_RUSSIAN_TURNTABLE_VERSION_INFO)?.firstOrNull()?:return
-//                val config = froJsonErrorNull<GameVersionConfig>(first)
-//                goRussianRoulette(data.loadingUrl, config?.resourceUrl)
-//            }
+            RoomPlayCenterType.RUSSIAN_TURNTABLE -> {
+                goGamePage(GlobalConfigType.GLOBAL_RUSSIAN_TURNTABLE_VERSION_INFO) {
+                    dismiss()
+                }
+            }
 
+            RoomPlayCenterType.DRAGON_TIGER_FIGHT -> {
+                goGamePage(GlobalConfigType.GLOBAL_DRAGON_TIGER_FIGHT_VERSION_INFO) {
+                    dismiss()
+                }
+            }
             RoomPlayCenterType.LUCKY_FRUIT -> {
                 goLuckyFruit()
             }
@@ -513,11 +518,11 @@ class RoomPlayCenterPanelFragment : BottomDialogFragment(R.layout.fragment_room_
 
     private fun goTeenPatti(offlineUrl: String?, needDownload: Boolean, loadingUrl: String? = "") {
         WebViewDialogFragmentBuilder()
-            .height(1340 * DisplayUtil.getScreenWidth() / 750)
+            .height(1170 * DisplayUtil.getScreenWidth() / 750)
             .loadingUrl(loadingUrl)
             .offlineGameInfo(OfflineH5GameInfo(offlineUrl, DecorType.TEEN_PATTI_GAME.value, needDownload))
             .build()
-            ?.showUrl(parentFragmentManager, urlConfigService.getH5Url(H5Page.TEEN_PATTI))
+            ?.showUrl(parentFragmentManager, "")
     }
 
     private fun goJackpotSlot(offlineUrl: String?, needDownload: Boolean, loadingUrl: String? = "") {
@@ -529,15 +534,22 @@ class RoomPlayCenterPanelFragment : BottomDialogFragment(R.layout.fragment_room_
             ?.showUrl(parentFragmentManager, "")
     }
 
+    private fun goDragonTigerFight(offlineUrl: String?, needDownload: Boolean, loadingUrl: String? = "") {
+        WebViewDialogFragmentBuilder()
+            .height(1070 * DisplayUtil.getScreenWidth() / 750)
+            .loadingUrl(loadingUrl)
+            .offlineGameInfo(OfflineH5GameInfo(offlineUrl, DecorType.DRAGON_TIGER_FIGHT_GAME.value, needDownload))
+            .build()
+            ?.showUrl(parentFragmentManager, "")
+    }
+
     private fun goTexasCowboy(offlineUrl: String?, needDownload: Boolean, loadingUrl: String? = "") {
         WebViewDialogFragmentBuilder()
-            .height(1326 * DisplayUtil.getScreenWidth() / 750)
+            .height(1230 * DisplayUtil.getScreenWidth() / 750)
             .loadingUrl(loadingUrl)
             .offlineGameInfo(OfflineH5GameInfo(offlineUrl, DecorType.TEXAS_GAME.value, needDownload))
             .build()
             ?.showUrl(parentFragmentManager, "")
-
-        dismiss()
     }
 
     private fun goRussianRoulette(offlineUrl: String?, needDownload: Boolean, loadingUrl: String? = "") {
@@ -547,7 +559,6 @@ class RoomPlayCenterPanelFragment : BottomDialogFragment(R.layout.fragment_room_
             .offlineGameInfo(OfflineH5GameInfo(offlineUrl, DecorType.RUSSIAN_TURNTABLE_GAME.value, needDownload))
             .build()
             ?.showUrl(parentFragmentManager, "")
-        dismiss()
     }
 
     private fun goGreedyBox(offlineUrl: String?, needDownload: Boolean, loadingUrl: String? = "") {
@@ -557,8 +568,6 @@ class RoomPlayCenterPanelFragment : BottomDialogFragment(R.layout.fragment_room_
             .offlineGameInfo(OfflineH5GameInfo(offlineUrl, DecorType.GREEDY_BOX_GAME.value, needDownload))
             .build()
             ?.showUrl(parentFragmentManager, "")
-
-        dismiss()
     }
 
     private fun goLuckyFruit() {
@@ -577,11 +586,10 @@ class RoomPlayCenterPanelFragment : BottomDialogFragment(R.layout.fragment_room_
     }
 
     private fun goJackpot() {
-        context?.let {
-            Router.build(it, Web.FullScreen.PATH)
-                .putExtra(Web.Common.EXTRA_URL, urlConfigService.getH5Url(H5Page.SLOT))
-                .start()
-        }
+        WebViewDialogFragmentBuilder()
+            .height(1300 * DisplayUtil.getScreenWidth() / 750)
+            .build()
+            ?.showUrl(parentFragmentManager, urlConfigService.getH5Url(H5Page.SLOT))
         dismiss()
     }
 
@@ -768,9 +776,15 @@ class RoomPlayCenterPanelFragment : BottomDialogFragment(R.layout.fragment_room_
             GlobalConfigType.GLOBAL_TEXAS_COWBOY_VERSION_INFO -> {
                 goTexasCowboy(config?.resourceUrl, needDownload)
             }
+
             GlobalConfigType.GLOBAL_JACKPOT_SLOT_VERSION_INFO -> {
                 goJackpotSlot(config?.resourceUrl, needDownload)
             }
+
+            GlobalConfigType.GLOBAL_DRAGON_TIGER_FIGHT_VERSION_INFO -> {
+                goDragonTigerFight(config?.resourceUrl, needDownload)
+            }
+
             else -> {
                 //ntd.
             }

+ 3 - 3
module/room/src/main/java/com/adealink/weparty/room/playcenter/data/RoomPlayCenterData.kt

@@ -38,9 +38,9 @@ enum class RoomPlayCenterType {
     LUCKY_PRO,//旧水果机
     JACKPOT_SLOT,//新老虎机
     GREEDY_BOX,
-//    TEXAS_COWBOY,
-//    DRAGON_TIGER_FIGHT,
-//    RUSSIAN_TURNTABLE,
+    TEXAS_COWBOY,
+    DRAGON_TIGER_FIGHT,
+    RUSSIAN_TURNTABLE,
     LUDO,
     LUDO_TEAM,
     CARROM,

+ 18 - 0
module/room/src/main/java/com/adealink/weparty/room/playcenter/manager/PlayCenterManager.kt

@@ -391,6 +391,24 @@ class PlayCenterManager : BaseFrame<IPlayCenterListener>(), IPlayCenterManager {
                 RoomPlayCenterEntrance(RoomPlayCenterType.TEEN_PATTI)
             )
         }
+
+        if(showRussianTurnTable) {
+            luckyGameList.add(
+                RoomPlayCenterEntrance(RoomPlayCenterType.RUSSIAN_TURNTABLE)
+            )
+        }
+
+        if (showTexasCowboy) {
+            luckyGameList.add(
+                RoomPlayCenterEntrance(RoomPlayCenterType.TEXAS_COWBOY)
+            )
+        }
+
+        if(showDragonTigerFight) {
+            luckyGameList.add(
+                RoomPlayCenterEntrance(RoomPlayCenterType.DRAGON_TIGER_FIGHT)
+            )
+        }
     }
 
     private fun notifyPlayCenterDataList(dataList: List<RoomPlayerCenterData>) {

+ 8 - 1
module/room/src/main/java/com/adealink/weparty/room/playcenter/util/PlayCenterUtil.kt

@@ -35,6 +35,10 @@ fun getPlayCenterEntranceNameResId(type: RoomPlayCenterType): Int {
         RoomPlayCenterType.TEEN_PATTI -> APP_R.string.common_teen_patti
         RoomPlayCenterType.PYRAMID_SLOTS -> APP_R.string.common_pyramid_slots
         RoomPlayCenterType.LUCKY_PRO -> APP_R.string.common_lucky_pro
+        RoomPlayCenterType.RUSSIAN_TURNTABLE -> APP_R.string.common_russian_turntable
+        RoomPlayCenterType.TEXAS_COWBOY -> APP_R.string.common_texas_cowboy
+        RoomPlayCenterType.DRAGON_TIGER_FIGHT -> APP_R.string.common_dragon_tiger_fight
+
 
         //房间内游戏
         RoomPlayCenterType.LUDO -> APP_R.string.game_hub_ludo
@@ -72,12 +76,15 @@ fun getPlayCenterEntranceImageResId(type: RoomPlayCenterType): Int {
         RoomPlayCenterType.LUCKY_FRUIT -> APP_R.drawable.common_lucky_fruit_ic
         RoomPlayCenterType.GREEDY_PRO -> APP_R.drawable.common_greedy_pro_ic
         RoomPlayCenterType.JACKPOT -> APP_R.drawable.common_jackpot_ic
-        RoomPlayCenterType.JACKPOT_SLOT -> R.drawable.room_play_center_slot_pro_ic
+        RoomPlayCenterType.JACKPOT_SLOT -> APP_R.drawable.common_jackpot_slot_ic
         RoomPlayCenterType.FISHING -> APP_R.drawable.common_fishing_ic
         RoomPlayCenterType.TEEN_PATTI -> APP_R.drawable.common_teen_patti_ic
         RoomPlayCenterType.PYRAMID_SLOTS -> APP_R.drawable.common_pyramid_slots_ic
         RoomPlayCenterType.GREEDY_BOX -> APP_R.drawable.common_greedy_box_ic
         RoomPlayCenterType.LUCKY_PRO -> APP_R.drawable.common_lucky_pro_ic
+        RoomPlayCenterType.RUSSIAN_TURNTABLE -> APP_R.drawable.common_russian_roulette_ic
+        RoomPlayCenterType.TEXAS_COWBOY -> APP_R.drawable.common_texas_cowboy_ic
+        RoomPlayCenterType.DRAGON_TIGER_FIGHT -> APP_R.drawable.common_dragon_tiger_ic
         //房间内游戏
         RoomPlayCenterType.LUDO -> APP_R.drawable.common_ludo_ic
         RoomPlayCenterType.LUDO_TEAM -> APP_R.drawable.common_ludo_team_ic

+ 0 - 16
module/room/src/main/res/layout/item_game_entrance.xml

@@ -18,22 +18,6 @@
         app:layout_constraintTop_toTopOf="parent"
         app:placeholderImageScaleType="fitCenter" />
 
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="4dp"
-        android:includeFontPadding="false"
-        android:textColor="@color/color_FFFFE2AD"
-        android:textSize="8sp"
-        android:textStyle="bold"
-        android:visibility="gone"
-        app:layout_constrainedWidth="true"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        tools:ignore="SmallSp" />
-
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/desc"
         android:layout_width="wrap_content"

+ 3 - 0
module/room/src/main/res/values-ar/strings.xml

@@ -415,4 +415,7 @@
     <string name="room_media_conflict_title">دخول الغرفة؟</string>
     <string name="room_media_conflict_tips">أنت الآن في %s، سيتم تسجيل خروجك تلقائيًا عند دخول الغرفة</string>
     <string name="room_media_conflict_remind">لا تذكرني مرة أخرى</string>
+    <string name="room_dragon_fight_global_broadcast">بث مباشر لصراع التنين والنمر</string>
+    <string name="room_russian_roulette_global_broadcast">بث الروليت الروسي</string>
+    <string name="room_texas_cowboy_global_broadcast">بث تكساس كاوبوي</string>
 </resources>

+ 5 - 0
module/room/src/main/res/values-zh/strings.xml

@@ -411,4 +411,9 @@
     <string name="room_media_conflict_title">进入房间?</string>
     <string name="room_media_conflict_tips">你当前在 %s,进入房间后将自动退出当前内容</string>
     <string name="room_media_conflict_remind">不再提醒我</string>
+    <string name="room_dragon_fight_global_broadcast">龙虎斗广播</string>
+    <string name="room_russian_roulette_global_broadcast">俄罗斯转盘广播</string>
+    <string name="room_texas_cowboy_global_broadcast">德州牛仔广播</string>
+    <string name="room_greedy_box_global_broadcast">贪婪盒子广播</string>
+    <string name="room_slot_pro_global_broadcast">头奖老虎机广播</string>
 </resources>

+ 3 - 0
module/room/src/main/res/values/strings.xml

@@ -354,6 +354,9 @@
     <string name="room_lucky_pro_global_broadcast">Lucky Pro Broadcast</string>
     <string name="room_slot_pro_global_broadcast">Jackpot Slot Broadcast</string>
     <string name="room_greedy_box_global_broadcast">Greedy Box Broadcast</string>
+    <string name="room_dragon_fight_global_broadcast">Dragon Tiger Slot Broadcast</string>
+    <string name="room_russian_roulette_global_broadcast">Russian Roulette Broadcast</string>
+    <string name="room_texas_cowboy_global_broadcast">Texas Cowboy Broadcast</string>
     <string name="room_public_screen_clear">Clear screen</string>
     <string name="room_clean_screen_empty_tip">No public screen messages</string>
     <string name="room_clean_screen_success_tip">Public screen has been cleared</string>

BIN
module/webview/src/main/assets/loading_greedy_box.svga


BIN
module/webview/src/main/assets/loading_roulette.svga


BIN
module/webview/src/main/assets/loading_texas.svga


BIN
module/webview/src/main/assets/loading_texas_top.svga


+ 4 - 1
module/webview/src/main/java/com/adealink/weparty/webview/WebViewDialogFragment.kt

@@ -153,7 +153,10 @@ class WebViewDialogFragment : BottomDialogFragment(R.layout.fragment_webview),
                 offlineH5GameInfo.gameType
             )
             if (offlineH5GameInfo.gameType == DecorType.JACKPOT_SLOT_GAME.value
-                || offlineH5GameInfo.gameType == DecorType.GREEDY_BOX_GAME.value) {
+                || offlineH5GameInfo.gameType == DecorType.GREEDY_BOX_GAME.value
+                || offlineH5GameInfo.gameType == DecorType.TEXAS_GAME.value
+                || offlineH5GameInfo.gameType == DecorType.DRAGON_TIGER_FIGHT_GAME.value
+                || offlineH5GameInfo.gameType == DecorType.RUSSIAN_TURNTABLE_GAME.value) {
                 binding.webView.changeJSBridge(
                     CocosJSBridgeImpl(
                         binding.webView,

+ 102 - 17
module/webview/src/main/java/com/adealink/weparty/webview/component/GameLoadingComp.kt

@@ -49,9 +49,11 @@ class GameLoadingComp(
 
     override fun onCreate() {
         super.onCreate()
+        setLoadingProgressBar()
         when (gameType) {
             DecorType.JACKPOT_SLOT_GAME.value -> {
                 binding.bgIv.setImageResource(R.drawable.web_loading_game_bg_slot_pro)
+                binding.gameIv.setDefaultImageResId(R.drawable.web_loading_game_img_jackpot_slot)
                 binding.gameIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
                     topMargin = 80.dp()
                     width = 148.dp()
@@ -59,14 +61,6 @@ class GameLoadingComp(
                 }
                 binding.progressBgIv.setImageResource(R.drawable.web_progress_bg_slot_pro)
                 binding.progressContentIv.setImageResource(R.drawable.game_loading_progress_slot_pro)
-                binding.progressContentIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
-                    topMargin = 5.dp()
-                    height = 14.dp()
-                }
-                binding.progressBgIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
-                    width = 239.dp()
-                    height = 25.dp()
-                }
                 binding.progressTv.setTextColor(getCompatColor(R.color.color_D30101))
             }
 
@@ -79,21 +73,76 @@ class GameLoadingComp(
                     width = 256.dp()
                     height = 115.dp()
                 }
-                binding.svgaLoading.setUrl(loadingUrl)
-                binding.loadingTv.gone()
-                binding.progressBarCl.updateLayoutParams<ConstraintLayout.LayoutParams> {
-                    topMargin = 15.dp()
+                if (loadingUrl.isNullOrEmpty()) {
+                    binding.svgaLoading.setAsset("loading_greedy_box.svga")
+                } else {
+                    binding.svgaLoading.setUrl(loadingUrl)
                 }
+                binding.loadingTv.gone()
                 binding.progressBgIv.setImageResource(R.drawable.web_progress_bg_slot_pro)
                 binding.progressContentIv.setImageResource(R.drawable.game_loading_progress_slot_pro)
+                binding.progressTv.setTextColor(getCompatColor(R.color.color_FFED27))
+            }
+
+            DecorType.DRAGON_TIGER_FIGHT_GAME.value -> {
+                binding.bgIv.setImageResource(R.drawable.web_loading_game_bg_dragon_tiger)
+                binding.gameIv.show()
+                binding.gameIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
+                    topMargin = 61.dp()
+                    width = 237.dp()
+                    height = 105.dp()
+                }
+                binding.gameIv.setDefaultImageResId(R.drawable.web_loading_game_img_dragon_tiger)
+                binding.loadingTv.show()
+                binding.progressTv.setTextColor(getCompatColor(R.color.color_FFED27))
                 binding.progressContentIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
-                    topMargin = 5.dp()
-                    height = 14.dp()
+                    topMargin = 3.dp()
+                }
+            }
+
+            DecorType.RUSSIAN_TURNTABLE_GAME.value -> {
+                binding.bgIv.setImageResource(R.drawable.web_loading_game_bg_russia_roulette)
+                binding.gameIv.gone()
+                binding.loadingTv.gone()
+                binding.svgaLoading.show()
+                binding.svgaLoading.updateLayoutParams<ConstraintLayout.LayoutParams> {
+                    width = 140.dp()
+                    height = 140.dp()
                 }
-                binding.progressBgIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
-                    width = 239.dp()
-                    height = 25.dp()
+                if (loadingUrl.isNullOrEmpty()) {
+                    binding.svgaLoading.setAsset("loading_roulette.svga")
+                } else {
+                    binding.svgaLoading.setUrl(loadingUrl)
                 }
+                binding.progressBgIv.setImageResource(R.drawable.web_progress_bg_roulette)
+                binding.progressContentIv.setImageResource(R.drawable.game_loading_progress_roulette)
+                binding.progressTv.setTextColor(getCompatColor(R.color.color_FFED27))
+            }
+
+            DecorType.TEXAS_GAME.value -> {
+                binding.bgIv.setImageResource(R.drawable.web_loading_game_bg_texas_cowboy)
+                binding.gameIv.gone()
+                binding.loadingTv.gone()
+                binding.svgaLoading.show()
+                binding.loadingLight.gone()
+                binding.loadingLightOuter.show()
+                binding.loadingLightOuter.updateLayoutParams<ConstraintLayout.LayoutParams> {
+                    width = 110.dp()
+                    height = 70.dp()
+                }
+                binding.loadingLightOuter.setAsset("loading_texas_top.svga")
+                binding.svgaLoading.updateLayoutParams<ConstraintLayout.LayoutParams> {
+                    width = 285.dp()
+                    height = 285.dp()
+                }
+                binding.svgaLoading.setImageResource(R.drawable.web_loading_game_img_texas_cowboy)
+                if (loadingUrl.isNullOrEmpty()) {
+                    binding.svgaLoading.setAsset("loading_texas.svga")
+                } else {
+                    binding.svgaLoading.setUrl(loadingUrl)
+                }
+                binding.progressBgIv.setImageResource(R.drawable.web_progress_bg_texas)
+                binding.progressContentIv.setImageResource(R.drawable.game_loading_progress_texas_cowboy)
                 binding.progressTv.setTextColor(getCompatColor(R.color.color_FFED27))
             }
 
@@ -130,6 +179,16 @@ class GameLoadingComp(
             binding.loadingLight.updateLayoutParams<ConstraintLayout.LayoutParams> {
                 marginStart = lightStartMargin.toInt()
             }
+            binding.loadingLightOuter.updateLayoutParams<ConstraintLayout.LayoutParams> {
+                marginStart = when (gameType) {
+                    DecorType.TEXAS_GAME.value -> {
+                        lightStartMargin.toInt() - 35.dp()
+                    }
+                    else -> {
+                        lightStartMargin.toInt()
+                    }
+                }
+            }
             binding.progressContentIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
                 width = progressWidth.toInt()
             }
@@ -138,6 +197,32 @@ class GameLoadingComp(
         animator?.start()
     }
 
+    /**
+     * 通用进度条设置
+     */
+    private fun setLoadingProgressBar(
+        progressBgWidth: Int = 239.dp(),
+        progressBgHeight: Int = 25.dp(),
+        progressHeight: Int = 14.dp(),
+        progressTopMargin: Int = 5.dp(),
+        progressContainTopMargin: Int = 15.dp()
+    ) {
+        // 设置公共进度条相关资源
+        binding.progressBgIv.setImageResource(R.drawable.web_progress_bg)
+        binding.progressBgIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            width = progressBgWidth
+            height = progressBgHeight
+        }
+        binding.progressContentIv.setImageResource(R.drawable.game_loading_progress)
+        binding.progressContentIv.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            height = progressHeight
+            topMargin = progressTopMargin
+        }
+        binding.progressBarCl.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            topMargin = progressContainTopMargin
+        }
+    }
+
     fun showProgress(progress: Int) {
         if (!isValid) {
             return

BIN
module/webview/src/main/res/drawable-xhdpi/game_loading_progress_roulette.9.png


BIN
module/webview/src/main/res/drawable-xhdpi/game_loading_progress_teen_patti.9.png


BIN
module/webview/src/main/res/drawable-xhdpi/game_loading_progress_texas_cowboy.9.png


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg_dragon_tiger.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg_russia_roulette.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_bg_texas_cowboy.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_dragon_tiger.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_jackpot_slot.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_russia_roulette.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_teen_patti.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_loading_game_img_texas_cowboy.webp


BIN
module/webview/src/main/res/drawable-xhdpi/web_progress_bg_roulette.9.png


BIN
module/webview/src/main/res/drawable-xhdpi/web_progress_bg_teen_patti.png


BIN
module/webview/src/main/res/drawable-xhdpi/web_progress_bg_texas.9.png


+ 13 - 1
module/webview/src/main/res/layout/layout_game_loading.xml

@@ -19,7 +19,8 @@
         android:layout_marginTop="156dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintTop_toTopOf="parent"
+        app:placeholderImage="@drawable/web_loading_game_img_teen_patti"/>
 
     <com.opensource.svgaplayer.WenextSvgaView
         android:id="@+id/svga_loading"
@@ -92,6 +93,17 @@
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
+    <com.opensource.svgaplayer.WenextSvgaView
+        android:id="@+id/loading_light_outer"
+        android:layout_width="@dimen/web_loading_light_width"
+        android:layout_height="52dp"
+        android:visibility="gone"
+        app:layout_constraintBottom_toTopOf="@id/progress_bar_cl"
+        app:layout_constraintStart_toStartOf="@id/progress_bar_cl"
+        app:layout_constraintTop_toTopOf="@id/progress_bar_cl"
+        app:source="web_loading_light.svga"
+        tools:visibility="visible" />
+
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/progress_tv"
         android:layout_width="wrap_content"