honghengqiang 3 years ago
parent
commit
266ba3305c

+ 1 - 1
baseswago/src/main/java/com/swago/baseswago/cusview/LiangView.kt

@@ -37,7 +37,7 @@ class LiangView : FrameLayout {
                 tvID.text = id
                 tvID.setTextColor(ContextCompat.getColor(AppContext.getContext(), R.color._ffffff))
                 tvID.setBackgroundResource(R.mipmap.icon_liang_bg)
-                tvID.setPadding(DpPxUtil.dip2px(25f),0,DpPxUtil.dip2px(8f),0)
+                tvID.setPadding(DpPxUtil.dip2px(25f),0,DpPxUtil.dip2px(8f),DpPxUtil.dip2px(2f))
             }else{
                 tvID.text = AppContext.getContext().resources.getString(R.string.id_x).format(id)
                 tvID.setTextColor(ContextCompat.getColor(AppContext.getContext(), R.color._868686))

+ 48 - 13
baseswago/src/main/java/com/swago/baseswago/model/RedEnvelope.kt

@@ -1,19 +1,54 @@
 package com.swago.baseswago.model
 
+import com.swago.baseswago.R
+import com.swago.baseswago.im.IRoomChat
+import com.swago.baseswago.im.RoomMsgType.SYSTEM_MESSAGE
+import com.swago.baseswago.util.AppContext
+
 /**
  *@date 2022/4/11 22:04
  *description:
  */
-data class RedEnvelope(
-    val id:String="",
-    var coldTime:Int,//抢红包倒计时
-    var receiveTime:Int,//红包结束倒计时
-    val anchorId:String="",
-    val anchorName:String = "",
-    val group_id:String="",
-    val roomId:String="",
-    val senderAvatar:String="",
-    val senderLevel:Int,
-    val senderName:String="",//发红包用户昵称
-    val userId:String="",//发红包的用户id
-)
+class RedEnvelope :IRoomChat{
+    val id: String = ""
+    var coldTime: Int=0//抢红包倒计时
+    var receiveTime: Int=0//红包结束倒计时
+    val anchorId: String = ""
+    val anchorAvatar:String = ""
+    val anchorName: String = ""
+    val group_id: String = ""
+    val roomId: String = ""
+    val senderAvatar: String = ""
+    val senderLevel: Int=0
+    @JvmField
+    val senderName: String = ""//发红包用户昵称
+    val userId: String = ""//发红包的用户id
+
+    override fun getSenderName(): String {
+        return senderName
+    }
+
+    override fun getMsgContent(): String {
+        return "${senderName}: ${AppContext.getContext().resources.getString(R.string.prepare_to_open_red_envelope)}"
+    }
+
+    override fun getMsgType(): Int {
+        return SYSTEM_MESSAGE
+    }
+
+    override fun getUserLevel(): Int {
+        return senderLevel
+    }
+
+    override fun getIsBenefit(): Int {
+        return 0
+    }
+
+    override fun getSenderId(): String {
+        return userId
+    }
+
+    override fun getIsPrettyId(): Boolean {
+        return false
+    }
+}

BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_liang_bg.9.png


+ 2 - 0
baseswago/src/main/res/values-in/strings.xml

@@ -169,5 +169,7 @@
     <string name="go_to">Pergi ke</string>
     <string name="who_send_red_envelope_broadcast">Baru saja mengirim Angpao di kamar %s, apakah Anda ingin pergi ke ruang siaran langsung untuk mengambil Angpao?</string>
     <string name="already_receive_red_envelope">你已经抢过该红包了</string>
+    <string name="cancel">Membatalkan</string>
+    <string name="not_enough_coin">金币余额不足</string>
 
 </resources>

+ 22 - 9
baseswago/src/main/res/values-zh/strings.xml

@@ -141,14 +141,27 @@
     <string name="app_not_install">应用未安装</string>
     <string name="follow_anchor">刚刚关注了主播,再也不用担心错过直播啦~</string>
     <string name="big_prize">真是幸运!%s送出%s赢得了%s倍奖励,恭喜他!</string>
-
     <string name="update_now">立即更新</string>
-    <string name="exchange_coin">金币兑换</string>
-    <string name="exchange">兑换</string>
-    <string name="coin_balance">金币余额</string>
-    <string name="diamond_balance">钻石余额</string>
-    <string name="self">自己</string>
-    <string name="other">其他人</string>
-    <string name="exchange_success">兑换成功</string>
-    <string name="input_user_id">请输入用户ID</string>
+
+    <string name="special">特殊</string>
+    <string name="not_less_coin">不少于%s金币</string>
+    <string name="at_last_red_num">最少%s个红包</string>
+    <string name="broadcast_red_envelope">当红包总金额>=%s时,还会全平台广播通知哦</string>
+    <string name="receive_red_envelope_coin">收下红包</string>
+    <string name="go_to_send">去送礼物</string>
+    <string name="congratulation">恭喜你!抢到了</string>
+    <string name="sorry_fail_to_get">很遗憾,你来晚了一步,\n红包被抢完了</string>
+    <string name="from_who_red_envelope">来自%s的红包</string>
+    <string name="konw">知道了</string>
+    <string name="red_envelope_rule">幸运红包规则</string>
+    <string name="red_envelope">幸运红包</string>
+    <string name="coin_sum">金币总数</string>
+    <string name="red_envelope_num">红包个数</string>
+    <string name="send_red_envelope">发红包</string>
+    <string name="go_to">前往</string>
+    <string name="who_send_red_envelope_broadcast">刚刚在%s的房间发了一个红包,是否要前往该直播间抢红包</string>
+    <string name="already_receive_red_envelope">你已经抢过该红包了</string>
+    <string name="cancel">取消</string>
+    <string name="not_enough_coin">金币余额不足</string>
+
 </resources>

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

@@ -186,6 +186,10 @@
     <string name="go_to">Go to</string>
     <string name="who_send_red_envelope_broadcast">Just sent a red envelope in %s\'s room, do you want to go to the live broadcast room to grab the red envelope?</string>
     <string name="already_receive_red_envelope">你已经抢过该红包了</string>
+    <string name="cancel">Cancel</string>
+    <string name="not_enough_coin">金币余额不足</string>
+    <string name="prepare_to_open_red_envelope">我发出了一个幸运红包,30s后开抢,请大家提前做好准备</string>
+    <string name="thank_for_boss">我抢到了%s金币,谢谢老板%s!</string>
 
 
 </resources>

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

@@ -240,6 +240,9 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
                         openGiftDialog( iRoomInfo.getAnchorName(), iRoomInfo.getAnchorId())
                     }
                 }
+                this.addSenderMsgToRoomChatList = {
+                    addChatMsgToRv(it)
+                }
             }.show(childFragmentManager,"RedEnvelopResultDialog")
         }
     }

+ 0 - 8
room/src/main/java/com/swago/room/hongbao/RedEnvelopBroadcastDialog.kt

@@ -22,8 +22,6 @@ class RedEnvelopBroadcastDialog : BaseXDFragment<DialogRedEnvelopeBroadcastBindi
         setDimAmount(0f)
     }
 
-    private var job:Job? = null
-
     var gotoTargetRoom:((anchorId:String)->Unit)?=null
 
     companion object{
@@ -59,11 +57,6 @@ class RedEnvelopBroadcastDialog : BaseXDFragment<DialogRedEnvelopeBroadcastBindi
             })
         }
 
-        job = lifecycleScope.launch(Dispatchers.Main){
-            delay(30000)
-            dismissAllowingStateLoss()
-        }
-
         binding.tvCancel.setOnClickListener(object:NoDoubleClickListener(){
             override fun onClick() {
                 dismissAllowingStateLoss()
@@ -74,7 +67,6 @@ class RedEnvelopBroadcastDialog : BaseXDFragment<DialogRedEnvelopeBroadcastBindi
     override fun initLiveData() {}
 
     override fun onDestroyView() {
-        job?.cancel()
         super.onDestroyView()
     }
 }

+ 53 - 3
room/src/main/java/com/swago/room/hongbao/RedEnvelopResultDialog.kt

@@ -3,16 +3,23 @@ package com.swago.room.hongbao
 import android.os.Bundle
 import android.view.Gravity
 import android.view.View
-import androidx.fragment.app.activityViewModels
 import androidx.fragment.app.viewModels
+import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.dialog.BaseXDFragment
+import com.swago.baseswago.im.ImConstant
+import com.swago.baseswago.model.im.RoomChatMsgBean
 import com.swago.baseswago.util.AppContext
+import com.swago.baseswago.util.LogUtil
 import com.swago.baseswago.util.NoDoubleClickListener
+import com.swago.baseswago.util.UserInfo
 import com.swago.loadUrl
 import com.swago.room.R
 import com.swago.room.databinding.DialogRedEnvelopeResultBinding
+import com.swago.room.util.IMSender
 import com.swago.room.vm.RoomOtherVm
-import com.swago.room.vm.RoomVm
+import com.tencent.imsdk.v2.V2TIMMessage
+import com.tencent.imsdk.v2.V2TIMValueCallback
+import org.json.JSONObject
 
 class RedEnvelopResultDialog : BaseXDFragment<DialogRedEnvelopeResultBinding>() {
 
@@ -23,8 +30,10 @@ class RedEnvelopResultDialog : BaseXDFragment<DialogRedEnvelopeResultBinding>()
     }
 
     private val roomOtherVm by viewModels<RoomOtherVm>()
+    private var name = ""
 
     var openGiftDialog:(()->Unit)? = null
+    var addSenderMsgToRoomChatList: ((roomChatMsgBean: RoomChatMsgBean) -> Unit)? = null
 
     companion object {
         fun newInstance(id: String, avatar: String, name: String): RedEnvelopResultDialog {
@@ -42,7 +51,7 @@ class RedEnvelopResultDialog : BaseXDFragment<DialogRedEnvelopeResultBinding>()
         arguments?.let {
             val id = it.getString("id", "")
             val avatar = it.getString("avatar", "")
-            val name = it.getString("name", "")
+            name = it.getString("name", "")
             context?.let {
                 binding.ivAvatar.loadUrl(it, avatar)
             }
@@ -73,6 +82,47 @@ class RedEnvelopResultDialog : BaseXDFragment<DialogRedEnvelopeResultBinding>()
             binding.tvCongratulation.text = AppContext.getContext().resources.getString(R.string.congratulation)
             binding.tvReceive.text = AppContext.getContext().resources.getString(R.string.receive_red_envelope_coin)
             binding.tvToSendGift.visibility = View.VISIBLE
+            val content =  AppContext.getContext().resources.getString(R.string.thank_for_boss).format(it,name)
+            UserInfo.getUserInfo()?.let {
+                val roomChatMsgBean = RoomChatMsgBean()
+                roomChatMsgBean.content = content
+                roomChatMsgBean.sendName = it.user_name
+                roomChatMsgBean.senderId = it.id
+                roomChatMsgBean.senderLevel = it.user_wealth_level.toInt()
+                roomChatMsgBean.isBenefit = it.is_benefit
+                roomChatMsgBean.isPrettyAccount = it.is_pretty_account
+                addSenderMsgToRoomChatList?.invoke(roomChatMsgBean)
+
+                val jsonObject = JSONObject()
+                jsonObject.put("senderId", it.id)
+                jsonObject.put("sendName", it.user_name)
+                jsonObject.put("senderLevel", it.user_wealth_level)
+                jsonObject.put("isBenefit", it.is_benefit)
+                jsonObject.put("content", content)
+                jsonObject.put("isPrettyAccount", it.is_pretty_account)
+
+                val jsonObjectType = JSONObject()
+                jsonObjectType.put("type", ImConstant.room_chat_text)
+                jsonObjectType.put("data", jsonObject)
+                val toByteArray = jsonObjectType.toString().encodeToByteArray()
+                SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
+                    IMSender.sendGroupCusMessage(
+                        toByteArray,
+                        iRoomInfo.getRoomGroupId(),
+                        object : V2TIMValueCallback<V2TIMMessage> {
+                            override fun onSuccess(t: V2TIMMessage?) {
+                                LogUtil.d("发送成功")
+                            }
+
+                            override fun onError(code: Int, desc: String?) {}
+
+                        },
+                        V2TIMMessage.V2TIM_PRIORITY_NORMAL
+                    )
+                }
+
+            }
+
         }
 
 

+ 84 - 0
room/src/main/java/com/swago/room/hongbao/RedEnvelopeBroadcastView.kt

@@ -0,0 +1,84 @@
+package com.swago.room.hongbao
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.FrameLayout
+import com.swago.baseswago.baseroom.IRoomActiveListener
+import com.swago.baseswago.baseroom.IRoomInfo
+import com.swago.baseswago.baseroom.RoomTimer
+import com.swago.baseswago.baseroom.SwagoRoomManager
+import com.swago.baseswago.model.RedEnvelope
+import com.swago.baseswago.util.NoDoubleClickListener
+import com.swago.loadUrl
+import com.swago.room.databinding.ViewRedBroadCastBinding
+
+class RedEnvelopeBroadcastView : FrameLayout, IRoomActiveListener,RoomTimer.TimeTickListener {
+
+    private var binding:ViewRedBroadCastBinding? = null
+
+    var openRedEnvelopeBroadcastDialog:((redEnvelope:RedEnvelope)->Unit)? = null
+
+    private var envelope:RedEnvelope? = null
+
+    private var count = 0
+
+    constructor(context: Context) : this(context, null)
+    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
+    constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(
+        context,
+        attrs,
+        defStyle
+    ) {
+        initView()
+    }
+
+    private fun initView() {
+        RoomTimer.timeTickList.add(this)
+        SwagoRoomManager.addListener(this)
+        binding = ViewRedBroadCastBinding.inflate(LayoutInflater.from(context), this, true)
+        binding?.root?.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                envelope?.let {
+                    openRedEnvelopeBroadcastDialog?.invoke(it)
+                }
+            }
+        })
+    }
+
+    fun setRedEnvelopeBroadcastData(redEnvelope:RedEnvelope){
+        count = 10
+        envelope = redEnvelope
+        binding?.ivAvatar?.loadUrl(context,redEnvelope.anchorAvatar)
+        visibility = View.VISIBLE
+    }
+
+    override fun changeRoom(iRoomInfo: IRoomInfo) {
+    }
+
+    override fun leaveRoom(iRoomInfo: IRoomInfo) {
+        envelope = null
+        visibility = View.GONE
+    }
+
+    override fun joinedRoom(iRoomInfo: IRoomInfo) {
+    }
+
+    override fun endRoom(iRoomInfo: IRoomInfo?) {
+    }
+
+    override fun closeRoomed() {
+        envelope = null
+        RoomTimer.timeTickList.remove(this)
+        SwagoRoomManager.removeListener(this)
+        visibility = View.GONE
+    }
+
+    override fun onTimeCount(time: Int) {
+        count--
+        if (count==0){
+            visibility = View.GONE
+        }
+    }
+}

+ 10 - 7
room/src/main/java/com/swago/room/user/UserRoomFragment.kt

@@ -124,15 +124,18 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
         }
 
         msgVm.openRedEnvelopPortal = {
-            RedEnvelopBroadcastDialog.newInstance(it.senderName,it.senderAvatar,it.anchorId,it.anchorName).apply {
-                this.gotoTargetRoom = {
-                    activity?.let {  activity ->
-                        if (activity is UserRoomActivity){
-                            activity.gotoTargetRoom(it)
+            binding.ivRedEnvelopeBroadcastView.setRedEnvelopeBroadcastData(it)
+            binding.ivRedEnvelopeBroadcastView.openRedEnvelopeBroadcastDialog = {
+                RedEnvelopBroadcastDialog.newInstance(it.senderName,it.senderAvatar,it.anchorId,it.anchorName).apply {
+                    this.gotoTargetRoom = {
+                        activity?.let {  activity ->
+                            if (activity is UserRoomActivity){
+                                activity.gotoTargetRoom(it)
+                            }
                         }
                     }
-                }
-            }.show(childFragmentManager,"RedEnvelopBroadcastDialog")
+                }.show(childFragmentManager,"RedEnvelopBroadcastDialog")
+            }
         }
 
         userVm.followStateLiveData.observe(this) {

+ 1 - 0
room/src/main/java/com/swago/room/vm/MsgVm.kt

@@ -192,6 +192,7 @@ class MsgVm (application: Application) : AbsMsgVm(application){
                 it.data?.let {
                     if (it.roomId == iRoomInfo.getRoomId()) {
                         newRedEnvelopeCome?.invoke(it)
+                        newChatMsgFun?.invoke(it)
                     }
                 }
             }

+ 5 - 0
room/src/main/res/drawable/shape_ff56b7_bottom_right_20.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#ff56b7"/>
+    <corners android:bottomRightRadius="20dp"/>
+</shape>

+ 3 - 3
room/src/main/res/layout/dialog_red_envelope.xml

@@ -176,7 +176,7 @@
             android:layout_marginTop="20dp"
             android:textSize="12dp"
             android:textColor="#FFD917"
-            android:text="金币总数不满足要求"
+            android:text="@string/not_enough_coin"
             android:visibility="gone"
             tools:visibility="visible"
             android:drawableStart="@mipmap/icon_red_envelope_not_enough_coin"
@@ -194,8 +194,8 @@
             android:background="@drawable/shape_80ff56b7_all_38"
             android:layout_marginStart="15dp"
             android:layout_marginEnd="15dp"
-            app:layout_constraintTop_toBottomOf="@+id/etInputCount"
-            android:layout_marginTop="85dp"
+            app:layout_constraintTop_toBottomOf="@+id/tvNotEnough"
+            android:layout_marginTop="15dp"
             app:layout_constraintBottom_toBottomOf="parent"
             android:layout_width="match_parent"
             android:layout_height="44dp"/>

+ 1 - 1
room/src/main/res/layout/dialog_red_envelope_broadcast.xml

@@ -91,7 +91,7 @@
                 android:textSize="14dp"
                 android:textColor="#fff"
                 android:text="@string/go_to"
-                android:background="#FF56B7"
+                android:background="@drawable/shape_ff56b7_bottom_right_20"
                 app:layout_constraintTop_toBottomOf="@+id/tvDescribe"
                 android:layout_marginTop="20dp"
                 app:layout_constraintStart_toEndOf="@+id/tvCancel"

+ 6 - 6
room/src/main/res/layout/dialog_red_envelope_result.xml

@@ -23,14 +23,14 @@
             android:id="@+id/ivAvatar"
             app:layout_constraintTop_toTopOf="@+id/ivBg"
             app:layout_constraintStart_toStartOf="@+id/ivBg"
-            app:layout_constraintEnd_toEndOf="@+id/ivBg"
             android:layout_marginTop="30dp"
+            android:layout_marginStart="50dp"
             android:layout_width="30dp"
             android:layout_height="30dp"/>
 
         <com.swago.baseswago.cusview.MediumTextView
             android:id="@+id/tvFromUser"
-            app:layout_constraintTop_toBottomOf="@+id/ivAvatar"
+            app:layout_constraintTop_toTopOf="@+id/ivAvatar"
             app:layout_constraintStart_toStartOf="@+id/ivBg"
             app:layout_constraintEnd_toEndOf="@+id/ivBg"
             android:textSize="12dp"
@@ -39,7 +39,7 @@
             tools:text="@string/from_who_red_envelope"
             android:layout_width="0dp"
             android:gravity="center"
-            android:layout_marginStart="70dp"
+            android:layout_marginStart="90dp"
             android:layout_marginEnd="70dp"
             android:layout_height="wrap_content"/>
 
@@ -54,8 +54,8 @@
             tools:text="@string/congratulation"
             android:layout_width="0dp"
             android:gravity="center"
-            android:layout_marginStart="70dp"
-            android:layout_marginEnd="70dp"
+            android:layout_marginStart="40dp"
+            android:layout_marginEnd="40dp"
             android:layout_height="wrap_content"/>
 
 
@@ -81,7 +81,7 @@
 
         <com.swago.baseswago.cusview.BoldTextView
             android:id="@+id/tvReceive"
-            android:textSize="16dp"
+            android:textSize="12dp"
             android:textColor="#6f2d11"
             tools:text="@string/receive_red_envelope_coin"
             android:gravity="center"

+ 13 - 0
room/src/main/res/layout/fragment_base_com.xml

@@ -45,6 +45,19 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
+    <com.swago.room.hongbao.RedEnvelopeBroadcastView
+        android:id="@+id/ivRedEnvelopeBroadcastView"
+        android:layout_marginBottom="120dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginEnd="10dp"
+        tools:visibility="visible"
+        android:visibility="gone"
+        android:src="@mipmap/icon_benefit"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
 
     <ImageView
         android:id="@+id/ivBenefit"

+ 34 - 0
room/src/main/res/layout/view_red_broad_cast.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="48dp"
+    android:layout_height="48dp"
+    android:id="@+id/root"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <ImageView
+        android:src="@mipmap/bg_red_envelope_broadcast"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+
+    <com.swago.baseswago.cusview.BoldTextView
+        android:text="Go"
+        android:textColor="#fff"
+        android:textSize="10dp"
+        android:layout_marginBottom="4dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <de.hdodenhof.circleimageview.CircleImageView
+        android:id="@+id/ivAvatar"
+        android:layout_marginTop="6dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_width="22dp"
+        android:layout_height="22dp"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

BIN
room/src/main/res/mipmap-xxhdpi/bg_red_envelope_broadcast.png