Bläddra i källkod

feat:chat 默认背景图

tongmengxiao 10 månader sedan
förälder
incheckning
2b30c79159

+ 6 - 0
baseswago/src/main/java/com/swago/baseswago/PersonDataDFragment.kt

@@ -43,6 +43,8 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
     var nickIcon = ""
     var nickIcon = ""
     var account = ""
     var account = ""
     var roomId:String = ""
     var roomId:String = ""
+    var chatSpecial:String = ""
+    var headSpecial:String = ""
     var isAnchor = false //是否是主播点击了资料卡
     var isAnchor = false //是否是主播点击了资料卡
     var isAdmin = false
     var isAdmin = false
     var isMessage = false
     var isMessage = false
@@ -128,6 +130,8 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
                                     ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
                                     ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
                                         .withString("account",account)
                                         .withString("account",account)
                                         .withString("chatName",binding.tvName.text.toString())
                                         .withString("chatName",binding.tvName.text.toString())
+                                        .withString("chatSpecial" , chatSpecial)
+                                        .withString("headSpecial" , headSpecial).navigation()
                                     dismissAllowingStateLoss()
                                     dismissAllowingStateLoss()
                                 } else {
                                 } else {
                                     Toast.makeText(
                                     Toast.makeText(
@@ -175,6 +179,8 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
             nickName = it.user_name
             nickName = it.user_name
             nickIcon = it.user_head_img_url
             nickIcon = it.user_head_img_url
             account = it.user_account
             account = it.user_account
+            chatSpecial = it.android_chat_special
+            headSpecial = it.android_head_special
             binding.ivVip.visibility = if (it.is_benefit==1) View.VISIBLE else View.GONE
             binding.ivVip.visibility = if (it.is_benefit==1) View.VISIBLE else View.GONE
             Glide.with(this).load(it.user_head_img_url)
             Glide.with(this).load(it.user_head_img_url)
                 .placeholder(R.mipmap.default_avatar)
                 .placeholder(R.mipmap.default_avatar)

+ 5 - 0
baseswago/src/main/java/com/swago/baseswago/util/DianJiuUtil.kt

@@ -7,6 +7,7 @@ import android.graphics.BitmapFactory
 import android.graphics.NinePatch
 import android.graphics.NinePatch
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.NinePatchDrawable
 import android.graphics.drawable.NinePatchDrawable
+import android.text.TextUtils
 import com.bumptech.glide.Glide
 import com.bumptech.glide.Glide
 import com.bumptech.glide.request.target.CustomTarget
 import com.bumptech.glide.request.target.CustomTarget
 import com.bumptech.glide.request.transition.Transition
 import com.bumptech.glide.request.transition.Transition
@@ -19,6 +20,10 @@ object DianJiuUtil {
             if (context.isDestroyed)
             if (context.isDestroyed)
                 return
                 return
         }
         }
+        if (TextUtils.isEmpty(url)){
+            drawable.invoke(null)
+            return
+        }
         Glide.with(context)
         Glide.with(context)
             .asFile()
             .asFile()
             .load(url)
             .load(url)

+ 29 - 25
home/src/main/java/com/swago/home/ChatDetailActivity.kt

@@ -47,8 +47,18 @@ class ChatDetailActivity  : BaseXActivity<ActivityChatDetailBinding>() {
     @JvmField
     @JvmField
     var chatName: String = ""
     var chatName: String = ""
 
 
+    @Autowired(required = true)
+    @JvmField
+    var chatSpecial: String = ""
+
+    @Autowired(required = true)
+    @JvmField
+    var headSpecial: String = ""
+
     private var svgaParser:SVGAParser? = null
     private var svgaParser:SVGAParser? = null
 
 
+    private var messageRecyclerView:MessageLayout?=null
+
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         super.onCreate(savedInstanceState)
         ImmersionBar.with(this)
         ImmersionBar.with(this)
@@ -66,9 +76,6 @@ class ChatDetailActivity  : BaseXActivity<ActivityChatDetailBinding>() {
         ARouter.getInstance().inject(this)
         ARouter.getInstance().inject(this)
 
 
         svgaParser = SVGAParser(this)
         svgaParser = SVGAParser(this)
-        if (!TextUtils.isEmpty(account)){
-            userVm.getOtherUserInfo(account,"")
-        }
         val chatInfo = ChatInfo()
         val chatInfo = ChatInfo()
         chatInfo.type = V2TIMConversation.V2TIM_C2C
         chatInfo.type = V2TIMConversation.V2TIM_C2C
         chatInfo.chatName = chatName
         chatInfo.chatName = chatName
@@ -92,7 +99,7 @@ class ChatDetailActivity  : BaseXActivity<ActivityChatDetailBinding>() {
             SpUtil.putString("user_info", Gson().toJson(it))
             SpUtil.putString("user_info", Gson().toJson(it))
         }
         }
 
 
-        val messageRecyclerView = binding.chatLayout.messageLayout
+        messageRecyclerView = binding.chatLayout.messageLayout
         messageRecyclerView?.setOnItemClickListener(object : MessageLayout.OnItemLongClickListener{
         messageRecyclerView?.setOnItemClickListener(object : MessageLayout.OnItemLongClickListener{
             override fun onMessageLongClick(view: View?, position: Int, messageInfo: MessageInfo?) {
             override fun onMessageLongClick(view: View?, position: Int, messageInfo: MessageInfo?) {
 
 
@@ -130,32 +137,27 @@ class ChatDetailActivity  : BaseXActivity<ActivityChatDetailBinding>() {
                     }
                     }
                 }
                 }
             }
             }
-        } else {
-            messageRecyclerView?.rightBubble = ContextCompat.getDrawable(this ,R.mipmap.bg_chat_purple)
         }
         }
 
 
-        userVm.otherUserInfoLiveData.observe(this){
-            if (TextUtils.isEmpty(it.android_chat_special)){
-                messageRecyclerView?.leftBubble = ContextCompat.getDrawable(this ,R.mipmap.bg_chat_white)
-            } else {
-                DianJiuUtil.loadDian9Tu(this ,it.android_chat_special ){ drawable ->
-                    drawable?.let {
-                        messageRecyclerView?.leftBubble = it
-                    }
+        if (!TextUtils.isEmpty(chatSpecial)){
+            DianJiuUtil.loadDian9Tu(this ,chatSpecial){ drawable ->
+                drawable?.let {
+                    messageRecyclerView?.leftBubble = it
                 }
                 }
             }
             }
-            if (!TextUtils.isEmpty(it.android_head_special)){
-                svgaParser?.decodeFromURL(URL(it.android_head_special), object :SVGAParser.ParseCompletion{
-                    override fun onComplete(videoItem: SVGAVideoEntity) {
-                        val drawable = SVGADrawable(videoItem)
-                        messageRecyclerView?.leftSvgaAvatar = drawable
-                    }
+        }
 
 
-                    override fun onError() {
+        if (!TextUtils.isEmpty(headSpecial)){
+            svgaParser?.decodeFromURL(URL(headSpecial), object :SVGAParser.ParseCompletion{
+                override fun onComplete(videoItem: SVGAVideoEntity) {
+                    val drawable = SVGADrawable(videoItem)
+                    messageRecyclerView?.leftSvgaAvatar = drawable
+                }
 
 
-                    }
-                })
-            }
+                override fun onError() {
+
+                }
+            })
         }
         }
 
 
         if (UserInfo.getUserInfo() != null && !TextUtils.isEmpty(UserInfo.getUserInfo()?.android_head_special)){
         if (UserInfo.getUserInfo() != null && !TextUtils.isEmpty(UserInfo.getUserInfo()?.android_head_special)){
@@ -184,7 +186,9 @@ class ChatDetailActivity  : BaseXActivity<ActivityChatDetailBinding>() {
 
 
     override fun onDestroy() {
     override fun onDestroy() {
         super.onDestroy()
         super.onDestroy()
-
+        messageRecyclerView?.leftSvgaAvatar = null
+        messageRecyclerView?.rightSvgaAvatar = null
+        messageRecyclerView = null
     }
     }
 
 
 }
 }

+ 14 - 5
home/src/main/java/com/swago/home/MessageFragment.kt

@@ -17,14 +17,16 @@ import com.swago.home.official.OfficialMessageActivity
 import com.swago.home.official.OfficialVm
 import com.swago.home.official.OfficialVm
 import com.tencent.imsdk.v2.V2TIMConversation
 import com.tencent.imsdk.v2.V2TIMConversation
 import com.tencent.qcloud.tim.uikit.modules.conversation.ConversationManagerKit
 import com.tencent.qcloud.tim.uikit.modules.conversation.ConversationManagerKit
+import com.tencent.qcloud.tim.uikit.modules.conversation.base.ConversationInfo
 
 
 /**
 /**
  *@date 2021/8/21 12:43
  *@date 2021/8/21 12:43
  *description:
  *description:
  */
  */
 class MessageFragment : BaseXFragment<FragmentMessageBinding>() {
 class MessageFragment : BaseXFragment<FragmentMessageBinding>() {
-
+    private val userVm by viewModels<UserVm>()
     private val officialVm by activityViewModels<OfficialVm>()
     private val officialVm by activityViewModels<OfficialVm>()
+    private var conversationInfo: ConversationInfo ?= null
 
 
     override fun loadData() {
     override fun loadData() {
         officialVm.getMsgSum()
         officialVm.getMsgSum()
@@ -37,10 +39,8 @@ class MessageFragment : BaseXFragment<FragmentMessageBinding>() {
                 .permissions(Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA)
                 .permissions(Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA)
                 .request { allGranted, grantedList, deniedList ->
                 .request { allGranted, grantedList, deniedList ->
                     if (allGranted) {
                     if (allGranted) {
-                        ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
-                            .withInt("type", V2TIMConversation.V2TIM_C2C)
-                            .withString("account", messageInfo.id)
-                            .withString("chatName", messageInfo.title).navigation()
+                        conversationInfo = messageInfo
+                        userVm.getOtherUserInfo(messageInfo.id,"")
                     } else {
                     } else {
                         Toast.makeText(
                         Toast.makeText(
                             AppContext.getContext(),
                             AppContext.getContext(),
@@ -86,5 +86,14 @@ class MessageFragment : BaseXFragment<FragmentMessageBinding>() {
                 binding.tvCount.visibility = View.VISIBLE
                 binding.tvCount.visibility = View.VISIBLE
             }
             }
         }
         }
+        userVm.otherUserInfoLiveData.observe(this){
+            ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
+                .withInt("type", V2TIMConversation.V2TIM_C2C)
+                .withString("account", conversationInfo?.id)
+                .withString("chatName", conversationInfo?.title)
+                .withString("chatSpecial" , it.android_chat_special)
+                .withString("headSpecial" , it.android_head_special)
+                .navigation()
+        }
     }
     }
 }
 }

+ 21 - 0
room/src/main/java/com/swago/room/base/BaseComFragment.kt

@@ -92,9 +92,13 @@ import com.swago.room.widget.ComHeaderView
 import com.swago.room.wishgift.SetWishGiftsDialog
 import com.swago.room.wishgift.SetWishGiftsDialog
 import com.swago.room.wishgift.WishGiftOnUserDialog
 import com.swago.room.wishgift.WishGiftOnUserDialog
 import io.agora.rtc.IRtcEngineEventHandler
 import io.agora.rtc.IRtcEngineEventHandler
+import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.cancel
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.isActive
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.launch
 import java.io.File
 import java.io.File
 import java.lang.Exception
 import java.lang.Exception
@@ -141,6 +145,8 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     abstract val iFooter: IFooter
     abstract val iFooter: IFooter
 
 
     var roomConfig: RoomConfig? = null
     var roomConfig: RoomConfig? = null
+    val job = Job()
+    val coroutineScope = CoroutineScope(Dispatchers.Main + job)
 
 
     var dialog: SendMsgDialog? = null
     var dialog: SendMsgDialog? = null
     var gameDialog: GamePlayDialog? = null
     var gameDialog: GamePlayDialog? = null
@@ -238,6 +244,19 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
                 roomOtherVm.userDianZan()
                 roomOtherVm.userDianZan()
             }
             }
         }
         }
+
+        coroutineScope.launch {
+            while (isActive){
+                SwagoRoomManager.iRoomInfo?.let {
+                    if (it.getRoomType() == RoomType.AUDIO.type){
+                        LogUtil.d("coroutineScope BaseComFragment ")
+                        roomVm.getAudioList(it.getAnchorId(), 2)
+                    }
+                }
+                delay(10000)
+            }
+        }
+
     }
     }
 
 
     private fun initAudioRvList() {
     private fun initAudioRvList() {
@@ -725,12 +744,14 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         dialog = null
         dialog = null
         gameDialog = null
         gameDialog = null
         msgListDialog = null
         msgListDialog = null
+        job.cancel()
         PKStateManager.removePKListener(this)
         PKStateManager.removePKListener(this)
         activity?.let {
         activity?.let {
             KeyboardUtils.unregisterSoftInputChangedListener(it.window)
             KeyboardUtils.unregisterSoftInputChangedListener(it.window)
         }
         }
         AudioRoomManager.removeListener(this)
         AudioRoomManager.removeListener(this)
         SwagoRoomManager.removeListener(this)
         SwagoRoomManager.removeListener(this)
+        job.cancel()
     }
     }
 
 
     fun openSendMessageDialog(atName: String = "") {
     fun openSendMessageDialog(atName: String = "") {

+ 16 - 4
room/src/main/java/com/swago/room/dialog/MessageListDialog.kt

@@ -3,8 +3,10 @@ package com.swago.room.dialog
 import android.os.Bundle
 import android.os.Bundle
 import android.view.Gravity
 import android.view.Gravity
 import android.view.View
 import android.view.View
+import androidx.fragment.app.viewModels
 import com.alibaba.android.arouter.launcher.ARouter
 import com.alibaba.android.arouter.launcher.ARouter
 import com.gyf.immersionbar.ImmersionBar
 import com.gyf.immersionbar.ImmersionBar
+import com.swago.baseswago.UserVm
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.dialog.BaseXDFragment
 import com.swago.baseswago.dialog.BaseXDFragment
 import com.swago.baseswago.util.NoDoubleClickListener
 import com.swago.baseswago.util.NoDoubleClickListener
@@ -12,12 +14,15 @@ import com.swago.room.databinding.DialogMessageListBinding
 import com.tencent.imsdk.v2.V2TIMConversation
 import com.tencent.imsdk.v2.V2TIMConversation
 import com.tencent.qcloud.tim.uikit.modules.conversation.ConversationLayout
 import com.tencent.qcloud.tim.uikit.modules.conversation.ConversationLayout
 import com.tencent.qcloud.tim.uikit.modules.conversation.ConversationManagerKit
 import com.tencent.qcloud.tim.uikit.modules.conversation.ConversationManagerKit
+import com.tencent.qcloud.tim.uikit.modules.conversation.base.ConversationInfo
 
 
 /**
 /**
  *@date 2021/11/11 21:03
  *@date 2021/11/11 21:03
  *description:
  *description:
  */
  */
 class MessageListDialog : BaseXDFragment<DialogMessageListBinding>() {
 class MessageListDialog : BaseXDFragment<DialogMessageListBinding>() {
+    private val userVm by viewModels<UserVm>()
+    private var conversationInfo: ConversationInfo?= null
 
 
     init {
     init {
         setDimAmount(0f)
         setDimAmount(0f)
@@ -38,16 +43,23 @@ class MessageListDialog : BaseXDFragment<DialogMessageListBinding>() {
         activity?.let {
         activity?.let {
             binding.conversation.initDefault()
             binding.conversation.initDefault()
             binding.conversation.conversationList.setOnItemClickListener { view, position, messageInfo ->
             binding.conversation.conversationList.setOnItemClickListener { view, position, messageInfo ->
-                ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
-                    .withInt("type", V2TIMConversation.V2TIM_C2C)
-                    .withString("account",messageInfo.id)
-                    .withString("chatName",messageInfo.title).navigation()
+                conversationInfo = messageInfo
+                userVm.getOtherUserInfo(messageInfo.id,"")
             }
             }
 
 
             binding.conversation.conversationList.setOnItemLongClickListener { view, position, messageInfo ->
             binding.conversation.conversationList.setOnItemLongClickListener { view, position, messageInfo ->
 
 
             }
             }
 
 
+            userVm.otherUserInfoLiveData.observe(it){
+                ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
+                    .withInt("type", V2TIMConversation.V2TIM_C2C)
+                    .withString("account", conversationInfo?.id)
+                    .withString("chatName", conversationInfo?.title)
+                    .withString("chatSpecial" , it.android_chat_special)
+                    .withString("headSpecial" , it.android_head_special)
+                    .navigation()
+            }
         }
         }
     }
     }
 
 

+ 5 - 8
room/src/main/java/com/swago/room/game/GamePlayDialog.kt

@@ -58,8 +58,6 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(), IRoomActiveListe
 
 
     private val imGroupNewMsgListener = IMGroupNewMsgListener()
     private val imGroupNewMsgListener = IMGroupNewMsgListener()
 
 
-    private var isFullScreen = false
-
     var dialogDisFun: (() -> Unit)? = null
     var dialogDisFun: (() -> Unit)? = null
     var openMessageFun:(()->Unit)? = null
     var openMessageFun:(()->Unit)? = null
     companion object {
     companion object {
@@ -108,7 +106,6 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(), IRoomActiveListe
             if (url.startsWith("file://")){
             if (url.startsWith("file://")){
                 localGameUrl = url
                 localGameUrl = url
             }
             }
-            isFullScreen = it.getBoolean(FULL_GAME,false)
             activity?.let { activity ->
             activity?.let { activity ->
 
 
                 webView = WebView(activity)
                 webView = WebView(activity)
@@ -181,11 +178,11 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(), IRoomActiveListe
                     params.width = DpPxUtil.getScreenWidth()
                     params.width = DpPxUtil.getScreenWidth()
                     params.bottomToBottom = R.id.cl
                     params.bottomToBottom = R.id.cl
 
 
-                    if (isFullScreen){
-                        params.height = DpPxUtil.getScreenHeight()
-                    }else{
-                        params.height = (params.width * 276 / 360f).toInt()
-                    }
+//                    if (isFullScreen){
+                    params.height = DpPxUtil.getScreenHeight()
+//                    }else{
+//                        params.height = (params.width * 276 / 360f).toInt()
+//                    }
                     this.layoutParams = params
                     this.layoutParams = params
                     binding.cl.addView(this)
                     binding.cl.addView(this)
                     binding.cl.addView(imageView)
                     binding.cl.addView(imageView)

+ 8 - 2
tuikit/src/main/java/com/tencent/qcloud/tim/uikit/modules/chat/layout/message/holder/MessageContentHolder.java

@@ -125,22 +125,28 @@ public abstract class MessageContentHolder extends MessageEmptyHolder {
             if (properties.getRightBubble() != null && properties.getRightBubble().getConstantState() != null) {
             if (properties.getRightBubble() != null && properties.getRightBubble().getConstantState() != null) {
                 msgContentFrame.setBackground(properties.getRightBubble().getConstantState().newDrawable());
                 msgContentFrame.setBackground(properties.getRightBubble().getConstantState().newDrawable());
             } else {
             } else {
-                msgContentFrame.setBackgroundResource(R.drawable.chat_bubble_myself);
+                msgContentFrame.setBackgroundResource(R.drawable.bg_chat_purple);
             }
             }
             if (properties.getRightSvgaAvatar() != null){
             if (properties.getRightSvgaAvatar() != null){
+                rightSvgaImage.setVisibility(View.VISIBLE);
                 rightSvgaImage.setImageDrawable(properties.getRightSvgaAvatar());
                 rightSvgaImage.setImageDrawable(properties.getRightSvgaAvatar());
                 rightSvgaImage.startAnimation();
                 rightSvgaImage.startAnimation();
+            }else {
+                rightSvgaImage.setVisibility(View.INVISIBLE);
             }
             }
         } else {
         } else {
             if (properties.getLeftBubble() != null && properties.getLeftBubble().getConstantState() != null) {
             if (properties.getLeftBubble() != null && properties.getLeftBubble().getConstantState() != null) {
                 msgContentFrame.setBackground(properties.getLeftBubble().getConstantState().newDrawable());
                 msgContentFrame.setBackground(properties.getLeftBubble().getConstantState().newDrawable());
                 msgContentFrame.setLayoutParams(msgContentFrame.getLayoutParams());
                 msgContentFrame.setLayoutParams(msgContentFrame.getLayoutParams());
             } else {
             } else {
-                msgContentFrame.setBackgroundResource(R.drawable.chat_other_bg);
+                msgContentFrame.setBackgroundResource(R.drawable.bg_chat_white);
             }
             }
             if (properties.getLeftSvgaAvatar() != null){
             if (properties.getLeftSvgaAvatar() != null){
+                leftSvgaImage.setVisibility(View.VISIBLE);
                 leftSvgaImage.setImageDrawable(properties.getLeftSvgaAvatar());
                 leftSvgaImage.setImageDrawable(properties.getLeftSvgaAvatar());
                 leftSvgaImage.startAnimation();
                 leftSvgaImage.startAnimation();
+            } else {
+                leftSvgaImage.setVisibility(View.INVISIBLE);
             }
             }
         }
         }
 
 

+ 0 - 0
baseswago/src/main/res/mipmap-xxhdpi/bg_chat_purple.9.png → tuikit/src/main/res/drawable-xxhdpi/bg_chat_purple.9.png


+ 0 - 0
baseswago/src/main/res/mipmap-xxhdpi/bg_chat_white.9.png → tuikit/src/main/res/drawable-xxhdpi/bg_chat_white.9.png