From 0e3d9695f91fe0f00a7256e365b21ec41b21cfb6 Mon Sep 17 00:00:00 2001 From: max Date: Tue, 4 Jun 2024 10:52:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=85=AC=E8=81=8A-=E5=A4=B4=E6=9D=A1=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/avroom/fragment/GameRoomFragment.kt | 24 ++-- .../fragment/HomePartyRoomFragment.java | 2 + .../app/avroom/fragment/SingleRoomFragment.kt | 2 + .../app/avroom/headline/RoomHeadlineWidget.kt | 105 ++++++++++++++++++ .../PublicChatRoomMessageWidget.kt | 56 ++-------- .../drawable-xxhdpi/room_bg_headline.9.png | Bin 0 -> 7021 bytes .../main/res/layout/fragment_av_room_game.xml | 18 ++- .../main/res/layout/fragment_game_room.xml | 24 +++- .../main/res/layout/fragment_single_room.xml | 18 ++- .../main/res/layout/room_headline_widget.xml | 18 +++ .../room_public_chat_message_widget.xml | 30 ----- 11 files changed, 200 insertions(+), 97 deletions(-) create mode 100644 app/src/main/java/com/chwl/app/avroom/headline/RoomHeadlineWidget.kt create mode 100644 app/src/main/res/drawable-xxhdpi/room_bg_headline.9.png create mode 100644 app/src/main/res/layout/room_headline_widget.xml delete mode 100644 app/src/main/res/layout/room_public_chat_message_widget.xml diff --git a/app/src/main/java/com/chwl/app/avroom/fragment/GameRoomFragment.kt b/app/src/main/java/com/chwl/app/avroom/fragment/GameRoomFragment.kt index 3e53e7e41..d827c8c7e 100644 --- a/app/src/main/java/com/chwl/app/avroom/fragment/GameRoomFragment.kt +++ b/app/src/main/java/com/chwl/app/avroom/fragment/GameRoomFragment.kt @@ -15,6 +15,7 @@ import com.chwl.app.avroom.adapter.GameMiniMicroViewAdapter import com.chwl.app.avroom.adapter.OnMicroItemClickListener import com.chwl.app.avroom.game.GameDelegate import com.chwl.app.avroom.game.OnGameStatusChangeListener +import com.chwl.app.avroom.headline.RoomHeadlineWidget import com.chwl.app.avroom.online.RoomOnlineWidget import com.chwl.app.avroom.presenter.GameRoomPresenter import com.chwl.app.avroom.view.IGameRoomView @@ -85,6 +86,9 @@ class GameRoomFragment : BaseRoomFragment(), gameBinding.roomInfo = AvRoomDataManager.get().mCurrentRoomInfo gameBinding.tvShowMiniMic.setOnClickListener { showMiniMic() } gameBinding.ivShowMic.setOnClickListener { showMic() } + gameBinding.headlineWidget.setOnClickListener { + switchMessageLayoutHeight() + } } @SuppressLint("ClickableViewAccessibility") @@ -122,22 +126,27 @@ class GameRoomFragment : BaseRoomFragment(), } @SuppressLint("ClickableViewAccessibility") - private fun setMessagePagerAutoHeight(recyclerView: RecyclerView){ + private fun setMessagePagerAutoHeight(recyclerView: RecyclerView) { recyclerView.setOnTouchListener(OnTouchListener { v: View?, event: MotionEvent -> if (recyclerView.scrollState == RecyclerView.SCROLL_STATE_IDLE && event.action == MotionEvent.ACTION_UP ) { - val layoutParams: ViewGroup.LayoutParams = messagePager.layoutParams - val bigHeight = ScreenUtil.dip2px(200f) - val littleHeight = ScreenUtil.dip2px(80f) - layoutParams.height = - if (layoutParams.height == littleHeight) bigHeight else littleHeight - messagePager.layoutParams = layoutParams + switchMessageLayoutHeight() } false }) } + private fun switchMessageLayoutHeight() { + val view = gameBinding.layoutMessage + val layoutParams: ViewGroup.LayoutParams = view.layoutParams + val bigHeight = ScreenUtil.dip2px(200f) + val littleHeight = ScreenUtil.dip2px(80f) + layoutParams.height = + if (layoutParams.height == littleHeight) bigHeight else littleHeight + view.layoutParams = layoutParams + } + private fun showMiniMic() { if (isShowMiniMic) return isShowMiniMic = true @@ -248,5 +257,6 @@ class GameRoomFragment : BaseRoomFragment(), override fun initWidget() { super.initWidget() registerWidget(RoomOnlineWidget::class.java.simpleName, gameBinding.onlineWidget) + registerWidget(RoomHeadlineWidget::class.java.simpleName, gameBinding.headlineWidget) } } \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java b/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java index 0e4c2f7b2..45618269d 100644 --- a/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java +++ b/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java @@ -8,6 +8,7 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.databinding.DataBindingUtil; +import com.chwl.app.avroom.headline.RoomHeadlineWidget; import com.chwl.app.avroom.online.RoomOnlineWidget; import com.chwl.app.music.widget.MusicPlayerView; import com.chwl.app.ui.webview.DialogWebViewActivity; @@ -134,6 +135,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment { + when (attachment.second) { + CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB -> { + val data = (attachment as? HeadlineChangedAttachment) ?: return + updateHeadline(data.headlineData) + } + } + } + } + } + } + + private fun initChatRoom(chatRoomClient: ChatRoomClient) { + // 登录流程:在PublicChatRoomMessageWidget中已经执行了 + getCompositeDisposable().add(chatRoomClient.messageObservable.subscribe { + it.forEach { message -> + onReceiveMessage(message) + } + }) + } + + private fun requestCurrentHeadline() { + safeLaunch { + val data = PublicChatModel.getCurrentHeadline() + updateHeadline(data) + } + } + + private fun updateHeadline(data: HeadlineBean?) { + val content = data?.content + if (data?.isValid() == true && !content.isNullOrEmpty()) { + binding.tvHeadlineContent.text = content + this.isVisible = true + } else { + this.isVisible = false + } + } + + override fun onStop() { + super.onStop() + chatRoomClient = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/chwl/app/avroom/public_chat/PublicChatRoomMessageWidget.kt b/app/src/main/java/com/chwl/app/avroom/public_chat/PublicChatRoomMessageWidget.kt index 7eb4d0833..17ae17d59 100644 --- a/app/src/main/java/com/chwl/app/avroom/public_chat/PublicChatRoomMessageWidget.kt +++ b/app/src/main/java/com/chwl/app/avroom/public_chat/PublicChatRoomMessageWidget.kt @@ -2,18 +2,10 @@ package com.chwl.app.avroom.public_chat import android.content.Context import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.core.view.isVisible -import androidx.databinding.DataBindingUtil import com.chwl.app.R -import com.chwl.app.databinding.RoomPublicChatMessageWidgetBinding import com.chwl.app.public_chat.core.ChatRoomClient import com.chwl.app.public_chat.core.ChatRoomClientManager -import com.chwl.core.im.custom.bean.CustomAttachment import com.chwl.core.im.custom.bean.HeadlineChangedAttachment -import com.chwl.core.initial.InitialModel -import com.chwl.core.public_chat_hall.bean.HeadlineBean -import com.chwl.core.public_chat_hall.model.PublicChatModel import com.chwl.core.support.room.FrameLayoutRoomWidget import com.chwl.core.support.room.RoomView import com.chwl.library.utils.SingleToastUtil @@ -24,12 +16,7 @@ import com.netease.nimlib.sdk.msg.model.QueryDirectionEnum class PublicChatRoomMessageWidget : FrameLayoutRoomWidget { - private val binding: RoomPublicChatMessageWidgetBinding = - DataBindingUtil.inflate( - LayoutInflater.from( - context - ), R.layout.room_public_chat_message_widget, this, true - ) + private val messageView: PublicChatMessageView = PublicChatMessageView(context) private var chatRoomClient: ChatRoomClient? = null @@ -48,6 +35,10 @@ class PublicChatRoomMessageWidget : FrameLayoutRoomWidget { defStyleRes: Int ) : super(context, attrs, defStyleAttr, defStyleRes) + init { + addView(messageView, LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)) + } + override fun onStart(roomView: RoomView) { super.onStart(roomView) chatRoomClient = ChatRoomClientManager.getPublicChatClient() @@ -57,25 +48,11 @@ class PublicChatRoomMessageWidget : FrameLayoutRoomWidget { chatRoomClient?.let { initChatRoom(it) } - requestCurrentHeadline() } private fun onReceiveMessage(message: ChatRoomMessage) { if (!filterMessageForMessageList(message)) { - binding.messageView.addMessages(message) - } - if (message.msgType == MsgTypeEnum.custom) { - val attachment: CustomAttachment = (message.attachment as? CustomAttachment) ?: return - when (attachment.first) { - CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED -> { - when (attachment.second) { - CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB -> { - val data = (attachment as? HeadlineChangedAttachment) ?: return - updateHeadline(data.headlineData) - } - } - } - } + messageView.addMessages(message) } } @@ -108,30 +85,13 @@ class PublicChatRoomMessageWidget : FrameLayoutRoomWidget { QueryDirectionEnum.QUERY_OLD, typeEnums ).subscribe({ - binding.messageView.addHistoryMessages(it.reversed()) + messageView.addHistoryMessages(it.reversed()) }, { it.printStackTrace() }) ) } - private fun requestCurrentHeadline() { - safeLaunch { - val data = PublicChatModel.getCurrentHeadline() - updateHeadline(data) - } - } - - private fun updateHeadline(data: HeadlineBean?) { - val content = data?.content - if (data?.isValid() == true && !content.isNullOrEmpty()) { - binding.tvHeadlineContent.text = content - binding.tvHeadlineContent.isVisible = true - } else { - binding.tvHeadlineContent.isVisible = false - } - } - private fun filterMessageForMessageList(message: ChatRoomMessage): Boolean { if (message.msgType == MsgTypeEnum.custom && message.attachment is HeadlineChangedAttachment) { val data = (message.attachment as HeadlineChangedAttachment).headlineData @@ -142,7 +102,7 @@ class PublicChatRoomMessageWidget : FrameLayoutRoomWidget { return false } - fun getMessageView() = binding.messageView + fun getMessageView() = messageView override fun onStop() { super.onStop() diff --git a/app/src/main/res/drawable-xxhdpi/room_bg_headline.9.png b/app/src/main/res/drawable-xxhdpi/room_bg_headline.9.png new file mode 100644 index 0000000000000000000000000000000000000000..93df2c7d7c4656858c235e72aad548b96add727c GIT binary patch literal 7021 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/fragment_av_room_game.xml b/app/src/main/res/layout/fragment_av_room_game.xml index e2dd4485b..2f45e3914 100644 --- a/app/src/main/res/layout/fragment_av_room_game.xml +++ b/app/src/main/res/layout/fragment_av_room_game.xml @@ -191,15 +191,27 @@ android:layout_alignParentStart="true" android:layout_marginTop="@dimen/dp_5" /> - + android:layout_marginBottom="@dimen/dp_10" + android:orientation="vertical"> + + + + + + android:layout_above="@id/layout_message" + android:layout_alignParentStart="true" + android:layout_marginTop="@dimen/dp_5" /> - + android:layout_marginBottom="@dimen/dp_10" + android:orientation="vertical"> + + + + + - + app:layout_constraintTop_toBottomOf="@id/message_indicator"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/room_public_chat_message_widget.xml b/app/src/main/res/layout/room_public_chat_message_widget.xml deleted file mode 100644 index e8086928a..000000000 --- a/app/src/main/res/layout/room_public_chat_message_widget.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file