From cbca06b03d58a1015ef246bd2528e549d5756a77 Mon Sep 17 00:00:00 2001 From: max Date: Thu, 18 Apr 2024 18:48:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AF=BB=E7=88=B1=E9=A3=98=E5=B1=8F?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=B9=E6=A1=88=E8=B0=83=E6=95=B4=EF=BC=88?= =?UTF-8?q?=E6=94=B9=E7=94=A8=E6=96=B0=E9=A3=98=E5=B1=8F=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/avroom/activity/AVRoomActivity.java | 65 ++++++++-------- .../app/avroom/widget/RoomEffectBoxView.kt | 4 +- .../chwl/app/avroom/widget/RoomEffectView.kt | 14 ++-- .../java/com/chwl/app/base/BaseActivity.java | 64 ++++++++-------- ...GlobalNotify.kt => GlobalNotifyManager.kt} | 54 ++++++++++++- .../java/com/chwl/app/notify/NotifyAdapter.kt | 52 +++++++++++++ .../RoomNotify.kt => RoomNotifyManager.kt} | 16 ++-- .../chwl/app/notify/global/NotifyAdapter.kt | 36 --------- .../app/notify/views/FindLoveImageNotify.kt | 59 ++++++++++++++ .../app/notify/views/FindLoveSvgaNotify.kt | 76 +++++++++++++++++++ .../GiftNotifyView.kt => views/GiftNotify.kt} | 6 +- .../TemplateImageNotify.kt} | 33 +------- .../TemplateSvgaNotify.kt} | 6 +- .../TestNotifyView.kt => views/TestNotify.kt} | 6 +- .../chwl/app/support/float/BaseFloatView.kt | 27 +++++++ .../app/support/float/FloatWindowEngine.kt | 1 + .../chwl/app/ui/setting/SettingActivity.kt | 10 +-- .../layout/layout_find_love_notify_svga.xml | 39 ++++++++++ .../activity/TreasureBoxActivity.java | 54 ++++++------- core/src/main/java/com/chwl/core/bean/I18N.kt | 12 +++ .../custom/bean/RoomTemplateNotifyMsgBean.kt | 4 + .../chwl/library/language/LanguageHelper.kt | 23 +++--- 22 files changed, 461 insertions(+), 200 deletions(-) rename app/src/main/java/com/chwl/app/notify/{global/GlobalNotify.kt => GlobalNotifyManager.kt} (70%) create mode 100644 app/src/main/java/com/chwl/app/notify/NotifyAdapter.kt rename app/src/main/java/com/chwl/app/notify/{room/RoomNotify.kt => RoomNotifyManager.kt} (87%) delete mode 100644 app/src/main/java/com/chwl/app/notify/global/NotifyAdapter.kt create mode 100644 app/src/main/java/com/chwl/app/notify/views/FindLoveImageNotify.kt create mode 100644 app/src/main/java/com/chwl/app/notify/views/FindLoveSvgaNotify.kt rename app/src/main/java/com/chwl/app/notify/{global/GiftNotifyView.kt => views/GiftNotify.kt} (97%) rename app/src/main/java/com/chwl/app/notify/{global/TemplateImageNotifyView.kt => views/TemplateImageNotify.kt} (74%) rename app/src/main/java/com/chwl/app/notify/{global/TemplateSvgaNotifyView.kt => views/TemplateSvgaNotify.kt} (95%) rename app/src/main/java/com/chwl/app/notify/{global/TestNotifyView.kt => views/TestNotify.kt} (90%) create mode 100644 app/src/main/res/layout/layout_find_love_notify_svga.xml diff --git a/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java b/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java index 26de30050..1523b1dd8 100644 --- a/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java +++ b/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java @@ -1,7 +1,6 @@ package com.chwl.app.avroom.activity; import static android.view.View.VISIBLE; -import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_BOX; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT_SERVER_ALL; @@ -9,7 +8,6 @@ import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIF import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_SEA; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_SEA_GIFT_SERVER_ALL; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ROOM_PK; -import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_DRAW_GIFT_L5; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_ROOM_PK_NOTIFY; @@ -42,7 +40,7 @@ import androidx.viewpager2.widget.ViewPager2; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.chwl.app.notify.room.RoomNotify; +import com.chwl.app.notify.RoomNotifyManager; import com.chwl.core.monsterhunting.bean.MonsterDataBean; import com.chwl.core.support.room.RoomWidget; import com.netease.nim.uikit.StatusBarUtil; @@ -95,8 +93,6 @@ import com.chwl.core.im.custom.bean.CustomAttachment; import com.chwl.core.im.custom.bean.FairyMsgAttachment; import com.chwl.core.im.custom.bean.NotifyH5Attachment; import com.chwl.core.im.custom.bean.NotifyH5Info; -import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment; -import com.chwl.core.im.custom.bean.RoomBoxPrizeInfo; import com.chwl.core.im.custom.bean.RoomLuckySeaAttachment; import com.chwl.core.im.custom.bean.RoomLuckySeaMsgBean; import com.chwl.core.im.custom.bean.RoomPKAttachment; @@ -153,7 +149,6 @@ import java.lang.ref.WeakReference; import java.net.MalformedURLException; import java.net.URL; import java.util.LinkedList; -import java.util.Objects; import io.reactivex.Single; import io.reactivex.SingleObserver; @@ -222,7 +217,7 @@ public class AVRoomActivity extends BaseMvpActivity() { @Override public Unit invoke(String s) { @@ -1201,33 +1196,33 @@ public class AVRoomActivity extends BaseMvpActivity if (roomEvent == null || AvRoomDataManager.get().isSelfGamePlaying) return@subscribe when (roomEvent.event) { - RoomEvent.BOX_NOTIFY -> addBoxNotify(roomEvent.chatRoomMessage) - RoomEvent.BOX_NOTIFY_SVGA -> addBoxNotify(roomEvent.chatRoomMessage) +// RoomEvent.BOX_NOTIFY -> addBoxNotify(roomEvent.chatRoomMessage) +// RoomEvent.BOX_NOTIFY_SVGA -> addBoxNotify(roomEvent.chatRoomMessage) RoomEvent.DATING_ALL_NOTIFY -> addDatingAllNotify(roomEvent.chatRoomMessage) RoomEvent.RADISH_NOTIFY, RoomEvent.RADISH_NOTIFY_SVGA -> addRadishNotify(roomEvent.chatRoomMessage) diff --git a/app/src/main/java/com/chwl/app/avroom/widget/RoomEffectView.kt b/app/src/main/java/com/chwl/app/avroom/widget/RoomEffectView.kt index 2f6f4d19f..53d52513e 100644 --- a/app/src/main/java/com/chwl/app/avroom/widget/RoomEffectView.kt +++ b/app/src/main/java/com/chwl/app/avroom/widget/RoomEffectView.kt @@ -165,13 +165,13 @@ class RoomEffectView @JvmOverloads constructor( .subscribe { roomEvent: RoomEvent? -> if (roomEvent == null || AvRoomDataManager.get().isSelfGamePlaying) return@subscribe when (roomEvent.event) { - RoomEvent.BOX_NOTIFY -> {//寻爱 - addPlayNotify(RoomEvent.BOX_NOTIFY, roomEvent.chatRoomMessage) - } - - RoomEvent.BOX_NOTIFY_SVGA -> {//寻爱svga - addPlayNotify(RoomEvent.BOX_NOTIFY_SVGA, roomEvent.chatRoomMessage) - } +// RoomEvent.BOX_NOTIFY -> {//寻爱 +// addPlayNotify(RoomEvent.BOX_NOTIFY, roomEvent.chatRoomMessage) +// } +// +// RoomEvent.BOX_NOTIFY_SVGA -> {//寻爱svga +// addPlayNotify(RoomEvent.BOX_NOTIFY_SVGA, roomEvent.chatRoomMessage) +// } RoomEvent.TAROT_NOTIFY, RoomEvent.TAROT_NOTIFY_SVGA -> { diff --git a/app/src/main/java/com/chwl/app/base/BaseActivity.java b/app/src/main/java/com/chwl/app/base/BaseActivity.java index 42409e5d8..acf44b0c6 100644 --- a/app/src/main/java/com/chwl/app/base/BaseActivity.java +++ b/app/src/main/java/com/chwl/app/base/BaseActivity.java @@ -4,10 +4,8 @@ import static com.chwl.core.Constants.DEBUG_MAX_UID; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_HEAD_NOBLE; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_OPENNOBLE; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_RENEWNOBLE; -import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_ALL_SERVICE_GIFT; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_BOX; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY; -import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_HEADER_TYPE_GIFT; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_GIFT_SERVER_ALL; import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_LUCKY_SEA; @@ -50,7 +48,7 @@ import androidx.fragment.app.FragmentManager; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.chwl.app.notify.global.GlobalNotify; +import com.chwl.app.notify.GlobalNotifyManager; import com.chwl.library.language.LanguageHelper; import com.google.gson.Gson; import com.netease.nim.uikit.common.util.log.LogUtil; @@ -179,7 +177,7 @@ public abstract class BaseActivity extends RxAppCompatActivity if (roomEvent == null) return; onReceiveChatRoomEvent(roomEvent); })); - GlobalNotify.INSTANCE.bindActivity(this); + GlobalNotifyManager.INSTANCE.bindActivity(this); } protected void onReceiveChatRoomEvent(RoomEvent roomEvent) { @@ -977,35 +975,35 @@ public abstract class BaseActivity extends RxAppCompatActivity // } // } // break; - case CUSTOM_MSG_BOX://寻爱之旅 - if (!isValid() || getWindow().getDecorView().getVisibility() != View.VISIBLE) return; - if (this instanceof AddUserInfoActivity || this instanceof AVRoomActivity -// || this instanceof TreasureBoxActivity || this instanceof HomeFairyActivity - || UserUtils.getUserInfo() == null) - return; - if (playEffectList == null) { - playEffectList = new LinkedList<>(); - } - RoomBoxPrizeInfo roomBoxPrizeInfo = JSON.parseObject(String.valueOf(baseProtocol.getData()), RoomBoxPrizeInfo.class); - if (roomBoxPrizeInfo == null) return; - if (baseProtocol.getSecond() == CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA) { - PlayEffectInfo playEffectInfo = new PlayEffectInfo(); - playEffectInfo.setSecond(CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA); - playEffectInfo.setRoomBoxPrizeInfo(roomBoxPrizeInfo); - playEffectList.add(playEffectInfo); - if (playEffectDialog != null && playEffectDialog.isShowing()) { - // 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个 - PlayEffectInfo dataBean = playEffectList.peekFirst(); - if (dataBean != null) { - return; - } else { - playEffectDialog.dismiss(); - } - } else { - showPlayEffectDialog(); - } - } - break; +// case CUSTOM_MSG_BOX://寻爱之旅 +// if (!isValid() || getWindow().getDecorView().getVisibility() != View.VISIBLE) return; +// if (this instanceof AddUserInfoActivity || this instanceof AVRoomActivity +//// || this instanceof TreasureBoxActivity || this instanceof HomeFairyActivity +// || UserUtils.getUserInfo() == null) +// return; +// if (playEffectList == null) { +// playEffectList = new LinkedList<>(); +// } +// RoomBoxPrizeInfo roomBoxPrizeInfo = JSON.parseObject(String.valueOf(baseProtocol.getData()), RoomBoxPrizeInfo.class); +// if (roomBoxPrizeInfo == null) return; +// if (baseProtocol.getSecond() == CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA) { +// PlayEffectInfo playEffectInfo = new PlayEffectInfo(); +// playEffectInfo.setSecond(CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA); +// playEffectInfo.setRoomBoxPrizeInfo(roomBoxPrizeInfo); +// playEffectList.add(playEffectInfo); +// if (playEffectDialog != null && playEffectDialog.isShowing()) { +// // 如果当前以及有礼物弹窗在展示,则需要等到他 dismiss 后再显示下一个 +// PlayEffectInfo dataBean = playEffectList.peekFirst(); +// if (dataBean != null) { +// return; +// } else { +// playEffectDialog.dismiss(); +// } +// } else { +// showPlayEffectDialog(); +// } +// } +// break; case CustomAttachment.CUSTOM_MESS_TAROT: if (!isValid() || getWindow().getDecorView().getVisibility() != View.VISIBLE) return; if (this instanceof AddUserInfoActivity || this instanceof AVRoomActivity diff --git a/app/src/main/java/com/chwl/app/notify/global/GlobalNotify.kt b/app/src/main/java/com/chwl/app/notify/GlobalNotifyManager.kt similarity index 70% rename from app/src/main/java/com/chwl/app/notify/global/GlobalNotify.kt rename to app/src/main/java/com/chwl/app/notify/GlobalNotifyManager.kt index 6080e1d95..cbb4ab7ae 100644 --- a/app/src/main/java/com/chwl/app/notify/global/GlobalNotify.kt +++ b/app/src/main/java/com/chwl/app/notify/GlobalNotifyManager.kt @@ -1,4 +1,4 @@ -package com.chwl.app.notify.global +package com.chwl.app.notify import androidx.fragment.app.FragmentActivity import androidx.lifecycle.lifecycleScope @@ -19,13 +19,19 @@ import com.chwl.app.ui.setting.ResetPasswordActivity import com.chwl.core.auth.AuthModel import com.chwl.core.bean.BaseProtocol import com.chwl.core.im.custom.bean.CustomAttachment +import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment +import com.chwl.core.im.custom.bean.RoomBoxPrizeInfo import com.chwl.core.im.custom.bean.RoomTemplateNotifyMsgBean +import com.chwl.core.manager.AvRoomDataManager +import com.chwl.core.manager.IMNetEaseManager import com.chwl.core.noble.bean.AllServiceGiftProtocol import com.example.lib_utils.log.ILog import com.google.gson.Gson import com.netease.nim.uikit.common.util.sys.ScreenUtil import com.netease.nimlib.sdk.NIMSDK import com.netease.nimlib.sdk.Observer +import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder +import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage import com.netease.nimlib.sdk.msg.model.BroadcastMessage import kotlinx.coroutines.cancel @@ -33,7 +39,7 @@ import kotlinx.coroutines.cancel * Created by Max on 2024/3/20 19:30 * Desc: **/ -object GlobalNotify : Observer, ILog { +object GlobalNotifyManager : Observer, ILog { private val blackActivityList = listOf( SplashActivity::class.java, @@ -128,6 +134,7 @@ object GlobalNotify : Observer, ILog { private fun onReceivedNimBroadcastMessage(protocol: BaseProtocol<*>) { if (protocol.first == CustomAttachment.CUSTOM_MSG_TEMPLATE_NOTIFY) { + // 通用飘屏 if (protocol.second == CustomAttachment.CUSTOM_MSG_TEMPLATE_NOTIFY_ALL) { val data = Gson().fromJson( protocol.data.toString(), @@ -136,6 +143,7 @@ object GlobalNotify : Observer, ILog { queue.addLast(data) } } else if (protocol.first == CustomAttachment.CUSTOM_MSG_HEADER_TYPE_GIFT) { + // 礼物 if (protocol.second == CustomAttachment.CUSTOM_MSG_ALL_SERVICE_GIFT) { val data = Gson().fromJson( protocol.data.toString(), @@ -143,6 +151,48 @@ object GlobalNotify : Observer, ILog { ) queue.addLast(data) } + } else if (protocol.first == CustomAttachment.CUSTOM_MSG_BOX) { + // 寻爱之旅 + if (protocol.second == CustomAttachment.CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA) { + handleFindLive(protocol) + } + } + } + + private fun handleFindLive(protocol: BaseProtocol<*>) { + val data = Gson().fromJson( + protocol.data.toString(), + RoomBoxPrizeInfo::class.java + ) + val roomBoxPrizeAttachment = RoomBoxPrizeAttachment( + CustomAttachment.CUSTOM_MSG_BOX, + CustomAttachment.CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA + ) + roomBoxPrizeAttachment.uid = data.uid + roomBoxPrizeAttachment.prizeName = data.prizeName + roomBoxPrizeAttachment.nick = data.nick + roomBoxPrizeAttachment.boxTypeStr = data.boxTypeStr + roomBoxPrizeAttachment.roomUid = data.roomUid + roomBoxPrizeAttachment.prizeNum = data.prizeNum + roomBoxPrizeAttachment.userLevelLimit = data.userLevelLimit + val roomId = AvRoomDataManager.get().roomId + var message: ChatRoomMessage? = null + if (roomId > 0) { + message = ChatRoomMessageBuilder.createChatRoomCustomMessage( + roomId.toString(), + roomBoxPrizeAttachment + ) + } + if (AvRoomDataManager.get().isOpenPureMode) { + // 純凈模式打開後,僅能看跟自己相關的砸蛋消息 + if (message != null && roomBoxPrizeAttachment.uid == AuthModel.get().currentUid) { + IMNetEaseManager.get().addMessages(message) + } + } else { + if (message != null) { + IMNetEaseManager.get().addMessages(message) + } + queue.addLast(roomBoxPrizeAttachment) } } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/notify/NotifyAdapter.kt b/app/src/main/java/com/chwl/app/notify/NotifyAdapter.kt new file mode 100644 index 000000000..23c2d9f73 --- /dev/null +++ b/app/src/main/java/com/chwl/app/notify/NotifyAdapter.kt @@ -0,0 +1,52 @@ +package com.chwl.app.notify + +import android.content.Context +import com.chwl.app.notify.views.FindLoveImageNotify +import com.chwl.app.notify.views.FindLoveSvgaNotify +import com.chwl.app.notify.views.TemplateImageNotify +import com.chwl.app.notify.views.TemplateSvgaNotify +import com.chwl.app.notify.views.GiftNotify +import com.chwl.app.notify.views.TestNotify +import com.chwl.app.support.float.FloatView +import com.chwl.app.support.float.FloatViewAdapter +import com.chwl.app.support.float.FloatWindow +import com.chwl.core.im.custom.bean.CustomAttachment +import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment +import com.chwl.core.im.custom.bean.RoomTemplateNotifyMsgBean +import com.chwl.core.noble.bean.AllServiceGiftProtocol + + +class NotifyAdapter : FloatViewAdapter { + var onShowUserCard: ((String) -> Unit)? = null + + override fun onCreateFloatView(context: Context, item: Any): FloatView? { + if (item is RoomTemplateNotifyMsgBean) { + if (item.resourceType == RoomTemplateNotifyMsgBean.TYPE_IMAGE) { + return TemplateImageNotify(context).apply { + onShowUserCard = this@NotifyAdapter.onShowUserCard + } + } else if (item.resourceType == RoomTemplateNotifyMsgBean.TYPE_SVGA) { + return TemplateSvgaNotify(context).apply { + onShowUserCard = this@NotifyAdapter.onShowUserCard + } + } + } else if (item is RoomBoxPrizeAttachment) { + if (item.second == CustomAttachment.CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY_BY_SVGA) { + return FindLoveSvgaNotify(context) + } else if (item.second == CustomAttachment.CUSTOM_MSG_SUB_BOX_ALL_ROOM_NOTIFY) { + return FindLoveImageNotify(context) + } else { + return null + } + } else if (item is AllServiceGiftProtocol.DataBean) { + return GiftNotify(context) + } else if (item is String) { + return TestNotify(context) + } + return null + } + + override fun onBindFloatView(window: FloatWindow, floatView: FloatView, item: Any) { + floatView.onAttached(window, item) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/notify/room/RoomNotify.kt b/app/src/main/java/com/chwl/app/notify/RoomNotifyManager.kt similarity index 87% rename from app/src/main/java/com/chwl/app/notify/room/RoomNotify.kt rename to app/src/main/java/com/chwl/app/notify/RoomNotifyManager.kt index 764ceb472..4cb6b9292 100644 --- a/app/src/main/java/com/chwl/app/notify/room/RoomNotify.kt +++ b/app/src/main/java/com/chwl/app/notify/RoomNotifyManager.kt @@ -1,4 +1,4 @@ -package com.chwl.app.notify.room +package com.chwl.app.notify import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle @@ -6,12 +6,11 @@ import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope import com.chwl.app.base.TitleBar -import com.chwl.app.notify.global.GlobalNotify -import com.chwl.app.notify.global.NotifyAdapter import com.chwl.app.support.float.DoubleQueue import com.chwl.app.support.float.FloatWindowEngine import com.chwl.app.support.float.SimpleFloatWindow import com.chwl.app.support.float.SimpleFloatQueue +import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment import com.chwl.core.im.custom.bean.RoomTemplateNotifyAttachment import com.chwl.core.manager.AvRoomDataManager import com.chwl.core.manager.IMNetEaseManager @@ -25,12 +24,13 @@ import kotlinx.coroutines.cancel * Created by Max on 2024/3/22 14:47 * Desc: **/ -class RoomNotify(activity: FragmentActivity) : LifecycleEventObserver, ILog { +class RoomNotifyManager(activity: FragmentActivity) : LifecycleEventObserver, ILog { val queue = SimpleFloatQueue() private val compositeDisposable: CompositeDisposable = CompositeDisposable() var onShowUserCard: ((String) -> Unit)? = null + init { bindActivity(activity) } @@ -53,7 +53,7 @@ class RoomNotify(activity: FragmentActivity) : LifecycleEventObserver, ILog { statusHeight = ScreenUtil.getStatusBarHeight(activity) } widget.getView().setPadding(0, statusHeight, 0, 0) - val queue = DoubleQueue(GlobalNotify.queue, queue) + val queue = DoubleQueue(GlobalNotifyManager.queue, queue) val engine = FloatWindowEngine(widget, queue) engine.interceptor = { _ -> if (AvRoomDataManager.get().isSelfGamePlaying) { @@ -105,6 +105,12 @@ class RoomNotify(activity: FragmentActivity) : LifecycleEventObserver, ILog { val data = attachment?.getTemplateMsg() ?: return queue.addLast(data) } + + RoomEvent.BOX_NOTIFY, RoomEvent.BOX_NOTIFY_SVGA -> { + val attachment = + roomEvent.chatRoomMessage.attachment as? RoomBoxPrizeAttachment ?: return + queue.addLast(attachment) + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/notify/global/NotifyAdapter.kt b/app/src/main/java/com/chwl/app/notify/global/NotifyAdapter.kt deleted file mode 100644 index 56d57d517..000000000 --- a/app/src/main/java/com/chwl/app/notify/global/NotifyAdapter.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.chwl.app.notify.global - -import android.content.Context -import com.chwl.app.support.float.FloatView -import com.chwl.app.support.float.FloatViewAdapter -import com.chwl.app.support.float.FloatWindow -import com.chwl.core.im.custom.bean.RoomTemplateNotifyMsgBean -import com.chwl.core.noble.bean.AllServiceGiftProtocol - - -class NotifyAdapter : FloatViewAdapter { - var onShowUserCard: ((String) -> Unit)? = null - - override fun onCreateFloatView(context: Context, item: Any): FloatView? { - if (item is RoomTemplateNotifyMsgBean) { - if (item.resourceType == "IMAGE") { - return TemplateImageNotifyView(context).apply { - onShowUserCard = this@NotifyAdapter.onShowUserCard - } - } else if (item.resourceType == "SVGA") { - return TemplateSvgaNotifyView(context).apply { - onShowUserCard = this@NotifyAdapter.onShowUserCard - } - } - } else if (item is AllServiceGiftProtocol.DataBean) { - return GiftNotifyView(context) - } else if (item is String) { - return TestNotifyView(context) - } - return null - } - - override fun onBindFloatView(window: FloatWindow, floatView: FloatView, item: Any) { - floatView.onAttached(window, item) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/notify/views/FindLoveImageNotify.kt b/app/src/main/java/com/chwl/app/notify/views/FindLoveImageNotify.kt new file mode 100644 index 000000000..a25beab48 --- /dev/null +++ b/app/src/main/java/com/chwl/app/notify/views/FindLoveImageNotify.kt @@ -0,0 +1,59 @@ +package com.chwl.app.notify.views + +import android.content.Context +import android.graphics.Color +import android.text.style.ForegroundColorSpan +import android.view.LayoutInflater +import android.widget.ImageView +import android.widget.TextView +import com.chwl.app.R +import com.chwl.app.support.float.BaseFloatView +import com.chwl.app.utils.SpannableBuilder +import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment +import com.chwl.core.utils.extension.subAndReplaceDot +import com.chwl.library.utils.ResUtil + + +class FindLoveImageNotify(context: Context) : BaseFloatView(context) { + + init { + LayoutInflater.from(context).inflate(R.layout.layout_template_notify_image, this, true) + } + + override fun onBind(item: Any) { + val data = item as? RoomBoxPrizeAttachment + if (data == null) { + requestRemoveSelf() + return + } + val textView = rootView.findViewById(R.id.tv_text) + textView.textSize = 12f + textView.setTextColor(Color.WHITE) + val text = SpannableBuilder() + .append( + ResUtil.getString(R.string.avroom_widget_roomeffectview_08), + ForegroundColorSpan(Color.WHITE) + ) + .append( + data.nick.subAndReplaceDot(8), + ForegroundColorSpan(resources.getColor(R.color.notice_nick)) + ) + .append( + ResUtil.getString(R.string.treasure_in_find_love) + ResUtil.getString( + R.string.avroom_widget_roomeffectview_09 + ), ForegroundColorSpan(Color.WHITE) + ) + .append( + data.prizeName, + ForegroundColorSpan(resources.getColor(R.color.notice_nick)) + ) + if (data.prizeNum > 1) { + text.append("x" + data.prizeNum, ForegroundColorSpan(Color.WHITE)) + } + textView.text = text.build() + val bgView = rootView.findViewById(R.id.iv_bg) + bgView.setImageResource(R.drawable.bg_box_notice) + startEnterAnim() + startDelayRemove() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/notify/views/FindLoveSvgaNotify.kt b/app/src/main/java/com/chwl/app/notify/views/FindLoveSvgaNotify.kt new file mode 100644 index 000000000..e68079e48 --- /dev/null +++ b/app/src/main/java/com/chwl/app/notify/views/FindLoveSvgaNotify.kt @@ -0,0 +1,76 @@ +package com.chwl.app.notify.views + +import android.content.Context +import android.graphics.Color +import android.text.style.ForegroundColorSpan +import android.view.LayoutInflater +import android.widget.TextView +import com.chwl.app.R +import com.chwl.app.common.svga.SimpleSvgaCallback +import com.chwl.app.support.float.BaseFloatView +import com.chwl.app.utils.SpannableBuilder +import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment +import com.chwl.library.utils.ResUtil +import com.chwl.library.utils.StringUtils +import com.opensource.svgaplayer.SVGADrawable +import com.opensource.svgaplayer.SVGAImageView +import com.opensource.svgaplayer.SVGAParser +import com.opensource.svgaplayer.SVGAVideoEntity + + +class FindLoveSvgaNotify(context: Context) : BaseFloatView(context) { + + init { + LayoutInflater.from(context).inflate(R.layout.layout_find_love_notify_svga, this, true) + } + + override fun onBind(item: Any) { + val data = item as? RoomBoxPrizeAttachment + if (data == null) { + requestRemoveSelf() + return + } + val svgaView = rootView.findViewById(R.id.iv_bg) + val textView = rootView.findViewById(R.id.tv_text) + val text = SpannableBuilder() + .append( + ResUtil.getString(R.string.avroom_widget_roomeffectview_011), + ForegroundColorSpan(Color.WHITE) + ) + .append( + StringUtils.abbreviate(data.nick, 8) + " ", + ForegroundColorSpan(resources.getColor(R.color.notice_nick)) + ) + .append( + ResUtil.getString(R.string.treasure_in_find_love) + ResUtil.getString( + R.string.avroom_widget_roomeffectview_012 + ), ForegroundColorSpan(Color.WHITE) + ) + .append( + data.prizeName, + ForegroundColorSpan(resources.getColor(R.color.notice_nick)) + ) + if (data.prizeNum > 1) { + text.append("x" + data.prizeNum, ForegroundColorSpan(Color.WHITE)) + } + svgaView.callback = object : SimpleSvgaCallback() { + override fun onFinished() { + startDelayRemove(0) + } + } + SVGAParser.shareParser() + .decodeFromAssets("svga/box_notify.svga", object : SVGAParser.ParseCompletion { + override fun onComplete(videoItem: SVGAVideoEntity) { + this@FindLoveSvgaNotify.startEnterAnim() + val drawable = SVGADrawable(videoItem) + svgaView.setImageDrawable(drawable) + svgaView.stepToFrame(0, true) + textView.text = text.build() + } + + override fun onError() { + requestRemoveSelf() + } + }, null) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/notify/global/GiftNotifyView.kt b/app/src/main/java/com/chwl/app/notify/views/GiftNotify.kt similarity index 97% rename from app/src/main/java/com/chwl/app/notify/global/GiftNotifyView.kt rename to app/src/main/java/com/chwl/app/notify/views/GiftNotify.kt index e6e2a12d5..80439ca09 100644 --- a/app/src/main/java/com/chwl/app/notify/global/GiftNotifyView.kt +++ b/app/src/main/java/com/chwl/app/notify/views/GiftNotify.kt @@ -1,4 +1,4 @@ -package com.chwl.app.notify.global +package com.chwl.app.notify.views import android.content.Context import android.view.LayoutInflater @@ -18,7 +18,7 @@ import com.example.lib_utils.ktx.getColorById import com.example.lib_utils.ktx.singleClick import com.example.lib_utils.spannable.SpannableTextBuilder -class GiftNotifyView(context: Context) : BaseFloatView(context) { +class GiftNotify(context: Context) : BaseFloatView(context) { private val view = TextView(context) private var binding: LayoutGiftNotifyBinding? = null @@ -53,7 +53,7 @@ class GiftNotifyView(context: Context) : BaseFloatView(context) { } override fun onAnimationEnd(animation: Animation?) { - this@GiftNotifyView.isVisible = false + this@GiftNotify.isVisible = false post { requestRemoveSelf() } diff --git a/app/src/main/java/com/chwl/app/notify/global/TemplateImageNotifyView.kt b/app/src/main/java/com/chwl/app/notify/views/TemplateImageNotify.kt similarity index 74% rename from app/src/main/java/com/chwl/app/notify/global/TemplateImageNotifyView.kt rename to app/src/main/java/com/chwl/app/notify/views/TemplateImageNotify.kt index 54ca9d2c0..5fe64c817 100644 --- a/app/src/main/java/com/chwl/app/notify/global/TemplateImageNotifyView.kt +++ b/app/src/main/java/com/chwl/app/notify/views/TemplateImageNotify.kt @@ -1,12 +1,10 @@ -package com.chwl.app.notify.global +package com.chwl.app.notify.views import android.content.Context import android.graphics.Color import android.graphics.drawable.Drawable import android.view.LayoutInflater import android.view.View -import android.view.animation.Animation -import android.view.animation.AnimationUtils import android.widget.ImageView import android.widget.TextView import com.bumptech.glide.request.target.CustomTarget @@ -20,7 +18,7 @@ import com.chwl.core.im.custom.bean.RoomTemplateNotifyMsgBean import com.netease.nim.uikit.support.glide.GlideApp -class TemplateImageNotifyView(context: Context) : BaseFloatView(context), +class TemplateImageNotify(context: Context) : BaseFloatView(context), TemplateMessageAdapter.Listener { private val templateMessageAdapter = TemplateMessageAdapter(this) @@ -37,7 +35,7 @@ class TemplateImageNotifyView(context: Context) : BaseFloatView(context), requestRemoveSelf() return } - if (data.resourceType != "IMAGE") { + if (data.resourceType != RoomTemplateNotifyMsgBean.TYPE_IMAGE) { requestRemoveSelf() return } @@ -76,7 +74,7 @@ class TemplateImageNotifyView(context: Context) : BaseFloatView(context), rootView.setOnClickListener(clickAction) textView.setOnClickListener(clickAction) } - startDelayRemove(5000) + startDelayRemove() } override fun onLoadCleared(placeholder: Drawable?) { @@ -90,29 +88,6 @@ class TemplateImageNotifyView(context: Context) : BaseFloatView(context), }) } - private fun startEnterAnim() { - val inAnimation = AnimationUtils.loadAnimation(context, R.anim.anim_right_in) - this.startAnimation(inAnimation) - } - - private fun startDelayRemove(delayMillis: Long) { - postDelayed({ - val outAnimation = AnimationUtils.loadAnimation(context, R.anim.anim_left_out) - outAnimation.setAnimationListener(object : Animation.AnimationListener { - override fun onAnimationStart(animation: Animation?) { - } - - override fun onAnimationEnd(animation: Animation?) { - requestRemoveSelf() - } - - override fun onAnimationRepeat(animation: Animation?) { - } - }) - this.startAnimation(outAnimation) - }, delayMillis) - } - override fun onShowUserCard(uid: String) { onShowUserCard?.invoke(uid) } diff --git a/app/src/main/java/com/chwl/app/notify/global/TemplateSvgaNotifyView.kt b/app/src/main/java/com/chwl/app/notify/views/TemplateSvgaNotify.kt similarity index 95% rename from app/src/main/java/com/chwl/app/notify/global/TemplateSvgaNotifyView.kt rename to app/src/main/java/com/chwl/app/notify/views/TemplateSvgaNotify.kt index bc0ab6cba..444dae304 100644 --- a/app/src/main/java/com/chwl/app/notify/global/TemplateSvgaNotifyView.kt +++ b/app/src/main/java/com/chwl/app/notify/views/TemplateSvgaNotify.kt @@ -1,4 +1,4 @@ -package com.chwl.app.notify.global +package com.chwl.app.notify.views import android.content.Context import android.graphics.Color @@ -20,7 +20,7 @@ import com.opensource.svgaplayer.SVGAVideoEntity import java.net.URL -class TemplateSvgaNotifyView(context: Context) : BaseFloatView(context), +class TemplateSvgaNotify(context: Context) : BaseFloatView(context), TemplateMessageAdapter.Listener { private val templateMessageAdapter = TemplateMessageAdapter(this) @@ -40,7 +40,7 @@ class TemplateSvgaNotifyView(context: Context) : BaseFloatView(context), requestRemoveSelf() return } - if (data.resourceType != "SVGA") { + if (data.resourceType != RoomTemplateNotifyMsgBean.TYPE_SVGA) { requestRemoveSelf() return } diff --git a/app/src/main/java/com/chwl/app/notify/global/TestNotifyView.kt b/app/src/main/java/com/chwl/app/notify/views/TestNotify.kt similarity index 90% rename from app/src/main/java/com/chwl/app/notify/global/TestNotifyView.kt rename to app/src/main/java/com/chwl/app/notify/views/TestNotify.kt index 78d9d5203..76691c073 100644 --- a/app/src/main/java/com/chwl/app/notify/global/TestNotifyView.kt +++ b/app/src/main/java/com/chwl/app/notify/views/TestNotify.kt @@ -1,4 +1,4 @@ -package com.chwl.app.notify.global +package com.chwl.app.notify.views import android.content.Context import android.graphics.Color @@ -10,7 +10,7 @@ import androidx.core.view.isVisible import com.chwl.app.R import com.chwl.app.support.float.BaseFloatView -class TestNotifyView(context: Context) : BaseFloatView(context) { +class TestNotify(context: Context) : BaseFloatView(context) { private val view = TextView(context) init { @@ -37,7 +37,7 @@ class TestNotifyView(context: Context) : BaseFloatView(context) { } override fun onAnimationEnd(animation: Animation?) { - this@TestNotifyView.isVisible = false + this@TestNotify.isVisible = false post { requestRemoveSelf() } diff --git a/app/src/main/java/com/chwl/app/support/float/BaseFloatView.kt b/app/src/main/java/com/chwl/app/support/float/BaseFloatView.kt index c01764ca1..3d41f8b51 100644 --- a/app/src/main/java/com/chwl/app/support/float/BaseFloatView.kt +++ b/app/src/main/java/com/chwl/app/support/float/BaseFloatView.kt @@ -3,8 +3,11 @@ package com.chwl.app.support.float import android.content.Context import android.util.AttributeSet import android.view.View +import android.view.animation.Animation +import android.view.animation.AnimationUtils import androidx.annotation.CallSuper import androidx.constraintlayout.widget.ConstraintLayout +import com.chwl.app.R abstract class BaseFloatView : ConstraintLayout, FloatView { @@ -52,4 +55,28 @@ abstract class BaseFloatView : ConstraintLayout, FloatView { override fun getView(): View { return this } + + + protected open fun startEnterAnim() { + val inAnimation = AnimationUtils.loadAnimation(context, R.anim.anim_right_in) + this.startAnimation(inAnimation) + } + + protected open fun startDelayRemove(delayMillis: Long = 5000) { + postDelayed({ + val outAnimation = AnimationUtils.loadAnimation(context, R.anim.anim_left_out) + outAnimation.setAnimationListener(object : Animation.AnimationListener { + override fun onAnimationStart(animation: Animation?) { + } + + override fun onAnimationEnd(animation: Animation?) { + requestRemoveSelf() + } + + override fun onAnimationRepeat(animation: Animation?) { + } + }) + this.startAnimation(outAnimation) + }, delayMillis) + } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/support/float/FloatWindowEngine.kt b/app/src/main/java/com/chwl/app/support/float/FloatWindowEngine.kt index 28df7c394..9e5b393fc 100644 --- a/app/src/main/java/com/chwl/app/support/float/FloatWindowEngine.kt +++ b/app/src/main/java/com/chwl/app/support/float/FloatWindowEngine.kt @@ -75,6 +75,7 @@ open class FloatWindowEngine( protected open fun handleFirstItem() { if (window.canShow()) { + logD("handleFirstItem() pollFirst") queue.pollFirst()?.let { window.onShow(it.data) } diff --git a/app/src/main/java/com/chwl/app/ui/setting/SettingActivity.kt b/app/src/main/java/com/chwl/app/ui/setting/SettingActivity.kt index c6028bd95..d47be7706 100644 --- a/app/src/main/java/com/chwl/app/ui/setting/SettingActivity.kt +++ b/app/src/main/java/com/chwl/app/ui/setting/SettingActivity.kt @@ -12,8 +12,8 @@ import com.chwl.app.UIHelper import com.chwl.app.base.BaseViewBindingActivity import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener import com.chwl.app.databinding.ActivitySettingBinding -import com.chwl.app.notify.global.GlobalNotify -import com.chwl.app.notify.room.RoomNotify +import com.chwl.app.notify.GlobalNotifyManager +import com.chwl.app.notify.RoomNotifyManager import com.chwl.app.ui.im.avtivity.BlackListManageActivity import com.chwl.app.ui.language.LanguageActivity import com.chwl.app.ui.login.BindPhoneActivity @@ -50,14 +50,14 @@ import kotlin.random.Random class SettingActivity : BaseViewBindingActivity(), View.OnClickListener, ILog { - private var notify: RoomNotify? = null + private var notify: RoomNotifyManager? = null override fun init() { EventBus.getDefault().register(this) initWhiteTitleBar(ResUtil.getString(R.string.me_setting)) initView() initListener() - notify = RoomNotify(this) + notify = RoomNotifyManager(this) notify?.start() } @@ -221,7 +221,7 @@ class SettingActivity : BaseViewBindingActivity(), View. // CommonWebViewActivity.start(this,"https://api.molistar.xyz/molistar/activity/2024-invitationFission/index.html") // startActivity(Intent(this, LanguageActivity::class.java)) - GlobalNotify.queue.addLast("G#" + i) + GlobalNotifyManager.queue.addLast("G#" + i) notify?.queue?.addLast("R#" + i) i++ debugTemplate() diff --git a/app/src/main/res/layout/layout_find_love_notify_svga.xml b/app/src/main/res/layout/layout_find_love_notify_svga.xml new file mode 100644 index 000000000..0512e8281 --- /dev/null +++ b/app/src/main/res/layout/layout_find_love_notify_svga.xml @@ -0,0 +1,39 @@ + + + + + + + diff --git a/app/src/module_treasure_box/java/com/chwl/app/treasure_box/activity/TreasureBoxActivity.java b/app/src/module_treasure_box/java/com/chwl/app/treasure_box/activity/TreasureBoxActivity.java index 7bdfc3764..7013dbffd 100644 --- a/app/src/module_treasure_box/java/com/chwl/app/treasure_box/activity/TreasureBoxActivity.java +++ b/app/src/module_treasure_box/java/com/chwl/app/treasure_box/activity/TreasureBoxActivity.java @@ -461,33 +461,33 @@ public class TreasureBoxActivity extends BaseBindingActivity(), Serializable { content } } + + fun setZH(value: String) { + put(LanguageHelper.ZH, value) + } + + fun setEN(value: String) { + put(LanguageHelper.EN, value) + } + + fun setAR(value: String) { + put(LanguageHelper.AR, value) + } } \ No newline at end of file diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/RoomTemplateNotifyMsgBean.kt b/core/src/main/java/com/chwl/core/im/custom/bean/RoomTemplateNotifyMsgBean.kt index 56a072d47..615641408 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/RoomTemplateNotifyMsgBean.kt +++ b/core/src/main/java/com/chwl/core/im/custom/bean/RoomTemplateNotifyMsgBean.kt @@ -1,6 +1,10 @@ package com.chwl.core.im.custom.bean class RoomTemplateNotifyMsgBean : TemplateMessage() { + companion object { + const val TYPE_SVGA = "SVGA" + const val TYPE_IMAGE = "IMAGE" + } var fontSize: Int? = null // IMAGE、SVGA diff --git a/library/src/main/java/com/chwl/library/language/LanguageHelper.kt b/library/src/main/java/com/chwl/library/language/LanguageHelper.kt index 0c0dc984d..a44a7fd7b 100644 --- a/library/src/main/java/com/chwl/library/language/LanguageHelper.kt +++ b/library/src/main/java/com/chwl/library/language/LanguageHelper.kt @@ -14,6 +14,9 @@ import java.util.* * Desc:语言助手 */ object LanguageHelper : ILog { + const val ZH = "zh" + const val EN = "en" + const val AR = "ar" private var currentLocale: Locale? = null @@ -51,13 +54,13 @@ object LanguageHelper : ILog { fun getCurrentLanguageType(): String { val locale = getCurrentLanguage() return if (locale == Locale.ENGLISH) { - "en" + EN } else if (locale == Locale.TRADITIONAL_CHINESE) { - "zh" + ZH } else if (locale.language.equals("ar", true)) { - return "ar" + return AR } else { - "en" + EN } } @@ -67,15 +70,15 @@ object LanguageHelper : ILog { */ fun getLocaleByLanguageType(language: String?): Locale? { return when (language) { - "zh" -> { + ZH -> { Locale.TRADITIONAL_CHINESE } - "en" -> { + EN -> { Locale.ENGLISH } - "ar" -> { + AR -> { Locale("ar") } @@ -172,15 +175,15 @@ object LanguageHelper : ILog { filePrinter = true ) when (locale.language) { - "ar" -> { + AR -> { return Locale("ar") } - "en" -> { + EN -> { return Locale.ENGLISH } - "zh" -> { + ZH -> { return Locale.TRADITIONAL_CHINESE }