honghengqiang 3 年 前
コミット
8015fce859
43 ファイル変更653 行追加293 行削除
  1. 1 0
      .idea/misc.xml
  2. 42 16
      baseswago/src/main/java/com/swago/baseswago/PersonDataDFragment.kt
  3. 82 5
      baseswago/src/main/java/com/swago/baseswago/activity/WebViewActivity.kt
  4. 7 2
      baseswago/src/main/java/com/swago/baseswago/constant/UrlConstant.kt
  5. 1 0
      baseswago/src/main/java/com/swago/baseswago/im/IRoomChat.kt
  6. 6 0
      baseswago/src/main/java/com/swago/baseswago/model/im/AnchorRoomClosedBean.java
  7. 6 0
      baseswago/src/main/java/com/swago/baseswago/model/im/RoomChatMsgBean.java
  8. 6 0
      baseswago/src/main/java/com/swago/baseswago/model/im/RoomSystemMsgBean.java
  9. 6 0
      baseswago/src/main/java/com/swago/baseswago/model/im/UserJoinRoomBean.java
  10. 7 4
      baseswago/src/main/java/com/swago/baseswago/model/live/AnchorClosedModel.kt
  11. 1 8
      baseswago/src/main/res/layout/activity_web.xml
  12. 24 6
      baseswago/src/main/res/layout/dialog_person_data.xml
  13. BIN
      baseswago/src/main/res/mipmap-xxhdpi/icon_benefit.png
  14. BIN
      baseswago/src/main/res/mipmap-xxhdpi/live_gift.png
  15. 2 1
      baseswago/src/main/res/values-in/strings.xml
  16. 2 1
      baseswago/src/main/res/values-zh/strings.xml
  17. 2 1
      baseswago/src/main/res/values/strings.xml
  18. 17 0
      home/src/main/java/com/swago/home/MineFragment.kt
  19. 28 1
      home/src/main/res/layout/fragment_mine.xml
  20. 0 8
      login/src/main/java/com/swago/login/LoginActivity.kt
  21. 121 22
      room/src/main/java/com/swago/room/adapter/RoomChatAdapter.kt
  22. 30 1
      room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt
  23. 66 0
      room/src/main/java/com/swago/room/base/BaseComFragment.kt
  24. 1 1
      room/src/main/java/com/swago/room/dialog/AnchorCloseDialog.kt
  25. 22 5
      room/src/main/java/com/swago/room/game/GamePlayDialog.kt
  26. 0 9
      room/src/main/java/com/swago/room/user/UserRoomActivity.kt
  27. 65 49
      room/src/main/java/com/swago/room/user/UserRoomFragment.kt
  28. 3 0
      room/src/main/java/com/swago/room/vm/MsgVm.kt
  29. 0 26
      room/src/main/java/com/swago/room/widget/UserFooterView.kt
  30. 0 1
      room/src/main/java/com/swago/room/widget/UserHeaderView.kt
  31. 7 0
      room/src/main/res/drawable/shape_e87230_ddb558_all_20.xml
  32. 2 3
      room/src/main/res/layout/activity_anchor_room.xml
  33. 27 0
      room/src/main/res/layout/fragment_base_com.xml
  34. 2 1
      room/src/main/res/layout/layout_anchor_footer_view.xml
  35. 4 15
      room/src/main/res/layout/layout_anchor_header_view.xml
  36. 5 27
      room/src/main/res/layout/layout_user_footer_view.xml
  37. 53 55
      room/src/main/res/layout/layout_user_header_view.xml
  38. 2 14
      room/src/main/res/layout/layout_user_room.xml
  39. BIN
      room/src/main/res/mipmap-xxhdpi/icon_audience_list.png
  40. BIN
      room/src/main/res/mipmap-xxhdpi/icon_benefit.png
  41. BIN
      room/src/main/res/mipmap-xxhdpi/live_game.png
  42. BIN
      room/src/main/res/mipmap-xxhdpi/live_gift.png
  43. 3 11
      user/src/main/java/com/swago/user/SettingActivity.kt

+ 1 - 0
.idea/misc.xml

@@ -89,6 +89,7 @@
         <entry key="room/src/main/res/drawable/shape_6720d1_180c72_20.xml" value="0.3640625" />
         <entry key="room/src/main/res/drawable/shape_6720d1_180c72_20.xml" value="0.3640625" />
         <entry key="room/src/main/res/drawable/shape_6c55ff_20.xml" value="0.3640625" />
         <entry key="room/src/main/res/drawable/shape_6c55ff_20.xml" value="0.3640625" />
         <entry key="room/src/main/res/drawable/shape_80000000_20.xml" value="0.3723076923076923" />
         <entry key="room/src/main/res/drawable/shape_80000000_20.xml" value="0.3723076923076923" />
+        <entry key="room/src/main/res/drawable/shape_e87230_ddb558_all_10.xml" value="0.271" />
         <entry key="room/src/main/res/drawable/shape_f8614b_8c2922_20.xml" value="0.3640625" />
         <entry key="room/src/main/res/drawable/shape_f8614b_8c2922_20.xml" value="0.3640625" />
         <entry key="room/src/main/res/drawable/shape_ffff9300_00ff9300_20.xml" value="0.3871794871794872" />
         <entry key="room/src/main/res/drawable/shape_ffff9300_00ff9300_20.xml" value="0.3871794871794872" />
         <entry key="room/src/main/res/layout/activity_anchor_room.xml" value="0.21302083333333333" />
         <entry key="room/src/main/res/layout/activity_anchor_room.xml" value="0.21302083333333333" />

+ 42 - 16
baseswago/src/main/java/com/swago/baseswago/PersonDataDFragment.kt

@@ -18,6 +18,7 @@ import com.swago.baseswago.dialog.ReportDialog
 import com.swago.baseswago.util.AppContext
 import com.swago.baseswago.util.AppContext
 import com.swago.baseswago.util.IMUtil
 import com.swago.baseswago.util.IMUtil
 import com.swago.baseswago.util.NoDoubleClickListener
 import com.swago.baseswago.util.NoDoubleClickListener
+import com.swago.baseswago.util.UserInfo
 
 
 /**
 /**
  *@date 2021/8/27 17:14
  *@date 2021/8/27 17:14
@@ -30,10 +31,12 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
     var isFollow = 0
     var isFollow = 0
     var isBlock = 0
     var isBlock = 0
     var uid = ""
     var uid = ""
+    var nickName = ""
     var account = ""
     var account = ""
     var isAnchor = false //在直播间是不是打开资料卡
     var isAnchor = false //在直播间是不是打开资料卡
     private var inRoom = false
     private var inRoom = false
     private var isForbid = 0 //0没有被禁言  1已被禁言
     private var isForbid = 0 //0没有被禁言  1已被禁言
+    var openGiftDialog:((nickName:String,userId:String)->Unit)? = null
 
 
     companion object{
     companion object{
         fun newInstance(uid:String,isAnchor:Boolean=false,inRoom:Boolean=false): PersonDataDFragment {
         fun newInstance(uid:String,isAnchor:Boolean=false,inRoom:Boolean=false): PersonDataDFragment {
@@ -55,13 +58,28 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
             if (!TextUtils.isEmpty(uid)){
             if (!TextUtils.isEmpty(uid)){
                 userVm.getOtherUserInfo(uid)
                 userVm.getOtherUserInfo(uid)
             }
             }
-            if (inRoom){
-                SwagoRoomManager.iRoomInfo?.let {
-                    handleVm.getUserRoomAuth(uid,it.getRoomId())
+
+
+
+            UserInfo.getUserInfo()?.let {
+                if (it.id == uid){
+                    binding.llSendGift.visibility = View.GONE
+                    binding.llChat.visibility = View.GONE
+                    binding.ivMore.visibility = View.GONE
+                }else{
+                    if (inRoom){
+                        SwagoRoomManager.iRoomInfo?.let {
+                            handleVm.getUserRoomAuth(uid,it.getRoomId())
+                        }
+                        binding.llSendGift.visibility = View.VISIBLE
+                    }else{
+                        binding.llSendGift.visibility = View.GONE
+                    }
+                    binding.llChat.visibility = View.VISIBLE
+                    binding.ivMore.visibility = View.VISIBLE
                 }
                 }
             }
             }
 
 
-
             binding.ivFollow.setOnClickListener(object:NoDoubleClickListener(){
             binding.ivFollow.setOnClickListener(object:NoDoubleClickListener(){
                 override fun onClick() {
                 override fun onClick() {
                     if (isFollow == 0){
                     if (isFollow == 0){
@@ -97,19 +115,26 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
                 }
                 }
             })
             })
 
 
-            binding.llBlock.setOnClickListener(object:NoDoubleClickListener(){
+//            binding.llBlock.setOnClickListener(object:NoDoubleClickListener(){
+//                override fun onClick() {
+//                    if (isBlock == 0){
+//                        //拉黑操作
+//                        //腾讯IM拉黑操作
+//                        val list = ArrayList<String>()
+//                        list.add(account)
+//                        IMUtil.addToBlackList(list){
+//                            userVm.addBlack(account,0)
+//                        }
+//                    }else{
+//                        Toast.makeText(AppContext.getContext(), "The User has been black", Toast.LENGTH_SHORT).show()
+//                    }
+//                }
+//            })
+
+            binding.llSendGift.setOnClickListener(object:NoDoubleClickListener(){
                 override fun onClick() {
                 override fun onClick() {
-                    if (isBlock == 0){
-                        //拉黑操作
-                        //腾讯IM拉黑操作
-                        val list = ArrayList<String>()
-                        list.add(account)
-                        IMUtil.addToBlackList(list){
-                            userVm.addBlack(account,0)
-                        }
-                    }else{
-                        Toast.makeText(AppContext.getContext(), "The User has been black", Toast.LENGTH_SHORT).show()
-                    }
+                    openGiftDialog?.invoke(nickName,uid)
+                    dismissAllowingStateLoss()
                 }
                 }
             })
             })
 
 
@@ -132,6 +157,7 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
         userVm.otherUserInfoLiveData.observe(this) {
         userVm.otherUserInfoLiveData.observe(this) {
             isFollow = it.is_follow
             isFollow = it.is_follow
             isBlock = it.is_black
             isBlock = it.is_black
+            nickName = it.user_name
             account = it.user_account
             account = it.user_account
             Glide.with(this).load(it.user_head_img_url).into(binding.ivAvatar)
             Glide.with(this).load(it.user_head_img_url).into(binding.ivAvatar)
             binding.tvName.text = it.user_name
             binding.tvName.text = it.user_name

+ 82 - 5
baseswago/src/main/java/com/swago/baseswago/activity/WebViewActivity.kt

@@ -1,10 +1,23 @@
 package com.swago.baseswago.activity
 package com.swago.baseswago.activity
 
 
+import android.annotation.SuppressLint
+import android.view.ViewGroup
+import android.webkit.JavascriptInterface
+import android.webkit.WebResourceRequest
+import android.webkit.WebView
+import android.webkit.WebViewClient
+import android.widget.FrameLayout
+import androidx.constraintlayout.widget.ConstraintLayout
 import com.alibaba.android.arouter.facade.annotation.Autowired
 import com.alibaba.android.arouter.facade.annotation.Autowired
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.alibaba.android.arouter.launcher.ARouter
 import com.alibaba.android.arouter.launcher.ARouter
+import com.swago.baseswago.R
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.databinding.ActivityWebBinding
 import com.swago.baseswago.databinding.ActivityWebBinding
+import com.swago.baseswago.util.DpPxUtil
+import com.swago.baseswago.util.SwagoInfo
+import com.swago.baseswago.util.UserInfo
+import org.json.JSONObject
 
 
 /**
 /**
  *@date 2021/8/30 10:19
  *@date 2021/8/30 10:19
@@ -17,9 +30,11 @@ class WebViewActivity : BaseXActivity<ActivityWebBinding>() {
     @JvmField
     @JvmField
     var url = ""
     var url = ""
 
 
-    @Autowired
-    @JvmField
-    var title = ""
+    private var webView: WebView? = null
+
+    private val jsLoad by lazy {
+        JSLoad()
+    }
 
 
     override fun loadData() {
     override fun loadData() {
     }
     }
@@ -27,8 +42,70 @@ class WebViewActivity : BaseXActivity<ActivityWebBinding>() {
     override fun initOther() {
     override fun initOther() {
         ARouter.getInstance().inject(this)
         ARouter.getInstance().inject(this)
         setBackView(binding.toolbar.ivBack)
         setBackView(binding.toolbar.ivBack)
-        binding.toolbar.tvTitle.text = title
-        binding.webView.loadUrl(url)
+
+        webView = WebView(this)
+        webView?.apply {
+            try {
+                val jsonObject = JSONObject()
+                jsonObject.put("TokenParam", UserInfo.getLoginModel()?.token?:"")
+                jsonObject.put("UserIdParam", UserInfo.getUserInfo()?.id?:"")
+                jsonObject.put("LocaleParam", SwagoInfo.getLanguageCode())
+                jsonObject.put("AppVersionParam", SwagoInfo.getVersionCode())
+                jsonObject.put("ClientParam", SwagoInfo.getAppClient())
+                jsonObject.put("ChannelParam", SwagoInfo.getChannel())
+                settings.userAgentString = settings.userAgentString + jsonObject.toString()
+            } catch (e: Exception) {
+                e.printStackTrace()
+            }
+
+            settings.javaScriptEnabled = true
+            addJavascriptInterface(jsLoad, "jsLoad")
+            settings.allowUniversalAccessFromFileURLs = true
+            settings.allowFileAccess = true
+            settings.allowFileAccessFromFileURLs = true
+            settings.useWideViewPort = true
+            settings.loadWithOverviewMode = true
+            settings.javaScriptCanOpenWindowsAutomatically = true//设置允许JS弹窗
+            settings.domStorageEnabled = true
+            isHorizontalScrollBarEnabled = true
+            isVerticalScrollBarEnabled = true
+            clearCache(true)
+            webViewClient = object : WebViewClient() {
+                override fun shouldOverrideUrlLoading(
+                    view: WebView?,
+                    request: WebResourceRequest?
+                ): Boolean {
+                    return super.shouldOverrideUrlLoading(view, request)
+                }
+
+                override fun onPageFinished(view: WebView?, url: String?) {
+                    super.onPageFinished(view, url)
+                    view?.title?.let {
+                        binding.toolbar.tvTitle.text = it
+                    }
+                }
+            }
+
+            //设置大小
+            val params = ConstraintLayout.LayoutParams(
+                ViewGroup.LayoutParams.MATCH_PARENT,
+                0
+            ).apply {
+                startToStart = R.id.root
+                endToEnd = R.id.root
+                topToBottom = R.id.toolbar
+                bottomToBottom =R.id.root
+            }
+            this.layoutParams = params
+            binding.root.addView(this)
+        }
+        webView?.loadUrl(url)
+    }
+
+    inner class JSLoad {
+        @JavascriptInterface
+        fun closeGame(){
+        }
     }
     }
 
 
     override fun initLiveData() {}
     override fun initLiveData() {}

+ 7 - 2
baseswago/src/main/java/com/swago/baseswago/constant/UrlConstant.kt

@@ -9,7 +9,7 @@ import java.io.File
  */
  */
 object UrlConstant {
 object UrlConstant {
 
 
-    const val  BASE_URL = "http:test-api.swago.cn"
+    const val BASE_URL = "http:test-api.swago.cn"
 //    const val  BASE_URL = "http://www.swago.cn"
 //    const val  BASE_URL = "http://www.swago.cn"
 
 
 
 
@@ -18,6 +18,11 @@ object UrlConstant {
 
 
     const val USER_PRIVACY = "http://www.swago.cn/privacyAgreement.html"
     const val USER_PRIVACY = "http://www.swago.cn/privacyAgreement.html"
 
 
-    var appGameRootPath = AppContext.getContext().getExternalFilesDir("")?.absolutePath + File.separator + "gameFile"
+    const val TOP_UP = "http://swago-h5.codedreamit.com/recharge/detail"
+    const val WITHDRAW = "http://swago-h5.codedreamit.com/withdrawal"
+
+
+    var appGameRootPath =
+        AppContext.getContext().getExternalFilesDir("")?.absolutePath + File.separator + "gameFile"
 
 
 }
 }

+ 1 - 0
baseswago/src/main/java/com/swago/baseswago/im/IRoomChat.kt

@@ -11,5 +11,6 @@ interface IRoomChat {
     fun getMsgType():Int
     fun getMsgType():Int
     fun getUserLevel():Int
     fun getUserLevel():Int
     fun getIsBenefit():Int
     fun getIsBenefit():Int
+    fun getSenderId():String
 
 
 }
 }

+ 6 - 0
baseswago/src/main/java/com/swago/baseswago/model/im/AnchorRoomClosedBean.java

@@ -43,4 +43,10 @@ public class AnchorRoomClosedBean implements IRoomChat {
     public int getIsBenefit() {
     public int getIsBenefit() {
         return 0;
         return 0;
     }
     }
+
+    @NonNull
+    @Override
+    public String getSenderId() {
+        return userId;
+    }
 }
 }

+ 6 - 0
baseswago/src/main/java/com/swago/baseswago/model/im/RoomChatMsgBean.java

@@ -44,4 +44,10 @@ public class RoomChatMsgBean implements IRoomChat {
     public int getIsBenefit() {
     public int getIsBenefit() {
         return isBenefit;
         return isBenefit;
     }
     }
+
+    @NonNull
+    @Override
+    public String getSenderId() {
+        return senderId;
+    }
 }
 }

+ 6 - 0
baseswago/src/main/java/com/swago/baseswago/model/im/RoomSystemMsgBean.java

@@ -47,4 +47,10 @@ public class RoomSystemMsgBean implements IRoomChat {
    public void setBroadcast_notice_content(String broadcast_notice_content) {
    public void setBroadcast_notice_content(String broadcast_notice_content) {
       this.broadcast_notice_content = broadcast_notice_content;
       this.broadcast_notice_content = broadcast_notice_content;
    }
    }
+
+   @NonNull
+   @Override
+   public String getSenderId() {
+      return "";
+   }
 }
 }

+ 6 - 0
baseswago/src/main/java/com/swago/baseswago/model/im/UserJoinRoomBean.java

@@ -49,4 +49,10 @@ public class UserJoinRoomBean implements IRoomChat {
     public int getIsBenefit() {
     public int getIsBenefit() {
         return isBenefit;
         return isBenefit;
     }
     }
+
+    @NonNull
+    @Override
+    public String getSenderId() {
+        return senderId;
+    }
 }
 }

+ 7 - 4
baseswago/src/main/java/com/swago/baseswago/model/live/AnchorClosedModel.kt

@@ -8,30 +8,33 @@ import android.os.Parcelable
  *description:
  *description:
  */
  */
 data class AnchorClosedModel(
 data class AnchorClosedModel(
-    var broadcast_time: String?,
+    var broadcast_time:Long=0,
     var income_coins: String?,
     var income_coins: String?,
     var total_member: String?,
     var total_member: String?,
     var user_account: String?,
     var user_account: String?,
     var user_head_img_url: String?,
     var user_head_img_url: String?,
-    var user_name: String?
+    var user_name: String?,
+    var total_broadcast_time:Long=0
 ) : Parcelable {
 ) : Parcelable {
     constructor(parcel: Parcel) : this(
     constructor(parcel: Parcel) : this(
+        parcel.readLong(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
         parcel.readString(),
-        parcel.readString()
+        parcel.readLong()
     ) {
     ) {
     }
     }
 
 
     override fun writeToParcel(parcel: Parcel, flags: Int) {
     override fun writeToParcel(parcel: Parcel, flags: Int) {
-        parcel.writeString(broadcast_time)
+        parcel.writeLong(broadcast_time)
         parcel.writeString(income_coins)
         parcel.writeString(income_coins)
         parcel.writeString(total_member)
         parcel.writeString(total_member)
         parcel.writeString(user_account)
         parcel.writeString(user_account)
         parcel.writeString(user_head_img_url)
         parcel.writeString(user_head_img_url)
         parcel.writeString(user_name)
         parcel.writeString(user_name)
+        parcel.writeLong(total_broadcast_time)
     }
     }
 
 
     override fun describeContents(): Int {
     override fun describeContents(): Int {

+ 1 - 8
baseswago/src/main/res/layout/activity_web.xml

@@ -2,6 +2,7 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
+    android:id="@+id/root"
     xmlns:app="http://schemas.android.com/apk/res-auto">
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
 
     <View
     <View
@@ -19,12 +20,4 @@
         android:layout_marginTop="25dp"
         android:layout_marginTop="25dp"
         app:layout_constraintTop_toTopOf="parent" />
         app:layout_constraintTop_toTopOf="parent" />
 
 
-
-    <WebView
-        android:id="@+id/webView"
-        app:layout_constraintTop_toBottomOf="@+id/toolbar"
-        app:layout_constraintBottom_toBottomOf="parent"
-        android:layout_width="match_parent"
-        android:layout_height="0dp"/>
-
 </androidx.constraintlayout.widget.ConstraintLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 24 - 6
baseswago/src/main/res/layout/dialog_person_data.xml

@@ -217,8 +217,10 @@
                 android:layout_marginTop="30dp"
                 android:layout_marginTop="30dp"
                 android:layout_marginStart="20dp"
                 android:layout_marginStart="20dp"
                 android:layout_marginEnd="20dp"
                 android:layout_marginEnd="20dp"
+                android:layout_marginBottom="10dp"
                 android:background="@drawable/shape_black_5"
                 android:background="@drawable/shape_black_5"
                 app:layout_constraintTop_toBottomOf="@+id/llFans"
                 app:layout_constraintTop_toBottomOf="@+id/llFans"
+                app:layout_constraintBottom_toTopOf="@+id/llSendGift"
                 android:gravity="center"
                 android:gravity="center"
                 android:layout_width="match_parent"
                 android:layout_width="match_parent"
                 android:layout_height="44dp">
                 android:layout_height="44dp">
@@ -227,27 +229,43 @@
                     android:src="@mipmap/chat"
                     android:src="@mipmap/chat"
                     android:layout_width="wrap_content"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"/>
                     android:layout_height="wrap_content"/>
+                <TextView
+                    android:textSize="14dp"
+                    android:text="@string/message"
+                    android:textColor="#fff"
+                    android:layout_marginStart="10dp"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"/>
 
 
             </LinearLayout>
             </LinearLayout>
 
 
-
             <LinearLayout
             <LinearLayout
-                android:id="@+id/llBlock"
-                android:layout_marginTop="10dp"
+                android:id="@+id/llSendGift"
                 android:layout_marginStart="20dp"
                 android:layout_marginStart="20dp"
                 android:layout_marginEnd="20dp"
                 android:layout_marginEnd="20dp"
-                android:background="@drawable/shape_dadada_5"
+                android:visibility="gone"
+                tools:visibility="visible"
+                android:background="@drawable/shape_9ffd88_6ef2df"
                 app:layout_constraintTop_toBottomOf="@+id/llChat"
                 app:layout_constraintTop_toBottomOf="@+id/llChat"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintBottom_toBottomOf="parent"
-                android:layout_marginBottom="20dp"
+                android:layout_marginBottom="10dp"
                 android:gravity="center"
                 android:gravity="center"
                 android:layout_width="match_parent"
                 android:layout_width="match_parent"
                 android:layout_height="44dp">
                 android:layout_height="44dp">
 
 
                 <ImageView
                 <ImageView
-                    android:src="@mipmap/block"
+                    android:src="@mipmap/live_gift"
                     android:layout_width="wrap_content"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"/>
                     android:layout_height="wrap_content"/>
+
+                <TextView
+                    android:textSize="14dp"
+                    android:text="@string/send_gift"
+                    android:textColor="#fff"
+                    android:layout_marginStart="10dp"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"/>
+
             </LinearLayout>
             </LinearLayout>
 
 
 
 

BIN
baseswago/src/main/res/mipmap-xxhdpi/icon_benefit.png


BIN
baseswago/src/main/res/mipmap-xxhdpi/live_gift.png


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

@@ -32,9 +32,9 @@
     <string name="sex">Jenis kelamin</string>
     <string name="sex">Jenis kelamin</string>
     <string name="age">Umur</string>
     <string name="age">Umur</string>
     <string name="constellation">Konstelasi</string>
     <string name="constellation">Konstelasi</string>
-    <string name="country">Negara</string>
     <string name="sign">Tanda tangan</string>
     <string name="sign">Tanda tangan</string>
     <string name="selecte_country">Pilih negara/daerah</string>
     <string name="selecte_country">Pilih negara/daerah</string>
+    <string name="country">Negara/daerah</string>
     <string name="rich_level">Level kekayaan</string>
     <string name="rich_level">Level kekayaan</string>
     <string name="anchor_level">Level Host</string>
     <string name="anchor_level">Level Host</string>
     <string name="get_exp">Dapatkan poin pengalaman</string>
     <string name="get_exp">Dapatkan poin pengalaman</string>
@@ -115,4 +115,5 @@
     <string name="delete">Menghapus</string>
     <string name="delete">Menghapus</string>
     <string name="rank_title">Gelar</string>
     <string name="rank_title">Gelar</string>
     <string name="special_effects">Efek masuk</string>
     <string name="special_effects">Efek masuk</string>
+    <string name="send_gift">Send Gift</string>
 </resources>
 </resources>

+ 2 - 1
baseswago/src/main/res/values-zh/strings.xml

@@ -32,9 +32,9 @@
     <string name="sex">性别</string>
     <string name="sex">性别</string>
     <string name="age">年龄</string>
     <string name="age">年龄</string>
     <string name="constellation">星座</string>
     <string name="constellation">星座</string>
-    <string name="country">国家</string>
     <string name="sign">个性签名</string>
     <string name="sign">个性签名</string>
     <string name="selecte_country">选择国家/地区</string>
     <string name="selecte_country">选择国家/地区</string>
+    <string name="country">国家/地区</string>
     <string name="rich_level">财富等级</string>
     <string name="rich_level">财富等级</string>
     <string name="anchor_level">主播等级</string>
     <string name="anchor_level">主播等级</string>
     <string name="get_exp">获取经验值</string>
     <string name="get_exp">获取经验值</string>
@@ -115,4 +115,5 @@
     <string name="delete">删除</string>
     <string name="delete">删除</string>
     <string name="rank_title">头衔</string>
     <string name="rank_title">头衔</string>
     <string name="special_effects">入场特效</string>
     <string name="special_effects">入场特效</string>
+    <string name="send_gift">Send Gift</string>
 </resources>
 </resources>

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

@@ -37,9 +37,9 @@
     <string name="sex">Gender</string>
     <string name="sex">Gender</string>
     <string name="age">Age</string>
     <string name="age">Age</string>
     <string name="constellation">Constellation</string>
     <string name="constellation">Constellation</string>
-    <string name="country">Country</string>
     <string name="sign">Bio</string>
     <string name="sign">Bio</string>
     <string name="selecte_country">Choose your country/area</string>
     <string name="selecte_country">Choose your country/area</string>
+    <string name="country">Country/area</string>
     <string name="rich_level">Rich level</string>
     <string name="rich_level">Rich level</string>
     <string name="anchor_level">Host level</string>
     <string name="anchor_level">Host level</string>
     <string name="get_exp">Get experience points</string>
     <string name="get_exp">Get experience points</string>
@@ -120,4 +120,5 @@
     <string name="delete">Delete</string>
     <string name="delete">Delete</string>
     <string name="rank_title">Title</string>
     <string name="rank_title">Title</string>
     <string name="special_effects">Admission effects</string>
     <string name="special_effects">Admission effects</string>
+    <string name="send_gift">Send Gift</string>
 </resources>
 </resources>

+ 17 - 0
home/src/main/java/com/swago/home/MineFragment.kt

@@ -7,6 +7,7 @@ import com.google.gson.Gson
 import com.swago.baseswago.R
 import com.swago.baseswago.R
 import com.swago.baseswago.UserVm
 import com.swago.baseswago.UserVm
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.constant.ARouteConstant
+import com.swago.baseswago.constant.UrlConstant
 import com.swago.baseswago.dialog.BenefitBagDialog
 import com.swago.baseswago.dialog.BenefitBagDialog
 import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.model.ConfigModel
 import com.swago.baseswago.model.ConfigModel
@@ -83,6 +84,22 @@ class MineFragment : BaseXFragment<FragmentMineBinding>() {
             }
             }
         })
         })
 
 
+        binding.tvTopup.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                ARouter.getInstance().build(ARouteConstant.Base.webView)
+                    .withString("url", UrlConstant.TOP_UP)
+                    .navigation()
+            }
+        })
+
+        binding.tvWithDraw.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                ARouter.getInstance().build(ARouteConstant.Base.webView)
+                    .withString("url", UrlConstant.WITHDRAW)
+                    .navigation()
+            }
+        })
+
         binding.tvAnchorBlackList.setOnClickListener(object:NoDoubleClickListener(){
         binding.tvAnchorBlackList.setOnClickListener(object:NoDoubleClickListener(){
             override fun onClick() {
             override fun onClick() {
                 ARouter.getInstance().build(ARouteConstant.User.roomBlacklist)
                 ARouter.getInstance().build(ARouteConstant.User.roomBlacklist)

+ 28 - 1
home/src/main/res/layout/fragment_mine.xml

@@ -119,7 +119,6 @@
 
 
     <LinearLayout
     <LinearLayout
         android:id="@+id/llFollow"
         android:id="@+id/llFollow"
-
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintEnd_toStartOf="@+id/llFans"
         app:layout_constraintEnd_toStartOf="@+id/llFans"
         app:layout_constraintBottom_toBottomOf="@+id/ivBg"
         app:layout_constraintBottom_toBottomOf="@+id/ivBg"
@@ -320,6 +319,34 @@
             android:drawableStart="@mipmap/task"
             android:drawableStart="@mipmap/task"
             android:drawableEnd="@mipmap/more_small" />
             android:drawableEnd="@mipmap/more_small" />
 
 
+        <TextView
+            android:id="@+id/tvTopup"
+            android:drawablePadding="5dp"
+            android:paddingStart="20dp"
+            android:paddingEnd="20dp"
+            android:textColor="#000"
+            android:textSize="16dp"
+            android:gravity="center_vertical"
+            android:text="充值"
+            android:layout_width="match_parent"
+            android:layout_height="50dp"
+            android:drawableStart="@mipmap/task"
+            android:drawableEnd="@mipmap/more_small" />
+
+        <TextView
+            android:id="@+id/tvWithDraw"
+            android:drawablePadding="5dp"
+            android:paddingStart="20dp"
+            android:paddingEnd="20dp"
+            android:textColor="#000"
+            android:textSize="16dp"
+            android:gravity="center_vertical"
+            android:text="提现"
+            android:layout_width="match_parent"
+            android:layout_height="50dp"
+            android:drawableStart="@mipmap/task"
+            android:drawableEnd="@mipmap/more_small" />
+
     </LinearLayout>
     </LinearLayout>
 
 
 
 

+ 0 - 8
login/src/main/java/com/swago/login/LoginActivity.kt

@@ -102,10 +102,6 @@ class LoginActivity : BaseXActivity<ActivityLoginBinding>() {
         binding.tvAgreement.setOnClickListener(object: NoDoubleClickListener(){
         binding.tvAgreement.setOnClickListener(object: NoDoubleClickListener(){
             override fun onClick() {
             override fun onClick() {
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
-                    .withString(
-                        "title",
-                        AppContext.getContext().resources.getString(R.string.user_agreement)
-                    )
                     .withString("url", UrlConstant.USER_AGREEMENT)
                     .withString("url", UrlConstant.USER_AGREEMENT)
                     .navigation()
                     .navigation()
             }
             }
@@ -114,10 +110,6 @@ class LoginActivity : BaseXActivity<ActivityLoginBinding>() {
         binding.tvPrivacy.setOnClickListener(object: NoDoubleClickListener(){
         binding.tvPrivacy.setOnClickListener(object: NoDoubleClickListener(){
             override fun onClick() {
             override fun onClick() {
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
-                    .withString(
-                        "title",
-                        AppContext.getContext().resources.getString(R.string.privacy_policy)
-                    )
                     .withString("url", UrlConstant.USER_PRIVACY)
                     .withString("url", UrlConstant.USER_PRIVACY)
                     .navigation()
                     .navigation()
             }
             }

+ 121 - 22
room/src/main/java/com/swago/room/adapter/RoomChatAdapter.kt

@@ -1,9 +1,12 @@
 package com.swago.room.adapter
 package com.swago.room.adapter
 
 
 import android.graphics.Bitmap
 import android.graphics.Bitmap
+import android.graphics.Color
 import android.text.Html
 import android.text.Html
 import android.text.SpannableString
 import android.text.SpannableString
 import android.text.Spanned
 import android.text.Spanned
+import android.text.TextPaint
+import android.text.method.LinkMovementMethod
 import android.text.style.ClickableSpan
 import android.text.style.ClickableSpan
 import android.text.style.ImageSpan
 import android.text.style.ImageSpan
 import android.view.LayoutInflater
 import android.view.LayoutInflater
@@ -42,12 +45,14 @@ class RoomChatAdapter :
         localImageKey.add(LEVEL_KEY)
         localImageKey.add(LEVEL_KEY)
     }
     }
 
 
+    var showUserInfoDialog: ((iChatMsg: IRoomChat) -> Unit)? = null
+
 
 
     override fun convert(helper: BaseViewHolder, item: IRoomChat) {
     override fun convert(helper: BaseViewHolder, item: IRoomChat) {
         var count = 0
         var count = 0
         helper.apply {
         helper.apply {
             val tvContent = itemView.findViewById<TextView>(R.id.tvContent)
             val tvContent = itemView.findViewById<TextView>(R.id.tvContent)
-            val span: SpannableString?
+            var span: SpannableString? = null
             when (item.getMsgType()) {
             when (item.getMsgType()) {
                 RoomMsgType.ROOM_CHAT_TEXT -> {
                 RoomMsgType.ROOM_CHAT_TEXT -> {
                     val sb = StringBuffer()
                     val sb = StringBuffer()
@@ -71,36 +76,129 @@ class RoomChatAdapter :
                     span = SpannableString(fromHtml)
                     span = SpannableString(fromHtml)
                     setHtml(span, helper, item)
                     setHtml(span, helper, item)
 
 
-                    setBackgroundRes(R.id.tvContent, R.drawable.shape_white_20)
-                    tvContent.text = span
+
+                    if (span.length < item.getSenderName().length + count) {
+                        span.setSpan(
+                            object : ClickableSpan() {
+                                override fun onClick(widget: View) {
+                                    showUserInfoDialog?.invoke(item)
+                                }
+
+                                override fun updateDrawState(ds: TextPaint) {}
+
+                            },
+                            0,
+                            span.length,
+                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                        )
+                    } else {
+                        span.setSpan(
+                            object : ClickableSpan() {
+                                override fun onClick(widget: View) {
+                                    showUserInfoDialog?.invoke(item)
+                                }
+
+                                override fun updateDrawState(ds: TextPaint) {}
+
+                            },
+                            0,
+                            item.getSenderName().length + count,
+                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                        )
+                    }
+
+
+
+                    if (item.getIsBenefit() == 1) {
+                        setBackgroundRes(R.id.tvContent, R.drawable.shape_e87230_ddb558_all_20)
+                    } else {
+                        setBackgroundRes(R.id.tvContent, R.drawable.shape_white_20)
+                    }
                 }
                 }
 
 
                 RoomMsgType.SYSTEM_MESSAGE -> {
                 RoomMsgType.SYSTEM_MESSAGE -> {
-                    setText(R.id.tvContent, item.getMsgContent())
+                    span = SpannableString(item.getMsgContent())
                     setBackgroundRes(R.id.tvContent, R.drawable.shape_4bce98_20)
                     setBackgroundRes(R.id.tvContent, R.drawable.shape_4bce98_20)
                 }
                 }
                 RoomMsgType.USER_ENTER_ROOM -> {
                 RoomMsgType.USER_ENTER_ROOM -> {
-                    setText(R.id.tvContent, "${item.getSenderName()} ${item.getMsgContent()}")
-                    when (item.getUserLevel()) {
-                        in 0..37 -> {
-                            setBackgroundRes(R.id.tvContent, R.drawable.shape_4bce98_20)
-                        }
-                        in 38..54 -> {
-                            setBackgroundRes(R.id.tvContent, R.drawable.shape_6c55ff_20)
-                        }
-                        in 55..75 -> {
-                            setBackgroundRes(R.id.tvContent, R.drawable.shape_6720d1_180c72_20)
-                        }
-                        in 76..97 -> {
-                            setBackgroundRes(R.id.tvContent, R.drawable.shape_f8614b_8c2922_20)
-                        }
-                        in 98..1000 -> {
-                            setBackgroundRes(R.id.tvContent, R.drawable.shape_434343_000000_20)
+                    val sb = StringBuffer()
+                    sb.append(item.getSenderName())
+                        .append("<img src='" + "file:///xx/")
+                        .append(LEVEL_KEY).append(".png")
+                        .append("'>")
+
+                    if (item.getIsBenefit() == 1) {
+                        count++
+                        sb.append("<img src='" + "file:///android_asset/icon_chat_benefit.png")
+                            .append("'>")
+                    }
+                    sb.append(":")
+
+
+                    sb.append(item.getMsgContent())
+
+                    val glideImageGetter = HtmlImageGetter(mContext, tvContent, 14, localImageKey)
+                    val fromHtml = Html.fromHtml(sb.toString(), glideImageGetter, null)
+                    span = SpannableString(fromHtml)
+                    setHtml(span, helper, item)
+
+                    if (span.length < item.getSenderName().length + count) {
+                        span.setSpan(
+                            object : ClickableSpan() {
+                                override fun onClick(widget: View) {
+                                    showUserInfoDialog?.invoke(item)
+                                }
+
+                                override fun updateDrawState(ds: TextPaint) {}
+
+                            },
+                            0,
+                            span.length,
+                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                        )
+                    } else {
+                        span.setSpan(
+                            object : ClickableSpan() {
+                                override fun onClick(widget: View) {
+                                    showUserInfoDialog?.invoke(item)
+                                }
+
+                                override fun updateDrawState(ds: TextPaint) {}
+
+                            },
+                            0,
+                            item.getSenderName().length + count,
+                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                        )
+                    }
+
+                    if (item.getIsBenefit() == 1) {
+                        setBackgroundRes(R.id.tvContent, R.drawable.shape_4bce98_20)
+                    } else {
+                        when (item.getUserLevel()) {
+                            in 0..37 -> {
+                                setBackgroundRes(R.id.tvContent, R.drawable.shape_4bce98_20)
+                            }
+                            in 38..54 -> {
+                                setBackgroundRes(R.id.tvContent, R.drawable.shape_6c55ff_20)
+                            }
+                            in 55..75 -> {
+                                setBackgroundRes(R.id.tvContent, R.drawable.shape_6720d1_180c72_20)
+                            }
+                            in 76..97 -> {
+                                setBackgroundRes(R.id.tvContent, R.drawable.shape_f8614b_8c2922_20)
+                            }
+                            in 98..1000 -> {
+                                setBackgroundRes(R.id.tvContent, R.drawable.shape_434343_000000_20)
+                            }
                         }
                         }
                     }
                     }
+
                 }
                 }
             }
             }
-
+            tvContent.movementMethod = LinkMovementMethod.getInstance()
+            tvContent.highlightColor = Color.TRANSPARENT
+            tvContent.text = span
         }
         }
     }
     }
 
 
@@ -149,7 +247,8 @@ class RoomChatAdapter :
         }
         }
         var bm = iconBitmapCachePool[level + "level"]
         var bm = iconBitmapCachePool[level + "level"]
         if (bm == null) {
         if (bm == null) {
-            val view = LayoutInflater.from(mContext).inflate(R.layout.item_chat_level, viewGroup, false) as SwagoLevelView
+            val view = LayoutInflater.from(mContext)
+                .inflate(R.layout.item_chat_level, viewGroup, false) as SwagoLevelView
             view.measure(
             view.measure(
                 View.MeasureSpec.makeMeasureSpec(
                 View.MeasureSpec.makeMeasureSpec(
                     (1 shl 30) - 1,
                     (1 shl 30) - 1,

+ 30 - 1
room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt

@@ -8,13 +8,17 @@ import androidx.fragment.app.activityViewModels
 import com.gyf.immersionbar.ImmersionBar
 import com.gyf.immersionbar.ImmersionBar
 import com.swago.baseswago.PersonDataDFragment
 import com.swago.baseswago.PersonDataDFragment
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.IRoomInfo
+import com.swago.baseswago.model.im.UserJoinRoomBean
+import com.swago.baseswago.model.live.RoomUserModel
 import com.swago.room.base.BaseComFragment
 import com.swago.room.base.BaseComFragment
 import com.swago.room.databinding.FragmentBaseComBinding
 import com.swago.room.databinding.FragmentBaseComBinding
+import com.swago.room.gift.GiftDialog
 import com.swago.room.inter.IFooter
 import com.swago.room.inter.IFooter
 import com.swago.room.inter.IHeader
 import com.swago.room.inter.IHeader
 import com.swago.room.vm.RoomVm
 import com.swago.room.vm.RoomVm
 import com.swago.room.widget.AnchorFooterView
 import com.swago.room.widget.AnchorFooterView
 import com.swago.room.widget.AnchorHeaderView
 import com.swago.room.widget.AnchorHeaderView
+import java.util.concurrent.CopyOnWriteArrayList
 
 
 /**
 /**
  *@date 2021/10/9 11:35
  *@date 2021/10/9 11:35
@@ -24,6 +28,8 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
 
 
     private var footerView : AnchorFooterView? = null
     private var footerView : AnchorFooterView? = null
 
 
+    private var roomUserList  = CopyOnWriteArrayList<RoomUserModel.ListBean>()
+
     override fun initOther() {
     override fun initOther() {
         super.initOther()
         super.initOther()
     }
     }
@@ -31,6 +37,8 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     override fun initLiveData() {
     override fun initLiveData() {
         super.initLiveData()
         super.initLiveData()
         roomVm.roomUserDataLiveData.observe(this){
         roomVm.roomUserDataLiveData.observe(this){
+            roomUserList.clear()
+            roomUserList.addAll(it)
             iHeader.updateRoomUser(it)
             iHeader.updateRoomUser(it)
         }
         }
 
 
@@ -49,7 +57,18 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
 
 
         val headerView = iHeader as AnchorHeaderView
         val headerView = iHeader as AnchorHeaderView
         headerView.showUserInfo = {
         headerView.showUserInfo = {
-            PersonDataDFragment.newInstance(it, isAnchor = true, inRoom = true).show(childFragmentManager,"PersonDataDFragment")
+            PersonDataDFragment.newInstance(it, isAnchor = true, inRoom = true)
+                .apply {
+                    this.openGiftDialog = {nickName, userId ->
+                        GiftDialog.newInstance(
+                            nickName,
+                            userId,
+                            hotList,
+                            luxuryList,
+                            luckyData
+                        ).show(parentFragmentManager, "GiftDialog")
+                    }
+                }.show(childFragmentManager,"PersonDataDFragment")
         }
         }
 
 
         msgVm.inComeChange = {
         msgVm.inComeChange = {
@@ -90,4 +109,14 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     override val iFooter: IFooter by lazy {
     override val iFooter: IFooter by lazy {
         AnchorFooterView(requireContext())
         AnchorFooterView(requireContext())
     }
     }
+
+    override fun updateUserJoinRoom(userJoinRoomBean: UserJoinRoomBean) {
+        val data = RoomUserModel.ListBean()
+        data.user_account = userJoinRoomBean.senderCode
+        data.user_head_img_url = userJoinRoomBean.userAvatar
+        data.user_id = userJoinRoomBean.senderId
+        data.user_name = userJoinRoomBean.senderName
+        roomUserList.add(0,data)
+        iHeader.updateRoomUser(roomUserList)
+    }
 }
 }

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

@@ -15,6 +15,7 @@ import com.liulishuo.okdownload.DownloadTask
 import com.liulishuo.okdownload.core.breakpoint.BreakpointInfo
 import com.liulishuo.okdownload.core.breakpoint.BreakpointInfo
 import com.liulishuo.okdownload.core.cause.EndCause
 import com.liulishuo.okdownload.core.cause.EndCause
 import com.liulishuo.okdownload.core.cause.ResumeFailedCause
 import com.liulishuo.okdownload.core.cause.ResumeFailedCause
+import com.swago.baseswago.PersonDataDFragment
 import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.RoomTimer
 import com.swago.baseswago.baseroom.RoomTimer
@@ -23,6 +24,8 @@ import com.swago.baseswago.constant.UrlConstant
 import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.im.IRoomChat
 import com.swago.baseswago.im.IRoomChat
 import com.swago.baseswago.model.im.RoomSystemMsgBean
 import com.swago.baseswago.model.im.RoomSystemMsgBean
+import com.swago.baseswago.model.im.UserJoinRoomBean
+import com.swago.baseswago.model.live.gift.GiftModel
 import com.swago.baseswago.util.*
 import com.swago.baseswago.util.*
 import com.swago.room.R
 import com.swago.room.R
 import com.swago.room.adapter.RoomChatAdapter
 import com.swago.room.adapter.RoomChatAdapter
@@ -30,6 +33,9 @@ import com.swago.room.databinding.FragmentBaseComBinding
 import com.swago.room.dialog.MessageListDialog
 import com.swago.room.dialog.MessageListDialog
 import com.swago.room.dialog.SendMsgDialog
 import com.swago.room.dialog.SendMsgDialog
 import com.swago.room.game.GamePlayDialog
 import com.swago.room.game.GamePlayDialog
+import com.swago.room.gift.GiftConfig
+import com.swago.room.gift.GiftDialog
+import com.swago.room.gift.GiftVm
 import com.swago.room.gift.control.SvgPlayerManager
 import com.swago.room.gift.control.SvgPlayerManager
 import com.swago.room.giftdandao.GiftDanDaoManager
 import com.swago.room.giftdandao.GiftDanDaoManager
 import com.swago.room.inter.IFooter
 import com.swago.room.inter.IFooter
@@ -52,6 +58,16 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
     IRoomActiveListener,
     IRoomActiveListener,
     RoomTimer.TimeTickListener {
     RoomTimer.TimeTickListener {
 
 
+    val giftVm by activityViewModels<GiftVm>()
+    //热门礼物列表
+    val hotList = ArrayList<GiftModel>()
+
+    //奢华礼物列表
+    val luxuryList = ArrayList<GiftModel>()
+
+    //幸运礼物列表
+    val luckyData = ArrayList<GiftModel>()
+
     val roomVm by activityViewModels<RoomVm>()
     val roomVm by activityViewModels<RoomVm>()
     val msgVm by activityViewModels<MsgVm>()
     val msgVm by activityViewModels<MsgVm>()
 
 
@@ -90,6 +106,8 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         binding.headFl.addView(iHeader.getHeaderView())
         binding.headFl.addView(iHeader.getHeaderView())
         binding.footerFl.addView(iFooter.getFooterView())
         binding.footerFl.addView(iFooter.getFooterView())
         setHeaderViewPosition()
         setHeaderViewPosition()
+        //获取礼物列表
+        giftVm.getGiftList()
         //飘条
         //飘条
         waftManager.init()
         waftManager.init()
         waftManager.waftViewList.add(binding.waftView)
         waftManager.waftViewList.add(binding.waftView)
@@ -130,7 +148,32 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         binding.headFl.layoutParams = params
         binding.headFl.layoutParams = params
     }
     }
 
 
+
+    abstract fun updateUserJoinRoom(userJoinRoomBean: UserJoinRoomBean)
+
     override fun initLiveData() {
     override fun initLiveData() {
+        msgVm.updateUserRoom = {
+            updateUserJoinRoom(it)
+        }
+
+        chatAdapter.showUserInfoDialog = {
+            var isAnchor  = false
+            SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
+                isAnchor = iRoomInfo.getAnchorId() == it.getSenderId()
+            }
+            PersonDataDFragment.newInstance(it.getSenderId(),isAnchor = isAnchor,inRoom = true).apply {
+                this.openGiftDialog = {nickName, userId ->
+                    GiftDialog.newInstance(
+                        nickName,
+                        userId,
+                        hotList,
+                        luxuryList,
+                        luckyData
+                    ).show(childFragmentManager, "GiftDialog")
+                }
+            }.show(childFragmentManager, "PersonDataDFragment")
+        }
+
         msgVm.newChatMsgFun = {
         msgVm.newChatMsgFun = {
             addChatMsgToRv(it)
             addChatMsgToRv(it)
         }
         }
@@ -145,6 +188,29 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
         msgVm.showGiftDanDao = {
         msgVm.showGiftDanDao = {
             danDaoManager.addNewMessage(it)
             danDaoManager.addNewMessage(it)
         }
         }
+
+        giftVm.allGiftLiveData.observe(this) {
+            it.forEach { giftAllModel ->
+                when (giftAllModel.gift_type) {
+                    1 -> {
+                        //热门礼物
+                        hotList.addAll(giftAllModel.data)
+                    }
+
+                    2 -> {
+                        //奢华礼物
+                        luxuryList.addAll(giftAllModel.data)
+                    }
+
+                    3 -> {
+                        //幸运礼物
+                        luckyData.addAll(giftAllModel.data)
+                        GiftConfig.list.clear()
+                        GiftConfig.list.addAll(giftAllModel.position)
+                    }
+                }
+            }
+        }
     }
     }
 
 
     private fun addChatMsgToRv(it: IRoomChat?) {
     private fun addChatMsgToRv(it: IRoomChat?) {

+ 1 - 1
room/src/main/java/com/swago/room/dialog/AnchorCloseDialog.kt

@@ -44,7 +44,7 @@ class AnchorCloseDialog : BaseXDFragment<DialogAnchorCloseBinding>(){
                 Glide.with(this).load(anchorClosedModel.user_head_img_url).into(binding.ivAvatar)
                 Glide.with(this).load(anchorClosedModel.user_head_img_url).into(binding.ivAvatar)
                 binding.tvIncomeValue.text = anchorClosedModel.income_coins
                 binding.tvIncomeValue.text = anchorClosedModel.income_coins
                 binding.tvWatcherValue.text = anchorClosedModel.total_member
                 binding.tvWatcherValue.text = anchorClosedModel.total_member
-                binding.tvTimeValue.text = TimeUtil.convertMinSecond((anchorClosedModel.broadcast_time?:"0").toLong())
+                binding.tvTimeValue.text = TimeUtil.convertMinSecond((anchorClosedModel.broadcast_time))
                 binding.tvName.text = anchorClosedModel.user_name
                 binding.tvName.text = anchorClosedModel.user_name
                 binding.tvId.text = "ID:${anchorClosedModel.user_account}"
                 binding.tvId.text = "ID:${anchorClosedModel.user_account}"
             }
             }

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

@@ -9,6 +9,8 @@ import android.webkit.WebView
 import android.webkit.WebViewClient
 import android.webkit.WebViewClient
 import android.widget.FrameLayout
 import android.widget.FrameLayout
 import com.google.gson.Gson
 import com.google.gson.Gson
+import com.swago.baseswago.baseroom.IRoomActiveListener
+import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.dialog.BaseXDFragment
 import com.swago.baseswago.dialog.BaseXDFragment
 import com.swago.baseswago.dialog.PayDialog
 import com.swago.baseswago.dialog.PayDialog
@@ -23,7 +25,7 @@ import com.swago.room.databinding.DialogGamePlayBinding
  *@date 2022/1/19 20:41
  *@date 2022/1/19 20:41
  *description:
  *description:
  */
  */
-class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>() {
+class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>(),IRoomActiveListener {
 
 
     private var url = ""
     private var url = ""
 
 
@@ -54,6 +56,7 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>() {
 
 
 
 
     override fun initOther() {
     override fun initOther() {
+        SwagoRoomManager.addListener(this)
         arguments?.let {
         arguments?.let {
             url = it.getString(URL, "")
             url = it.getString(URL, "")
             activity?.let { activity ->
             activity?.let { activity ->
@@ -96,10 +99,7 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>() {
         }
         }
     }
     }
 
 
-    override fun initLiveData() {
-
-
-    }
+    override fun initLiveData() {}
 
 
 
 
     inner class JSLoad {
     inner class JSLoad {
@@ -163,4 +163,21 @@ class GamePlayDialog : BaseXDFragment<DialogGamePlayBinding>() {
         }
         }
         super.onDestroyView()
         super.onDestroyView()
     }
     }
+
+    override fun changeRoom(iRoomInfo: IRoomInfo) {
+    }
+
+    override fun leaveRoom(iRoomInfo: IRoomInfo) {
+    }
+
+    override fun joinedRoom(iRoomInfo: IRoomInfo) {
+    }
+
+    override fun endRoom(iRoomInfo: IRoomInfo?) {
+    }
+
+    override fun closeRoomed() {
+        SwagoRoomManager.removeListener(this)
+        dismissAllowingStateLoss()
+    }
 }
 }

+ 0 - 9
room/src/main/java/com/swago/room/user/UserRoomActivity.kt

@@ -102,15 +102,6 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
                     SwagoRoomManager.closeRoom()
                     SwagoRoomManager.closeRoom()
                 }
                 }
             })
             })
-
-            ivReport.setOnClickListener(object:NoDoubleClickListener(){
-                override fun onClick() {
-                    SwagoRoomManager.iRoomInfo?.let {
-                        ReportDialog.newInstance(it.getAnchorCode())
-                            .show(supportFragmentManager, "ReportDialog")
-                    }
-                }
-            })
         }
         }
     }
     }
 
 

+ 65 - 49
room/src/main/java/com/swago/room/user/UserRoomFragment.kt

@@ -2,6 +2,7 @@ package com.swago.room.user
 
 
 import android.view.View
 import android.view.View
 import android.widget.Toast
 import android.widget.Toast
+import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.fragment.app.activityViewModels
 import androidx.fragment.app.activityViewModels
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import androidx.recyclerview.widget.RecyclerView
@@ -11,8 +12,12 @@ import com.swago.baseswago.agora.AgoraManager
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.dialog.BenefitBagDialog
 import com.swago.baseswago.dialog.BenefitBagDialog
+import com.swago.baseswago.dialog.ReportDialog
+import com.swago.baseswago.model.im.UserJoinRoomBean
+import com.swago.baseswago.model.live.RoomUserModel
 import com.swago.baseswago.model.live.gift.GiftModel
 import com.swago.baseswago.model.live.gift.GiftModel
 import com.swago.baseswago.util.AppContext
 import com.swago.baseswago.util.AppContext
+import com.swago.baseswago.util.NoDoubleClickListener
 import com.swago.baseswago.util.UserInfo
 import com.swago.baseswago.util.UserInfo
 import com.swago.room.R
 import com.swago.room.R
 import com.swago.room.adapter.GameAdapter
 import com.swago.room.adapter.GameAdapter
@@ -26,6 +31,7 @@ import com.swago.room.inter.IHeader
 import com.swago.room.vm.RoomOtherVm
 import com.swago.room.vm.RoomOtherVm
 import com.swago.room.widget.UserFooterView
 import com.swago.room.widget.UserFooterView
 import com.swago.room.widget.UserHeaderView
 import com.swago.room.widget.UserHeaderView
+import java.util.concurrent.CopyOnWriteArrayList
 
 
 /**
 /**
  *@date 2021/10/11 14:24
  *@date 2021/10/11 14:24
@@ -34,30 +40,57 @@ import com.swago.room.widget.UserHeaderView
 class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
 class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
 
 
     private val userVm by activityViewModels<UserVm>()
     private val userVm by activityViewModels<UserVm>()
-    private val giftVm by activityViewModels<GiftVm>()
     private val roomOtherVm by activityViewModels<RoomOtherVm>()
     private val roomOtherVm by activityViewModels<RoomOtherVm>()
 
 
-    //热门礼物列表
-    private val hotList = ArrayList<GiftModel>()
-
-    //奢华礼物列表
-    private val luxuryList = ArrayList<GiftModel>()
-
-    //幸运礼物列表
-    private val luckyData = ArrayList<GiftModel>()
-
     private var isForbid = false //是否被禁言
     private var isForbid = false //是否被禁言
 
 
+    private var roomUserList  = CopyOnWriteArrayList<RoomUserModel.ListBean>()
+
     override fun initOther() {
     override fun initOther() {
         super.initOther()
         super.initOther()
-        giftVm.getGiftList()
         roomOtherVm.getGameList()
         roomOtherVm.getGameList()
+
+        UserInfo.getUserInfo()?.let {
+            if (it.is_benefit == 0) {
+                binding.ivBenefit.visibility = ConstraintLayout.VISIBLE
+            } else {
+                binding.ivBenefit.visibility = ConstraintLayout.VISIBLE
+            }
+        }
+
+        binding.ivBenefit.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                val dialog = BenefitBagDialog.newInstance()
+                dialog.benefitIconDismissFun = {
+                    UserInfo.getUserInfo()?.let {
+                        if (it.is_benefit == 0) {
+                            binding.ivBenefit.visibility = ConstraintLayout.VISIBLE
+                        } else {
+                            binding.ivBenefit.visibility = ConstraintLayout.VISIBLE
+                        }
+                    }
+                }
+                dialog.show(childFragmentManager, "BenefitBagDialog")
+            }
+        })
+
+        binding.ivReport.visibility = ConstraintLayout.VISIBLE
+        binding.ivReport.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                SwagoRoomManager.iRoomInfo?.let {
+                    ReportDialog.newInstance(it.getAnchorCode())
+                        .show(childFragmentManager, "ReportDialog")
+                }
+            }
+        })
     }
     }
 
 
 
 
     override fun initLiveData() {
     override fun initLiveData() {
         super.initLiveData()
         super.initLiveData()
         roomVm.roomUserDataLiveData.observe(this) {
         roomVm.roomUserDataLiveData.observe(this) {
+            roomUserList.clear()
+            roomUserList.addAll(it)
             iHeader.updateRoomUser(it)
             iHeader.updateRoomUser(it)
         }
         }
 
 
@@ -83,12 +116,6 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
             footerView.setGameIcon(it.status == 1)
             footerView.setGameIcon(it.status == 1)
         }
         }
 
 
-        footerView.setMirrorFun = {
-            SwagoRoomManager.iRoomInfo?.let {
-                AgoraManager.setMirror(it.getAnchorId().toInt())
-            }
-        }
-
         footerView.openMessageFun = {
         footerView.openMessageFun = {
             openMessageListDialog()
             openMessageListDialog()
         }
         }
@@ -114,50 +141,29 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
             openGameDialog()
             openGameDialog()
         }
         }
 
 
-        footerView.openBenefitFun = {
-            val dialog = BenefitBagDialog.newInstance()
-            dialog.benefitIconDismissFun = {
-                footerView.setBenefit()
-            }
-            dialog.show(childFragmentManager, "BenefitBagDialog")
-        }
-
         val headerView = iHeader as UserHeaderView
         val headerView = iHeader as UserHeaderView
         headerView.followFun = {
         headerView.followFun = {
             userVm.followUser(it, 0)
             userVm.followUser(it, 0)
         }
         }
 
 
         headerView.showUserInfo = {
         headerView.showUserInfo = {
-            PersonDataDFragment.newInstance(it,isAnchor = false,inRoom = true).show(childFragmentManager, "PersonDataDFragment")
+            PersonDataDFragment.newInstance(it,isAnchor = false,inRoom = true).apply {
+                this.openGiftDialog = {nickName, userId ->
+                    GiftDialog.newInstance(
+                        nickName,
+                        userId,
+                        hotList,
+                        luxuryList,
+                        luckyData
+                    ).show(childFragmentManager, "GiftDialog")
+                }
+            }.show(childFragmentManager, "PersonDataDFragment")
         }
         }
 
 
         userVm.followStateLiveData.observe(this) {
         userVm.followStateLiveData.observe(this) {
             headerView.setFollow()
             headerView.setFollow()
         }
         }
 
 
-        giftVm.allGiftLiveData.observe(this) {
-            it.forEach { giftAllModel ->
-                when (giftAllModel.gift_type) {
-                    1 -> {
-                        //热门礼物
-                        hotList.addAll(giftAllModel.data)
-                    }
-
-                    2 -> {
-                        //奢华礼物
-                        luxuryList.addAll(giftAllModel.data)
-                    }
-
-                    3 -> {
-                        //幸运礼物
-                        luckyData.addAll(giftAllModel.data)
-                        GiftConfig.list.clear()
-                        GiftConfig.list.addAll(giftAllModel.position)
-                    }
-                }
-            }
-        }
-
         msgVm.inComeChange = {
         msgVm.inComeChange = {
             headerView.updateIncome(it)
             headerView.updateIncome(it)
         }
         }
@@ -211,4 +217,14 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
     override val iFooter: IFooter by lazy {
     override val iFooter: IFooter by lazy {
         UserFooterView(requireContext())
         UserFooterView(requireContext())
     }
     }
+
+    override fun updateUserJoinRoom(userJoinRoomBean: UserJoinRoomBean) {
+        val data = RoomUserModel.ListBean()
+        data.user_account = userJoinRoomBean.senderCode
+        data.user_head_img_url = userJoinRoomBean.userAvatar
+        data.user_id = userJoinRoomBean.senderId
+        data.user_name = userJoinRoomBean.senderName
+        roomUserList.add(0,data)
+        iHeader.updateRoomUser(roomUserList)
+    }
 }
 }

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

@@ -44,6 +44,8 @@ class MsgVm (application: Application) : AbsMsgVm(application){
 
 
     var forbidSpeakOrCancel:((cancel:Boolean)->Unit)? = null
     var forbidSpeakOrCancel:((cancel:Boolean)->Unit)? = null
 
 
+    var updateUserRoom:((userJoinRoomBean:UserJoinRoomBean)->Unit)? = null
+
     /**
     /**
      * 播放svg动画
      * 播放svg动画
      */
      */
@@ -83,6 +85,7 @@ class MsgVm (application: Application) : AbsMsgVm(application){
                     it.data?.let {
                     it.data?.let {
                         newChatMsgFun?.invoke(it)
                         newChatMsgFun?.invoke(it)
                         updateHotValue?.invoke(it.hotValue)
                         updateHotValue?.invoke(it.hotValue)
+                        updateUserRoom?.invoke(it)
                     }
                     }
 
 
                 }
                 }

+ 0 - 26
room/src/main/java/com/swago/room/widget/UserFooterView.kt

@@ -24,11 +24,9 @@ class UserFooterView : ConstraintLayout, IFooter,IRoomActiveListener {
     lateinit var binding: LayoutUserFooterViewBinding
     lateinit var binding: LayoutUserFooterViewBinding
 
 
     var openSendMsgDialog:(()->Unit)? = null
     var openSendMsgDialog:(()->Unit)? = null
-    var setMirrorFun:(()->Unit)? = null
     var openMessageFun:(()->Unit)? = null
     var openMessageFun:(()->Unit)? = null
     var openGiftPanelFun:(()->Unit)? = null
     var openGiftPanelFun:(()->Unit)? = null
     var openGameFun:(()->Unit)? = null
     var openGameFun:(()->Unit)? = null
-    var openBenefitFun:(()->Unit)? = null
 
 
     constructor(context: Context) : this(context, null)
     constructor(context: Context) : this(context, null)
     constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
     constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
@@ -44,20 +42,12 @@ class UserFooterView : ConstraintLayout, IFooter,IRoomActiveListener {
         visibility = View.GONE
         visibility = View.GONE
         SwagoRoomManager.addListener(this)
         SwagoRoomManager.addListener(this)
         binding = LayoutUserFooterViewBinding.inflate(LayoutInflater.from(context), this, true)
         binding = LayoutUserFooterViewBinding.inflate(LayoutInflater.from(context), this, true)
-        setBenefit()
-
         binding.ivChat.setOnClickListener(object : NoDoubleClickListener() {
         binding.ivChat.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
             override fun onClick() {
                 openSendMsgDialog?.invoke()
                 openSendMsgDialog?.invoke()
             }
             }
         })
         })
 
 
-        binding.ivMirror.setOnClickListener(object : NoDoubleClickListener() {
-            override fun onClick() {
-                setMirrorFun?.invoke()
-            }
-        })
-
         binding.ivMessage.setOnClickListener(object : NoDoubleClickListener() {
         binding.ivMessage.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
             override fun onClick() {
                 openMessageFun?.invoke()
                 openMessageFun?.invoke()
@@ -75,22 +65,6 @@ class UserFooterView : ConstraintLayout, IFooter,IRoomActiveListener {
                 openGameFun?.invoke()
                 openGameFun?.invoke()
             }
             }
         })
         })
-
-        binding.ivBenefit.setOnClickListener(object: NoDoubleClickListener(){
-            override fun onClick() {
-                openBenefitFun?.invoke()
-            }
-        })
-    }
-
-    fun setBenefit() {
-        UserInfo.getUserInfo()?.let {
-            if (it.is_benefit == 0) {
-                binding.ivBenefit.visibility = VISIBLE
-            } else {
-                binding.ivBenefit.visibility = VISIBLE
-            }
-        }
     }
     }
 
 
     fun setGameIcon(b: Boolean) {
     fun setGameIcon(b: Boolean) {

+ 0 - 1
room/src/main/java/com/swago/room/widget/UserHeaderView.kt

@@ -9,7 +9,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
 import androidx.recyclerview.widget.RecyclerView
 import com.alibaba.android.arouter.launcher.ARouter
 import com.alibaba.android.arouter.launcher.ARouter
 import com.bumptech.glide.Glide
 import com.bumptech.glide.Glide
-import com.swago.baseswago.PersonDataDFragment
 import com.swago.baseswago.R
 import com.swago.baseswago.R
 import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.IRoomInfo

+ 7 - 0
room/src/main/res/drawable/shape_e87230_ddb558_all_20.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient android:angle="0"
+        android:startColor="#e87230"
+        android:endColor="#ddb558"/>
+    <corners android:radius="20dp"/>
+</shape>

+ 2 - 3
room/src/main/res/layout/activity_anchor_room.xml

@@ -90,11 +90,10 @@
 
 
     <ImageView
     <ImageView
         android:id="@+id/ivClose"
         android:id="@+id/ivClose"
+        android:layout_marginTop="40dp"
         android:layout_marginEnd="10dp"
         android:layout_marginEnd="10dp"
-        android:layout_marginBottom="10dp"
         android:visibility="gone"
         android:visibility="gone"
-        android:background="@drawable/shape_80000000_20"
-        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         android:src="@mipmap/close"
         android:src="@mipmap/close"
         android:layout_width="40dp"
         android:layout_width="40dp"

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

@@ -2,6 +2,7 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
+    xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/cl"
     android:id="@+id/cl"
     xmlns:app="http://schemas.android.com/apk/res-auto">
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
 
@@ -31,6 +32,32 @@
         android:layout_height="170dp"/>
         android:layout_height="170dp"/>
 
 
 
 
+    <ImageView
+        android:id="@+id/ivBenefit"
+        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/ivReport"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:layout_marginTop="130dp"
+        android:padding="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:layout_marginStart="10dp"
+        android:src="@mipmap/icon_report"
+        android:layout_width="40dp"
+        android:layout_height="40dp"/>
+
     <com.swago.room.giftdandao.GiftDanDaoView
     <com.swago.room.giftdandao.GiftDanDaoView
         android:id="@+id/danDaoView"
         android:id="@+id/danDaoView"
         app:layout_constraintVertical_chainStyle="packed"
         app:layout_constraintVertical_chainStyle="packed"

+ 2 - 1
room/src/main/res/layout/layout_anchor_footer_view.xml

@@ -34,12 +34,13 @@
         android:src="@mipmap/live_game"
         android:src="@mipmap/live_game"
         android:visibility="gone"
         android:visibility="gone"
         tools:visibility="visible"
         tools:visibility="visible"
+        android:padding="7dp"
         android:layout_width="40dp"
         android:layout_width="40dp"
         android:layout_height="40dp"/>
         android:layout_height="40dp"/>
 
 
     <ImageView
     <ImageView
         android:id="@+id/ivMessage"
         android:id="@+id/ivMessage"
-        android:layout_marginEnd="60dp"
+        android:layout_marginEnd="10dp"
         android:background="@drawable/shape_80000000_20"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintEnd_toEndOf="parent"

+ 4 - 15
room/src/main/res/layout/layout_anchor_header_view.xml

@@ -61,25 +61,14 @@
 
 
     <androidx.recyclerview.widget.RecyclerView
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/rvUser"
         android:id="@+id/rvUser"
-        app:layout_constraintEnd_toStartOf="@+id/ivAudienceList"
-        android:layout_marginEnd="5dp"
-        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginEnd="55dp"
+        app:layout_constraintTop_toTopOf="@+id/cl"
+        app:layout_constraintBottom_toBottomOf="@+id/cl"
         android:maxWidth="200dp"
         android:maxWidth="200dp"
         android:layout_width="0dp"
         android:layout_width="0dp"
         android:layout_height="30dp"/>
         android:layout_height="30dp"/>
 
 
-    <ImageView
-        android:id="@+id/ivAudienceList"
-        android:layout_marginEnd="10dp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        android:src="@mipmap/icon_audience_list"
-        android:background="@drawable/shape_80000000_20"
-        android:visibility="gone"
-        android:layout_width="30dp"
-        android:layout_height="30dp"/>
-
-
     <TextView
     <TextView
         android:id="@+id/tvIncome"
         android:id="@+id/tvIncome"
         android:textSize="12dp"
         android:textSize="12dp"

+ 5 - 27
room/src/main/res/layout/layout_user_footer_view.xml

@@ -15,25 +15,16 @@
         android:layout_width="40dp"
         android:layout_width="40dp"
         android:layout_height="40dp"/>
         android:layout_height="40dp"/>
 
 
-    <ImageView
-        android:id="@+id/ivMirror"
-        android:layout_marginStart="10dp"
-        android:background="@drawable/shape_80000000_20"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintStart_toEndOf="@+id/ivChat"
-        android:src="@mipmap/mirror"
-        android:layout_width="40dp"
-        android:layout_height="40dp"/>
-
 
 
     <ImageView
     <ImageView
         android:id="@+id/ivGift"
         android:id="@+id/ivGift"
         android:layout_marginStart="10dp"
         android:layout_marginStart="10dp"
         android:background="@drawable/shape_80000000_20"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintStart_toEndOf="@+id/ivMirror"
+        app:layout_constraintStart_toEndOf="@+id/ivGame"
         android:src="@mipmap/live_gift"
         android:src="@mipmap/live_gift"
         android:visibility="visible"
         android:visibility="visible"
+        android:padding="7dp"
         android:layout_width="40dp"
         android:layout_width="40dp"
         android:layout_height="40dp"/>
         android:layout_height="40dp"/>
 
 
@@ -42,33 +33,20 @@
         android:layout_marginStart="10dp"
         android:layout_marginStart="10dp"
         android:background="@drawable/shape_80000000_20"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintStart_toEndOf="@+id/ivGift"
+        app:layout_constraintStart_toEndOf="@+id/ivChat"
         android:src="@mipmap/live_game"
         android:src="@mipmap/live_game"
+        android:padding="7dp"
         android:visibility="gone"
         android:visibility="gone"
         tools:visibility="visible"
         tools:visibility="visible"
         android:layout_width="40dp"
         android:layout_width="40dp"
         android:layout_height="40dp"/>
         android:layout_height="40dp"/>
 
 
-    <ImageView
-        android:id="@+id/ivBenefit"
-        android:visibility="gone"
-        tools:visibility="visible"
-        android:background="@drawable/shape_80000000_20"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/ivMessage"
-        android:layout_marginEnd="10dp"
-        android:padding="5dp"
-        android:src="@mipmap/icon_benefit"
-        android:layout_width="40dp"
-        android:layout_height="40dp"/>
-
-
     <ImageView
     <ImageView
         android:id="@+id/ivMessage"
         android:id="@+id/ivMessage"
         android:background="@drawable/shape_80000000_20"
         android:background="@drawable/shape_80000000_20"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
-        android:layout_marginEnd="60dp"
+        android:layout_marginEnd="10dp"
         android:src="@mipmap/live_message"
         android:src="@mipmap/live_message"
         android:layout_width="40dp"
         android:layout_width="40dp"
         android:layout_height="40dp"/>
         android:layout_height="40dp"/>

+ 53 - 55
room/src/main/res/layout/layout_user_header_view.xml

@@ -24,78 +24,76 @@
             android:layout_width="30dp"
             android:layout_width="30dp"
             android:layout_height="30dp"/>
             android:layout_height="30dp"/>
 
 
-        <TextView
-            android:id="@+id/tvName"
-            android:textSize="14dp"
-            android:textColor="#000"
-            app:layout_constraintTop_toTopOf="parent"
-            android:layout_marginTop="4dp"
-            android:layout_marginStart="8dp"
-            android:layout_marginEnd="8dp"
-            android:maxLines="1"
-            android:maxWidth="120dp"
-            app:layout_constraintEnd_toEndOf="parent"
+        <LinearLayout
+            android:id="@+id/ll"
+            android:orientation="vertical"
             app:layout_constraintStart_toEndOf="@+id/ivAvatar"
             app:layout_constraintStart_toEndOf="@+id/ivAvatar"
-            tools:text="NickNamed"
-            app:layout_constraintHorizontal_bias="0"
             android:layout_width="wrap_content"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"/>
+            android:layout_height="match_parent">
 
 
-        <TextView
-            android:id="@+id/tvId"
-            android:textSize="12dp"
-            android:textColor="#868686"
-            app:layout_constraintBottom_toBottomOf="parent"
-            android:layout_marginBottom="4dp"
-            android:layout_marginStart="8dp"
-            android:layout_marginEnd="8dp"
-            android:maxWidth="120dp"
+            <TextView
+                android:id="@+id/tvName"
+                android:textSize="14dp"
+                android:textColor="#000"
+                app:layout_constraintTop_toTopOf="parent"
+                android:layout_marginTop="4dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:maxLines="1"
+                android:maxWidth="120dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@+id/ivAvatar"
+                tools:text="NickNamed"
+                app:layout_constraintHorizontal_bias="0"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
+
+            <TextView
+                android:id="@+id/tvId"
+                android:textSize="12dp"
+                android:textColor="#868686"
+                app:layout_constraintBottom_toBottomOf="parent"
+                android:layout_marginBottom="4dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:maxWidth="120dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@+id/ivAvatar"
+                app:layout_constraintHorizontal_bias="0"
+                tools:text="ID:dddddddddd"
+                android:maxLines="1"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
+
+        </LinearLayout>
+
+        <ImageView
+            android:id="@+id/ivFollow"
+            android:src="@mipmap/follow"
+            app:layout_constraintTop_toTopOf="@+id/cl"
+            app:layout_constraintStart_toEndOf="@+id/ll"
+            android:visibility="gone"
+            tools:visibility="visible"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@+id/ivAvatar"
-            app:layout_constraintHorizontal_bias="0"
-            tools:text="ID:dddddddddd"
-            android:maxLines="1"
+            android:layout_marginEnd="10dp"
+            app:layout_constraintBottom_toBottomOf="@+id/cl"
             android:layout_width="wrap_content"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"/>
             android:layout_height="wrap_content"/>
 
 
     </androidx.constraintlayout.widget.ConstraintLayout>
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 
-    <ImageView
-        android:id="@+id/ivFollow"
-        android:src="@mipmap/follow"
-        app:layout_constraintTop_toTopOf="@+id/cl"
-        app:layout_constraintStart_toEndOf="@+id/cl"
-        android:layout_marginEnd="15dp"
-        android:padding="10dp"
-        android:visibility="gone"
-        tools:visibility="visible"
-        app:layout_constraintBottom_toBottomOf="@+id/cl"
-        android:layout_width="45dp"
-        android:layout_height="45dp"/>
-
     <androidx.recyclerview.widget.RecyclerView
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/rvUser"
         android:id="@+id/rvUser"
-        app:layout_constraintStart_toEndOf="@+id/ivFollow"
-        app:layout_constraintEnd_toStartOf="@+id/ivAudienceList"
-        android:layout_marginEnd="5dp"
+        app:layout_constraintStart_toEndOf="@+id/cl"
+        app:layout_constraintEnd_toEndOf="parent"
+        android:layout_marginEnd="55dp"
+        android:layout_marginStart="10dp"
         app:layout_constraintTop_toTopOf="@+id/cl"
         app:layout_constraintTop_toTopOf="@+id/cl"
         app:layout_constraintBottom_toBottomOf="@+id/cl"
         app:layout_constraintBottom_toBottomOf="@+id/cl"
         android:maxWidth="200dp"
         android:maxWidth="200dp"
         android:layout_width="0dp"
         android:layout_width="0dp"
         android:layout_height="30dp"/>
         android:layout_height="30dp"/>
 
 
-    <ImageView
-        android:id="@+id/ivAudienceList"
-        android:layout_marginEnd="10dp"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        android:src="@mipmap/icon_audience_list"
-        android:background="@drawable/shape_80000000_20"
-        android:visibility="gone"
-        android:layout_width="30dp"
-        android:layout_height="30dp"/>
-
-
     <TextView
     <TextView
         android:id="@+id/tvIncome"
         android:id="@+id/tvIncome"
         android:textSize="12dp"
         android:textSize="12dp"

+ 2 - 14
room/src/main/res/layout/layout_user_room.xml

@@ -20,23 +20,11 @@
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>
         android:layout_height="match_parent"/>
 
 
-    <ImageView
-        android:id="@+id/ivReport"
-        app:layout_constraintTop_toTopOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        android:layout_marginTop="130dp"
-        android:padding="5dp"
-        android:layout_marginStart="10dp"
-        android:src="@mipmap/icon_report"
-        android:layout_width="40dp"
-        android:layout_height="40dp"/>
-
     <ImageView
     <ImageView
         android:id="@+id/ivClose"
         android:id="@+id/ivClose"
         android:layout_marginEnd="10dp"
         android:layout_marginEnd="10dp"
-        android:layout_marginBottom="10dp"
-        android:background="@drawable/shape_80000000_20"
-        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginTop="40dp"
+        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         android:src="@mipmap/close"
         android:src="@mipmap/close"
         android:layout_width="40dp"
         android:layout_width="40dp"

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


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


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


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


+ 3 - 11
user/src/main/java/com/swago/user/SettingActivity.kt

@@ -42,10 +42,6 @@ class SettingActivity : BaseXActivity<ActivitySettingBinding>() {
         binding.tvUserAgreement.setOnClickListener(object : NoDoubleClickListener() {
         binding.tvUserAgreement.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
             override fun onClick() {
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
-                    .withString(
-                        "title",
-                        AppContext.getContext().resources.getString(R.string.user_agreement)
-                    )
                     .withString("url", UrlConstant.USER_AGREEMENT)
                     .withString("url", UrlConstant.USER_AGREEMENT)
                     .navigation()
                     .navigation()
             }
             }
@@ -54,10 +50,6 @@ class SettingActivity : BaseXActivity<ActivitySettingBinding>() {
         binding.tvUserPrivacy.setOnClickListener(object : NoDoubleClickListener() {
         binding.tvUserPrivacy.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
             override fun onClick() {
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
                 ARouter.getInstance().build(ARouteConstant.Base.webView)
-                    .withString(
-                        "title",
-                        AppContext.getContext().resources.getString(R.string.privacy_policy)
-                    )
                     .withString("url", UrlConstant.USER_PRIVACY)
                     .withString("url", UrlConstant.USER_PRIVACY)
                     .navigation()
                     .navigation()
             }
             }
@@ -71,15 +63,15 @@ class SettingActivity : BaseXActivity<ActivitySettingBinding>() {
     }
     }
 
 
     override fun initLiveData() {
     override fun initLiveData() {
-        userVm.logoutLiveData.observe(this,{
-            TUIKit.logout(object: IUIKitCallBack {
+        userVm.logoutLiveData.observe(this) {
+            TUIKit.logout(object : IUIKitCallBack {
                 override fun onSuccess(data: Any?) {}
                 override fun onSuccess(data: Any?) {}
                 override fun onError(module: String?, errCode: Int, errMsg: String?) {}
                 override fun onError(module: String?, errCode: Int, errMsg: String?) {}
             })
             })
             ARouter.getInstance().build(ARouteConstant.Login.login)
             ARouter.getInstance().build(ARouteConstant.Login.login)
                 .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
                 .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
                 .navigation()
                 .navigation()
-        })
+        }
     }
     }