瀏覽代碼

增加老师端学生端直播连麦功能

Pq 2 年之前
父節點
當前提交
7af323f64f

+ 116 - 1
rong_im/live/src/main/java/com/rong/io/live/helper/LiveRoomMicMemberHelper.java

@@ -2,6 +2,7 @@ package com.rong.io.live.helper;
 
 
 import android.text.TextUtils;
+import android.util.Log;
 
 import com.rong.io.live.bean.User;
 
@@ -13,12 +14,16 @@ import java.util.HashMap;
  * 直播间连麦用户管理
  */
 public class LiveRoomMicMemberHelper {
+    public static final String NICK_NAME_DEFAULT = "连麦用户";
+    private OnEventListener mEventListener;
     private ArrayList<User> onApplyMicUsers;
     private ArrayList<User> onMicUser;
+    private ArrayList<User> userCacheList;
 
     public LiveRoomMicMemberHelper() {
         onApplyMicUsers = new ArrayList<>();
         onMicUser = new ArrayList<>();
+        userCacheList = new ArrayList<>();
     }
 
     /**
@@ -40,18 +45,42 @@ public class LiveRoomMicMemberHelper {
      */
     public void delOnMicUser(User user) {
         int i = checkOnMicExist(user);
+        delUserCache(user);
         if (i != -1) {
             onMicUser.remove(i);
         }
     }
 
     /**
+     * 删除单个连麦用户
+     *
+     * @param
+     */
+    public void delOnMicUser(String userId) {
+        User user = new User();
+        user.setUserId(userId);
+        int i = checkOnMicExist(user);
+        delUserCache(user);
+        if (i != -1) {
+            onMicUser.remove(i);
+        }
+    }
+
+
+    /**
      * 删除全部申请连麦用户
      */
     public void delAllOnMicUser() {
         onMicUser.clear();
     }
 
+    /**
+     * 删除全部申请连麦用户缓存信息
+     */
+    public void delAllUserCache() {
+        userCacheList.clear();
+    }
+
 
     /**
      * 添加连麦用户
@@ -70,9 +99,15 @@ public class LiveRoomMicMemberHelper {
      *
      * @param user
      */
-    public void delApplyUser(User user) {
+    public void delApplyUser(User user, boolean isCache) {
         int i = checkApplyExist(user);
         if (i != -1) {
+            if (isCache) {
+                User user1 = onApplyMicUsers.get(i);
+                Log.i("pq", "添加userCache" + user1.getUserId());
+                userCacheList.add(user1);
+                Log.i("pq", "添加userCache" + userCacheList.size());
+            }
             onApplyMicUsers.remove(i);
         }
     }
@@ -122,6 +157,25 @@ public class LiveRoomMicMemberHelper {
         return -1;
     }
 
+    /**
+     * 检查用户缓存是否已存在
+     *
+     * @param targetUser
+     * @return
+     */
+    private int checkUserCacheExist(User targetUser) {
+        if (targetUser == null) {
+            return -1;
+        }
+        for (int i = 0; i < userCacheList.size(); i++) {
+            User user1 = userCacheList.get(i);
+            if (TextUtils.equals(user1.getUserId(), targetUser.getUserId())) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
 
     /**
      * 获取连麦申请中的用户
@@ -135,4 +189,65 @@ public class LiveRoomMicMemberHelper {
     public ArrayList<User> getOnMicUsers() {
         return onMicUser;
     }
+
+    public void setOnEventListener(OnEventListener listener) {
+        this.mEventListener = listener;
+    }
+
+
+    private void delUserCache(User targetUser) {
+        if (targetUser == null) {
+            return;
+        }
+        if (userCacheList != null && userCacheList.size() > 0) {
+            for (int i = 0; i < userCacheList.size(); i++) {
+                User user = userCacheList.get(i);
+                if (TextUtils.equals(user.getUserId(), targetUser.getUserId())) {
+                    Log.i("pq", "删除userCache" + userCacheList.size());
+                    userCacheList.remove(user);
+                }
+            }
+        }
+    }
+
+    public User createUser(String userId) {
+        Log.i("pq", "缓存userCacheList" + userCacheList.size());
+        if (userCacheList != null && userCacheList.size() > 0) {
+            for (int i = 0; i < userCacheList.size(); i++) {
+                User user = userCacheList.get(i);
+                if (TextUtils.equals(user.getUserId(), userId)) {
+                    Log.i("pq", "命中缓存userCache" + user);
+                    return user;
+                }
+            }
+        }
+        User user = new User();
+        user.setUserId(userId);
+        user.setUserName(NICK_NAME_DEFAULT);
+        if (mEventListener != null) {
+            Log.i("pq", "未命中缓存,获取用户信息" + user.getUserId());
+            mEventListener.getMicUserInfo(userId);
+        }
+        return user;
+    }
+
+    public void refreshUserInfo(User user) {
+        Log.i("pq", "refreshUserInfo:" + user.getUserId());
+        Log.i("pq", "refreshUserInfo:" + user.getUserName());
+        Log.i("pq", "refreshUserInfo:" + user.getPortraitUrl());
+        int i = checkOnMicExist(user);
+        Log.i("pq", "刷新麦上用户缓存:" + i);
+        if (i != -1) {
+            onMicUser.set(i, user);
+        }
+        int k = checkUserCacheExist(user);
+        Log.i("pq", "刷新用户缓存:" + i);
+        if (k != -1) {
+            userCacheList.set(k, user);
+        }
+    }
+
+    public interface OnEventListener {
+        void getMicUserInfo(String userId);
+    }
 }

+ 52 - 14
student/src/main/java/com/cooleshow/student/ui/live/LiveRoomActivity.java

@@ -239,6 +239,7 @@ public class LiveRoomActivity extends BaseMVPActivity<ActivityLiveroomLayoutBind
     private LiveRoomClosePageOnMicTipDialog mLiveRoomClosePageOnMicTipDialog;
     private VideoViewManager mVideoViewManager;
     private LiveRoomShopCarDialog mShopCarDialog;
+    private LiveRoomMicManagerDialog mMicManagerDialog;
 
     public static void startLiveRoomActivity(Context context, String roomid) {
         Intent intent = new Intent(context, LiveRoomActivity.class);
@@ -428,17 +429,7 @@ public class LiveRoomActivity extends BaseMVPActivity<ActivityLiveroomLayoutBind
                 //连接状态异常,暂停连麦
                 return;
             }
-            if (currentSeatStatus == LiveRoomMsgConstants.MIC_STATUS_NORMAL) {
-                //未连麦状态 申请连麦
-                if (presenter != null) {
-                    presenter.handleAction(LiveRoomMsgConstants.ACTION_SEND_SEAT_APPLY);
-                }
-                updateMicIcon(LiveRoomMsgConstants.MIC_STATUS_CONNECTING);
-                ToastUtil.getInstance().show(LiveRoomActivity.this, getString(R.string.seat_apply_str));
-            } else {
-                //取消连麦
-                showCloseMicTipDialog();
-            }
+            showMicManagerDialog();
             return;
         }
 
@@ -488,9 +479,50 @@ public class LiveRoomActivity extends BaseMVPActivity<ActivityLiveroomLayoutBind
     }
 
     private void showMicManagerDialog() {
-        LiveRoomMicManagerDialog micManagerDialog = new LiveRoomMicManagerDialog(this);
-        micManagerDialog.show();
-        micManagerDialog.setMicStatus(currentSeatStatus);
+        if (mMicManagerDialog == null) {
+            mMicManagerDialog = new LiveRoomMicManagerDialog(this);
+            mMicManagerDialog.setOnEventListener(new LiveRoomMicManagerDialog.OnEventListener() {
+                @Override
+                public void onApplyMic() {
+                    //申请连麦
+                    handleMicEvent();
+                    mMicManagerDialog.setMicStatus(LiveRoomMsgConstants.MIC_STATUS_CONNECTING);
+                }
+
+                @Override
+                public void onApplyCancel() {
+                    //取消申请连麦
+                    handleMicEvent();
+                }
+
+                @Override
+                public void onCloseMic() {
+                    //关闭连麦
+                    handleMicEvent();
+                }
+            });
+        }
+        if (!mMicManagerDialog.isShowing()) {
+            mMicManagerDialog.show();
+        }
+        if (mRoomInfoBean != null) {
+            mMicManagerDialog.setLiveTeacherInfo(mRoomInfoBean.speakerPic);
+        }
+        mMicManagerDialog.setMicStatus(currentSeatStatus);
+    }
+
+    private void handleMicEvent() {
+        if (currentSeatStatus == LiveRoomMsgConstants.MIC_STATUS_NORMAL) {
+            //未连麦状态 申请连麦
+            if (presenter != null) {
+                presenter.handleAction(LiveRoomMsgConstants.ACTION_SEND_SEAT_APPLY);
+            }
+            updateMicIcon(LiveRoomMsgConstants.MIC_STATUS_CONNECTING);
+            ToastUtil.getInstance().show(LiveRoomActivity.this, getString(R.string.seat_apply_str));
+        } else {
+            //取消连麦
+            showCloseMicTipDialog();
+        }
     }
 
     private void startTeacherHomePage(int viewId) {
@@ -612,6 +644,9 @@ public class LiveRoomActivity extends BaseMVPActivity<ActivityLiveroomLayoutBind
                 public void onClick(View v) {
                     handleCloseMicEvent();
                     mRoomCloseMicTipDialog.dismiss();
+                    if (mMicManagerDialog != null) {
+                        mMicManagerDialog.dismiss();
+                    }
                 }
             });
         }
@@ -1332,6 +1367,9 @@ public class LiveRoomActivity extends BaseMVPActivity<ActivityLiveroomLayoutBind
     @Override
     public void onSeatMicSuccess() {
         updateMicIcon(LiveRoomMsgConstants.MIC_STATUS_CONNECT_SUCCESS);
+        if (mMicManagerDialog != null) {
+            mMicManagerDialog.dismiss();
+        }
     }
 
     /**

+ 33 - 0
student/src/main/java/com/cooleshow/student/widgets/dialog/LiveRoomMicManagerDialog.java

@@ -11,7 +11,9 @@ import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.student.R;
+import com.cooleshow.usercenter.helper.UserHelper;
 import com.rong.io.live.LiveRoomMsgConstants;
 
 import androidx.annotation.NonNull;
@@ -32,6 +34,7 @@ public class LiveRoomMicManagerDialog extends Dialog implements View.OnClickList
     private LinearLayout mLlCloseMic;
     private TextView mTvCloseMic;
     private TextView mTvCancel2;
+    private OnEventListener mEventListener;
 
     public LiveRoomMicManagerDialog(@NonNull Context context) {
         super(context, R.style.MyBottomDialogStyle);
@@ -68,6 +71,9 @@ public class LiveRoomMicManagerDialog extends Dialog implements View.OnClickList
         mLlCloseMic = findViewById(R.id.ll_close_mic);
         mTvCloseMic = findViewById(R.id.tv_close_mic);
         mTvCancel2 = findViewById(R.id.tv_cancel2);
+
+        String userAvatar = UserHelper.getUserAvatar();
+        GlideUtils.INSTANCE.loadImage(getContext(),userAvatar,mIvOwnerAvatar,R.drawable.icon_teacher_default_head);
         initListener();
     }
 
@@ -100,12 +106,39 @@ public class LiveRoomMicManagerDialog extends Dialog implements View.OnClickList
         }
         if (id == R.id.tv_cancel_apply) {
             //取消申请
+            if (mEventListener != null) {
+                mEventListener.onApplyCancel();
+            }
         }
         if (id == R.id.tv_apply_mic) {
             //申请连麦
+            if (mEventListener != null) {
+                mEventListener.onApplyMic();
+            }
         }
         if (id == R.id.tv_close_mic) {
             //关闭连麦
+            if (mEventListener != null) {
+                mEventListener.onCloseMic();
+            }
         }
     }
+
+    public void setLiveTeacherInfo(String teacherAvatar){
+        if (mIvTeacherAvatar != null) {
+            GlideUtils.INSTANCE.loadImage(getContext(),teacherAvatar,mIvTeacherAvatar,R.drawable.icon_teacher_default_head);
+        }
+    }
+
+    public void setOnEventListener(OnEventListener listener) {
+        this.mEventListener = listener;
+    }
+
+    public interface OnEventListener {
+        void onApplyMic();
+
+        void onApplyCancel();
+
+        void onCloseMic();
+    }
 }

+ 7 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/LiveRoomContract.java

@@ -2,6 +2,7 @@ package com.cooleshow.teacher.contract;
 
 import android.view.View;
 
+import com.common.im.bean.RongIMUserInfo;
 import com.cooleshow.base.presenter.view.BaseView;
 import com.cooleshow.teacher.bean.LiveRoomInfoBean;
 import com.rong.io.live.message.RCChatJoinRoomMessage;
@@ -115,6 +116,12 @@ public interface LiveRoomContract {
          * @param remoteUserId
          */
         void onRemoteUserPublishResource(String remoteUserId);
+
+        /**
+         * 获取用户信息成功
+         * @param data
+         */
+        void getFriendInfoSuccess(RongIMUserInfo data);
     }
 
     interface Presenter {

+ 24 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/live/LiveRoomPresenter.java

@@ -3,6 +3,8 @@ package com.cooleshow.teacher.presenter.live;
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.common.im.api.IMApi;
+import com.common.im.bean.RongIMUserInfo;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
@@ -943,4 +945,26 @@ public class LiveRoomPresenter extends BasePresenter<LiveRoomContract.LiveRoomVi
         });
 
     }
+
+    public void getUserInfoByUserId(String userId) {
+        addSubscribe(create(IMApi.class).queryTeaFriendDetail(userId), new DisposableObserver<BaseResponse<RongIMUserInfo>>() {
+            @Override
+            public void onNext(BaseResponse<RongIMUserInfo> friendInfoBeanBaseResponse) {
+                if (getView() != null && friendInfoBeanBaseResponse != null) {
+                    getView().getFriendInfoSuccess(friendInfoBeanBaseResponse.getData());
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                e.printStackTrace();
+            }
+
+            @Override
+            public void onComplete() {
+
+            }
+        });
+    }
+
 }

+ 87 - 45
teacher/src/main/java/com/cooleshow/teacher/ui/live/TeacherLiveRoomActivity.java

@@ -20,6 +20,7 @@ import android.widget.TextView;
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.alibaba.android.arouter.launcher.ARouter;
 import com.bumptech.glide.Glide;
+import com.common.im.bean.RongIMUserInfo;
 import com.cooleshow.base.common.BaseApplication;
 import com.cooleshow.base.data.net.ApiException;
 import com.cooleshow.base.router.RouterPath;
@@ -108,7 +109,7 @@ import io.rong.message.TextMessage;
  * 老师端直播间页面
  */
 @Route(path = RouterPath.LiveCenter.ACTIVITY_LIVE_ROOM_TEACHER)
-public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLiveRoomLayoutBinding, LiveRoomPresenter> implements LiveRoomContract.LiveRoomView, View.OnClickListener, SoftKeyboardUtil.OnSoftInputChangedListener {
+public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLiveRoomLayoutBinding, LiveRoomPresenter> implements LiveRoomContract.LiveRoomView, View.OnClickListener, SoftKeyboardUtil.OnSoftInputChangedListener, LiveRoomMicMemberHelper.OnEventListener {
     public static final String ROOMID_KEY = "roomid_key";
     public static final String DEFAULT_TIME_TEXT = "00:00:00";
     public static final int SYNC_ADD_LIKE_TIME = 10000;//同步点赞数时长(兼心跳功能)
@@ -318,6 +319,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
             }
         });
         mRoomMicMemberHelper = new LiveRoomMicMemberHelper();
+        mRoomMicMemberHelper.setOnEventListener(this);
         mMessageAdapter = new LiveRoomMessageAdapter(this);
         mLinearLayoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
         recyclerMsg.setLayoutManager(mLinearLayoutManager);
@@ -688,7 +690,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
 
         if (id == R.id.iv_mic) {
             //连麦管理
-//            showMicManagerDialog();
+            showMicManagerDialog();
             return;
         }
 
@@ -969,17 +971,35 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
     @Override
     public void onUserLeftRoomMic(RCRTCRemoteUser rcrtcRemoteUser) {
         if (presenter != null && rcrtcRemoteUser != null) {
-            presenter.unSubscribeStream(rcrtcRemoteUser.getUserId(), null);
+            delOnMicUser(rcrtcRemoteUser.getUserId());
         }
     }
 
     @Override
     public void onUserOfflineRoomMic(RCRTCRemoteUser rcrtcRemoteUser) {
         if (presenter != null && rcrtcRemoteUser != null) {
-            presenter.unSubscribeStream(rcrtcRemoteUser.getUserId(), null);
+            delOnMicUser(rcrtcRemoteUser.getUserId());
         }
     }
 
+    /**
+     * 删除麦上用户
+     *
+     * @param userId
+     */
+    private void delOnMicUser(String userId) {
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (mRoomMicMemberHelper != null) {
+                    presenter.unSubscribeStream(userId, null);
+                    mRoomMicMemberHelper.delOnMicUser(userId);
+                    updateMicManagerData();
+                }
+            }
+        });
+    }
+
     @Override
     public void onSwitchRole(String userId, RCRTCLiveRole role) {
         Log.i("pq", "receive onSwitchRole:" + role.getType());
@@ -987,10 +1007,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
             //role转换为观众,主播取消订阅该用户的流
             if (presenter != null) {
                 //取消订阅该成员消息
-                User user = new User();
-                user.setUserId(userId);
-                mRoomMicMemberHelper.delOnMicUser(user);
-                presenter.unSubscribeStream(userId, null);
+                delOnMicUser(userId);
             }
         }
     }
@@ -1004,24 +1021,24 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
         if (!isOwn(seatApplyMessage.getTeacherId())) {
             return;
         }
-//        if (seatApplyMessage.getType() == LiveRoomMsgConstants.MIC_ACTION_SEAT_BY_USER) {
-//            //观众申请
-//            User user = new User();
-//            user.setUserName(seatApplyMessage.getAudienceName());
-//            user.setUserId(seatApplyMessage.getAudienceId());
-//            user.setPortrait(seatApplyMessage.getAudienceAvatar());
-//            mRoomMicMemberHelper.addApplyUser(user);
-//            updateMicManagerData();
-//        }
-//        if (seatApplyMessage.getType() == LiveRoomMsgConstants.MIC_ACTION_CANCEL_SEAT_BY_USER) {
-//            //观众取消
-//            User user = new User();
-//            user.setUserName(seatApplyMessage.getAudienceName());
-//            user.setUserId(seatApplyMessage.getAudienceId());
-//            user.setPortrait(seatApplyMessage.getAudienceAvatar());
-//            mRoomMicMemberHelper.delApplyUser(user);
-//            updateMicManagerData();
-//        }
+        if (seatApplyMessage.getType() == LiveRoomMsgConstants.MIC_ACTION_SEAT_BY_USER) {
+            //观众申请
+            User user = new User();
+            user.setUserName(seatApplyMessage.getAudienceName());
+            user.setUserId(seatApplyMessage.getAudienceId());
+            user.setPortrait(seatApplyMessage.getAudienceAvatar());
+            mRoomMicMemberHelper.addApplyUser(user);
+            updateMicManagerData();
+        }
+        if (seatApplyMessage.getType() == LiveRoomMsgConstants.MIC_ACTION_CANCEL_SEAT_BY_USER) {
+            //观众取消
+            User user = new User();
+            user.setUserName(seatApplyMessage.getAudienceName());
+            user.setUserId(seatApplyMessage.getAudienceId());
+            user.setPortrait(seatApplyMessage.getAudienceAvatar());
+            mRoomMicMemberHelper.delApplyUser(user, false);
+            updateMicManagerData();
+        }
     }
 
     @Override
@@ -1029,23 +1046,41 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
         refreshAudio(null, null);
     }
 
+    @Override
+    public void getFriendInfoSuccess(RongIMUserInfo data) {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        User user = new User();
+        user.setUserId(data.getFriendId());
+        user.setUserName(data.getFriendNickname());
+        user.setPortrait(data.getFriendAvatar());
+        mRoomMicMemberHelper.refreshUserInfo(user);
+        if (mLiveMicManagerDialog != null) {
+            mLiveMicManagerDialog.setOnMicListData(mRoomMicMemberHelper.getOnMicUsers());
+        }
+        if (llMicContainer != null) {
+            llMicContainer.refreshUIByUser(mRoomMicMemberHelper.getOnMicUsers());
+        }
+    }
+
     private void updateMicManagerData() {
-//        if (mLiveMicManagerDialog != null) {
-//            mLiveMicManagerDialog.setApplyListData(mRoomMicMemberHelper.getOnApplyMicUsers());
-//            mLiveMicManagerDialog.setOnMicListData(mRoomMicMemberHelper.getOnMicUsers());
-//        }
-//        if (llMicContainer != null) {
-//            llMicContainer.refreshUIByUser(mRoomMicMemberHelper.getOnMicUsers());
-//        }
-//        if (mTvOnMicNumTip != null) {
-//            ArrayList<User> onApplyMicUsers = mRoomMicMemberHelper.getOnApplyMicUsers();
-//            if (onApplyMicUsers != null && onApplyMicUsers.size() > 0) {
-//                mTvOnMicNumTip.setVisibility(View.GONE);
-//                mTvOnMicNumTip.setText(String.valueOf(onApplyMicUsers.size()));
-//            } else {
-//                mTvOnMicNumTip.setVisibility(View.GONE);
-//            }
-//        }
+        if (mLiveMicManagerDialog != null) {
+            mLiveMicManagerDialog.setApplyListData(mRoomMicMemberHelper.getOnApplyMicUsers());
+            mLiveMicManagerDialog.setOnMicListData(mRoomMicMemberHelper.getOnMicUsers());
+        }
+        if (llMicContainer != null) {
+            llMicContainer.refreshUIByUser(mRoomMicMemberHelper.getOnMicUsers());
+        }
+        if (mTvOnMicNumTip != null) {
+            ArrayList<User> onApplyMicUsers = mRoomMicMemberHelper.getOnApplyMicUsers();
+            if (onApplyMicUsers != null && onApplyMicUsers.size() > 0) {
+                mTvOnMicNumTip.setVisibility(View.VISIBLE);
+                mTvOnMicNumTip.setText(String.valueOf(onApplyMicUsers.size()));
+            } else {
+                mTvOnMicNumTip.setVisibility(View.GONE);
+            }
+        }
     }
 
     /**
@@ -1087,8 +1122,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
                 String userId = rcrtcAudioInputStream.getUserId();
                 if (mRoomInfoBean != null) {
                     if (!TextUtils.equals(mRoomInfoBean.speakerId, userId)) {
-                        User user = new User();
-                        user.setUserId(userId);
+                        User user = mRoomMicMemberHelper.createUser(userId);
                         mRoomMicMemberHelper.addOnMicUser(user);
                     }
                 }
@@ -1231,7 +1265,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
                     //同意连麦申请
                     presenter.handleAction(LiveRoomMsgConstants.ACTION_AGREE_MIC_APPLY, user);
                     if (mRoomMicMemberHelper != null) {
-                        mRoomMicMemberHelper.delApplyUser(user);
+                        mRoomMicMemberHelper.delApplyUser(user, true);
                     }
                     updateMicManagerData();
                 }
@@ -1274,6 +1308,7 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
                 public void onUnderAllMic() {
                     if (mRoomMicMemberHelper != null) {
                         mRoomMicMemberHelper.delAllOnMicUser();
+                        mRoomMicMemberHelper.delAllUserCache();
                     }
                     updateMicManagerData();
                     if (presenter != null) {
@@ -1497,4 +1532,11 @@ public class TeacherLiveRoomActivity extends BaseMVPActivity<ActivityTeacherLive
     public void onPointerCaptureChanged(boolean hasCapture) {
         super.onPointerCaptureChanged(hasCapture);
     }
+
+    @Override
+    public void getMicUserInfo(String userId) {
+        if (presenter != null) {
+            presenter.getUserInfoByUserId(userId);
+        }
+    }
 }

+ 1 - 1
teacher/src/main/res/layout/view_live_room_main_layout.xml

@@ -256,7 +256,7 @@
         android:layout_height="wrap_content"
         android:layout_marginEnd="11dp"
         android:src="@drawable/icon_mic_contro"
-        android:visibility="gone"
+        android:visibility="visible"
         app:layout_constraintBottom_toBottomOf="@+id/icon_finish_live"
         app:layout_constraintRight_toLeftOf="@+id/icon_finish_live"
         app:layout_constraintTop_toTopOf="@+id/icon_finish_live" />