Browse Source

1.添加直播中玩游戏功能

王鹏鹏 2 years ago
parent
commit
f7bd869a63

+ 3 - 0
.idea/misc.xml

@@ -542,13 +542,16 @@
         <entry key="..\:/workspace/hcp-pads/home/src/main/res/layout/layout_play_with_blue_porpoise.xml" value="0.1" />
         <entry key="..\:/workspace/hcp-pads/home/src/main/res/layout/layout_professional_evaluation.xml" value="0.1" />
         <entry key="..\:/workspace/hcp-pads/imageselector/src/main/res/layout/activity_preview.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/bg_btn_game_task.xml" value="0.151" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/bg_item_live_broadcast.xml" value="0.1715" />
+        <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/bg_live_room.xml" value="0.151" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/bg_live_status.xml" value="0.1715" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/selector_live_tab_center.xml" value="0.1715" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/drawable/selector_live_tab_left.xml" value="0.1715" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/activity_live_broadcast.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/activity_live_broadcast_list.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/activity_video_player.xml" value="0.23697916666666666" />
+        <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/dialog_game_tasks.xml" value="0.536" />
         <entry key="..\:/workspace/hcp-pads/livebroadcast/src/main/res/layout/item_live_broadcast.xml" value="0.6" />
         <entry key="..\:/workspace/hcp-pads/login/src/main/res/layout/activity_login.xml" value="0.23697916666666666" />
         <entry key="..\:/workspace/hcp-pads/personalcenter/src/main/res/drawable/bg_setting_center.xml" value="0.1715" />

+ 2 - 1
baselib/src/main/java/com/yingyangfly/baselib/bean/MessageBean.kt

@@ -4,5 +4,6 @@ package com.yingyangfly.baselib.bean
  * IM自定义消息关键字
  */
 data class MessageBean(
-    val businessID: String
+    val businessID: String,
+    val data: String
 )

+ 4 - 1
home/src/main/java/com/yingyangfly/home/activity/HomeActivity.kt

@@ -739,7 +739,10 @@ class HomeActivity : BaseMVVMActivity<ActivityHomeBinding, HomeViewModel>(),
             customData: ByteArray?
         ) {
             super.onRecvC2CCustomMessage(msgID, sender, customData)
-            Log.e("wpp", "自定义消息-------------------------" + customData.toString())
+            if (customData != null) {
+                val data = String(customData)
+                Log.e("wpp", "自定义消息-------------------------" + data)
+            }
         }
 
         override fun onRecvC2CTextMessage(msgID: String?, sender: V2TIMUserInfo?, text: String?) {

+ 25 - 2
livebroadcast/src/main/java/com/yingyang/livebroadcast/activity/detail/LiveBroadcastActivity.kt

@@ -15,6 +15,7 @@ import com.tencent.live2.V2TXLivePlayerObserver
 import com.tencent.live2.impl.V2TXLivePlayerImpl
 import com.yingyang.livebroadcast.R
 import com.yingyang.livebroadcast.databinding.ActivityLiveBroadcastBinding
+import com.yingyang.livebroadcast.dialog.GameTasksDialog
 import com.yingyangfly.baselib.bean.MessageBean
 import com.yingyangfly.baselib.ext.getEndAnimation
 import com.yingyangfly.baselib.ext.getScaleAnimation
@@ -23,6 +24,8 @@ import com.yingyangfly.baselib.ext.toast
 import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
 import com.yingyangfly.baselib.router.RouterUrlCommon
 import com.yingyangfly.baselib.utils.GsonUtil
+import com.yingyangfly.baselib.utils.LiveEventBusUtil
+import com.yingyangfly.baselib.utils.RxBusCodes
 import com.yingyangfly.baselib.utils.User
 import java.util.*
 
@@ -189,11 +192,31 @@ class LiveBroadcastActivity :
                 val data = String(customData)
                 if (TextUtils.isEmpty(data).not()) {
                     val messageBean = GsonUtil.GsonToBean(data, MessageBean::class.java)
-                    if (messageBean != null && TextUtils.equals("live", messageBean.businessID)) {
-                        binding.statusLayout.show(true)
+                    if (messageBean != null) {
+                        if (TextUtils.equals("live", messageBean.businessID)) {
+                            binding.statusLayout.show(true)
+                        } else if (TextUtils.equals("gameDetails", messageBean.businessID)) {
+                            if (TextUtils.isEmpty(messageBean.data).not()) {
+                                showGameTasksDialog(messageBean.data)
+                            }
+                        }
                     }
                 }
             }
         }
     }
+
+    /**
+     * 专属游戏弹框
+     */
+    private fun showGameTasksDialog(data: String) {
+        val gameTasksDialog = GameTasksDialog()
+        gameTasksDialog.setData(data)
+        gameTasksDialog.show(supportFragmentManager, "gameTasksDialog")
+    }
+
+    override fun onResume() {
+        super.onResume()
+        LiveEventBusUtil.send(RxBusCodes.FINISHGAME, "")
+    }
 }

+ 110 - 0
livebroadcast/src/main/java/com/yingyang/livebroadcast/dialog/GameTasksDialog.kt

@@ -0,0 +1,110 @@
+package com.yingyang.livebroadcast.dialog
+
+import android.os.Bundle
+import android.text.TextUtils
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.appcompat.widget.AppCompatButton
+import androidx.appcompat.widget.AppCompatImageView
+import androidx.appcompat.widget.AppCompatTextView
+import androidx.fragment.app.DialogFragment
+import com.alibaba.android.arouter.launcher.ARouter
+import com.gyf.immersionbar.BarHide
+import com.gyf.immersionbar.ktx.immersionBar
+import com.yingyang.livebroadcast.R
+import com.yingyang.livebroadcast.entity.GameTasksBean
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+import com.yingyangfly.baselib.router.RouterUrlCommon
+import com.yingyangfly.baselib.utils.GlideImgUtil
+import com.yingyangfly.baselib.utils.GsonUtil
+import com.yingyangfly.baselib.utils.ViewTool
+import gorden.rxbus2.RxBus
+
+/**
+ * 专属游戏任务弹窗
+ */
+class GameTasksDialog : DialogFragment() {
+
+    private var gameImage: AppCompatImageView? = null
+    private var tvGameType: AppCompatTextView? = null
+    private var tvGameName: AppCompatTextView? = null
+    private var tvGameDifficulty: AppCompatTextView? = null
+    private var btnGame: AppCompatButton? = null
+    private var gameData: String = ""
+
+    fun setData(data: String) {
+        gameData = data
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        isCancelable = false
+        dialog?.setCanceledOnTouchOutside(true)
+    }
+
+    override fun onStart() {
+        super.onStart()
+        RxBus.get().register(this)
+        dialog?.window?.setLayout(
+            ViewGroup.LayoutParams.MATCH_PARENT,
+            ViewGroup.LayoutParams.MATCH_PARENT
+        )
+        dialog?.window?.setBackgroundDrawableResource(R.color.transparent)
+    }
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        immersionBar {
+            hideBar(BarHide.FLAG_HIDE_BAR)
+            navigationBarColor(R.color.transparent)
+        }
+        val rootView = ViewTool.inflateFragmentPixels(
+            activity, R.layout.dialog_game_tasks, container, 1194, 834
+        )
+        findId(rootView)
+        init()
+        return rootView
+    }
+
+    private fun findId(rootView: View) {
+        gameImage = rootView.findViewById(R.id.gameImage)
+        tvGameType = rootView.findViewById(R.id.tvGameType)
+        tvGameName = rootView.findViewById(R.id.tvGameName)
+        tvGameDifficulty = rootView.findViewById(R.id.tvGameDifficulty)
+        btnGame = rootView.findViewById(R.id.btnGame)
+    }
+
+    private fun init() {
+        if (TextUtils.isEmpty(gameData).not()) {
+            val gameTasksBean = GsonUtil.GsonToBean(gameData, GameTasksBean::class.java)
+            if (gameTasksBean != null) {
+                GlideImgUtil.loadImg(requireActivity(), gameTasksBean.gameCoverImage, gameImage!!)
+                tvGameType!!.text = gameTasksBean.gameType
+                tvGameName!!.text = gameTasksBean.gameName
+                tvGameDifficulty!!.text = gameTasksBean.gameDifficulty
+            }
+            btnGame!!.setOnSingleClickListener {
+                if (gameTasksBean != null) {
+                    ARouter.getInstance().build(RouterUrlCommon.playGame)
+                        .withString("gameCode", gameTasksBean.gameCode)
+                        .withString("playClass", gameTasksBean.playClass)
+                        .withString("url", gameTasksBean.url)
+                        .withString("gameType", gameTasksBean.gameType)
+                        .withString("gameTotalScore", gameTasksBean.gameTotalScore)
+                        .withString("gameInbetweenImage", gameTasksBean.gameInbetweenImage)
+                        .withString("gameBackgroundImage", gameTasksBean.gameBackgroundImage)
+                        .withString("gameShortDesn", gameTasksBean.gameShortDesn)
+                        .withString("fullFlag", gameTasksBean.fullFlag)
+                        .withString("frameImg", gameTasksBean.frameImg)
+                        .withTransition(R.anim.leftin, R.anim.leftout)
+                        .navigation(requireActivity())
+                }
+            }
+        }
+    }
+
+}

+ 17 - 0
livebroadcast/src/main/java/com/yingyang/livebroadcast/entity/GameTasksBean.kt

@@ -0,0 +1,17 @@
+package com.yingyang.livebroadcast.entity
+
+class GameTasksBean {
+    val gameName: String = ""
+    val gameCoverImage: String = ""//游戏图片
+    val gameDifficulty: String = ""//游戏难度
+    var gameCode: String? = ""
+    var playClass: String? = ""
+    var url: String? = ""//游戏链接
+    var gameType: String? = ""//
+    var gameTotalScore: String? = ""//
+    var gameInbetweenImage: String? = ""//
+    var gameBackgroundImage: String? = ""//
+    var gameShortDesn: String? = ""//
+    var fullFlag: String? = ""//是否全屏
+    var frameImg: String? = ""
+}

+ 18 - 0
livebroadcast/src/main/res/drawable/bg_btn_game_task.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="ResourceName">
+
+    <item>
+        <shape android:shape="rectangle">
+            <corners android:radius="@dimen/divider_13px" />
+            <gradient
+                android:angle="180"
+                android:endColor="@color/color_FFF4174FF"
+                android:startColor="@color/color_FF6D9AFF"
+                android:type="linear"
+                android:useLevel="true" />
+        </shape>
+    </item>
+
+</layer-list>

+ 106 - 0
livebroadcast/src/main/res/layout/dialog_game_tasks.xml

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:ignore="ResourceName">
+
+    <com.google.android.material.card.MaterialCardView
+        android:layout_width="@dimen/divider_637px"
+        android:layout_height="@dimen/divider_407px"
+        android:theme="@style/Theme.MaterialComponents.NoActionBar"
+        app:cardBackgroundColor="@android:color/white"
+        app:cardCornerRadius="@dimen/divider_20px"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvTitle"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/divider_91px"
+                android:background="@color/color_FF4A76FF"
+                android:gravity="center"
+                android:text="@string/exclusive_game_tasks"
+                android:textColor="@android:color/white"
+                android:textSize="@dimen/divider_28px"
+                android:textStyle="bold"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:id="@+id/gameImage"
+                android:layout_width="@dimen/divider_130px"
+                android:layout_height="@dimen/divider_130px"
+                android:layout_marginStart="@dimen/divider_40px"
+                android:layout_marginTop="@dimen/divider_45px"
+                android:scaleType="centerCrop"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/tvTitle" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvGameType"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/divider_28px"
+                android:layout_marginTop="@dimen/divider_50px"
+                android:textColor="@color/color_FF333333"
+                android:textSize="@dimen/divider_24px"
+                android:textStyle="bold"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@+id/gameImage"
+                app:layout_constraintTop_toBottomOf="@+id/tvTitle" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvGameName"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/divider_28px"
+                android:layout_marginTop="@dimen/divider_9px"
+                android:textColor="@color/color_FF333333"
+                android:textSize="@dimen/divider_24px"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@+id/gameImage"
+                app:layout_constraintTop_toBottomOf="@+id/tvGameType" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvGameDifficulty"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="@dimen/divider_28px"
+                android:layout_marginTop="@dimen/divider_8px"
+                android:textColor="@color/color_FF4A76FF"
+                android:textSize="@dimen/divider_24px"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@+id/gameImage"
+                app:layout_constraintTop_toBottomOf="@+id/tvGameName" />
+
+            <androidx.appcompat.widget.AppCompatButton
+                android:id="@+id/btnGame"
+                android:layout_width="@dimen/divider_240px"
+                android:layout_height="@dimen/divider_68px"
+                android:layout_marginTop="@dimen/divider_42px"
+                android:background="@drawable/bg_btn_game_task"
+                android:gravity="center"
+                android:text="@string/enter_game"
+                android:textColor="@android:color/white"
+                android:textSize="@dimen/divider_28px"
+                android:textStyle="bold"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/gameImage" />
+
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    </com.google.android.material.card.MaterialCardView>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 4 - 0
livebroadcast/src/main/res/values/colors.xml

@@ -13,4 +13,8 @@
     <color name="color_92b2cb" tools:ignore="ResourceName">#92b2cb</color>
     <color name="color_345382" tools:ignore="ResourceName">#345382</color>
     <color name="color_022a68" tools:ignore="ResourceName">#022a68</color>
+    <color name="color_FF4A76FF" tools:ignore="ResourceName">#FF4A76FF</color>
+    <color name="color_FF6D9AFF" tools:ignore="ResourceName">#FF6D9AFF</color>
+    <color name="color_FFF4174FF" tools:ignore="ResourceName">#FF4174FF</color>
+    <color name="transparent" tools:ignore="ResourceName">#00000000</color><!-- 透明   -->
 </resources>

+ 4 - 0
livebroadcast/src/main/res/values/dimens.xml

@@ -9,12 +9,15 @@
     <dimen name="divider_685px" tools:ignore="ResourceName">685px</dimen>
     <dimen name="divider_667px" tools:ignore="ResourceName">667px</dimen>
     <dimen name="divider_660px" tools:ignore="ResourceName">660px</dimen>
+    <dimen name="divider_637px" tools:ignore="ResourceName">637px</dimen>
     <dimen name="divider_606px" tools:ignore="ResourceName">606px</dimen>
     <dimen name="divider_522px" tools:ignore="ResourceName">522px</dimen>
+    <dimen name="divider_407px" tools:ignore="ResourceName">407px</dimen>
     <dimen name="divider_353px" tools:ignore="ResourceName">353px</dimen>
     <dimen name="divider_340px" tools:ignore="ResourceName">340px</dimen>
     <dimen name="divider_325px" tools:ignore="ResourceName">325px</dimen>
     <dimen name="divider_270px" tools:ignore="ResourceName">270px</dimen>
+    <dimen name="divider_240px" tools:ignore="ResourceName">240px</dimen>
     <dimen name="divider_237px" tools:ignore="ResourceName">237px</dimen>
     <dimen name="divider_230px" tools:ignore="ResourceName">230px</dimen>
     <dimen name="divider_222px" tools:ignore="ResourceName">222px</dimen>
@@ -45,6 +48,7 @@
     <dimen name="divider_102px" tools:ignore="ResourceName">102px</dimen>
     <dimen name="divider_101px" tools:ignore="ResourceName">101px</dimen>
     <dimen name="divider_100px" tools:ignore="ResourceName">100px</dimen>
+    <dimen name="divider_91px" tools:ignore="ResourceName">91px</dimen>
     <dimen name="divider_80px" tools:ignore="ResourceName">80px</dimen>
     <dimen name="divider_79px" tools:ignore="ResourceName">79px</dimen>
     <dimen name="divider_78px" tools:ignore="ResourceName">78px</dimen>

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

@@ -10,4 +10,6 @@
     <string name="send_message" tools:ignore="MissingTranslation,ResourceName">发送</string>
     <string name="yes" tools:ignore="MissingTranslation,ResourceName">是</string>
     <string name="no" tools:ignore="MissingTranslation,ResourceName">否</string>
+    <string name="exclusive_game_tasks" tools:ignore="ResourceName">专属游戏任务</string>
+    <string name="enter_game" tools:ignore="ResourceName">进入游戏</string>
 </resources>

+ 1 - 3
tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/widget/message/viewholder/EndConsultationMessageHolder.java

@@ -7,15 +7,13 @@ import com.tencent.qcloud.tuikit.timcommon.bean.TUIMessageBean;
 import com.tencent.qcloud.tuikit.timcommon.classicui.widget.message.MessageContentHolder;
 import com.tencent.qcloud.tuikit.tuichat.R;
 import com.tencent.qcloud.tuikit.tuichat.bean.CustomEndConsultationBean;
-import com.tencent.qcloud.tuikit.tuichat.bean.CustomPatientInfoBean;
-import com.tencent.qcloud.tuikit.tuichat.bean.EndConsultationBean;
 import com.tencent.qcloud.tuikit.tuichat.bean.message.ChatIdBean;
-import com.yingyangfly.baselib.dialog.EvaluateDialog;
 import com.yingyangfly.baselib.utils.RxBusCodes;
 
 import gorden.rxbus2.RxBus;
 
 /**
+ * 结束问诊消息
  * @author 王鹏鹏
  */
 public class EndConsultationMessageHolder extends MessageContentHolder {