honghengqiang před 2 roky
rodič
revize
ea9242ed81
34 změnil soubory, kde provedl 532 přidání a 16 odebrání
  1. 4 1
      .idea/misc.xml
  2. 12 0
      baseswago/src/main/java/com/swago/baseswago/PersonDataDFragment.kt
  3. 11 0
      baseswago/src/main/java/com/swago/baseswago/im/GroupMsgParser.kt
  4. 5 0
      baseswago/src/main/java/com/swago/baseswago/im/ImConstant.kt
  5. 18 0
      baseswago/src/main/java/com/swago/baseswago/model/BlackListModel.java
  6. 18 0
      baseswago/src/main/java/com/swago/baseswago/model/MomentModel.java
  7. 26 0
      baseswago/src/main/java/com/swago/baseswago/model/UserInfoModel.java
  8. 2 0
      baseswago/src/main/java/com/swago/baseswago/model/im/FollowSuccessMsgBean.java
  9. 2 0
      baseswago/src/main/java/com/swago/baseswago/model/im/RoomChatMsgBean.java
  10. 2 0
      baseswago/src/main/java/com/swago/baseswago/model/im/UserJoinRoomBean.java
  11. 44 0
      baseswago/src/main/java/com/swago/baseswago/model/live/RoomUserChangeModel.java
  12. 18 0
      baseswago/src/main/java/com/swago/baseswago/model/live/RoomUserModel.java
  13. 21 2
      baseswago/src/main/res/layout/dialog_person_data.xml
  14. binární
      baseswago/src/main/res/mipmap-ar-xxhdpi/icon_official_bg.webp
  15. binární
      baseswago/src/main/res/mipmap-xxhdpi/icon_official_bg.webp
  16. 2 0
      baseswago/src/main/res/values-ar/strings.xml
  17. 2 0
      baseswago/src/main/res/values-in/strings.xml
  18. 2 0
      baseswago/src/main/res/values-ms/strings.xml
  19. 2 0
      baseswago/src/main/res/values-zh/strings.xml
  20. 2 0
      baseswago/src/main/res/values/strings.xml
  21. 14 0
      home/src/main/java/com/swago/home/MineFragment.kt
  22. 4 2
      home/src/main/java/com/swago/home/search/SearchAdapter.kt
  23. 37 2
      home/src/main/res/layout/fragment_mine.xml
  24. 36 0
      home/src/main/res/layout/item_search.xml
  25. 4 1
      room/src/main/java/com/swago/room/adapter/AudienceAdapter.kt
  26. 112 1
      room/src/main/java/com/swago/room/adapter/RoomChatAdapter.kt
  27. 4 4
      room/src/main/java/com/swago/room/base/BaseComFragment.kt
  28. 4 0
      room/src/main/java/com/swago/room/dialog/SendMsgDialog.kt
  29. 11 3
      room/src/main/java/com/swago/room/vm/MsgVm.kt
  30. 36 0
      room/src/main/res/layout/item_dialog_audience.xml
  31. 19 0
      room/src/main/res/layout/item_official_icon.xml
  32. 20 0
      room/src/main/res/layout/item_service.xml
  33. 3 0
      user/src/main/java/com/swago/user/adapter/FollowFanAdapter.kt
  34. 35 0
      user/src/main/res/layout/item_follow_fan.xml

+ 4 - 1
.idea/misc.xml

@@ -101,7 +101,7 @@
         <entry key="home/src/main/res/layout/fragment_home.xml" value="0.25" />
         <entry key="home/src/main/res/layout/fragment_hot.xml" value="0.35" />
         <entry key="home/src/main/res/layout/fragment_message.xml" value="0.25" />
-        <entry key="home/src/main/res/layout/fragment_mine.xml" value="0.25" />
+        <entry key="home/src/main/res/layout/fragment_mine.xml" value="0.73017578125" />
         <entry key="home/src/main/res/layout/fragment_moment.xml" value="0.25" />
         <entry key="home/src/main/res/layout/fragment_new.xml" value="0.35" />
         <entry key="home/src/main/res/layout/item_home.xml" value="0.3964984552008239" />
@@ -156,11 +156,14 @@
         <entry key="room/src/main/res/layout/item_game.xml" value="0.3776041666666667" />
         <entry key="room/src/main/res/layout/item_gift.xml" value="0.75" />
         <entry key="room/src/main/res/layout/item_level.xml" value="0.3776041666666667" />
+        <entry key="room/src/main/res/layout/item_liang.xml" value="0.39166666666666666" />
+        <entry key="room/src/main/res/layout/item_official.xml" value="0.390625" />
         <entry key="room/src/main/res/layout/item_page_gift.xml" value="0.36302083333333335" />
         <entry key="room/src/main/res/layout/item_pk_search.xml" value="0.2586050724637681" />
         <entry key="room/src/main/res/layout/item_pk_seat.xml" value="0.67" />
         <entry key="room/src/main/res/layout/item_rank_list.xml" value="0.3770833333333333" />
         <entry key="room/src/main/res/layout/item_room_user.xml" value="0.3446557971014493" />
+        <entry key="room/src/main/res/layout/item_service.xml" value="0.390625" />
         <entry key="room/src/main/res/layout/layout_anchor_footer_view.xml" value="0.35688405797101447" />
         <entry key="room/src/main/res/layout/layout_anchor_header_view.xml" value="0.33" />
         <entry key="room/src/main/res/layout/layout_pk_view.xml" value="0.5" />

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

@@ -167,6 +167,18 @@ class PersonDataDFragment : BaseXDFragment<DialogPersonDataBinding>() {
             } else {
                 binding.ivOnLive.visibility = View.GONE
             }
+
+            if (it.is_service == 1){
+                binding.tvAgent.visibility = View.VISIBLE
+            }else{
+                binding.tvAgent.visibility = View.GONE
+            }
+
+            if (it.is_official == 1){
+                binding.tvOfficial.visibility = View.VISIBLE
+            }else{
+                binding.tvOfficial.visibility = View.GONE
+            }
         }
 
 

+ 11 - 0
baseswago/src/main/java/com/swago/baseswago/im/GroupMsgParser.kt

@@ -21,6 +21,7 @@ import com.swago.baseswago.im.ImConstant.red_envelope_broadcast
 import com.swago.baseswago.im.ImConstant.remove_room
 import com.swago.baseswago.im.ImConstant.room_chat_text
 import com.swago.baseswago.im.ImConstant.svg_gift
+import com.swago.baseswago.im.ImConstant.update_audience
 import com.swago.baseswago.im.ImConstant.user_exit_room
 import com.swago.baseswago.im.ImConstant.user_join_room
 import com.swago.baseswago.model.RedEnvelope
@@ -28,6 +29,7 @@ import com.swago.baseswago.model.im.*
 import com.swago.baseswago.model.live.ForceCloseModel
 import com.swago.baseswago.model.live.ReceiveModel
 import com.swago.baseswago.model.im.GamePrize
+import com.swago.baseswago.model.live.RoomUserChangeModel
 import com.swago.baseswago.model.live.gift.IMGiftModel
 import com.swago.baseswago.model.live.pk.*
 import com.swago.baseswago.util.LogUtil
@@ -81,6 +83,15 @@ class GroupMsgParser : IGroupNewMsgParser {
                     parserModel = gson.fromJson(resultString,parameterizedTypeImpl)
                 }
 
+                update_audience -> {
+                    parameterizedTypeImpl = ParameterizedTypeImpl(
+                        arrayOf<Type>(RoomUserChangeModel::class.java),
+                        CusNewMsgBean::class.java,
+                        CusNewMsgBean::class.java
+                    )
+                    parserModel = gson.fromJson(resultString,parameterizedTypeImpl)
+                }
+
                 anchor_close_room -> {
                     parameterizedTypeImpl = ParameterizedTypeImpl(
                         arrayOf<Type>(AnchorRoomClosedBean::class.java),

+ 5 - 0
baseswago/src/main/java/com/swago/baseswago/im/ImConstant.kt

@@ -21,6 +21,11 @@ object ImConstant {
      */
     const val user_exit_room = 2
 
+    /**
+     * 观众列表更新
+     */
+    const val update_audience = 5
+
     /**
      * 主播关播直播间
      */

+ 18 - 0
baseswago/src/main/java/com/swago/baseswago/model/BlackListModel.java

@@ -49,6 +49,8 @@ public class BlackListModel {
         private String user_signature;
         private int user_sex;
         private String created_at;
+        private int is_service;
+        private int is_official;
 
         public String getUser_name() {
             return user_name;
@@ -105,5 +107,21 @@ public class BlackListModel {
         public void setCreated_at(String created_at) {
             this.created_at = created_at;
         }
+
+        public int getIs_service() {
+            return is_service;
+        }
+
+        public void setIs_service(int is_service) {
+            this.is_service = is_service;
+        }
+
+        public int getIs_official() {
+            return is_official;
+        }
+
+        public void setIs_official(int is_official) {
+            this.is_official = is_official;
+        }
     }
 }

+ 18 - 0
baseswago/src/main/java/com/swago/baseswago/model/MomentModel.java

@@ -31,6 +31,8 @@ public class MomentModel implements Parcelable {
     private int is_robot;
     private boolean forbid_status;
     private String game_url;
+    private int is_service;
+    private int is_official;
 
     protected MomentModel(Parcel in) {
         user_account = in.readString();
@@ -211,4 +213,20 @@ public class MomentModel implements Parcelable {
     public void setGame_url(String game_url) {
         this.game_url = game_url;
     }
+
+    public int getIs_service() {
+        return is_service;
+    }
+
+    public void setIs_service(int is_service) {
+        this.is_service = is_service;
+    }
+
+    public int getIs_official() {
+        return is_official;
+    }
+
+    public void setIs_official(int is_official) {
+        this.is_official = is_official;
+    }
 }

+ 26 - 0
baseswago/src/main/java/com/swago/baseswago/model/UserInfoModel.java

@@ -53,6 +53,16 @@ public class UserInfoModel {
      */
     private int user_agent_id;
 
+    /**
+     * 是否是代理
+     */
+    private int is_service;
+
+    /**
+     * 是否是官方
+     */
+    private int is_official;
+
 
 
 
@@ -271,4 +281,20 @@ public class UserInfoModel {
     public void setUser_agent_id(int user_agent_id) {
         this.user_agent_id = user_agent_id;
     }
+
+    public int getIs_service() {
+        return is_service;
+    }
+
+    public void setIs_service(int is_service) {
+        this.is_service = is_service;
+    }
+
+    public int getIs_official() {
+        return is_official;
+    }
+
+    public void setIs_official(int is_official) {
+        this.is_official = is_official;
+    }
 }

+ 2 - 0
baseswago/src/main/java/com/swago/baseswago/model/im/FollowSuccessMsgBean.java

@@ -20,6 +20,8 @@ public class FollowSuccessMsgBean implements IRoomChat {
    public int senderLevel;
    public int isBenefit;
    public int isPrettyAccount;
+   public int isService;
+   public int isOfficial;
 
 
    @NonNull

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

@@ -18,6 +18,8 @@ public class RoomChatMsgBean implements IRoomChat {
     public int senderLevel;
     public int isBenefit;
     public int isPrettyAccount;
+    public int isService;
+    public int isOfficial;
 
 
     @NonNull

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

@@ -23,6 +23,8 @@ public class UserJoinRoomBean implements IRoomChat {
     public int senderLevel;
     public int isBenefit;
     public int isPrettyAccount;
+    public int isService;
+    public int isOfficial;
 
     @NonNull
     @Override

+ 44 - 0
baseswago/src/main/java/com/swago/baseswago/model/live/RoomUserChangeModel.java

@@ -0,0 +1,44 @@
+package com.swago.baseswago.model.live;
+
+import java.util.ArrayList;
+
+public class RoomUserChangeModel {
+
+
+    private int count;
+    private String group_id;
+    private String room_id;
+    private ArrayList<RoomUserModel.ListBean> users;
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public String getGroup_id() {
+        return group_id;
+    }
+
+    public void setGroup_id(String group_id) {
+        this.group_id = group_id;
+    }
+
+    public String getRoom_id() {
+        return room_id;
+    }
+
+    public void setRoom_id(String room_id) {
+        this.room_id = room_id;
+    }
+
+    public ArrayList<RoomUserModel.ListBean> getUsers() {
+        return users;
+    }
+
+    public void setUsers(ArrayList<RoomUserModel.ListBean> users) {
+        this.users = users;
+    }
+}

+ 18 - 0
baseswago/src/main/java/com/swago/baseswago/model/live/RoomUserModel.java

@@ -50,6 +50,8 @@ public class RoomUserModel {
         private int user_age;
         private int is_benefit;
         private int user_wealth_level;
+        private int is_service;
+        private int is_official;
 
         public String getUser_id() {
             return user_id;
@@ -123,5 +125,21 @@ public class RoomUserModel {
         public void setUser_wealth_level(int user_wealth_level) {
             this.user_wealth_level = user_wealth_level;
         }
+
+        public int getIs_service() {
+            return is_service;
+        }
+
+        public void setIs_service(int is_service) {
+            this.is_service = is_service;
+        }
+
+        public int getIs_official() {
+            return is_official;
+        }
+
+        public void setIs_official(int is_official) {
+            this.is_official = is_official;
+        }
     }
 }

+ 21 - 2
baseswago/src/main/res/layout/dialog_person_data.xml

@@ -96,19 +96,38 @@
             <TextView
                 android:id="@+id/tvAgent"
                 android:textSize="10dp"
-                android:text="Agent"
+                android:text="@string/agent"
                 android:textColor="#fff"
                 android:paddingStart="16dp"
                 android:paddingEnd="5dp"
                 android:visibility="gone"
+                tools:visibility="visible"
+                android:layout_marginStart="5dp"
                 android:background="@mipmap/icon_agent_bg"
                 app:layout_constraintBottom_toBottomOf="@+id/tvLevelView"
                 app:layout_constraintTop_toTopOf="@+id/tvLevelView"
                 app:layout_constraintStart_toEndOf="@+id/ivVip"
-                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/tvOfficial"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"/>
 
+            <TextView
+                android:id="@+id/tvOfficial"
+                android:textSize="10dp"
+                android:text="@string/official"
+                android:textColor="#fff"
+                android:paddingStart="16dp"
+                android:paddingEnd="5dp"
+                android:layout_marginStart="5dp"
+                android:visibility="gone"
+                tools:visibility="visible"
+                android:background="@mipmap/icon_official_bg"
+                app:layout_constraintBottom_toBottomOf="@+id/tvLevelView"
+                app:layout_constraintTop_toTopOf="@+id/tvLevelView"
+                app:layout_constraintStart_toEndOf="@+id/tvAgent"
+                app:layout_constraintEnd_toEndOf="parent"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"/>
 
 
             <LinearLayout

binární
baseswago/src/main/res/mipmap-ar-xxhdpi/icon_official_bg.webp


binární
baseswago/src/main/res/mipmap-xxhdpi/icon_official_bg.webp


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

@@ -186,4 +186,6 @@
     <string name="live_time">وقت البث المباشر هذا:</string>
     <string name="live_all_time">إجمالي وقت البث المباشر:</string>
     <string name="watcher_num">إجمالي المشاهدين:</string>
+    <string name="agent">Agent</string>
+    <string name="official">Official</string>
 </resources>

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

@@ -190,4 +190,6 @@
     <string name="live_time">Durasi live:</string>
     <string name="live_all_time">Durasi total live:</string>
     <string name="watcher_num">Jumlah penonton:</string>
+    <string name="agent">Agent</string>
+    <string name="official">Official</string>
 </resources>

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

@@ -187,4 +187,6 @@
     <string name="live_time">Live duration:</string>
     <string name="live_all_time">Total live broadcast time:</string>
     <string name="watcher_num">Total Viewers:</string>
+    <string name="agent">Agent</string>
+    <string name="official">Official</string>
 </resources>

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

@@ -186,4 +186,6 @@
     <string name="live_time">直播时长:</string>
     <string name="live_all_time">直播总时长:</string>
     <string name="watcher_num">总计观看人数:</string>
+    <string name="agent">Agent</string>
+    <string name="official">Official</string>
 </resources>

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

@@ -206,5 +206,7 @@
     <string name="live_time">Live duration:</string>
     <string name="live_all_time">Total live broadcast time:</string>
     <string name="watcher_num">Total Viewers:</string>
+    <string name="agent">Agent</string>
+    <string name="official">Official</string>
 
 </resources>

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

@@ -144,6 +144,20 @@ class MineFragment : BaseXFragment<FragmentMineBinding>() {
             }else{
                 binding.ivVip.visibility = View.GONE
             }
+
+            if (it.is_service == 1){
+                binding.tvAgent.visibility = View.VISIBLE
+            }else{
+                binding.tvAgent.visibility = View.GONE
+            }
+
+            if (it.is_official== 1){
+                binding.tvOfficial.visibility = View.VISIBLE
+            }else{
+                binding.tvOfficial.visibility = View.GONE
+            }
+
+
         }
 
         payVm.benefitLiveData.observe(this){

+ 4 - 2
home/src/main/java/com/swago/home/search/SearchAdapter.kt

@@ -29,8 +29,6 @@ class SearchAdapter :
                 } else {
                     setImageResource(R.id.ivSex, R.mipmap.info_female)
                 }
-
-                setVisible(R.id.ivStatus, true)
                 if (item.is_follow == 1){
                     setImageResource(R.id.ivStatus, R.mipmap.followed)
                 }else{
@@ -43,6 +41,10 @@ class SearchAdapter :
                 Glide.with(itemView.context).load(item.user_head_img_url)
                     .placeholder(R.mipmap.default_avatar)
                     .error(R.mipmap.default_avatar).centerCrop().into(ivAvatar)
+
+                setVisible(R.id.ivStatus, true)
+                setGone(R.id.tvAgent,item.is_service == 1)
+                setGone(R.id.tvOfficial,item.is_official == 1)
             }
 
         }

+ 37 - 2
home/src/main/res/layout/fragment_mine.xml

@@ -77,11 +77,46 @@
         android:layout_marginStart="5dp"
         android:src="@mipmap/vip"
         android:visibility="gone"
-        app:layout_constraintTop_toTopOf="@+id/tvName"
-        app:layout_constraintBottom_toBottomOf="@+id/tvName"
+        app:layout_constraintTop_toTopOf="@+id/tvLevelView"
+        app:layout_constraintBottom_toBottomOf="@+id/tvLevelView"
         app:layout_constraintStart_toEndOf="@+id/tvLevelView"
         tools:visibility="visible" />
 
+    <TextView
+        android:id="@+id/tvAgent"
+        android:textSize="10dp"
+        android:text="@string/agent"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:layout_marginStart="5dp"
+        android:background="@mipmap/icon_agent_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvLevelView"
+        app:layout_constraintTop_toTopOf="@+id/tvLevelView"
+        app:layout_constraintStart_toEndOf="@+id/ivVip"
+        app:layout_constraintEnd_toStartOf="@+id/tvOfficial"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <TextView
+        android:id="@+id/tvOfficial"
+        android:textSize="10dp"
+        android:text="@string/official"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:layout_marginStart="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:background="@mipmap/icon_official_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvLevelView"
+        app:layout_constraintTop_toTopOf="@+id/tvLevelView"
+        app:layout_constraintStart_toEndOf="@+id/tvAgent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
     <com.swago.baseswago.cusview.RegularTextView
         android:id="@+id/tvID"
         android:layout_width="wrap_content"

+ 36 - 0
home/src/main/res/layout/item_search.xml

@@ -35,6 +35,42 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
+    <TextView
+        android:id="@+id/tvAgent"
+        android:textSize="10dp"
+        android:text="@string/agent"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:layout_marginStart="5dp"
+        android:background="@mipmap/icon_agent_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvLevel"
+        app:layout_constraintTop_toTopOf="@+id/tvLevel"
+        app:layout_constraintStart_toEndOf="@+id/tvLevel"
+        app:layout_constraintEnd_toStartOf="@+id/tvOfficial"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <TextView
+        android:id="@+id/tvOfficial"
+        android:textSize="10dp"
+        android:text="@string/official"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:layout_marginStart="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:background="@mipmap/icon_official_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvLevel"
+        app:layout_constraintTop_toTopOf="@+id/tvLevel"
+        app:layout_constraintStart_toEndOf="@+id/tvAgent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+
     <TextView
         android:id="@+id/tvId"
         android:textSize="14dp"

+ 4 - 1
room/src/main/java/com/swago/room/adapter/AudienceAdapter.kt

@@ -1,5 +1,6 @@
 package com.swago.room.adapter
 
+import android.view.View
 import com.chad.library.adapter.base.BaseQuickAdapter
 import com.chad.library.adapter.base.BaseViewHolder
 import com.swago.baseswago.cusview.SwagoLevelView
@@ -17,7 +18,9 @@ class AudienceAdapter : BaseQuickAdapter<RoomUserModel.ListBean, BaseViewHolder>
         helper.apply {
             itemView.findViewById<CircleImageView>(R.id.ivAvatar).loadUrl(mContext,item.user_head_img_url)
             setText(R.id.tvName,item.user_name)
-            setVisible(R.id.ivBenefit,item.is_benefit == 1)
+            setGone(R.id.ivBenefit,item.is_benefit == 1)
+            setGone(R.id.tvAgent,item.is_service == 1)
+            setGone(R.id.tvOfficial,item.is_official == 1)
             itemView.findViewById<SwagoLevelView>(R.id.tvLevel).setUserLevel(item.user_wealth_level)
         }
     }

+ 112 - 1
room/src/main/java/com/swago/room/adapter/RoomChatAdapter.kt

@@ -11,12 +11,16 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
 import com.chad.library.adapter.base.BaseQuickAdapter
 import com.chad.library.adapter.base.BaseViewHolder
 import com.swago.baseswago.cusview.LiangView
 import com.swago.baseswago.cusview.SwagoLevelView
 import com.swago.baseswago.im.IRoomChat
 import com.swago.baseswago.im.RoomMsgType
+import com.swago.baseswago.model.im.FollowSuccessMsgBean
+import com.swago.baseswago.model.im.RoomChatMsgBean
+import com.swago.baseswago.model.im.UserJoinRoomBean
 import com.swago.formatAr
 import com.swago.room.R
 import com.swago.room.adapter.bitmap.CenterAlignImageSpan
@@ -41,11 +45,15 @@ class RoomChatAdapter :
     companion object {
         const val LEVEL_KEY = "level"
         const val PRETTY_KEY = "pretty"//靓号
+        const val IS_OFFICIAL = "official"
+        const val IS_SERVICE = "service"
     }
 
     init {
         localImageKey.add(LEVEL_KEY)
         localImageKey.add(PRETTY_KEY)
+        localImageKey.add(IS_OFFICIAL)
+        localImageKey.add(IS_SERVICE)
     }
 
     var showUserInfoDialog: ((iChatMsg: IRoomChat) -> Unit)? = null
@@ -73,6 +81,21 @@ class RoomChatAdapter :
                             .append("'> ")
                     }
 
+                    if (item is RoomChatMsgBean&&item.isService==1){
+                        count++
+                        sb.append("<img src='" + "file:///xx/")
+                            .append(IS_SERVICE).append(".png")
+                            .append("'> ")
+                    }
+
+                    if (item is RoomChatMsgBean&&item.isOfficial==1){
+                        count++
+                        sb.append("<img src='" + "file:///xx/")
+                            .append(IS_OFFICIAL).append(".png")
+                            .append("'> ")
+                    }
+
+
                     count++
                     sb.append("<img src='" + "file:///xx/")
                         .append(LEVEL_KEY).append(".png")
@@ -148,6 +171,20 @@ class RoomChatAdapter :
                             .append("'> ")
                     }
 
+                    if (item is FollowSuccessMsgBean&&item.isService==1){
+                        count++
+                        sb.append("<img src='" + "file:///xx/")
+                            .append(IS_SERVICE).append(".png")
+                            .append("'> ")
+                    }
+
+                    if (item is FollowSuccessMsgBean&&item.isOfficial==1){
+                        count++
+                        sb.append("<img src='" + "file:///xx/")
+                            .append(IS_OFFICIAL).append(".png")
+                            .append("'> ")
+                    }
+
                     count++
                     sb.append("<img src='" + "file:///xx/")
                         .append(LEVEL_KEY).append(".png")
@@ -211,6 +248,20 @@ class RoomChatAdapter :
                             .append("'> ")
                     }
 
+                    if (item is UserJoinRoomBean&&item.isService==1){
+                        count++
+                        sb.append("<img src='" + "file:///xx/")
+                            .append(IS_SERVICE).append(".png")
+                            .append("'> ")
+                    }
+
+                    if (item is UserJoinRoomBean&&item.isOfficial==1){
+                        count++
+                        sb.append("<img src='" + "file:///xx/")
+                            .append(IS_OFFICIAL).append(".png")
+                            .append("'> ")
+                    }
+
                     count++
                     sb.append("<img src='" + "file:///xx/")
                         .append(LEVEL_KEY).append(".png")
@@ -322,6 +373,20 @@ class RoomChatAdapter :
                         end,
                         Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
                     )
+                } else if(imageSpan.source != null && imageSpan!!.source!!.contains(IS_SERVICE)){
+                    span.setSpan(
+                        setService(helper.itemView as ViewGroup),
+                        start,
+                        end,
+                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                    )
+                } else if(imageSpan.source != null && imageSpan!!.source!!.contains(IS_OFFICIAL)){
+                    span.setSpan(
+                        setOfficial(helper.itemView as ViewGroup),
+                        start,
+                        end,
+                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
+                    )
                 }else {
                     span.setSpan(newImageSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
                 }
@@ -333,6 +398,53 @@ class RoomChatAdapter :
         }
     }
 
+
+    private fun setService(viewGroup: ViewGroup):CustomImageSpan {
+        var bm = iconBitmapCachePool["service"]
+        if (bm == null) {
+            val view = LayoutInflater.from(mContext)
+                .inflate(R.layout.item_service, viewGroup, false) as ConstraintLayout
+            view.measure(
+                View.MeasureSpec.makeMeasureSpec(
+                    (1 shl 30) - 1,
+                    View.MeasureSpec.AT_MOST
+                ),
+                View.MeasureSpec.makeMeasureSpec(
+                    (1 shl 30) - 1,
+                    View.MeasureSpec.AT_MOST
+                )
+            )
+            bm = convertViewToBitmap(view)
+            if (bm != null) {
+                iconBitmapCachePool["service"] = bm
+            }
+        }
+        return CustomImageSpan(mContext, bm, CustomImageSpan.ALIGN_FONTCENTER)
+    }
+
+    private fun setOfficial(viewGroup: ViewGroup):CustomImageSpan {
+        var bm = iconBitmapCachePool["official"]
+        if (bm == null) {
+            val view = LayoutInflater.from(mContext)
+                .inflate(R.layout.item_official_icon, viewGroup, false) as ConstraintLayout
+            view.measure(
+                View.MeasureSpec.makeMeasureSpec(
+                    (1 shl 30) - 1,
+                    View.MeasureSpec.AT_MOST
+                ),
+                View.MeasureSpec.makeMeasureSpec(
+                    (1 shl 30) - 1,
+                    View.MeasureSpec.AT_MOST
+                )
+            )
+            bm = convertViewToBitmap(view)
+            if (bm != null) {
+                iconBitmapCachePool["official"] = bm
+            }
+        }
+        return CustomImageSpan(mContext, bm, CustomImageSpan.ALIGN_FONTCENTER)
+    }
+
     private fun setPrettyId(senderId: String, viewGroup: ViewGroup): CustomImageSpan {
         var bm = iconBitmapCachePool[senderId + "level"]
         if (bm == null) {
@@ -354,7 +466,6 @@ class RoomChatAdapter :
                 iconBitmapCachePool[senderId + "level"] = bm
             }
         }
-
         return CustomImageSpan(mContext, bm, CustomImageSpan.ALIGN_FONTCENTER)
     }
 

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

@@ -182,10 +182,10 @@ abstract class BaseComFragment<T : FragmentBaseComBinding> : BaseXFragment<T>(),
             }
         }
 
-        msgVm.updateUserRoom = {
-            if (roomUserList.size<5){
-                roomVm.loadRoomData()
-            }
+        msgVm.updateUserRoom = { data,count ->
+            roomUserList.clear()
+            roomUserList.addAll(data)
+            (iHeader as ComHeaderView).updateRoomUser(roomUserList,count)
         }
 
         chatAdapter.showUserInfoDialog = {

+ 4 - 0
room/src/main/java/com/swago/room/dialog/SendMsgDialog.kt

@@ -99,6 +99,8 @@ class SendMsgDialog : BaseXDFragment<DialogSendMsgBinding>() {
                         roomChatMsgBean.isBenefit = it.is_benefit
                         roomChatMsgBean.isPrettyAccount = it.is_pretty_account
                         roomChatMsgBean.roomId = SwagoRoomManager.iRoomInfo?.getRoomId()?:""
+                        roomChatMsgBean.isService = it.is_service
+                        roomChatMsgBean.isOfficial = it.is_official
                         addSenderMsgToRoomChatList?.invoke(roomChatMsgBean)
 
                         val jsonObject = JSONObject()
@@ -109,6 +111,8 @@ class SendMsgDialog : BaseXDFragment<DialogSendMsgBinding>() {
                         jsonObject.put("isBenefit", it.is_benefit)
                         jsonObject.put("content", content)
                         jsonObject.put("isPrettyAccount", it.is_pretty_account)
+                        jsonObject.put("isService", it.is_service)
+                        jsonObject.put("isOfficial", it.is_official)
 
                         val jsonObjectType = JSONObject()
                         jsonObjectType.put("type", room_chat_text)

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

@@ -18,6 +18,7 @@ import com.swago.baseswago.im.ImConstant.red_envelope_broadcast
 import com.swago.baseswago.im.ImConstant.remove_room
 import com.swago.baseswago.im.ImConstant.room_chat_text
 import com.swago.baseswago.im.ImConstant.svg_gift
+import com.swago.baseswago.im.ImConstant.update_audience
 import com.swago.baseswago.im.ImConstant.user_exit_room
 import com.swago.baseswago.im.ImConstant.user_join_room
 import com.swago.baseswago.model.RedEnvelope
@@ -25,6 +26,8 @@ import com.swago.baseswago.model.im.*
 import com.swago.baseswago.model.live.ForceCloseModel
 import com.swago.baseswago.model.live.ReceiveModel
 import com.swago.baseswago.model.im.GamePrize
+import com.swago.baseswago.model.live.RoomUserChangeModel
+import com.swago.baseswago.model.live.RoomUserModel
 import com.swago.baseswago.model.live.gift.IMGiftModel
 import com.swago.baseswago.util.UserInfo
 
@@ -51,7 +54,7 @@ class MsgVm(application: Application) : AbsMsgVm(application) {
 
     var forbidSpeakOrCancel: ((cancel: Boolean) -> Unit)? = null
 
-    var updateUserRoom: (() -> Unit)? = null
+    var updateUserRoom: ((data: ArrayList<RoomUserModel.ListBean>, count: Int) -> Unit)? = null
 
     var newRedEnvelopeCome: ((redEnvelope: RedEnvelope) -> Unit)? = null
 
@@ -90,7 +93,6 @@ class MsgVm(application: Application) : AbsMsgVm(application) {
                     it.data?.let {
                         newChatMsgFun?.invoke(it)
                         updateHotValue?.invoke(it.hotValue)
-                        updateUserRoom?.invoke()
                     }
                 }
             }
@@ -101,9 +103,15 @@ class MsgVm(application: Application) : AbsMsgVm(application) {
                 if (SwagoRoomManager.roleType == RoleType.user || it.data?.senderCode != UserInfo.getUserInfo()?.user_account) {
                     it.data?.let {
                         updateHotValue?.invoke(it.hotValue)
-                        updateUserRoom?.invoke()
                     }
+                }
+            }
+        }
 
+        imGroupNewMsgListener.handleMsgType<CusNewMsgBean<RoomUserChangeModel>>(update_audience) {
+            it.data?.let { model ->
+                if (model.room_id == (SwagoRoomManager.iRoomInfo?.getRoomId() ?: "")) {
+                    updateUserRoom?.invoke(model.users, model.count)
                 }
             }
         }

+ 36 - 0
room/src/main/res/layout/item_dialog_audience.xml

@@ -41,11 +41,47 @@
         android:src="@mipmap/vip"
         android:layout_marginStart="5dp"
         android:visibility="gone"
+        tools:visibility="visible"
         app:layout_constraintTop_toTopOf="@+id/tvLevel"
         app:layout_constraintBottom_toBottomOf="@+id/tvLevel"
         app:layout_constraintStart_toEndOf="@+id/tvLevel"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
+    <TextView
+        android:id="@+id/tvAgent"
+        android:textSize="10dp"
+        android:text="@string/agent"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:layout_marginStart="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:background="@mipmap/icon_agent_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvLevel"
+        app:layout_constraintTop_toTopOf="@+id/tvLevel"
+        app:layout_constraintStart_toEndOf="@+id/ivBenefit"
+        app:layout_constraintEnd_toStartOf="@+id/tvOfficial"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <TextView
+        android:id="@+id/tvOfficial"
+        android:textSize="10dp"
+        android:text="@string/official"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:layout_marginStart="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:background="@mipmap/icon_official_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvLevel"
+        app:layout_constraintTop_toTopOf="@+id/tvLevel"
+        app:layout_constraintStart_toEndOf="@+id/tvAgent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 19 - 0
room/src/main/res/layout/item_official_icon.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <TextView
+        android:id="@+id/tvOfficial"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:textSize="10dp"
+        android:text="@string/official"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:background="@mipmap/icon_official_bg"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 20 - 0
room/src/main/res/layout/item_service.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <TextView
+        android:id="@+id/tvAgent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:textSize="10dp"
+        android:text="@string/agent"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:background="@mipmap/icon_agent_bg"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 3 - 0
user/src/main/java/com/swago/user/adapter/FollowFanAdapter.kt

@@ -36,6 +36,9 @@ class FollowFanAdapter(private val type:Int) : BaseQuickAdapter<BlackListModel.L
                 setVisible(R.id.ivStatus,false)
             }
 
+            setGone(R.id.tvAgent,item.is_service == 1)
+            setGone(R.id.tvOfficial,item.is_official == 1)
+
             val ivAvatar = itemView.findViewById<CircleImageView>(R.id.ivAvatar)
             Glide.with(itemView.context).load(item.user_head_img_url)
                 .placeholder(R.mipmap.default_avatar)

+ 35 - 0
user/src/main/res/layout/item_follow_fan.xml

@@ -49,6 +49,41 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
 
+    <TextView
+        android:id="@+id/tvAgent"
+        android:textSize="10dp"
+        android:text="@string/agent"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:layout_marginStart="5dp"
+        android:background="@mipmap/icon_agent_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvName"
+        app:layout_constraintTop_toTopOf="@+id/tvName"
+        app:layout_constraintStart_toEndOf="@+id/tvName"
+        app:layout_constraintEnd_toStartOf="@+id/tvOfficial"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <TextView
+        android:id="@+id/tvOfficial"
+        android:textSize="10dp"
+        android:text="@string/official"
+        android:textColor="#fff"
+        android:paddingStart="16dp"
+        android:paddingEnd="5dp"
+        android:layout_marginStart="5dp"
+        android:visibility="gone"
+        tools:visibility="visible"
+        android:background="@mipmap/icon_official_bg"
+        app:layout_constraintBottom_toBottomOf="@+id/tvName"
+        app:layout_constraintTop_toTopOf="@+id/tvName"
+        app:layout_constraintStart_toEndOf="@+id/tvAgent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
 
     <ImageView
         android:id="@+id/ivStatus"