From bb80b3ebb98b5f340101f6d260395de96f329708 Mon Sep 17 00:00:00 2001 From: eggmanQQQ <3671373519@qq.com> Date: Tue, 11 Feb 2025 18:05:06 +0800 Subject: [PATCH] =?UTF-8?q?feat=20:=20=E5=B9=B8=E8=BF=90=E7=A4=BC=E5=8C=85?= =?UTF-8?q?=20=E5=88=9D=E6=AD=A5=E5=8F=AF=E6=8F=90=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/avroom/bean/LuckyBagDetailEntity.java | 22 + .../chwl/app/avroom/bean/LuckyBagEntity.java | 19 +- .../app/avroom/bean/LuckyBagGiftBody.java | 6 +- .../app/avroom/bean/LuckyBagGiftItemBody.java | 2 +- .../app/avroom/bean/LuckyBagGoldBody.java | 8 +- .../avroom/bean/LuckyBagOpenBiliEntity.java | 14 + .../app/avroom/bean/LuckyBagOpenEntity.java | 11 + .../app/avroom/bean/LuckyBagOpenGiftBean.java | 9 + .../avroom/bean/LuckyBagOpenGiftEntity.java | 9 + .../app/avroom/bean/LuckyBagOpenUserBean.java | 10 + .../app/avroom/dialog/RoomGameListDialog.kt | 6 +- .../avroom/dialog/RoomLuckyBagBiliDialog.kt | 155 +++- .../app/avroom/dialog/RoomLuckyBagDialog.kt | 358 ++++++- .../avroom/dialog/RoomLuckyBagOpenDialog.kt | 180 +++- .../avroom/dialog/RoomNotifyLuckBagDialog.kt | 81 ++ .../app/avroom/fragment/BaseRoomFragment.kt | 20 +- .../avroom/fragment/HomePartyFragment.java | 131 +-- .../chwl/app/avroom/widget/GiftV2View.java | 1 + .../com/chwl/app/avroom/widget/LuckyBagBtn.kt | 86 +- .../chwl/app/avroom/widget/MessageView.java | 61 +- .../app/bindadapter/BaseBindingAdapter.kt | 27 +- .../com/chwl/app/common/EmptyViewHelper.java | 9 + .../java/com/chwl/app/ui/utils/ImageLoad.kt | 5 +- .../com/chwl/app/utils/RoomLuckyBagManager.kt | 71 ++ .../chwl/app/utils/RoomNotifyDialogManager.kt | 12 +- .../main/res/layout/dialog_bottom_gift.xml | 2 +- .../main/res/layout/dialog_room_lucky_bag.xml | 872 ++++++++++-------- .../res/layout/dialog_room_lucky_bag_bili.xml | 21 +- .../res/layout/dialog_room_lucky_bag_open.xml | 14 +- .../res/layout/item_room_lucky_bag_bili.xml | 40 +- .../res/layout/item_room_lucky_bag_gift.xml | 3 +- .../res/layout/item_room_lucky_bag_gold.xml | 2 +- .../item_room_lucky_bag_view_others.xml | 15 +- .../layout_msg_view_holder_room_lucky_bag.xml | 13 +- .../main/res/layout/view_lucky_bag_btn.xml | 2 + .../res/layout/view_room_lucky_bag_notify.xml | 17 + app/src/main/res/values/strings.xml | 12 + .../com/chwl/core/gift/bean/LuckyBagGift.java | 2 + .../core/gift/bean/LuckyBagViewOthers.java | 3 + .../chwl/core/home/bean/HomeTabMapInfo.java | 6 +- .../im/custom/bean/CustomAttachParser.java | 3 + .../core/im/custom/bean/CustomAttachment.java | 3 +- .../core/im/custom/bean/NotifyH5Info.java | 2 +- .../bean/RedPackageLuckyBagAttachment.java | 33 + .../chwl/core/manager/IMNetEaseManager.java | 17 +- .../java/com/chwl/core/manager/RoomEvent.java | 6 + .../redpackage/bean/RedPackageLuckyBag.java | 15 + .../chwl/core/room/game/bean/GameInfo.java | 4 + .../com/chwl/library/common/util/OtherExt.kt | 23 + mode.json | 420 +++++++-- 50 files changed, 2096 insertions(+), 767 deletions(-) create mode 100644 app/src/main/java/com/chwl/app/avroom/bean/LuckyBagDetailEntity.java create mode 100644 app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenBiliEntity.java create mode 100644 app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenEntity.java create mode 100644 app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftBean.java create mode 100644 app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftEntity.java create mode 100644 app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenUserBean.java create mode 100644 app/src/main/java/com/chwl/app/avroom/dialog/RoomNotifyLuckBagDialog.kt create mode 100644 core/src/main/java/com/chwl/core/im/custom/bean/RedPackageLuckyBagAttachment.java create mode 100644 core/src/main/java/com/chwl/core/redpackage/bean/RedPackageLuckyBag.java diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagDetailEntity.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagDetailEntity.java new file mode 100644 index 000000000..04622e8f8 --- /dev/null +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagDetailEntity.java @@ -0,0 +1,22 @@ +package com.chwl.app.avroom.bean; + +import lombok.Data; + +@Data +public class LuckyBagDetailEntity { + public String avatar; + public String nick; + public long createTime; + public String createTimeStr; + public int num = 1; + public int originalAmount; + public String type; + public String giftName; + + + + public @interface BiliType{ + public int SENT = 1; + public int RECEIVED = 2; + } +} diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagEntity.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagEntity.java index b47e3ea93..8a6483450 100644 --- a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagEntity.java +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagEntity.java @@ -1,19 +1,26 @@ package com.chwl.app.avroom.bean; +import static com.chwl.app.avroom.bean.LuckyBagEntity.Type.GIFT; + import lombok.Data; @Data public class LuckyBagEntity { public long id; + public long roomUid; + public long userId; public String avatar; public String nick; - public long userId; - public long roomUid; public int status; - public String Type; - public long endTime; // 倒计时结束时间, 表时可以开抢了, (东八区) - - + public String type; + public long beginTime; // 倒计时结束时间, 表时可以开抢了, (东八区) + public @interface Type{ + public String GIFT = "GIFT"; + public String DIAMOND = "DIAMOND"; + } + public boolean isGift() { + return type.equals(GIFT); + } } diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftBody.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftBody.java index d5994a946..f14e9684d 100644 --- a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftBody.java +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftBody.java @@ -1,5 +1,7 @@ package com.chwl.app.avroom.bean; +import static com.chwl.app.avroom.bean.LuckyBagEntity.Type.GIFT; + import java.util.ArrayList; import java.util.List; @@ -11,8 +13,8 @@ public class LuckyBagGiftBody { public long roomUid; public long uid; public int countDownSecond; - public String type = "GIFT"; - public int num; + public String type = GIFT; +// public int num; public List giftItems; diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftItemBody.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftItemBody.java index c54245eb2..9f29fad11 100644 --- a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftItemBody.java +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGiftItemBody.java @@ -4,6 +4,6 @@ import lombok.Data; @Data public class LuckyBagGiftItemBody { - public int giftId; + public long giftId; public int giftNum; } diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGoldBody.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGoldBody.java index c2934ad74..68c2676fe 100644 --- a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGoldBody.java +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagGoldBody.java @@ -1,5 +1,7 @@ package com.chwl.app.avroom.bean; +import static com.chwl.app.avroom.bean.LuckyBagEntity.Type.DIAMOND; + import lombok.Data; @Data @@ -7,10 +9,10 @@ public class LuckyBagGoldBody { public long roomUid; public long uid; - public String type = "DIAMOND"; - public int countDownSecond; - public int num; + public String type = DIAMOND; public int goldNum; + public int num; + public int countDownSecond; } diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenBiliEntity.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenBiliEntity.java new file mode 100644 index 000000000..53bc146ca --- /dev/null +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenBiliEntity.java @@ -0,0 +1,14 @@ +package com.chwl.app.avroom.bean; + +import java.util.List; + +import lombok.Data; + +@Data +public class LuckyBagOpenBiliEntity { + public int amount; + public long createTime; + public String createTimeStr; + public List redEnvelopeGiftItemVOs; + public LuckyBagOpenUserBean userVO; +} diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenEntity.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenEntity.java new file mode 100644 index 000000000..1b58c9565 --- /dev/null +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenEntity.java @@ -0,0 +1,11 @@ +package com.chwl.app.avroom.bean; + +import java.util.List; + +import lombok.Data; + +@Data +public class LuckyBagOpenEntity { + public int currentUserAmount; + public List currentUserGifts; +} diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftBean.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftBean.java new file mode 100644 index 000000000..98802dedd --- /dev/null +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftBean.java @@ -0,0 +1,9 @@ +package com.chwl.app.avroom.bean; + +import lombok.Data; + +@Data +public class LuckyBagOpenGiftBean { + public String giftUrl; + public String giftName; +} diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftEntity.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftEntity.java new file mode 100644 index 000000000..9c6657b73 --- /dev/null +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenGiftEntity.java @@ -0,0 +1,9 @@ +package com.chwl.app.avroom.bean; + +import lombok.Data; + +@Data +public class LuckyBagOpenGiftEntity { + public int giftNum; + public LuckyBagOpenGiftBean giftVo; +} diff --git a/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenUserBean.java b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenUserBean.java new file mode 100644 index 000000000..e389de615 --- /dev/null +++ b/app/src/main/java/com/chwl/app/avroom/bean/LuckyBagOpenUserBean.java @@ -0,0 +1,10 @@ +package com.chwl.app.avroom.bean; + +import lombok.Data; + +@Data +public class LuckyBagOpenUserBean { + public String avatar; + public String nick; + public long uid; +} diff --git a/app/src/main/java/com/chwl/app/avroom/dialog/RoomGameListDialog.kt b/app/src/main/java/com/chwl/app/avroom/dialog/RoomGameListDialog.kt index 46431c130..52ee52ac8 100644 --- a/app/src/main/java/com/chwl/app/avroom/dialog/RoomGameListDialog.kt +++ b/app/src/main/java/com/chwl/app/avroom/dialog/RoomGameListDialog.kt @@ -261,10 +261,11 @@ class RoomGameListDialog : getString(R.string.room_switch_game_tips) ) { - //todo do 游戏弹窗列表 点击事件 - + //todo do 游戏弹窗列表 点击事件 ,code 优先判断 if (gameInfo.isFindLove()) { jumpFindLove() + }else if(gameInfo.isLuckyBag()){ + listener?.onShowLuckyBag() }else if (gameInfo.isLeadercc()) { jumpLeaderccGame(gameInfo) } else if (gameInfo.mgId?.isNotEmpty() == true) { @@ -381,5 +382,6 @@ class RoomGameListDialog : interface GameplayDialogListener { fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) fun onShowLeaderccGame(url: String, config: BaiShunGameConfig) + fun onShowLuckyBag() } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagBiliDialog.kt b/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagBiliDialog.kt index a026c0c04..5161d29d4 100644 --- a/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagBiliDialog.kt +++ b/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagBiliDialog.kt @@ -1,52 +1,66 @@ package com.chwl.app.avroom.dialog +import android.content.DialogInterface import android.view.Gravity import android.view.WindowManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.chwl.app.R +import com.chwl.app.avroom.bean.LuckyBagDetailEntity +import com.chwl.app.avroom.bean.LuckyBagDetailEntity.BiliType.RECEIVED +import com.chwl.app.avroom.bean.LuckyBagDetailEntity.BiliType.SENT +import com.chwl.app.avroom.bean.LuckyBagEntity import com.chwl.app.base.BaseDialogFragment import com.chwl.app.bindadapter.BaseBindingAdapter -import com.chwl.app.bindadapter.BaseBindingViewHolder +import com.chwl.app.common.EmptyViewHelper import com.chwl.app.databinding.DialogRoomLuckyBagBiliBinding import com.chwl.app.databinding.ItemRoomLuckyBagBiliBinding -import com.chwl.app.ui.utils.load +import com.chwl.app.ui.utils.loadAvatar import com.chwl.core.bean.response.ServiceResult -import com.chwl.core.gift.bean.RoomBgInfo -import com.chwl.core.manager.AvRoomDataManager import com.chwl.core.user.UserModel import com.chwl.core.utils.net.RxHelper import com.chwl.library.common.util.ClickUtils.click +import com.chwl.library.common.util.doToast +import com.chwl.library.common.util.isVerify import com.chwl.library.common.util.toColor +import com.chwl.library.common.util.toDP import com.chwl.library.net.rxnet.RxNet import com.chwl.library.widget.text.DrawableTextView import com.example.lib_utils.ktx.getColor -import com.google.gson.JsonElement +import com.example.lib_utils.ktx.getString import io.reactivex.Single import retrofit2.http.GET -import retrofit2.http.POST import retrofit2.http.Query class RoomLuckyBagBiliDialog : BaseDialogFragment() { override var width = WindowManager.LayoutParams.MATCH_PARENT - override var height = WindowManager.LayoutParams.WRAP_CONTENT + override var height = 485.toDP() override var dimAmount = 0f - override var gravity = Gravity.CENTER + override var gravity = Gravity.BOTTOM private lateinit var mAdapter : RoomLuckyBagBiliAdapter + private var mSentPageNum = 1 + private var mReceivedPageNum = 1 + private var mType = RECEIVED + + private var mSentData = mutableListOf() + private var mReceivedData = mutableListOf() + override fun init() { mAdapter = RoomLuckyBagBiliAdapter() - mAdapter.setOnLoadMoreListener({ - - },binding.rvList) + mAdapter.emptyView = EmptyViewHelper.createEmptyView(context,R.drawable.ic_lucky_bag_empty,"") + binding.srlLayout.isEnableRefresh = false + binding.srlLayout.setOnLoadmoreListener { + loadData() + } binding.rvList.adapter = mAdapter binding.rvList.layoutManager = LinearLayoutManager(context,RecyclerView.VERTICAL,false) UserModel.get().cacheLoginUserInfo?.let { - binding.avatar.load(it.avatar) + binding.avatar.loadAvatar(it.avatar) binding.nick.text = it.nick } @@ -54,17 +68,82 @@ class RoomLuckyBagBiliDialog : BaseDialogFragment binding.btnBack.click { dismiss() } + binding.btnReceived.click { changeBtn(binding.btnReceived,true) changeBtn(binding.btnSent,false) + mType = RECEIVED + mAdapter.isReceived = true + mAdapter.setNewData(mReceivedData) + checkData(mReceivedData) } + binding.btnSent.click { changeBtn(binding.btnSent,true) changeBtn(binding.btnReceived,false) + mType = SENT + mAdapter.isReceived = false + mAdapter.setNewData(mSentData) + checkData(mSentData) } + binding.btnReceived.performClick() + + } + private fun checkData(data: MutableList) { + if (!data.isVerify()) { + loadData() + } + } + + private fun loadData() { + val pageNum = if (mType == RECEIVED) mReceivedPageNum else mSentPageNum + getDetails(mType, pageNum, 20) + .compose(bindToLifecycle()) + .doOnSuccess { + if (pageNum == 1) { + if (mType == RECEIVED) { + mReceivedData.clear() + mReceivedData = it.toMutableList() + mAdapter.setNewData(mReceivedData) + } else { + mSentData.clear() + mSentData = it.toMutableList() + mAdapter.setNewData(mSentData) + } + } else { +// if (mType == RECEIVED) { +// mReceivedData.addAll(it) +// } else { +// mSentData.addAll(it) +// } + mAdapter.addData(it) + } + + if (it.size == 20) { + if (mType == RECEIVED) { + mReceivedPageNum++ + } else { + mSentPageNum++ + } + } + binding.srlLayout.isEnableLoadmore = it.size == 20 + binding.srlLayout.finishLoadmore() + } + .doOnError { + it?.message?.doToast() + binding.srlLayout.finishLoadmore() + }.subscribe() + } + + override fun onDismiss(dialog: DialogInterface) { + mActionCallBack?.onAction(0,0) + super.onDismiss(dialog) + } + + private fun changeBtn(text: DrawableTextView, select: Boolean) { if (select) { text.changeGradientColor("#FF9F00".toColor(), -1, "#FFF437".toColor()) @@ -77,46 +156,54 @@ class RoomLuckyBagBiliDialog : BaseDialogFragment - class RoomLuckyBagBiliAdapter : BaseBindingAdapter() { + class RoomLuckyBagBiliAdapter : BaseBindingAdapter() { + var isReceived = true - - override fun convert( - helper: BaseBindingViewHolder, - item: String + override fun onBindView( + viewBinding: ItemRoomLuckyBagBiliBinding, + data: LuckyBagDetailEntity, + pos: Int ) { + if (data.type == LuckyBagEntity.Type.GIFT) { + if (isReceived) { + viewBinding.item.text = "${data.giftName}*${data.num}" + } else { + viewBinding.item.text = "${R.string.gift_action.getString()}*${data.num}" + } + } else { + viewBinding.item.text = data.originalAmount?.toString()?:"" + } + viewBinding.time.text = data.createTimeStr?:"" + + if (isReceived) { + viewBinding.nick.text = data.nick?:"" + } else { + viewBinding.nick.text = if (data.type == LuckyBagEntity.Type.GIFT) R.string._ver_24_Gift_Lucky_Bag_Bili.getString() else R.string._ver_24_Coin_Lucky_Bag_Bili.getString() + } } } - - - private fun getBoomInfo(roomUid: Long): Single { - return api.getBoomInfo(roomUid) + private fun getDetails(type: Int, page: Int, pageSize: Int): Single> { + return api.getDetails(type, page, pageSize) .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()) } - private fun postDel(id: Long): Single { - return api.postDel(AvRoomDataManager.get().roomUid, id) - .compose(RxHelper.handleIgnoreData()) - .compose(RxHelper.handleSchedulers()) - } - private val api: Api = RxNet.create(Api::class.java); interface Api { - @GET("/room/background/list") - fun getBoomInfo(@Query("roomUid") roomUid: Long): Single> + @GET("/new-red-envelope/detail") + fun getDetails( + @Query("type") type: Int, + @Query("pageNo") page: Int, + @Query("pageSize") pageSize: Int, + ): Single>> - @POST("/room/background/del") - fun postDel( - @Query("roomUid") roomUid: Long, - @Query("id") id: Long - ): Single> } diff --git a/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagDialog.kt b/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagDialog.kt index 354d1f94e..1421eab4a 100644 --- a/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagDialog.kt +++ b/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagDialog.kt @@ -1,14 +1,16 @@ package com.chwl.app.avroom.dialog import android.view.Gravity +import android.view.MotionEvent import android.view.View import android.view.WindowManager -import androidx.core.widget.doOnTextChanged import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.chad.library.adapter.base.BaseQuickAdapter +import com.chwl.app.BuildConfig import com.chwl.app.R import com.chwl.app.avroom.bean.LuckyBagGiftBody +import com.chwl.app.avroom.bean.LuckyBagGiftItemBody import com.chwl.app.avroom.bean.LuckyBagGoldBody import com.chwl.app.base.BaseDialogFragment import com.chwl.app.bindadapter.BaseBindingAdapter @@ -17,8 +19,12 @@ import com.chwl.app.databinding.DialogRoomLuckyBagBinding import com.chwl.app.databinding.ItemRoomLuckyBagGiftBinding import com.chwl.app.databinding.ItemRoomLuckyBagGoldBinding import com.chwl.app.databinding.ItemRoomLuckyBagTimeBinding +import com.chwl.app.ui.pay.ChargeActivity +import com.chwl.app.ui.utils.loadAvatar import com.chwl.app.ui.utils.loadImage +import com.chwl.app.utils.KeyBoardUtils import com.chwl.app.utils.RoomLuckyBagManager +import com.chwl.core.auth.AuthModel import com.chwl.core.bean.response.ServiceResult import com.chwl.core.gift.GiftModel import com.chwl.core.gift.bean.GiftType @@ -26,11 +32,15 @@ import com.chwl.core.gift.bean.LuckyBagGift import com.chwl.core.gift.bean.LuckyBagGold import com.chwl.core.gift.bean.LuckyBagNumber import com.chwl.core.gift.bean.LuckyBagNumber.Type +import com.chwl.core.manager.AvRoomDataManager +import com.chwl.core.pay.PayModel +import com.chwl.core.user.UserModel import com.chwl.core.utils.net.RxHelper import com.chwl.core.widget.layoutmanager.pagergridlayoutmanager.PagerGridLayoutManager import com.chwl.library.common.util.ClickUtils.click +import com.chwl.library.common.util.doToast +import com.chwl.library.common.util.doToastDeBug import com.chwl.library.common.util.isVerify -import com.chwl.library.common.util.postSafe import com.chwl.library.common.util.setMargin import com.chwl.library.common.util.setVis import com.chwl.library.common.util.toColor @@ -62,13 +72,24 @@ class RoomLuckyBagDialog : BaseDialogFragment() { private var mGiftData = mutableListOf() private var mGiftDataSelect = mutableListOf() + private var mGiftDataSelectPos = HashMap() private var mIsGift = true private var mIsGiftReview = false + private var mGiftSelect = -1 + private var mGiftTimeSelect = -1 + + private var mGoldSelect = -1 + private var mGoldNumSelect = -1 + private var mGoldTimeSelect = -1 + override fun init() { + + binding.redBagDesc.text = R.string._ver_24_sendHint.getString(0,0) + mGiftAdapter = GiftAdapter() mGiftAdapter.onItemChildClickListener = object : BaseQuickAdapter.OnItemChildClickListener { override fun onItemChildClick( @@ -78,15 +99,31 @@ class RoomLuckyBagDialog : BaseDialogFragment() { ) { view?.let { when (it.id) { + R.id.etNum -> { + mGiftSelect = position + showInputLayout() + } + R.id.up -> { - mGiftData?.get(position)?.count = mGiftData?.get(position)?.count?.plus(1) - mGiftAdapter.notifyItemChanged(position) + if (position.isVerify(mGiftData)) { + val data = mGiftData[position] + data.count = data.count.plus(1) + mGiftAdapter.notifyItemChanged(position,1) + mGiftDataSelectPos[position] = data + } + showGiftCoin() } R.id.down -> { - if (mGiftData?.get(position)?.count != 0) { - mGiftData?.get(position)?.count = mGiftData?.get(position)?.count?.minus(1) - mGiftAdapter.notifyItemChanged(position) + if (position.isVerify(mGiftData)) { + val data = mGiftData[position] + data.count = data.count.minus(1) + mGiftAdapter.notifyItemChanged(position,1) + + if (data.count == 0) { + mGiftDataSelectPos.remove(position) + } } + showGiftCoin() } else -> {} } @@ -109,6 +146,7 @@ class RoomLuckyBagDialog : BaseDialogFragment() { currentPosition = 0 indicatorSize = pagerCount }) + binding.giftIndicator.onPageSelected(0) } override fun onPagerIndexSelected(prePagerIndex: Int, currentPagerIndex: Int) { @@ -119,9 +157,10 @@ class RoomLuckyBagDialog : BaseDialogFragment() { binding.rvListGiftType.adapter = mGiftAdapter mGiftTimeAdapter = NumberItemAdapter() - mGiftAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener { + mGiftTimeAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener { override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) { mGiftTimeAdapter.select(position) + mGiftTimeSelect = mGiftTimeAdapter?.data?.getOrNull(position)?.number?:0 } } binding.rvListGiftTime.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false) @@ -131,11 +170,12 @@ class RoomLuckyBagDialog : BaseDialogFragment() { //--金币礼包 - mGoldAdapter = GoldAdapter() mGoldAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener { override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) { mGoldAdapter.select(position) + mGoldSelect = mGoldAdapter?.data?.getOrNull(position)?.number?:0 + showGoldCoin() } } binding.rvListGoldType.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false) @@ -147,6 +187,8 @@ class RoomLuckyBagDialog : BaseDialogFragment() { mGoldNumAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener { override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) { mGoldNumAdapter.select(position) + mGoldNumSelect = mGoldNumAdapter?.data?.getOrNull(position)?.number?:0 + showGoldCoin() } } binding.rvListGoldNum.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false) @@ -156,10 +198,11 @@ class RoomLuckyBagDialog : BaseDialogFragment() { mGoldTimeAdapter.onItemClickListener = object : BaseQuickAdapter.OnItemClickListener { override fun onItemClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) { mGoldTimeAdapter.select(position) + mGoldTimeSelect = mGoldTimeAdapter?.data?.getOrNull(position)?.number?:0 } } - binding.rvListGiftTime.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false) - binding.rvListGiftTime.adapter = mGoldTimeAdapter + binding.rvListGoldTime.layoutManager = GridLayoutManager(context,4,RecyclerView.VERTICAL,false) + binding.rvListGoldTime.adapter = mGoldTimeAdapter @@ -167,16 +210,23 @@ class RoomLuckyBagDialog : BaseDialogFragment() { val giftInfoList = GiftModel.get().getGiftInfoList(GiftType.GIFT_TYPE_NORMAL) giftInfoList.forEach { mGiftData.add(LuckyBagGift().apply { + giftId = it.giftId.toLong() giftName = it.giftName giftPrice = it.goldPrice giftPic = it.giftUrl }) } + giftInfoList.isVerify(0){ + it.isSelected = true + mGiftSelect = 0 + } + RoomLuckyBagManager.mLuckyBagConfig?.let { config -> val goldData = arrayListOf() val goldNumData = arrayListOf() - val timeData = arrayListOf() + val goldTimeData = arrayListOf() + val giftTimeData = arrayListOf() config.goldItems.forEach { @@ -193,7 +243,11 @@ class RoomLuckyBagDialog : BaseDialogFragment() { } config.timeItems.forEach { - timeData.add(LuckyBagNumber().apply { + goldTimeData.add(LuckyBagNumber().apply { + type = Type.time + number = it + }) + giftTimeData.add(LuckyBagNumber().apply { type = Type.time number = it }) @@ -202,9 +256,27 @@ class RoomLuckyBagDialog : BaseDialogFragment() { mGoldAdapter.setNewData(goldData) mGoldNumAdapter.setNewData(goldNumData) + mGoldTimeAdapter.setNewData(goldTimeData) + + mGiftTimeAdapter.setNewData(giftTimeData) + + goldData.isVerify(0){ + it.isSelect = true + mGoldSelect = it.number + } + goldNumData.isVerify(0){ + it.isSelect = true + mGoldNumSelect= it.number + } + goldTimeData.isVerify(0){ + it.isSelect = true + mGoldTimeSelect = it.number + } + giftTimeData.isVerify(0){ + it.isSelect = true + mGiftTimeSelect = it.number + } - mGoldTimeAdapter.setNewData(timeData) - mGiftTimeAdapter.setNewData(timeData) } @@ -216,11 +288,87 @@ class RoomLuckyBagDialog : BaseDialogFragment() { tabChange(false) } + binding.notifyView.avatar.loadAvatar(UserModel.get().cacheLoginUserInfo?.avatar) + binding.notifyView.nick.text = UserModel.get().cacheLoginUserInfo?.nick + binding.notifyView.desc.text = R.string._ver_24_lucky_bag_room_notify.getString(UserModel.get().cacheLoginUserInfo?.nick?:"") + tabChange(true) - binding.btnConfirm.click { + if (checkSendData()) { + if (mIsGift) { + if (!mIsGiftReview) { + showGiftReview() + } else { + doSendGiftBag() + } + } else { + doSendGoldBag() + } + } else { + "没选择".doToastDeBug() + } + } + binding.btnModify.click { + showGiftSelectView() + } + + binding.btnBill.click { + binding.root.setVis(false) + val biliDialog = RoomLuckyBagBiliDialog() + biliDialog.mActionCallBack = object : Action { + override fun onAction(type: Int, data: Any?) { + binding.root.setVis(true) + } + } + biliDialog.show(context) + } + + binding.btnMore.click { + + } + + binding.inputLayout.setOnTouchListener { _: View?, _: MotionEvent? -> + binding.inputEdit.clearFocus() + binding.inputLayout.visibility = View.GONE + KeyBoardUtils.hideKeyBoard(activity, binding.inputEdit) + false + } + + binding.inputSend.click { + var count = 0 + val text = binding.inputEdit.text.toString() + if (text.isVerify()) { + count = text.toInt() + } + if (mGiftSelect.isVerify(mGiftData)) { + val data = mGiftData[mGiftSelect] + data.count = count + data.isSelect = false + mGiftAdapter.notifyItemChanged(mGiftSelect,1) + + if (count > 0) { + mGiftDataSelectPos[mGiftSelect] = data + } else { + mGiftDataSelectPos.remove(mGiftSelect) + } + } + + + + binding.inputEdit.clearFocus() + binding.inputLayout.visibility = View.GONE + KeyBoardUtils.hideKeyBoard(activity, binding.inputEdit) + mGiftSelect = -1 + + showGoldCoin() + showGiftCoin() + } + + binding.userGold.text = (PayModel.get().currentWalletInfo?.diamondNum ?: 0.0).toInt().toString() + binding.userGold.click { + ChargeActivity.start(context) } } @@ -228,6 +376,7 @@ class RoomLuckyBagDialog : BaseDialogFragment() { if (isGift) { binding.bgGiftBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_left_s) binding.bgGoldBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_right_n) + binding.notifyView.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gift_bg) binding.giftBagLayout.setVis(true,true) binding.goldBagLayout.setVis(false, true) mIsGift = true @@ -235,6 +384,7 @@ class RoomLuckyBagDialog : BaseDialogFragment() { } else { binding.bgGiftBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_left_n) binding.bgGoldBag.setBackgroundResource(R.drawable.ic_lucky_bag_tab_bg_right_s) + binding.notifyView.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gold_bg) binding.goldBagLayout.setVis(true,true) binding.giftBagLayout.setVis(false,true) mIsGift = false @@ -246,16 +396,15 @@ class RoomLuckyBagDialog : BaseDialogFragment() { private fun changeViewStatus() { if (mIsGift && !mIsGiftReview) { - showGiftSelect() + showGiftSelectView() }else if (mIsGift && mIsGiftReview) { showGiftReview() } else { - showGoldSelect() + showGoldSelectView() } } - - private fun showGiftSelect() { + private fun showGiftSelectView() { binding.giftBagLayout.setVis(true) binding.goldBagLayout.setVis(false) binding.groupGiftSelect.setVis(true) @@ -269,8 +418,13 @@ class RoomLuckyBagDialog : BaseDialogFragment() { binding.redBagDesc.setPadding2(bottom = 0.toDP()) + mGiftDataSelectPos.forEach { (t, u) -> + u.isReView = false + } mGiftAdapter.setNewData(mGiftData) + mIsGiftReview = false + } private fun showGiftReview() { @@ -287,10 +441,16 @@ class RoomLuckyBagDialog : BaseDialogFragment() { binding.redBagDesc.setPadding2(bottom = 0.toDP()) + mGiftDataSelect.clear() + mGiftDataSelectPos.forEach { (t, u) -> + u.isReView = true + mGiftDataSelect.add(u) + } mGiftAdapter.setNewData(mGiftDataSelect) + mIsGiftReview = true } - private fun showGoldSelect() { + private fun showGoldSelectView() { binding.goldBagLayout.setVis(true) binding.giftBagLayout.setVis(false) @@ -300,9 +460,117 @@ class RoomLuckyBagDialog : BaseDialogFragment() { binding.redBagDesc.setPadding2(bottom = 20.toDP()) } + private fun showInputLayout() { + binding.inputLayout.postDelayed({ + binding.inputLayout.visibility = View.VISIBLE + binding.inputEdit.isFocusableInTouchMode = true + binding.inputEdit.requestFocus() + + if (mGiftSelect.isVerify(mGiftData)) { + val data = mGiftData[mGiftSelect] + binding.inputEdit.setText(data.count.toString()) + binding.inputEdit.setSelection(binding.inputEdit.text.length) + data.isSelect = true + mGiftAdapter.notifyItemChanged(mGiftSelect,1) + } + + KeyBoardUtils.showKeyBoard(context, binding.inputEdit) + }, 200) + } + + private fun showGiftCoin() { + var giftCount = 0 + var giftCoin = 0 + mGiftDataSelectPos.forEach { (t, u) -> + giftCount+=u.count + giftCoin += u.count * u.giftPrice + } + binding.redBagDesc.text = R.string._ver_24_sendHint.getString(giftCount,giftCoin) + binding.reviewTime.text = R.string._ver_24_reviewTime.getString(mGiftTimeSelect / 60) + } + + private fun showGoldCoin() { + val coin = mGoldSelect * mGoldNumSelect + binding.redBagDesc.text = R.string._ver_24_Total_spend_s_coins.getString(coin) + } + + private fun checkSendData() : Boolean{ + if (mIsGift) { + if (!mGiftDataSelectPos.isVerify()) { + + return false + } + if (mGiftTimeSelect == -1) { + + return false + } + } else { + if (mGoldSelect == -1) { + + return false + } + if (mGoldNumSelect == -1) { + + return false + } + if (mGoldTimeSelect == -1) { + + return false + } + + } + return true + } + + + private fun doSendGiftBag() { + val items = mutableListOf() + mGiftDataSelectPos.keys.forEach{ key-> + items.add(LuckyBagGiftItemBody().apply { + giftId = mGiftDataSelectPos[key]?.giftId ?: -1 + giftNum = mGiftDataSelectPos[key]?.count ?: -1 + }) + } + if (BuildConfig.DEBUG) { + mGiftTimeSelect = 20 + } + sentGiftBag(LuckyBagGiftBody().apply { + roomUid = AvRoomDataManager.get().roomUid + uid = AuthModel.get().currentUid + countDownSecond = mGiftTimeSelect + giftItems = items + }).compose(bindToLifecycle()) + .doOnSuccess { + dismiss() + } + .doOnError { + it?.message?.doToast() + }.subscribe() + } + + private fun doSendGoldBag() { + if (BuildConfig.DEBUG) { + mGoldTimeSelect = 20 + } + sentGoldBag(LuckyBagGoldBody().apply { + roomUid = AvRoomDataManager.get().roomUid + uid = AuthModel.get().currentUid + goldNum = mGoldSelect + num = mGoldNumSelect + countDownSecond = mGoldTimeSelect + }).compose(bindToLifecycle()) + .doOnSuccess { + dismiss() + } + .doOnError { + it?.message?.doToast() + }.subscribe() + } + private class GiftAdapter : BaseBindingAdapter() { + override fun convert( helper: BaseBindingViewHolder, item: LuckyBagGift @@ -313,24 +581,12 @@ class RoomLuckyBagDialog : BaseDialogFragment() { it.gold.text = item.giftPrice.toString() it.etNum.setText(item.count.toString()) it.giftCount.text = item.count.toString() - it.etNum.setTextColor(if (item.count > 0) R.color.color_FFEA5C.getColor() else R.color.white.getColor()) - it.etNum.doOnTextChanged { text, start, before, count -> - val num = if (text.isVerify()) text.toString().toInt() else 0 - item.count = num - it.giftCount?.postSafe { - it.giftCount.text = item.count.toString() - it.etNum.setTextColor(if (item.count> 0) R.color.color_FFEA5C.getColor() else R.color.white.getColor()) - } - - if (!text.isVerify()) { - it.etNum.setText("0") - it.etNum.setSelection(it.etNum.text.length) - } - } + it.etNum.setTextColor(if (item.isSelect) R.color.color_FFEA5C.getColor() else R.color.white.getColor()) helper.addOnClickListener(R.id.up) helper.addOnClickListener(R.id.down) + helper.addOnClickListener(R.id.etNum) if (item.isReView) { it.selectViews.setVis(false) @@ -342,10 +598,17 @@ class RoomLuckyBagDialog : BaseDialogFragment() { } } + override fun onBindViewByPayloads( + viewBinding: ItemRoomLuckyBagGiftBinding, + data: LuckyBagGift, + pos: Int, + payloads: MutableList + ) { + viewBinding.etNum.setText(data.count.toString()) + viewBinding.etNum.setTextColor(if (data.isSelect) R.color.color_FFEA5C.getColor() else R.color.white.getColor()) + } } - - private class NumberItemAdapter : BaseBindingAdapter() { public fun select(pos:Int) { @@ -360,24 +623,26 @@ class RoomLuckyBagDialog : BaseDialogFragment() { item: LuckyBagNumber ) { helper?.binding?.let { - it.number.text = item.number.toString() + + if (item.type == LuckyBagNumber.Type.time) { + it.number.text = R.string._ver_24_Mins_s.getString((item.number/60)) + } else { + it.number.text = item.number.toString() + } if (item.isSelect()) { it.number.changeGradientColor("#ff9f00".toColor(),-1,"#fff437".toColor()) it.number.changeStrikeColor("#00ffd168".toColor()) - it.number.setTextColor(R.color.color_FFEA5C.getColor()) - + it.number.setTextColor(R.color.color_292601.getColor()) } else { it.number.changeGradientColor("#610015".toColor(),-1,"#97000c".toColor()) it.number.changeStrikeColor("#ffd168".toColor()) - it.number.setTextColor(R.color.color_292601.getColor()) + it.number.setTextColor(R.color.color_FFEA5C.getColor()) } - } } } - private class GoldAdapter : BaseBindingAdapter(){ public fun select(pos:Int) { @@ -393,15 +658,18 @@ class RoomLuckyBagDialog : BaseDialogFragment() { ) { helper?.binding?.let { + it.gold.text = item.number.toString() + if (item.isSelect()) { it.goldBg.changeGradientColor("#ff9f00".toColor(),-1,"#fff437".toColor()) it.goldBg.changeStrikeColor("#00ffd168".toColor()) - it.gold.setTextColor(R.color.color_FFEA5C.getColor()) + it.gold.setTextColor(R.color.color_292601.getColor()) } else { it.goldBg.changeGradientColor("#610015".toColor(),-1,"#97000c".toColor()) it.goldBg.changeStrikeColor("#ffd168".toColor()) - it.gold.setTextColor(R.color.color_292601.getColor()) + it.gold.setTextColor(R.color.color_FFEA5C.getColor()) + } } diff --git a/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagOpenDialog.kt b/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagOpenDialog.kt index 41d5e0831..74dab77bb 100644 --- a/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagOpenDialog.kt +++ b/app/src/main/java/com/chwl/app/avroom/dialog/RoomLuckyBagOpenDialog.kt @@ -8,23 +8,32 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.chwl.app.R +import com.chwl.app.avroom.bean.LuckyBagEntity +import com.chwl.app.avroom.bean.LuckyBagOpenBiliEntity +import com.chwl.app.avroom.bean.LuckyBagOpenEntity import com.chwl.app.base.BaseDialogFragment import com.chwl.app.bindadapter.BaseBindingAdapter -import com.chwl.app.bindadapter.BaseBindingViewHolder import com.chwl.app.databinding.DialogRoomLuckyBagOpenBinding import com.chwl.app.databinding.ItemRoomLuckyBagViewOthersBinding +import com.chwl.app.ui.utils.loadAvatar import com.chwl.app.ui.utils.loadImage +import com.chwl.app.utils.RoomLuckyBagManager +import com.chwl.core.auth.AuthModel import com.chwl.core.bean.response.ServiceResult import com.chwl.core.gift.bean.LuckyBagViewOthers -import com.chwl.core.gift.bean.RoomBgInfo import com.chwl.core.utils.net.RxHelper import com.chwl.library.common.util.ClickUtils.click +import com.chwl.library.common.util.doLog +import com.chwl.library.common.util.doToast +import com.chwl.library.common.util.isVerify +import com.chwl.library.common.util.postSafe +import com.chwl.library.common.util.setMargin import com.chwl.library.common.util.setViewWH import com.chwl.library.common.util.setVis import com.chwl.library.common.util.toDP import com.chwl.library.net.rxnet.RxNet +import com.example.lib_utils.ktx.getDrawable import com.example.lib_utils.ktx.getString -import com.google.gson.JsonElement import io.reactivex.Single import kotlinx.coroutines.Job import kotlinx.coroutines.delay @@ -47,6 +56,8 @@ class RoomLuckyBagOpenDialog : BaseDialogFragment private var isOpen = false private var mTimeJop : Job?=null + var mData : LuckyBagEntity? = null + override fun init() { @@ -68,72 +79,112 @@ class RoomLuckyBagOpenDialog : BaseDialogFragment } } - if (isGift) { - binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_btn_gift_pic) - } else { - binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_btn_gold_pic) + + mData?.let { + isGift = it.isGift + + if (isGift) { + binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_btn_gift_pic) + } else { + binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_btn_gold_pic) + } + binding.bg.setBackgroundResource(R.drawable.ic_lucky_bag_open_bg) + binding.avatar.loadAvatar(it.avatar) + + val timeDown = RoomLuckyBagManager.getTimeDown(it.beginTime) + if (timeDown == 0L) { + // 倒计时结束 可开 + ready() + } else { + timeDown(timeDown) + } } - binding.bg.setBackgroundResource(R.drawable.ic_lucky_bag_open_bg) + + } private fun doOpenBag() { - + mData?.let { data -> + postLuckyBagOpen(data.id) + .compose(bindToLifecycle()) + .doOnSuccess { + if (it.currentUserGifts.isVerify() || it.currentUserAmount > 0){ + open(it) + }else { + showEmpty() + } + }.doOnError { + it?.message?.doToast() + }.subscribe() + } } - - private fun timeDown() { + private fun timeDown(timeDown: Long) { def() - binding.viewOthers.setVis(true) + binding.bagImg.setVis(true) - binding.time.setVis(true) binding.comingHint.setVis(true) binding.comingHint.text = R.string._ver_24_luckBagOpenHint.getString() - startTimeDown(10) + startTimeDown(timeDown) } - private fun startTimeDown(time:Int) { + private fun startTimeDown(timeDown:Long) { mTimeJop?.cancel() mTimeJop = lifecycleScope.launch { - var t = 0 - while (t < time) { - binding.time.text = "00:00" - delay(1000) - t++ + for (time in timeDown downTo 0) { + delay(1000L) + binding.time.postSafe{ + val timeString = RoomLuckyBagManager.getTimeString(time) + binding.time.text = timeString + binding.time.setVis(time == 0L,true) + "倒计时 i=$time timeString=$timeString".doLog() + } } + mTimeJop?.cancel() + mTimeJop = null + ready() } + mTimeJop?.start() } private fun ready() { - def() - binding.bagImg.setVis(true) + binding.root.postSafe{ + def() + binding.bagImg.setVis(true) - binding.confirm.text = R.string._ver_24_Click_Open.getString() + binding.confirm.text = R.string._ver_24_Click_Open.getString() - isOpen = true + isOpen = true + } } - private fun open() { + private fun open(entity: LuckyBagOpenEntity) { def() + binding.viewOthers.setVis(true) if (isGift) { - binding.viewOthers.setVis(true) + binding.giftName.setVis(true) binding.giftNum.setVis(true) binding.giftImg.setVis(true) - binding.giftName.text = "礼物名" - binding.giftNum.text = "x0" - binding.giftImg.loadImage("") + entity.currentUserGifts.isVerify(0){ + binding.giftName.text = it?.giftVo?.giftName?:"" + binding.giftNum.text = "x"+(it?.giftNum?.toString()?:"0") + binding.giftImg.loadImage(it?.giftVo?.giftUrl?:"") + } + } else { binding.gold.setVis(true) - binding.gold.text = "0" + binding.gold.text = entity?.currentUserAmount?.toString()?:"0" } + mActionCallBack?.onAction(1,mData) } @@ -143,7 +194,6 @@ class RoomLuckyBagOpenDialog : BaseDialogFragment binding.bagImg.setVis(true) binding.comingHint.setVis(true) - binding.comingHint.text = R.string._ver_24_luckBagOpen_Empty.getString() binding.bagImg.setImageResource(R.drawable.ic_lucky_bag_empty) } @@ -155,14 +205,39 @@ class RoomLuckyBagOpenDialog : BaseDialogFragment binding.rvListViewOthers.setVis(true) binding.bg.setViewWH(height = 414) + binding.confirm.setMargin(bottom = 10) binding.bg.setBackgroundResource(R.drawable.ic_lucky_bag_open_bili_bg) + + mData?.let { data-> + getViewOthers(data.id) + .compose(bindToLifecycle()) + .doOnSuccess { + val viewOthers = mutableListOf() + it.forEach { vo-> + viewOthers.add(LuckyBagViewOthers().apply { + uid = vo?.userVO?.uid?:0L + avatar = vo?.userVO?.avatar?:"" + nick = vo?.userVO?.nick?:"" + time = vo?.createTime?:0L + timeStr = vo?.createTimeStr?:"" + giftName = vo?.redEnvelopeGiftItemVOs?.getOrNull(0)?.giftVo?.giftName?:"" + giftNum = vo?.redEnvelopeGiftItemVOs?.getOrNull(0)?.giftNum?:0 + goldNum = vo?.amount?:0 + }) + } + mAdapter?.setNewData(viewOthers) + } + .doOnError { + it?.message?.doToast() + } + .subscribe() + } + } - - - private fun def() { + isOpen = false binding.viewOthers.visibility = View.INVISIBLE binding.time.visibility = View.INVISIBLE binding.giftName.visibility = View.INVISIBLE @@ -177,6 +252,7 @@ class RoomLuckyBagOpenDialog : BaseDialogFragment binding.bg.setViewWH(height = 326) binding.confirm.text = R.string.ok.getString() + binding.confirm.setMargin(bottom = 20) } override fun onDismiss(dialog: DialogInterface) { @@ -187,27 +263,39 @@ class RoomLuckyBagOpenDialog : BaseDialogFragment private class ViewOtherAdapter : BaseBindingAdapter() { - override fun convert( - helper: BaseBindingViewHolder, - item: LuckyBagViewOthers + override fun onBindView( + viewBinding: ItemRoomLuckyBagViewOthersBinding, + data: LuckyBagViewOthers, + pos: Int ) { + viewBinding.time.text = data.timeStr + viewBinding.name.text = data.nick + viewBinding.me.setVis(data.uid == AuthModel.get().currentUid) + viewBinding.avatar.loadAvatar(data?.avatar?:"") + + if (data.giftNum > 0) { + viewBinding.giftInfo.text = "${data.giftName}x${data.giftNum}" + viewBinding.giftInfo.setDrawableEmpty(null,null,null,null) + } else { + viewBinding.giftInfo.text = data.goldNum.toString() + viewBinding.giftInfo.setDrawableEmpty(null,null,R.drawable.ic_coin_84.getDrawable(),null) + } } } - - - private fun getBoomInfo(roomUid: Long): Single { - return api.getBoomInfo(roomUid) + private fun getViewOthers(redEnvelopeId: Long): Single> { + return api.getViewOthers(redEnvelopeId) .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()) } - private fun postLuckyBagOpen(redEnvelopeId: Long): Single { + + private fun postLuckyBagOpen(redEnvelopeId: Long): Single { return api.postLuckyBagOpen(redEnvelopeId) - .compose(RxHelper.handleIgnoreData()) + .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()) } @@ -215,14 +303,14 @@ class RoomLuckyBagOpenDialog : BaseDialogFragment private val api: Api = RxNet.create(Api::class.java); interface Api { - @GET("/room/background/list") - fun getBoomInfo(@Query("roomUid") roomUid: Long): Single> + @GET("/new-red-envelope/get") + fun getViewOthers(@Query("redEnvelopeId") redEnvelopeId: Long): Single>> @POST("/new-red-envelope/open") fun postLuckyBagOpen( @Query("redEnvelopeId") redEnvelopeId: Long - ): Single> + ): Single> } diff --git a/app/src/main/java/com/chwl/app/avroom/dialog/RoomNotifyLuckBagDialog.kt b/app/src/main/java/com/chwl/app/avroom/dialog/RoomNotifyLuckBagDialog.kt new file mode 100644 index 000000000..6727b3e2b --- /dev/null +++ b/app/src/main/java/com/chwl/app/avroom/dialog/RoomNotifyLuckBagDialog.kt @@ -0,0 +1,81 @@ +package com.chwl.app.avroom.dialog + +import android.content.Context +import android.view.LayoutInflater +import com.chwl.app.R +import com.chwl.app.application.GlobalHandleManager +import com.chwl.app.avroom.activity.AVRoomActivity +import com.chwl.app.avroom.bean.LuckyBagEntity +import com.chwl.app.common.widget.dialog.DialogManager +import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener +import com.chwl.app.databinding.ViewRoomLuckyBagNotifyBinding +import com.chwl.app.ui.utils.loadAvatar +import com.chwl.core.manager.AvRoomDataManager +import com.chwl.core.redpackage.bean.RedPackageLuckyBag +import com.chwl.library.common.util.ClickUtils.click +import com.chwl.library.common.util.setVis +import com.chwl.library.utils.ResUtil +import com.example.lib_utils.ktx.getString + +class RoomNotifyLuckBagDialog(private val context: Context) : BaseRoomNotifyDialog(context) { + + + override fun createBinding(inflater: LayoutInflater): ViewRoomLuckyBagNotifyBinding { + return ViewRoomLuckyBagNotifyBinding.inflate(inflater) + } + + + private var mDialogManager: DialogManager? = null + var data: RedPackageLuckyBag? = null + + override fun useAutoDismiss(): Boolean { + return false + } + + override fun init() {} + + + private fun ready() { + mBinding.root.setVis(true) + + data?.let { + mBinding.avatar.loadAvatar(it.getSendUserAvatar()) + mBinding.nick.text = it.getSendUserNick() + mBinding.desc.text = R.string._ver_24_lucky_bag_room_notify.getString() + + if (it.redEnvelopeType == LuckyBagEntity.Type.GIFT) { + mBinding.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gift_bg) + } else { + mBinding.rootBg.setBackgroundResource(R.drawable.ic_lucky_bag_room_notify_gold_bg) + } + } + + mBinding.clickView.click { + data?.roomUid?.let { roomUid -> + if (AvRoomDataManager.get().roomUid == roomUid) return@click + val activity = GlobalHandleManager.get().activity ?: return@click + mDialogManager = DialogManager(activity) + mDialogManager?.showOkCancelDialog(ResUtil.getString(R.string.changeRoomTips), true, object : + OkCancelDialogListener { + override fun onCancel() { + mDialogManager?.dismissDialog() + } + + override fun onOk() { + mDialogManager?.dismissDialog() + AVRoomActivity.start(context, roomUid) + } + }) + } + } + + startAutoDismiss() + } + + + override fun showDialog() { + super.showDialog() + ready() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/avroom/fragment/BaseRoomFragment.kt b/app/src/main/java/com/chwl/app/avroom/fragment/BaseRoomFragment.kt index 78bd206f8..51f2b76b3 100644 --- a/app/src/main/java/com/chwl/app/avroom/fragment/BaseRoomFragment.kt +++ b/app/src/main/java/com/chwl/app/avroom/fragment/BaseRoomFragment.kt @@ -48,11 +48,13 @@ import com.chwl.app.avroom.dialog.DatingVipRuleDialog import com.chwl.app.avroom.dialog.RoomBoomInfoDialog import com.chwl.app.avroom.dialog.RoomGameListDialog import com.chwl.app.avroom.dialog.RoomGameplayDialog +import com.chwl.app.avroom.dialog.RoomLuckyBagDialog import com.chwl.app.avroom.dialog.RoomOperationDialog import com.chwl.app.avroom.presenter.BaseRoomPresenter import com.chwl.app.avroom.room_album.RoomAlbumModel import com.chwl.app.avroom.view.IBaseRoomView import com.chwl.app.avroom.widget.BottomView +import com.chwl.app.avroom.widget.LuckyBagBtn import com.chwl.app.avroom.widget.MessageView import com.chwl.app.avroom.widget.MicroView import com.chwl.app.base.BaseMvpActivity @@ -200,6 +202,7 @@ open class BaseRoomFragment?> : protected lateinit var boomIcon: ImageView protected lateinit var boomProMax: ImageView protected lateinit var boomPro: ImageView + protected lateinit var luckyBagBtn: LuckyBagBtn protected lateinit var ivTeamPk: ImageView protected lateinit var btnIvConfigEntrance: ImageView protected lateinit var btnIvgame: ImageView @@ -560,6 +563,8 @@ open class BaseRoomFragment?> : RoomEvent.MSG_BOOM -> onBoomAboutMsg(roomEvent); RoomEvent.MSG_SELF_ENTER_ROOM -> initRoomBoom(); + + RoomEvent.MSG_ROOM_LUCKY_BAG_ADD -> onLuckyBagAdd(roomEvent); } } @@ -859,6 +864,10 @@ open class BaseRoomFragment?> : override fun onShowLeaderccGame(url: String, config: BaiShunGameConfig) { (activity as? AVRoomActivity)?.showLeaderccGame(url, config) } + + override fun onShowLuckyBag() { + RoomLuckyBagDialog().show(context) + } } dialog.show(childFragmentManager, "GAME_LIST") } @@ -1927,11 +1936,18 @@ open class BaseRoomFragment?> : checkLuckyBagInfo() } + //幸运礼包推送 + private fun onLuckyBagAdd(roomEvent: RoomEvent) { + RoomLuckyBagManager.onLuckyBagAdd(roomEvent,luckyBagBtn) + } + private fun checkLuckyBagInfo() { RoomLuckyBagManager.getLuckyBagInfo { if (isAdded) { "红包信息 = $it".doLog() - + if (it.redEnvelopeListVoList.isVerify()) { + luckyBagBtn.setNewData(it.redEnvelopeListVoList) + } } } } @@ -1948,6 +1964,8 @@ open class BaseRoomFragment?> : boomProMax = floatBtnLayout.findViewById(R.id.boomProMax) boomPro = floatBtnLayout.findViewById(R.id.boomPro) + luckyBagBtn = floatBtnLayout.findViewById(R.id.luckyBagBtn) + ivTeamPk = floatBtnLayout.findViewById(R.id.iv_team_pk) btnIvConfigEntrance = floatBtnLayout.findViewById(R.id.iv_config_entrance) diff --git a/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyFragment.java b/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyFragment.java index 2936add14..e46b90241 100644 --- a/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyFragment.java +++ b/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyFragment.java @@ -252,63 +252,80 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe public void onResume() { super.onResume(); updateView(AvRoomDataManager.get().mCurrentRoomInfo); - IMNetEaseManager.get().getChatRoomEventObservable() - .compose(bindToLifecycle()) - .subscribe(roomEvent -> { - if (roomEvent == null) return; - int event = roomEvent.getEvent(); - switch (event) { - case RoomEvent.ENTER_ROOM: - if (AvRoomDataManager.get().mCurrentRoomInfo != null) { - updateOnlineNumberView(AvRoomDataManager.get().mCurrentRoomInfo.onlineNum); - } - addTipMsg(); - case RoomEvent.ROOM_INFO_UPDATE: - updateView(AvRoomDataManager.get().mCurrentRoomInfo); - break; - case RoomEvent.RECEIVE_NORMALE_GIFT://普通 - onReceiveGiftMsg(roomEvent.getGiftReceiveInfo()); - break; - case RoomEvent.RECEIVE_NORMALE_GIFT_ALL_SERVICE:// 全服普通 - onReceiveGiftMsgAllService(roomEvent.getGiftReceiveInfo()); - case RoomEvent.RECEIVE_NORMALE_GIFT_ALL_SERVICE_NOTIFY:// 全服飘屏 - onReceiveGiftMsgAllServiceNotify(roomEvent.getAnyData()); - break; - case RoomEvent.RECEIVE_MUTLT_NORMALEI_GIFT://普通多人 - onReceiveMultiGiftMsg(roomEvent.getGiftMultiReceiverInfo()); - break; - case RoomEvent.RECEIVE_ALL_MIC__NORMALEI_GIFT://普通全麦 - onReceiveAllMicGiftMsg(roomEvent.getMultiGiftReceiveInfo()); - break; - //福袋礼物 - case RoomEvent.RECEIVE_LUCKY_GIFT: - case RoomEvent.RECEIVE_MULTI_LUCKY_GIFT: - case RoomEvent.RECEIVE_ALL_MIC_LUCKY_GIFT: - onReceiveLuckyGiftToMultiMsg(roomEvent.getLuckygiftMultiReceiverInfo()); - break; - case RoomEvent.RECEIVED_SINGLE_MAGIC: - onReceiveMagicMsg(roomEvent.getMagicReceivedInfo()); - break; - case RoomEvent.RECEIVED_ALL_MIC_MAGIC: - onReceiveMultiMagicMsg(roomEvent.getMultiMagicReceivedInfo()); - break; - case RoomEvent.FANS_TEAM_JOIN: - onReceiveFansTeamJoinMsg(roomEvent.getChatRoomMessage()); - break; - case RoomEvent.MSG_SUPER_LUCKY_GIFT: - onLuckyGiftMsg(roomEvent); - break; - case RoomEvent.MSG_CP_ABOUT: - onCpAboutMsg(roomEvent); - case RoomEvent.MSG_ROOM_BG_CHANGE: - onRoomBgChange(roomEvent); - case RoomEvent.MSG_ROOM_LEVEL_CHANGE: - onRoomLevelChange(roomEvent); - break; - default: - break; - } - }); + OtherExtKt.doLog("房间消息 注册房间消息监听"); + gameMainBinding.getRoot().post(() -> { + IMNetEaseManager.get().getChatRoomEventObservable() + .doOnNext(roomEvent -> { + OtherExtKt.postSafe(gameMainBinding.getRoot(), () -> { + try { + if (roomEvent == null) return null; + int event = roomEvent.getEvent(); + OtherExtKt.doLog("房间消息 接收到房间消息 - "+event + " == 34 ?"); + switch (event) { + case RoomEvent.ENTER_ROOM: + try { + if (AvRoomDataManager.get().mCurrentRoomInfo != null) { + updateOnlineNumberView(AvRoomDataManager.get().mCurrentRoomInfo.onlineNum); + } + addTipMsg(); + } catch (Exception e) { + OtherExtKt.doLog("房间消息 接收到房间消息=1 报错 - "+e.getMessage()); + } + case RoomEvent.ROOM_INFO_UPDATE: + updateView(AvRoomDataManager.get().mCurrentRoomInfo); + break; + case RoomEvent.RECEIVE_NORMALE_GIFT://普通 + onReceiveGiftMsg(roomEvent.getGiftReceiveInfo()); + break; + case RoomEvent.RECEIVE_NORMALE_GIFT_ALL_SERVICE:// 全服普通 + onReceiveGiftMsgAllService(roomEvent.getGiftReceiveInfo()); + case RoomEvent.RECEIVE_NORMALE_GIFT_ALL_SERVICE_NOTIFY:// 全服飘屏 + onReceiveGiftMsgAllServiceNotify(roomEvent.getAnyData()); + break; + case RoomEvent.RECEIVE_MUTLT_NORMALEI_GIFT://普通多人 + onReceiveMultiGiftMsg(roomEvent.getGiftMultiReceiverInfo()); + break; + case RoomEvent.RECEIVE_ALL_MIC__NORMALEI_GIFT://普通全麦 + onReceiveAllMicGiftMsg(roomEvent.getMultiGiftReceiveInfo()); + break; + //福袋礼物 + case RoomEvent.RECEIVE_LUCKY_GIFT: + case RoomEvent.RECEIVE_MULTI_LUCKY_GIFT: + case RoomEvent.RECEIVE_ALL_MIC_LUCKY_GIFT: + onReceiveLuckyGiftToMultiMsg(roomEvent.getLuckygiftMultiReceiverInfo()); + break; + case RoomEvent.RECEIVED_SINGLE_MAGIC: + onReceiveMagicMsg(roomEvent.getMagicReceivedInfo()); + break; + case RoomEvent.RECEIVED_ALL_MIC_MAGIC: + onReceiveMultiMagicMsg(roomEvent.getMultiMagicReceivedInfo()); + break; + case RoomEvent.FANS_TEAM_JOIN: + onReceiveFansTeamJoinMsg(roomEvent.getChatRoomMessage()); + break; + case RoomEvent.MSG_SUPER_LUCKY_GIFT: + onLuckyGiftMsg(roomEvent); + break; + case RoomEvent.MSG_CP_ABOUT: + onCpAboutMsg(roomEvent); + case RoomEvent.MSG_ROOM_BG_CHANGE: + onRoomBgChange(roomEvent); + case RoomEvent.MSG_ROOM_LEVEL_CHANGE: + onRoomLevelChange(roomEvent); + break; + default: + break; + } + } catch (Exception e) { + OtherExtKt.doLog("房间消息 报错 "+roomEvent.getEvent()+" "+e.getMessage()); + } + + return null; + }); + + }) + .subscribe(); + }); } diff --git a/app/src/main/java/com/chwl/app/avroom/widget/GiftV2View.java b/app/src/main/java/com/chwl/app/avroom/widget/GiftV2View.java index f576defa5..84acc5e21 100644 --- a/app/src/main/java/com/chwl/app/avroom/widget/GiftV2View.java +++ b/app/src/main/java/com/chwl/app/avroom/widget/GiftV2View.java @@ -765,6 +765,7 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect objectAnimator.setDuration(time); objectAnimator.start(); + OtherExtKt.doLog("礼物icon 飞行动画开始播放 礼物名 = "+giftInfo.getGiftName()); objectAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { diff --git a/app/src/main/java/com/chwl/app/avroom/widget/LuckyBagBtn.kt b/app/src/main/java/com/chwl/app/avroom/widget/LuckyBagBtn.kt index b6b445b8d..2f78f313a 100644 --- a/app/src/main/java/com/chwl/app/avroom/widget/LuckyBagBtn.kt +++ b/app/src/main/java/com/chwl/app/avroom/widget/LuckyBagBtn.kt @@ -4,9 +4,21 @@ import android.content.Context import android.util.AttributeSet import android.view.LayoutInflater import android.widget.FrameLayout +import com.chwl.app.R +import com.chwl.app.avroom.bean.LuckyBagEntity +import com.chwl.app.avroom.dialog.RoomLuckyBagOpenDialog +import com.chwl.app.base.BaseDialogFragment import com.chwl.app.databinding.ViewLuckyBagBtnBinding +import com.chwl.app.utils.RoomLuckyBagManager import com.chwl.library.common.util.ClickUtils.click +import com.chwl.library.common.util.doLog +import com.chwl.library.common.util.isVerify +import com.chwl.library.common.util.postSafe import com.chwl.library.common.util.setVis +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch class LuckyBagBtn : FrameLayout{ @@ -16,6 +28,11 @@ class LuckyBagBtn : FrameLayout{ lateinit var mBinding : ViewLuckyBagBtnBinding + var mData = mutableListOf() + private var mTimeDownJob : Job? = null + + private val needLog = false + private fun initView(context: Context) { mBinding = ViewLuckyBagBtnBinding.inflate(LayoutInflater.from(context),this,true) mBinding.number.setBgColor("#f33a49") @@ -27,16 +44,75 @@ class LuckyBagBtn : FrameLayout{ private fun onClick() { - + mData.isVerify(0){ + val dialog = RoomLuckyBagOpenDialog() + dialog.mData = it + dialog.mActionCallBack = object : BaseDialogFragment.Action { + override fun onAction(type: Int, data: Any?) { + if (data != null && data is LuckyBagEntity) { + mData.remove(data) + showView() + } + } + } + dialog.show(context) + } } - private fun upDateView() { - mBinding.number.text = 11.toString() - mBinding.number.setVis(true) - + fun setNewData(data: List) { + mData = data.toMutableList() + showView() } + fun addData(data : LuckyBagEntity) { + mData.add(data) + val sortedBy = mData.sortedBy { it.beginTime } + mData = sortedBy.toMutableList() + showView() + } + + private fun showView() { + this.postSafe { + setVis(mData.isVerify()) + + mBinding.number.text = mData.size.toString() + mBinding.number.setVis(mData.size > 1) + + mData.isVerify(0){ + mBinding.bagImg.setImageResource(if (it.isGift) R.drawable.ic_lucky_bag_btn_gift_pic else R.drawable.ic_lucky_bag_btn_gold_pic) + startTimeDown(it.beginTime) + } + } + } + + // b 1739178120 c 1739178000 , 阿拉伯 c 1739178000 + private fun startTimeDown(beginTime: Long) { + val downTime = RoomLuckyBagManager.getTimeDown(beginTime) + mTimeDownJob?.cancel() + mTimeDownJob = GlobalScope.launch { + for (time in downTime downTo 0) { + delay(1000L) + mBinding.time.postSafe{ + val timeString = RoomLuckyBagManager.getTimeString(time) + mBinding.time.text = timeString + mBinding.time.setVis(time != 0L) + "倒计时 i=$time timeString=$timeString".doLog(needLog) + } + } + mTimeDownJob?.cancel() + mTimeDownJob = null + } + mTimeDownJob?.start() + } + + + override fun onDetachedFromWindow() { + mTimeDownJob?.cancel() + mTimeDownJob = null + super.onDetachedFromWindow() + + } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java b/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java index 2e848232f..4c02b2fb9 100644 --- a/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java +++ b/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java @@ -22,7 +22,6 @@ import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_ import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_FANS_TEAM_JOIN; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_GIFT_COMPOUND; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_TEMPLATE; -import static com.chwl.core.im.custom.bean.CustomAttachment.ROOM_LUCKY_BAG_FIRST; import static com.chwl.core.redpackage.RedPackageTypeKt.ALL_DIAMOND; import static com.chwl.core.redpackage.RedPackageTypeKt.ALL_GIFT; import static com.chwl.core.redpackage.RedPackageTypeKt.ROOM_DIAMOND; @@ -62,12 +61,14 @@ import com.bumptech.glide.request.target.Target; import com.chwl.app.R; import com.chwl.app.UIHelper; import com.chwl.app.avroom.activity.AVRoomActivity; +import com.chwl.app.avroom.bean.LuckyBagEntity; import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog; import com.chwl.app.avroom.room_album.UnlockRoomAlbumPhotoDialog; import com.chwl.app.common.widget.OriginalDrawStatusClickSpan; import com.chwl.app.photo.BigPhotoActivity; import com.chwl.app.photo.PagerOption; import com.chwl.app.sadmin.utils.SaAttachmentToMsgUtil; +import com.chwl.app.ui.utils.ImageLoadKt; import com.chwl.app.ui.utils.ImageLoadUtils; import com.chwl.app.ui.utils.ImageLoadUtilsV2; import com.chwl.app.ui.widget.DividerItemDecoration; @@ -118,6 +119,7 @@ import com.chwl.core.im.custom.bean.MonsterStatusAttachment; import com.chwl.core.im.custom.bean.MultiGiftAttachment; import com.chwl.core.im.custom.bean.MultiLuckyGiftAttachment; import com.chwl.core.im.custom.bean.NobleAttachment; +import com.chwl.core.im.custom.bean.RedPackageLuckyBagAttachment; import com.chwl.core.im.custom.bean.RedPackageRoomMsgAttachment; import com.chwl.core.im.custom.bean.RoomAlbumAttachment; import com.chwl.core.im.custom.bean.RoomAlbumMsgInfo; @@ -152,6 +154,7 @@ import com.chwl.core.noble.NobleUtil; import com.chwl.core.noble.bean.NobleInfo; import com.chwl.core.praise.PraiseModel; import com.chwl.core.redpackage.bean.RedEnvelopeRoomMsg; +import com.chwl.core.redpackage.bean.RedPackageLuckyBag; import com.chwl.core.room.anotherroompk.ShowUserInfoDialogEvent; import com.chwl.core.room.bean.DatingNotifyInfo; import com.chwl.core.room.bean.RoomInfo; @@ -177,7 +180,6 @@ import com.chwl.core.utils.extension.StringExtensionKt; import com.chwl.core.utils.net.DontWarnObserver; import com.chwl.core.utils.net.RxHelper; import com.chwl.core.vip.bean.VipMessageInfo; -import com.chwl.core.widget.img.MyCircleImageView; import com.chwl.library.common.util.OtherExtKt; import com.chwl.library.common.util.Utils; import com.chwl.library.rxbus.RxBus; @@ -188,6 +190,7 @@ import com.chwl.library.utils.ResUtil; import com.chwl.library.utils.SingleToastUtil; import com.chwl.library.utils.SizeUtils; import com.example.lib_utils.UiUtils; +import com.example.lib_utils.ktx.ResourcesKtxKt; import com.netease.nim.uikit.business.uinfo.UserInfoHelper; import com.netease.nim.uikit.common.ui.span.RadiusBackgroundSpan; import com.netease.nim.uikit.common.util.log.LogUtil; @@ -774,6 +777,8 @@ public class MessageView extends FrameLayout { if (attachment instanceof CustomAttachment) { if (((CustomAttachment) attachment).getFirst() == CustomAttachment.CUSTOM_MSG_ROOM_ALBUM) { return CustomAttachment.CUSTOM_MSG_ROOM_ALBUM; + }if (((CustomAttachment) attachment).getFirst() == CustomAttachment.CUSTOM_MSG_RED_PACKAGE) { + return CustomAttachment.CUSTOM_MSG_RED_PACKAGE; } } } @@ -789,7 +794,7 @@ public class MessageView extends FrameLayout { } - if (viewType == ROOM_LUCKY_BAG_FIRST) { + if (viewType == CustomAttachment.CUSTOM_MSG_RED_PACKAGE) { return new MessageViewHolder(LayoutInflater.from(parent.getContext()) .inflate(R.layout.layout_msg_view_holder_room_lucky_bag, parent, false)); @@ -1042,7 +1047,10 @@ public class MessageView extends FrameLayout { } else if (first == CUSTOM_MSG_RED_PACKAGE) { if (second == CustomAttachment.CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_MSG) { setRedPackageMsg(chatRoomMessage, tvContent); + }else if (second == CustomAttachment.CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_LUCKY_BAG){ + setRedPackageMsgByLuckyBag(baseViewHolder,chatRoomMessage); } + } else if (first == CustomAttachment.CUSTOM_MSG_DATING) { setDatingMsg(chatRoomMessage, tvContent, second); } else if (first == CustomAttachment.CUSTOM_MESS_TAROT) { @@ -1059,9 +1067,7 @@ public class MessageView extends FrameLayout { setFairyMsg(chatRoomMessage, tvContent); } else if (first == CUSTOM_MSG_ROOM_ALBUM) { setRoomAlbumMsg(chatRoomMessage, baseViewHolder); - } else if (first == ROOM_LUCKY_BAG_FIRST) { - setLuckyBagMsg(chatRoomMessage, baseViewHolder); - } else if (first == CUSTOM_MSG_ROOM_TEMPLATE) { + }else if (first == CUSTOM_MSG_ROOM_TEMPLATE) { TemplateMessageAttachment templateMessageAttachment = (TemplateMessageAttachment) chatRoomMessage.getAttachment(); if (templateMessageAttachment != null) { getTemplateMessageAdapter().convert(tvContent, templateMessageAttachment.getTemplateMessage()); @@ -1171,22 +1177,6 @@ public class MessageView extends FrameLayout { tvUnlock.setOnClickListener(v -> unlockRoomPhoto(baseViewHolder.getAbsoluteAdapterPosition(), roomPhoto)); } - //----幸运礼包消息 - private void setLuckyBagMsg(ChatRoomMessage chatRoomMessage, MessageViewHolder baseViewHolder) { - RoomAlbumAttachment attachment = (RoomAlbumAttachment) chatRoomMessage.getAttachment(); - RoomAlbumMsgInfo mRoomAlbumMsgInfo = attachment.getMRoomAlbumMsgInfo(); - - if (mRoomAlbumMsgInfo == null) { - return; - } - - ImageView luckyBagBg = baseViewHolder.itemView.findViewById(R.id.bg); - MyCircleImageView luckyBagAvatar = baseViewHolder.itemView.findViewById(R.id.avatar); - TextView luckyBagNick = baseViewHolder.itemView.findViewById(R.id.nick); - TextView luckyBagContent = baseViewHolder.itemView.findViewById(R.id.content); - - - } private void unlockRoomPhoto(int position, RoomPhoto roomPhoto) { UnlockRoomAlbumPhotoDialog unlockRoomAlbumPhotoDialog = UnlockRoomAlbumPhotoDialog.Companion @@ -1614,6 +1604,33 @@ public class MessageView extends FrameLayout { } + //幸运礼包 + private void setRedPackageMsgByLuckyBag(MessageViewHolder baseViewHolder,ChatRoomMessage chatRoomMessage) { + MsgAttachment attachment = chatRoomMessage.getAttachment(); + if (attachment instanceof RedPackageLuckyBagAttachment) { + RedPackageLuckyBag redPackageLuckyBag = ((RedPackageLuckyBagAttachment) attachment).getRedPackageLuckyBag(); + if (redPackageLuckyBag!= null) { + ImageView avatar = baseViewHolder.itemView.findViewById(R.id.avatar); + TextView nick = baseViewHolder.itemView.findViewById(R.id.nick); + TextView content = baseViewHolder.itemView.findViewById(R.id.content); + ImageView bg = baseViewHolder.itemView.findViewById(R.id.bg); + + ImageLoadKt.loadAvatar(avatar, redPackageLuckyBag.getSendUserAvatar()); + nick.setText(redPackageLuckyBag.getSendUserNick()); + content.setText(ResourcesKtxKt.getString(R.string._ver_24_lucky_bag_room_msg, redPackageLuckyBag.getSendUserNick())); + if (redPackageLuckyBag.getRedEnvelopeType().equals(LuckyBagEntity.Type.GIFT)) { + bg.setImageResource(R.drawable.ic_lucky_bag_msg_gift_bg); + } else { + bg.setImageResource(R.drawable.ic_lucky_bag_msg_gold_bg); + } + + } + } + + + } + + /** * 提示加入話題 * diff --git a/app/src/main/java/com/chwl/app/bindadapter/BaseBindingAdapter.kt b/app/src/main/java/com/chwl/app/bindadapter/BaseBindingAdapter.kt index 0ce7eda47..44bd61cee 100644 --- a/app/src/main/java/com/chwl/app/bindadapter/BaseBindingAdapter.kt +++ b/app/src/main/java/com/chwl/app/bindadapter/BaseBindingAdapter.kt @@ -6,6 +6,7 @@ import android.view.ViewGroup import androidx.viewbinding.ViewBinding import com.chad.library.adapter.base.BaseQuickAdapter import com.chwl.app.R +import com.chwl.library.common.util.isVerify import java.lang.reflect.ParameterizedType open class BaseBindingAdapter() : BaseQuickAdapter>(R.layout.item_empty_list) { @@ -33,8 +34,32 @@ open class BaseBindingAdapter() : BaseQuickAdapter, item: T) { - + helper.binding?.let { + val pos = helper.bindingAdapterPosition + onBindView(helper.binding,item,pos) + } } + + override fun convertPayloads( + helper: BaseBindingViewHolder, + item: T, + payloads: MutableList + ) { + if (payloads.isVerify()) { + helper.binding?.let { + val pos = helper.bindingAdapterPosition + onBindViewByPayloads(helper.binding,item,pos,payloads) + } + } else { + super.convertPayloads(helper, item, payloads) + } + } + + open fun onBindView(viewBinding: VB,data : T,pos:Int) {} + open fun onBindViewByPayloads(viewBinding: VB,data : T,pos:Int,payloads: MutableList) {} + + + } diff --git a/app/src/main/java/com/chwl/app/common/EmptyViewHelper.java b/app/src/main/java/com/chwl/app/common/EmptyViewHelper.java index e15ce9522..c2ea76292 100644 --- a/app/src/main/java/com/chwl/app/common/EmptyViewHelper.java +++ b/app/src/main/java/com/chwl/app/common/EmptyViewHelper.java @@ -22,6 +22,15 @@ public class EmptyViewHelper { return view; } + public static View createEmptyView(Context context,int imgId, String text) { + if (!NetworkUtils.isNetworkAvailable(context)) text = ResUtil.getString(R.string.erban_common_emptyviewhelper_01); + View view = LayoutInflater.from(context).inflate(R.layout.layout_ktv_empty, null); + view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + ((TextView) view.findViewById(R.id.tv_hint)).setText(text); + ((ImageView) view.findViewById(R.id.iv_status)).setImageResource(imgId); + return view; + } + public static View createEmptyTextViewHeight(Context context, String text) { if (!NetworkUtils.isNetworkAvailable(context)) text = ResUtil.getString(R.string.erban_common_emptyviewhelper_01); View view = LayoutInflater.from(context).inflate(R.layout.layout_wrap_empty, null); diff --git a/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt b/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt index ca79924e4..a6179dbd3 100644 --- a/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt +++ b/app/src/main/java/com/chwl/app/ui/utils/ImageLoad.kt @@ -22,6 +22,7 @@ import com.bumptech.glide.util.Util import com.chwl.app.R import com.chwl.core.utils.LogUtils import com.chwl.library.common.glide.GlideUtils +import com.chwl.library.common.util.isVerify import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.netease.nim.uikit.support.glide.GlideApp import com.opensource.svgaplayer.SVGADrawable @@ -79,7 +80,9 @@ fun ImageView.load( fun ImageView.loadAvatar(url: String?) { if (context.isDestroyed()) return - ImageLoadUtils.loadAvatar(url,this) + if (url.isVerify()) { + ImageLoadUtils.loadAvatar(url,this) + } } diff --git a/app/src/main/java/com/chwl/app/utils/RoomLuckyBagManager.kt b/app/src/main/java/com/chwl/app/utils/RoomLuckyBagManager.kt index 5bb0f0002..1a8eb0999 100644 --- a/app/src/main/java/com/chwl/app/utils/RoomLuckyBagManager.kt +++ b/app/src/main/java/com/chwl/app/utils/RoomLuckyBagManager.kt @@ -1,19 +1,70 @@ package com.chwl.app.utils +import android.icu.util.Calendar +import android.icu.util.TimeZone import com.chwl.app.avroom.bean.LuckyBagConfig +import com.chwl.app.avroom.bean.LuckyBagEntity import com.chwl.app.avroom.bean.RoomLuckyBagInfo +import com.chwl.app.avroom.widget.LuckyBagBtn import com.chwl.core.bean.response.ServiceResult +import com.chwl.core.gift.bean.RoomNotifyDialogBean +import com.chwl.core.im.custom.bean.RedPackageLuckyBagAttachment import com.chwl.core.manager.AvRoomDataManager +import com.chwl.core.manager.RoomEvent import com.chwl.core.utils.net.RxHelper +import com.chwl.library.common.util.doLog import com.chwl.library.net.rxnet.RxNet import io.reactivex.Single import retrofit2.http.GET import retrofit2.http.Query +import java.util.Locale object RoomLuckyBagManager { var mLuckyBagConfig : LuckyBagConfig?= null + + fun getTimeDown(beginTime:Long) : Long { + var downTime = 0L + val timez = TimeZone.getDefault() + val localTime = System.currentTimeMillis() + val timeOffset = timez.getOffset(localTime) + val east8 = TimeZone.getTimeZone("Asia/Shanghai").getOffset(localTime) + val cTime = localTime + (east8 - timeOffset) + downTime = (beginTime - cTime).coerceAtLeast(0) / 1000 + "倒计时 计算 localTime=$localTime timeOffset=$timeOffset east8=$east8 beginTime=$beginTime cTime=$cTime downTime=$downTime ".doLog() + return downTime + } + + + fun getTimeString(seconds:Long): String { + val minutes = seconds / 60 + val reSeconds = seconds % 60 + return String.format(Locale.ENGLISH,"%02d:%02d",minutes,reSeconds) + } + + + + fun timeToUtc(time:Long):Long{ + val calendar = Calendar.getInstance(TimeZone.getTimeZone("Asia/Shanghai")) + calendar.timeInMillis = time + + val utcCalender = Calendar.getInstance(TimeZone.getTimeZone("UTC")) + utcCalender.timeInMillis = calendar.timeInMillis + utcCalender.timeZone = TimeZone.getTimeZone("UTC") + + "倒计时 timeToUtc() time = $time utcCalender.timeInMillis=${ utcCalender.timeInMillis} ".doLog() + return utcCalender.timeInMillis + } + + + fun is8Hours() :Boolean{ + val i = TimeZone.getDefault().rawOffset / 3600000 + return i == 8 + } + + + public fun getLuckyBagInfo(run:(info:RoomLuckyBagInfo)->Unit) { val roomUid = AvRoomDataManager.get().roomUid if (roomUid > 0) { @@ -35,6 +86,26 @@ object RoomLuckyBagManager { .compose(RxHelper.handleSchedulers()) } + fun onLuckyBagAdd(roomEvent: RoomEvent, luckyBagBtn: LuckyBagBtn) { + try { + val attachment = roomEvent.chatRoomMessage.attachment as RedPackageLuckyBagAttachment + if (attachment.redPackageLuckyBag?.roomUid == AvRoomDataManager.get().roomUid) { + luckyBagBtn.addData(LuckyBagEntity().apply { + beginTime = attachment.redPackageLuckyBag.beginTime + type = attachment.redPackageLuckyBag.redEnvelopeType + nick = attachment.redPackageLuckyBag.sendUserAvatar + avatar = attachment.redPackageLuckyBag.sendUserAvatar + userId = attachment.redPackageLuckyBag.roomUid + roomUid = attachment.redPackageLuckyBag.roomUid + id = attachment.redPackageLuckyBag.redEnvelopeId + }) + } + RoomNotifyDialogManager.addDialog(RoomNotifyDialogBean(attachment.first,attachment.second,attachment.redPackageLuckyBag)) + } catch (e: Exception) { + "红包 红包推送 处理出错 ${e.message}".doLog() + } + } + private val api: Api = RxNet.create(Api::class.java); interface Api { diff --git a/app/src/main/java/com/chwl/app/utils/RoomNotifyDialogManager.kt b/app/src/main/java/com/chwl/app/utils/RoomNotifyDialogManager.kt index 23a49939a..b72e976ba 100644 --- a/app/src/main/java/com/chwl/app/utils/RoomNotifyDialogManager.kt +++ b/app/src/main/java/com/chwl/app/utils/RoomNotifyDialogManager.kt @@ -10,6 +10,7 @@ import com.chwl.app.avroom.dialog.RoomNotifyBoomDialog import com.chwl.app.avroom.dialog.RoomNotifyCpBindDialog import com.chwl.app.avroom.dialog.RoomNotifyCpGiftDialog import com.chwl.app.avroom.dialog.RoomNotifyLevelUpDialog +import com.chwl.app.avroom.dialog.RoomNotifyLuckBagDialog import com.chwl.app.avroom.dialog.RoomNotifyLuckGiftDialog import com.chwl.app.databinding.LayoutRoomNotifyLuckyGiftTipBinding import com.chwl.core.gift.bean.BoomMsgDialogBean @@ -18,6 +19,7 @@ import com.chwl.core.gift.bean.LuckyGiftMsgAllBean import com.chwl.core.gift.bean.LuckyGiftMsgSelfBean import com.chwl.core.gift.bean.RoomNotifyDialogBean import com.chwl.core.im.custom.bean.CustomAttachment +import com.chwl.core.redpackage.bean.RedPackageLuckyBag import com.chwl.library.common.util.doLog import com.chwl.library.common.util.setAutoSizeModel import java.util.LinkedList @@ -97,6 +99,12 @@ object RoomNotifyDialogManager { this.data = bean.data as BoomMsgDialogBean } } + }else if (bean.first == CustomAttachment.CUSTOM_MSG_RED_PACKAGE){ + if (bean.data is RedPackageLuckyBag) { + dialog = RoomNotifyLuckBagDialog(activity).apply { + this.data = bean.data as RedPackageLuckyBag + } + } } return dialog } @@ -139,10 +147,12 @@ object RoomNotifyDialogManager { } fun clear() { + dialogBuffer?.clear() + queue?.clear() luckyGiftTipPool?.clear() dialog?.clearDialog() dialog = null - queue.clear() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_bottom_gift.xml b/app/src/main/res/layout/dialog_bottom_gift.xml index c57636e78..25c6f63f6 100644 --- a/app/src/main/res/layout/dialog_bottom_gift.xml +++ b/app/src/main/res/layout/dialog_bottom_gift.xml @@ -191,7 +191,7 @@ android:orientation="horizontal" android:visibility="invisible" tools:contentDescription="@string/layout_dialog_bottom_gift_02" - tools:visibility="visible"> + tools:visibility="gone"> - + android:layout_gravity="bottom"> - - - + android:orientation="vertical" + android:gravity="bottom" + android:layout_height="match_parent"> + + - - android:layoutDirection="ltr" - android:layout_height="wrap_content" - android:layout_marginTop="108dp" - app:layout_constraintTop_toTopOf="parent"> - - - - - - - - - - - - - - - - - + - + android:layoutDirection="ltr" + android:layout_height="wrap_content" + android:layout_marginTop="108dp" + app:layout_constraintTop_toTopOf="parent"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:ellipsize="end" + android:gravity="center" + android:lines="1" + android:text="@string/_ver_24_Gift_Lucky_Bag" + android:textColor="@color/color_FFEA5C" + app:layout_constraintBottom_toBottomOf="@+id/bgGiftBag" + app:layout_constraintEnd_toEndOf="@+id/bgGiftBag" + app:layout_constraintStart_toStartOf="@+id/bgGiftBag" + app:layout_constraintTop_toTopOf="@+id/bgGiftBag" /> - + - - - - - - - - - - + android:ellipsize="end" + android:gravity="center" + android:lines="1" + android:text="@string/_ver_24_Coin_Lucky_Bag" + android:textColor="@color/color_FFEA5C" + app:layout_constraintBottom_toBottomOf="@+id/bgGoldBag" + app:layout_constraintEnd_toEndOf="@+id/bgGoldBag" + app:layout_constraintStart_toStartOf="@+id/bgGoldBag" + app:layout_constraintTop_toTopOf="@+id/bgGoldBag" /> - - - - - - - - - + + + - + + - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + app:layout_constraintTop_toBottomOf="@id/topLayout" /> - - + - + - + - \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_room_lucky_bag_bili.xml b/app/src/main/res/layout/dialog_room_lucky_bag_bili.xml index 59e9f7685..ef2b030b2 100644 --- a/app/src/main/res/layout/dialog_room_lucky_bag_bili.xml +++ b/app/src/main/res/layout/dialog_room_lucky_bag_bili.xml @@ -1,7 +1,6 @@ + android:text="@string/_ver_24_lucky_bag_bili_received" /> + android:text="@string/_ver_24_lucky_bag_bili_sent" /> @@ -89,12 +88,22 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/avatar" /> - + app:layout_constraintTop_toBottomOf="@+id/nick"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_room_lucky_bag_open.xml b/app/src/main/res/layout/dialog_room_lucky_bag_open.xml index 009d51101..ee4546fb2 100644 --- a/app/src/main/res/layout/dialog_room_lucky_bag_open.xml +++ b/app/src/main/res/layout/dialog_room_lucky_bag_open.xml @@ -129,7 +129,8 @@ android:id="@+id/time" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="60:00" + android:text="" + android:visibility="invisible" android:textColor="#292601" android:textSize="20sp" android:textStyle="bold" @@ -141,7 +142,7 @@ android:id="@+id/viewOthers" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="11dp" + android:layout_marginTop="7dp" android:text="@string/_ver_24_View_Others" android:textColor="#292601" android:textSize="12sp" @@ -157,20 +158,21 @@ android:layout_height="0dp" android:layout_marginTop="9dp" tools:listitem="@layout/item_room_lucky_bag_view_others" - app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="1" android:orientation="vertical" android:visibility="gone" - android:layout_marginBottom="30dp" + android:layout_marginHorizontal="40dp" + tools:visibility="visible" + android:layout_marginBottom="47dp" app:layout_constraintBottom_toTopOf="@id/viewOthersHint" - app:layout_constraintTop_toTopOf="@id/title" /> + app:layout_constraintTop_toBottomOf="@id/title" /> + android:layout_marginBottom="14dp" + tools:background="@color/red_font"> + app:layout_constraintTop_toTopOf="parent" + tools:text="111" /> + app:layout_constraintTop_toBottomOf="@id/nick" + tools:text="111" /> + app:layout_constraintTop_toTopOf="@id/nick" + tools:text="111" /> + android:layout_marginTop="11dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/item" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_room_lucky_bag_gift.xml b/app/src/main/res/layout/item_room_lucky_bag_gift.xml index 3298dcf73..fe63f6648 100644 --- a/app/src/main/res/layout/item_room_lucky_bag_gift.xml +++ b/app/src/main/res/layout/item_room_lucky_bag_gift.xml @@ -86,13 +86,12 @@ app:layout_constraintStart_toStartOf="@id/bgNumber" app:layout_constraintTop_toTopOf="@id/bgNumber" /> - - + android:layout_height="wrap_content"> + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_lucky_bag_btn.xml b/app/src/main/res/layout/view_lucky_bag_btn.xml index 8f6eb9024..4f04831bd 100644 --- a/app/src/main/res/layout/view_lucky_bag_btn.xml +++ b/app/src/main/res/layout/view_lucky_bag_btn.xml @@ -35,6 +35,8 @@ android:textSize="12sp" app:dt_drawableType="shape" app:dt_endColor="#e55f00" + android:visibility="gone" + tools:visibility="visible" app:dt_radius="115dp" app:dt_startColor="#cd1700" app:dt_strikeColor="#fff2ca" diff --git a/app/src/main/res/layout/view_room_lucky_bag_notify.xml b/app/src/main/res/layout/view_room_lucky_bag_notify.xml index 829d3e821..8495466c3 100644 --- a/app/src/main/res/layout/view_room_lucky_bag_notify.xml +++ b/app/src/main/res/layout/view_room_lucky_bag_notify.xml @@ -3,8 +3,14 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="100dp" + android:id="@+id/rootBg" android:background="@drawable/ic_lucky_bag_room_notify_gift_bg"> + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7ee43245d..3c4bc5903 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5429,6 +5429,18 @@ You cannot join again within 24 hours after leaving Lucky Bag Numbers Total spend %s coins Modify + + 幸运礼包飘屏 %s + 幸运礼包公屏消息 %s + + 幸运礼包-收 + 幸运礼包-送 + + 金币礼包 + 礼物礼包 + Mins%s + + diff --git a/core/src/main/java/com/chwl/core/gift/bean/LuckyBagGift.java b/core/src/main/java/com/chwl/core/gift/bean/LuckyBagGift.java index 3e7ef02bd..0e8de2837 100644 --- a/core/src/main/java/com/chwl/core/gift/bean/LuckyBagGift.java +++ b/core/src/main/java/com/chwl/core/gift/bean/LuckyBagGift.java @@ -7,6 +7,8 @@ public class LuckyBagGift { public String giftName; public String giftPic; public int giftPrice; + public long giftId; public int count; public boolean isReView; + public boolean isSelect; } diff --git a/core/src/main/java/com/chwl/core/gift/bean/LuckyBagViewOthers.java b/core/src/main/java/com/chwl/core/gift/bean/LuckyBagViewOthers.java index ea6f2324e..441cf02f8 100644 --- a/core/src/main/java/com/chwl/core/gift/bean/LuckyBagViewOthers.java +++ b/core/src/main/java/com/chwl/core/gift/bean/LuckyBagViewOthers.java @@ -1,9 +1,12 @@ package com.chwl.core.gift.bean; public class LuckyBagViewOthers { + public long uid; public String avatar; public String nick; public long time; + public String timeStr; public String giftName; public int giftNum; + public int goldNum; } diff --git a/core/src/main/java/com/chwl/core/home/bean/HomeTabMapInfo.java b/core/src/main/java/com/chwl/core/home/bean/HomeTabMapInfo.java index 8d07c3535..d6b3f6a19 100644 --- a/core/src/main/java/com/chwl/core/home/bean/HomeTabMapInfo.java +++ b/core/src/main/java/com/chwl/core/home/bean/HomeTabMapInfo.java @@ -21,7 +21,7 @@ public class HomeTabMapInfo implements MultiItemEntity, Serializable { */ private int onlineNum; - private int roomUid; + private long roomUid; private String title; private String avatar; private int seq; @@ -55,11 +55,11 @@ public class HomeTabMapInfo implements MultiItemEntity, Serializable { this.onlineNum = onlineNum; } - public int getRoomUid() { + public long getRoomUid() { return roomUid; } - public void setRoomUid(int roomUid) { + public void setRoomUid(long roomUid) { this.roomUid = roomUid; } diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java index c88022b77..069b4abce 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java +++ b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java @@ -401,6 +401,9 @@ public class CustomAttachParser implements MsgAttachmentParser { case CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_MSG: attachment = new RedPackageRoomMsgAttachment(second); break; + case CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_LUCKY_BAG: + attachment = new RedPackageLuckyBagAttachment(); + break; } break; diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java index 984125012..c59097213 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java +++ b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java @@ -319,6 +319,7 @@ public class CustomAttachment implements MsgAttachment { public static final int CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ALL_DIAMOND = 604;//全服红包 public static final int CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_MSG = 605; public static final int CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_DIAMOND2 = 606;//新版本-厅内红包 + public static final int CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_LUCKY_BAG = 607;//新版本-幸运礼包 //开福袋飘屏 public static final int CUSTOM_MSG_LUCKY_GIFT = 61; public static final int CUSTOM_MSG_LUCKY_GIFT_ROOM_NOTIFY = 610;// 福袋礼物房间飘屏通知 @@ -564,8 +565,6 @@ public class CustomAttachment implements MsgAttachment { //-----房間等级修改消息 public static final int ROOM_LEVEL_CHANGE_FIRST = 114; public static final int ROOM_LEVEL_CHANGE_SECOND = 1141; - //-----幸运礼包 - public static final int ROOM_LUCKY_BAG_FIRST = 1142; /** diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/NotifyH5Info.java b/core/src/main/java/com/chwl/core/im/custom/bean/NotifyH5Info.java index cac33935f..66a7d5596 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/NotifyH5Info.java +++ b/core/src/main/java/com/chwl/core/im/custom/bean/NotifyH5Info.java @@ -5,7 +5,7 @@ import lombok.Data; @Data public class NotifyH5Info { - private int roomUid; + private long roomUid; /** * 飘屏类型 0 房间静态飘屏 1 全服动态飘屏 diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/RedPackageLuckyBagAttachment.java b/core/src/main/java/com/chwl/core/im/custom/bean/RedPackageLuckyBagAttachment.java new file mode 100644 index 000000000..885153952 --- /dev/null +++ b/core/src/main/java/com/chwl/core/im/custom/bean/RedPackageLuckyBagAttachment.java @@ -0,0 +1,33 @@ +package com.chwl.core.im.custom.bean; + +import com.alibaba.fastjson.JSONObject; +import com.chwl.core.redpackage.bean.RedPackageLuckyBag; +import com.google.gson.Gson; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * Created by MadisonRong on 17/06/2018. + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class RedPackageLuckyBagAttachment extends CustomAttachment { + + public RedPackageLuckyBag redPackageLuckyBag; + + public RedPackageLuckyBagAttachment() { + super(CUSTOM_MSG_RED_PACKAGE, CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_LUCKY_BAG); + } + + @Override + protected void parseData(JSONObject data) { + redPackageLuckyBag = new Gson().fromJson(data.toJSONString(), RedPackageLuckyBag.class); + } + + @Override + protected JSONObject packData() { + String jsonStr = new Gson().toJson(redPackageLuckyBag); + return JSONObject.parseObject(jsonStr); + } +} diff --git a/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java b/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java index c0aaf0532..1a162bc00 100644 --- a/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java +++ b/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java @@ -60,6 +60,7 @@ import com.chwl.core.im.custom.bean.MonsterHuntingResultAttachment; import com.chwl.core.im.custom.bean.MonsterStatusAttachment; import com.chwl.core.im.custom.bean.MultiGiftAttachment; import com.chwl.core.im.custom.bean.NobleAttachment; +import com.chwl.core.im.custom.bean.RedPackageLuckyBagAttachment; import com.chwl.core.im.custom.bean.RoomBgChangeMsgAttachment; import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment; import com.chwl.core.im.custom.bean.RoomFreeGiftAttachment; @@ -95,6 +96,7 @@ import com.chwl.core.noble.NobleResourceType; import com.chwl.core.noble.NobleUtil; import com.chwl.core.noble.bean.NobleInfo; import com.chwl.core.public_chat_hall.manager.PublicChatHallDataManager; +import com.chwl.core.redpackage.bean.RedPackageLuckyBag; import com.chwl.core.retry.ImRetryManager; import com.chwl.core.retry.ReconnectListener; import com.chwl.core.retry.RetryChatRoomMessage; @@ -837,10 +839,10 @@ public final class IMNetEaseManager { if (!giftReceiveInfo.isRoomAlbum() && giftInfo.getGiftType() != GiftType.GIFT_TYPE_SUPER_LUCKY) { addMessages(msg); } - }if (customAttachment.getSecond() == CUSTOM_MSG_SUB_TYPE_SEND_ALL_SERVICE_GIFT) { // 35-全服礼物 + }else if (customAttachment.getSecond() == CUSTOM_MSG_SUB_TYPE_SEND_ALL_SERVICE_GIFT) { // 35-全服礼物 messages.add(msg); gift = true; - }if (customAttachment.getSecond() == CUSTOM_MSG_ALL_SERVICE_GIFT) { //32-全服礼物飘屏 + }else if (customAttachment.getSecond() == CUSTOM_MSG_ALL_SERVICE_GIFT) { //32-全服礼物飘屏 messages.add(msg); gift = true; } else if (customAttachment.getSecond() == CustomAttachment.CUSTOM_MSG_SUB_TYPE_SEND_LUCKY_GIFT) { @@ -1231,6 +1233,17 @@ public final class IMNetEaseManager { case CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_DIAMOND2: noticeRoomEvent(msg, RoomEvent.RECEIVE_RED_PACKAGE); break; + case CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_LUCKY_BAG: + if (attachment instanceof RedPackageLuckyBagAttachment) { + RedPackageLuckyBag redPackageLuckyBag = ((RedPackageLuckyBagAttachment) attachment).getRedPackageLuckyBag(); + if (redPackageLuckyBag != null) { + noticeRoomEvent(msg, RoomEvent.MSG_ROOM_LUCKY_BAG_ADD); + if (redPackageLuckyBag.getRoomUid() == AvRoomDataManager.get().getRoomUid()) { + addMessages(msg); + } + } + } + break; } break; diff --git a/core/src/main/java/com/chwl/core/manager/RoomEvent.java b/core/src/main/java/com/chwl/core/manager/RoomEvent.java index a100ec594..e9aa2b7cb 100644 --- a/core/src/main/java/com/chwl/core/manager/RoomEvent.java +++ b/core/src/main/java/com/chwl/core/manager/RoomEvent.java @@ -295,6 +295,12 @@ public class RoomEvent { public static final int RECEIVE_NORMALE_GIFT_ALL_SERVICE = 118; public static final int RECEIVE_NORMALE_GIFT_ALL_SERVICE_NOTIFY = 120; //全服飘屏 + /** + * 收到 幸运礼包 + */ + public static final int MSG_ROOM_LUCKY_BAG_ADD = 121; + + private int event = NONE; private int micPosition = Integer.MIN_VALUE; private int posState = -1; diff --git a/core/src/main/java/com/chwl/core/redpackage/bean/RedPackageLuckyBag.java b/core/src/main/java/com/chwl/core/redpackage/bean/RedPackageLuckyBag.java new file mode 100644 index 000000000..240ad3e55 --- /dev/null +++ b/core/src/main/java/com/chwl/core/redpackage/bean/RedPackageLuckyBag.java @@ -0,0 +1,15 @@ +package com.chwl.core.redpackage.bean; + +import lombok.Data; + +@Data +public class RedPackageLuckyBag { + public long roomUid; + public long redEnvelopeId ; + public int redEnvelopeNum ; + public String redEnvelopeType ; + public String sendUserAvatar; + public String sendUserNick; + public long beginTime; + +} diff --git a/core/src/main/java/com/chwl/core/room/game/bean/GameInfo.java b/core/src/main/java/com/chwl/core/room/game/bean/GameInfo.java index 25a37618d..aaaa22c75 100644 --- a/core/src/main/java/com/chwl/core/room/game/bean/GameInfo.java +++ b/core/src/main/java/com/chwl/core/room/game/bean/GameInfo.java @@ -46,4 +46,8 @@ public class GameInfo { return code.equals("BAISHUN"); } + public boolean isLuckyBag() { + return code.equals("LUCKY_BAG"); + } + } diff --git a/library/src/module_common/java/com/chwl/library/common/util/OtherExt.kt b/library/src/module_common/java/com/chwl/library/common/util/OtherExt.kt index 7086e713b..3b0d34162 100644 --- a/library/src/module_common/java/com/chwl/library/common/util/OtherExt.kt +++ b/library/src/module_common/java/com/chwl/library/common/util/OtherExt.kt @@ -144,6 +144,13 @@ fun String?.doToast() { ToastUtils.show(this) } } +fun String?.doToastDeBug() { + if (BuildConfig.DEBUG) { + if (this.isVerify()) { + ToastUtils.show(this) + } + } +} fun String?.doLog() { if (BuildConfig.DEBUG) { if (this.isVerify()) { @@ -193,6 +200,22 @@ fun List?.isVerify() : Boolean{ return this?.isEmpty() == false } +fun List?.isVerify(pos:Int,run:(data:D)->Unit = {}) : D? { + return if (this.isNullOrEmpty()) { + null + } else { + if (pos >= 0 && pos < this.size) { + val d = this[pos] + if (d != null) { + run(d) + } + d + } else { + null + } + } +} + fun Int.isVerify(list : List?) : Boolean{ if (list.isVerify()) { if (list!!.getOrNull(this) != null) { diff --git a/mode.json b/mode.json index 7a8b6dbdf..275e4d04e 100644 --- a/mode.json +++ b/mode.json @@ -3,113 +3,351 @@ "message": "success", "data": [ { - "bannerId": 55, - "bannerName": "每日消费", - "bannerPic": "https://image.pekolive.com/banner .png", + "id": 109, + "code": "BAISHUN", + "name": "Greedy", + "icon": "https://image.molistar.xyz/greedy.png", + "type": 3, "skipType": 3, - "skipUri": "http://beta.api.molistar.xyz/molistar/modules/dailyConsumption/index.html", - "androidVersion": "1.0.0", - "iosVersion": "1.0.0", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/modules/dailyConsumption/index.html", - "showType": 1 + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/greedy/1.2.3/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"ac868010-b9d2-4c0c-a334-f70a4311f496\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"2\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\"}", + "showType": 2, + "createTime": "2024-04-30 17:45:50", + "updateTime": "2024-07-29 17:26:56", + "partitionId": 2 }, { - "bannerId": 48, - "bannerName": "月充值", - "bannerPic": "https://image.pekolive.com/banner.png", + "id": 110, + "code": "BAISHUN", + "name": "MagicSlot", + "icon": "https://image.pekolive.com/108c11cb9c637ea8711d25d1a9ca1500.png", + "url": null, + "type": 3, "skipType": 3, - "skipUri": "http://beta.api.molistar.xyz/molistar/activity/rechargeNew/index.html", - "androidVersion": "1.0.0", - "iosVersion": "1.0.0", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/activity/rechargeNew/index.html", - "showType": 1 + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/magicslot/1.0.6/web-mobile/index.html", + "isEnabled": 1, + "isManual": 0, + "startTime": "2024-06-04 00:00:00", + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"ecbb0770-e5a2-495c-bfb5-fa1c7ca0c56b\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"3\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-06-05 16:16:59", + "updateTime": "2024-07-29 17:27:04", + "partitionId": 2 }, { - "bannerId": 50, - "bannerName": "周星榜", - "bannerPic": "https://image.pekolive.com/zhouxing-banner-ar.svga", - "skipType": 5, - "skipUri": "http://beta.api.molistar.xyz/molistar/modules/weekStar/newWeekStar.html", - "androidVersion": "1.0.0", - "iosVersion": "1.0.0", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/modules/weekStar/newWeekStar.html", - "showType": 1 - }, - { - "bannerId": 52, - "bannerName": "靓号活动", - "bannerPic": "https://image.pekolive.com/sid.png", + "id": 111, + "code": "BAISHUN", + "name": "HorseRacing2", + "icon": "https://image.pekolive.com/1feaee88d1ab0fc91df72951f2454164.png", + "url": null, + "type": 3, "skipType": 3, - "skipUri": "http://beta.api.molistar.xyz/molistar/modules/superId/index.html", - "androidVersion": "1.0.0", - "iosVersion": "1.0.0", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/modules/superId/index.html", - "showType": 1 + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/horseracing2/1.1.1/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"65f0bce3-56a9-4fb7-a2c5-af297be80d27\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"2\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 1, + "createTime": "2024-06-05 16:20:47", + "updateTime": "2024-07-29 15:35:59", + "partitionId": 2 }, { - "bannerId": 59, - "bannerName": "定制活动", - "bannerPic": "https://image.pekolive.com/dingzhi-banner-ar.svga", - "skipType": 6, - "skipUri": "http://beta.api.molistar.xyz/molistar/activity/customizedGift/index.html", - "androidVersion": "1", - "iosVersion": "1", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/activity/customizedGift/index.html", - "showType": 1 - }, - { - "bannerId": 62, - "bannerName": "元旦", - "bannerPic": "https://image.pekolive.com/yuand-yingyu.png", + "id": 112, + "code": "BAISHUN", + "name": "UEFAClubs", + "icon": "https://image.pekolive.com/77EAFA55-ACD5-4466-826C-85455FBFF6EB.png", + "url": null, + "type": 3, "skipType": 3, - "skipUri": "http://beta.api.molistar.xyz/molistar/activity/2024-newYear/index.html", - "androidVersion": "1", - "iosVersion": "1", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/activity/2024-newYear/index.html", - "showType": 1 + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/uefa-clubs/1.0.1/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"b510a113-ec1f-4669-8713-6ab70b55e995\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"3\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 1, + "createTime": "2024-06-19 14:53:43", + "updateTime": "2024-08-08 17:01:05", + "partitionId": 2 }, { - "bannerId": 64, - "bannerName": "CP活动", - "bannerPic": "https://image.pekolive.com/cp-banner-ar.svga", - "skipType": 4, - "skipUri": "http://beta.api.molistar.xyz/molistar/activity/2024-cpActive/index.html", - "androidVersion": "1", - "iosVersion": "1", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/activity/2024-cpActive/index.html", - "showType": 1 - }, - { - "bannerId": 65, - "bannerName": "年度", - "bannerPic": "https://image.pekolive.com/niandu-ar.png", + "id": 114, + "code": "BAISHUN", + "name": "Crash", + "icon": "https://image.pekolive.com/e98a03b089fabe5e6099efa3cbd9bdc8.png", + "url": null, + "type": 3, "skipType": 3, - "skipUri": "http://beta.api.molistar.xyz/molistar/activity/annualReport/index.html", - "androidVersion": "1", - "iosVersion": "1", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/activity/annualReport/index.html", - "showType": 1 + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/rocket/1.1.8/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"cc4910ab-842b-4dda-977d-c698298ddcf9\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"2\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 1, + "createTime": "2024-07-03 14:55:20", + "updateTime": "2024-11-12 13:50:32", + "partitionId": 2 }, { - "bannerId": 66, - "bannerName": "lucky1122", - "bannerPic": "https://image.pekolive.com/lucky-ar.png", + "id": 116, + "code": "BAISHUN", + "name": "PyramidSlots", + "icon": "https://image.pekolive.com/5496902cbd0bf0a84e27e804140f12df.png", + "url": null, + "type": 3, "skipType": 3, - "skipUri": "http://beta.api.molistar.xyz/molistar/modules/superLucky/index.html", - "androidVersion": "1", - "iosVersion": "1", - "platform": "all", - "skipUrl": "http://beta.api.molistar.xyz/molistar/modules/superLucky/index.html", - "showType": 1 + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/sphinx/1.6.3/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"c252ecde-0d83-4999-90a1-9c0234bb25e0\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"3\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 1, + "createTime": "2024-07-03 14:57:40", + "updateTime": "2024-07-29 17:27:44", + "partitionId": 2 + }, + { + "id": 117, + "code": "BAISHUN", + "name": "GreedyPro", + "icon": "https://image.pekolive.com/7734ac0b8c25f8d6bf2918f7ca16867b.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/greedypro/1.2.1/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"1e738fea-13b9-48e1-bbfd-44f4f7e8f1d7\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"2\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 1, + "createTime": "2024-07-03 14:58:41", + "updateTime": "2024-07-29 17:28:00", + "partitionId": 2 + }, + { + "id": 118, + "code": "BAISHUN", + "name": "Roulette", + "icon": "https://image.pekolive.com/f59abcd97c04325c80996b27138f5277.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/roulette/1.1.9/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"f15fd548-b5ab-45ed-ad90-02494846f63b\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"2\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 1, + "createTime": "2024-07-03 15:00:35", + "updateTime": "2024-07-29 17:27:52", + "partitionId": 2 + }, + { + "id": 119, + "code": "BAISHUN", + "name": "Lucky77", + "icon": "https://image.pekolive.com/Lucky77.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/fruitroulette/1.1.5/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"d6f6a307-4607-4b06-9282-55c7659675bf\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"2\\\",\\\"gsp\\\":301}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-07-29 15:13:36", + "updateTime": "2024-07-29 17:07:38", + "partitionId": 2 + }, + { + "id": 120, + "code": "BAISHUN", + "name": "DragonTiger", + "icon": "https://image.pekolive.com/DragonTiger.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://game-center-test.jieyou.shop/game-packages/common-web/dragon-tiger/1.0.3/web-mobile/index.html", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":9498014797,\\\"code\\\":\\\"f6db6ca3-5bb3-4d04-a09a-529ddf514025\\\",\\\"gameConfig\\\":{\\\"currencyIcon\\\":\\\"https://image.molistar.xyz/ic_gold.png\\\",\\\"sceneMode\\\":1},\\\"gameMode\\\":\\\"2\\\",\\\"gsp\\\":101}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-07-29 15:14:21", + "updateTime": "2024-07-29 16:09:39", + "partitionId": 2 + }, + { + "id": 161, + "code": "LEADERCC", + "name": "Fruit", + "icon": "https://image.pekolive.com/speepyturntable2.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/fruit_party_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"是\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-11-29 15:01:36", + "updateTime": "2024-11-29 15:05:10", + "partitionId": 2 + }, + { + "id": 162, + "code": "LEADERCC", + "name": "Beer Wheel", + "icon": "https://image.pekolive.com/birthdaycake123.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/wheel5_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"是\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-12-25 14:56:53", + "updateTime": "2024-12-25 15:02:57", + "partitionId": 2 + }, + { + "id": 163, + "code": "LEADERCC", + "name": "Rocket Flying", + "icon": "https://image.pekolive.com/Dr.ooocustom.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/crash_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"是\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-12-30 13:48:42", + "updateTime": "2024-12-30 13:52:26", + "partitionId": 2 + }, + { + "id": 164, + "code": "LEADERCC", + "name": "Lucky 77", + "icon": "https://image.pekolive.com/ALZAEIMiV.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/luck77_2_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"是\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-12-30 13:49:36", + "updateTime": "2024-12-30 13:52:27", + "partitionId": 2 + }, + { + "id": 165, + "code": "LEADERCC", + "name": "Dragon and Tiger", + "icon": "https://image.pekolive.com/IbnAl-SheikhII.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/dragon_tiger2_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"是\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-12-30 13:50:30", + "updateTime": "2024-12-30 13:52:28", + "partitionId": 2 + }, + { + "id": 166, + "code": "LEADERCC", + "name": "Turntable", + "icon": "https://image.pekolive.com/ThePharaohs1.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/zhuanpan2_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"是\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-12-30 13:51:23", + "updateTime": "2024-12-30 13:52:29", + "partitionId": 2 + }, + { + "id": 167, + "code": "LEADERCC", + "name": "Multiplayer Fishing", + "icon": "https://image.pekolive.com/LuckyApple10.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/fish4_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "seqNo": 0, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"是\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-12-30 13:52:16", + "updateTime": "2024-12-30 13:52:31", + "partitionId": 2 + }, + { + "id": 86, + "code": "FIND_LOVE", + "name": "寻爱之旅", + "icon": "https://image.pekolive.com/find_love.png", + "url": null, + "type": 3, + "skipType": 1, + "skipContent": null, + "isEnabled": 1, + "isManual": 1, + "startTime": "2024-02-28 00:00:00", + "endTime": "2025-03-01 00:00:00", + "seqNo": 1, + "ruleValue": "{\"PLATFORM\": \"\", \"USER_LEVEL\": \"1\", \"USER_PHONE\": \"否\", \"NOT_CHANNELS\": \"\", \"IOS_LOW_VERSION\": \"\", \"IOS_HIGH_VERSION\": \"\", \"ANDROID_LOW_VERSION\": \"\", \"ANDROID_HIGH_VERSION\": \"\"}", + "showType": 0, + "createTime": "2024-02-20 14:27:15", + "updateTime": "2024-11-29 18:29:31", + "partitionId": 2 + }, + { + "id": 138, + "code": "LEADERCC", + "name": "Lucky Wheel", + "icon": "https://image.pekolive.com/luck5y.png", + "url": null, + "type": 3, + "skipType": 3, + "skipContent": "https://gztest.leadercc.com/molistar_games/wheel_medium/index.html?pl=molistar", + "isEnabled": 1, + "isManual": 1, + "startTime": "2024-10-20 00:00:00", + "endTime": "2025-10-30 00:00:00", + "seqNo": 1, + "ruleValue": "{\"PLATFORM\":\"\",\"IOS_LOW_VERSION\":\"\",\"ANDROID_LOW_VERSION\":\"\",\"USER_PHONE\":\"\",\"RESERVE\":\"{\\\"appChannel\\\":\\\"molistar\\\",\\\"appId\\\":123456,\\\"code\\\":\\\"ef75a0e4-aef8-4117-9da7-8f27a81bbf84\\\"}\",\"NOT_CHANNELS\":\"\",\"ANDROID_HIGH_VERSION\":\"\",\"IOS_HIGH_VERSION\":\"\",\"USER_LEVEL\":\"\"}", + "showType": 2, + "createTime": "2024-10-21 15:21:06", + "updateTime": "2024-10-22 16:05:25", + "partitionId": 2 } ], - "timestamp": 1737603645090 + "timestamp": 1739265586403 }