Просмотр исходного кода

修改网络教室关闭摄像头提示流程

Pq 1 год назад
Родитель
Сommit
16e05e3f8b

+ 7 - 9
classRoom/src/main/java/com/dayayuemeng/classroom/adapter/NewGongGeListAdapter.java

@@ -15,6 +15,7 @@ import com.dayayuemeng.classroom.R;
 import com.dayayuemeng.classroom.bean.GonggeVideoListBean;
 import com.dayayuemeng.classroom.bean.VideoListBean;
 import com.dayayuemeng.classroom.constants.Role;
+import com.dayayuemeng.classroom.widget.CameraPlaceholderView;
 import com.tencent.rtmp.ui.TXCloudVideoView;
 
 import androidx.annotation.NonNull;
@@ -59,7 +60,7 @@ public class NewGongGeListAdapter extends BaseQuickAdapter<GonggeVideoListBean,
         RelativeLayout fl_video_container = holder.getView(R.id.fl_video_container);
         TXCloudVideoView videoView = videoListBean.getVideoView();
         fl_video_container.removeAllViews();
-        if (videoView != null && !TextUtils.equals(currentPreviewUserId,videoListBean.getUserId())) {
+        if (videoView != null && !TextUtils.equals(currentPreviewUserId, videoListBean.getUserId())) {
             if (videoView.getParent() != null) {
                 ViewGroup parent = (ViewGroup) videoView.getParent();
                 parent.removeView(videoView);
@@ -69,16 +70,13 @@ public class NewGongGeListAdapter extends BaseQuickAdapter<GonggeVideoListBean,
             fl_video_container.addView(videoView, params);
         }
         boolean camera = videoListBean.isCamera();
-        View iv_camera_tip = holder.getView(R.id.iv_camera_tip);
-        if(isOwner(videoListBean.getUserId()) && !camera){
-            iv_camera_tip.setVisibility(View.VISIBLE);
-        }else{
-            iv_camera_tip.setVisibility(View.GONE);
-        }
+        CameraPlaceholderView iv_camera_tip = holder.getView(R.id.iv_camera_tip);
+        iv_camera_tip.setVisibility(camera ? View.GONE : View.VISIBLE);
+        iv_camera_tip.loadAvatar(videoListBean.getHeadUrl());
     }
 
-    private boolean isOwner(String targetUserId){
-        return TextUtils.equals(userId,targetUserId);
+    private boolean isOwner(String targetUserId) {
+        return TextUtils.equals(userId, targetUserId);
     }
 
     private String getNickName(VideoListBean bean) {

+ 2 - 1
classRoom/src/main/java/com/dayayuemeng/classroom/adapter/VideoListAdapter.java

@@ -44,7 +44,8 @@ public class VideoListAdapter extends BaseQuickAdapter<VideoListBean, BaseViewHo
         CameraPlaceholderView iv_camera_off_tip = holder.getView(R.id.iv_camera_off_tip);
         iv_camera_off_tip.setImageBorderWidth(SizeUtils.dp2px(1));
         iv_camera_off_tip.setImageWH(SizeUtils.dp2px(42), SizeUtils.dp2px(42));
-        iv_camera_off_tip.setVisibility(bean.getCameraStatus() == 1 ? View.VISIBLE : View.GONE);
+        iv_camera_off_tip.setVisibility(bean.isCamera() ? View.GONE : View.VISIBLE);
+        iv_camera_off_tip.loadAvatar(bean.getHeadUrl());
 
         View tv_role_text_stu = holder.getView(R.id.tv_role_text_stu);
         View tv_role_text1 = holder.getView(R.id.tv_role_text1);

+ 8 - 7
classRoom/src/main/java/com/dayayuemeng/classroom/ui/StudentNetClassRoomActivity.java

@@ -283,14 +283,15 @@ public class StudentNetClassRoomActivity extends BaseMVPActivity<AcNetClassRoomS
     }
 
     private void setCameraPlaceholder() {
+        //20230918暂时不用此种方法实现关闭摄像头提示
 //            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_close_camera);
-        mHandler.postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                Bitmap bitmap = cameraPlaceholder.getBitmap();
-                presenter.initDefaultBitmap(bitmap);
-            }
-        }, 500);
+//        mHandler.postDelayed(new Runnable() {
+//            @Override
+//            public void run() {
+//                Bitmap bitmap = cameraPlaceholder.getBitmap();
+//                presenter.initDefaultBitmap(bitmap);
+//            }
+//        }, 500);
     }
 
     @Override

+ 8 - 7
classRoom/src/main/java/com/dayayuemeng/classroom/ui/TeacherNetClassRoomActivity.java

@@ -302,14 +302,15 @@ public class TeacherNetClassRoomActivity extends BaseMVPActivity<AcNetClassRoomT
     }
 
     private void setCameraPlaceholder() {
+        //20230918暂时不用此种方法实现关闭摄像头提示
 //            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon_close_camera);
-        mHandler.postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                Bitmap bitmap = cameraPlaceholder.getBitmap();
-                presenter.initDefaultBitmap(bitmap);
-            }
-        }, 500);
+//        mHandler.postDelayed(new Runnable() {
+//            @Override
+//            public void run() {
+//                Bitmap bitmap = cameraPlaceholder.getBitmap();
+//                presenter.initDefaultBitmap(bitmap);
+//            }
+//        }, 500);
     }
 
     private void initFragments() {

+ 49 - 16
classRoom/src/main/java/com/dayayuemeng/classroom/ui/fragment/NewGoneGeFragment.java

@@ -20,8 +20,10 @@ import com.dayayuemeng.classroom.bean.ClassMember;
 import com.dayayuemeng.classroom.bean.GonggeVideoListBean;
 import com.dayayuemeng.classroom.bean.UserInfo;
 import com.dayayuemeng.classroom.bean.VideoListBean;
+import com.dayayuemeng.classroom.constants.DeviceType;
 import com.dayayuemeng.classroom.constants.Role;
 import com.dayayuemeng.classroom.databinding.FgNewGongGeLayoutBinding;
+import com.dayayuemeng.classroom.model.DeviceChange;
 import com.dayayuemeng.classroom.presenter.NewGongGeFragmentPresenter;
 import com.dayayuemeng.classroom.utils.IconUtils;
 import com.dayayuemeng.classroom.viewmodel.ClassViewModel;
@@ -44,7 +46,7 @@ import androidx.recyclerview.widget.RecyclerView;
 /**
  * Author by pq, Date on 2023/5/5.
  */
-public class NewGoneGeFragment extends BaseMVPFragment<FgNewGongGeLayoutBinding,NewGongGeFragmentPresenter> implements View.OnClickListener {
+public class NewGoneGeFragment extends BaseMVPFragment<FgNewGongGeLayoutBinding, NewGongGeFragmentPresenter> implements View.OnClickListener {
     RecyclerView recyclerView;
     ConstraintLayout csPreviewRoot;
     RadioRelativeLayout previewParent;
@@ -102,15 +104,15 @@ public class NewGoneGeFragment extends BaseMVPFragment<FgNewGongGeLayoutBinding,
         initViewModel();
     }
 
-    private void initViews(){
-        recyclerView =mViewBinding.recyclerView;
-        csPreviewRoot =mViewBinding.csPreviewRoot;
-        previewParent =mViewBinding.flVideoContainer;
-        previewTvName =mViewBinding.tvName;
-        previewTvRoleText =mViewBinding.tvRoleText;
-        cIvMicStatus =mViewBinding.ivMicStatus;
-        civSignal =mViewBinding.ivSignal;
-        iv_camera_tip =mViewBinding.ivCameraTip;
+    private void initViews() {
+        recyclerView = mViewBinding.recyclerView;
+        csPreviewRoot = mViewBinding.csPreviewRoot;
+        previewParent = mViewBinding.flVideoContainer;
+        previewTvName = mViewBinding.tvName;
+        previewTvRoleText = mViewBinding.tvRoleText;
+        cIvMicStatus = mViewBinding.ivMicStatus;
+        civSignal = mViewBinding.ivSignal;
+        iv_camera_tip = mViewBinding.ivCameraTip;
         mViewBinding.ivClose.setOnClickListener(this);
         mViewBinding.ivClosePreview.setOnClickListener(this);
     }
@@ -124,9 +126,43 @@ public class NewGoneGeFragment extends BaseMVPFragment<FgNewGongGeLayoutBinding,
                 if (!isOnGongGeMode()) {
                     return;
                 }
+                LOG.i("getMemberList onChanged");
                 initMember();
             }
         });
+        mClassViewModel.getDeviceChange().observe(this, new Observer<DeviceChange>() {
+            @Override
+            public void onChanged(DeviceChange deviceChange) {
+                if (deviceChange != null && deviceChange.deviceType == DeviceType.Camera) {
+                    LOG.i("getDeviceChange onChanged");
+                    int i = checkContains(deviceChange.userId);
+                    if (i != -1) {
+                        mAdapter.notifyItemChanged(i);
+                    }
+                    checkIsPreview(deviceChange.userId);
+                }
+            }
+        });
+    }
+
+    private void checkIsPreview(String userId) {
+        if (TextUtils.equals(mAdapter.getCurrentPreviewUserId(), userId)) {
+            int pos = checkContains(userId);
+            if (pos != -1) {
+                GonggeVideoListBean gonggeVideoListBean = mVideoListBeans.get(pos);
+                showPreview(gonggeVideoListBean);
+            }
+        }
+    }
+
+    private int checkContains(String targetUserId) {
+        for (int i = 0; i < mVideoListBeans.size(); i++) {
+            VideoListBean videoListBean = mVideoListBeans.get(i);
+            if (TextUtils.equals(videoListBean.getUserId(), targetUserId)) {
+                return i;
+            }
+        }
+        return -1;
     }
 
     private boolean isOnGongGeMode() {
@@ -270,12 +306,9 @@ public class NewGoneGeFragment extends BaseMVPFragment<FgNewGongGeLayoutBinding,
                 params.addRule(RelativeLayout.CENTER_IN_PARENT);
                 previewParent.addView(videoView, params);
             }
-            if (videoListBean!=null && isOwner(videoListBean.getUserId()) && !videoListBean.isCamera()) {
-                //显示自己的摄像头空视图
-                iv_camera_tip.setVisibility(View.VISIBLE);
-            }else{
-                iv_camera_tip.setVisibility(View.GONE);
-            }
+            //显示自己的摄像头空视图
+            iv_camera_tip.loadAvatar(videoListBean.getHeadUrl());
+            iv_camera_tip.setVisibility(videoListBean.isCamera() ? View.GONE : View.VISIBLE);
         } else {
             csPreviewRoot.setVisibility(View.GONE);
             mAdapter.setList(mVideoListBeans);

+ 42 - 21
classRoom/src/main/java/com/dayayuemeng/classroom/ui/fragment/StudentVideoFragment.java

@@ -50,7 +50,7 @@ import androidx.lifecycle.ViewModelProviders;
  * Author by pq, Date on 2023/4/20.
  * fg_video_layout_stu
  */
-public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBinding,MainVideoFragmentPresenter> {
+public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBinding, MainVideoFragmentPresenter> {
     public static final String TAG = "VideoFragment";
     RelativeLayout classShareRootView;
     DisplayNullView displayNull;
@@ -72,7 +72,6 @@ public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBindin
     private String roomId;
     private String tenant_id;
     private boolean isEnterLiveRoomSuccess = false;
-    private int cameraStatus = 0;//0是打开 1是关闭
     private boolean is1V1Mode;
 
     public TXCloudVideoView getVideoView() {
@@ -119,7 +118,7 @@ public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBindin
         });
     }
 
-    private void initViews(){
+    private void initViews() {
         classShareRootView = mViewBinding.classShareRootView;
         displayNull = mViewBinding.classShareScreenNull;
         shareVideoView = mViewBinding.classShareVideoview;
@@ -346,7 +345,7 @@ public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBindin
                 if (!TextUtils.isEmpty(tUserId)) {
                     userIds.add(tUserId);
                 }
-                showCameraTip();
+                showCameraTip(screenDisplay.getUserId());
                 ScreenDisplay.Display type = screenDisplay.getType();
                 if (type == ScreenDisplay.Display.LECTURER || type == ScreenDisplay.Display.ASSISTANT) {
                     String userId = screenDisplay.getUserId();
@@ -449,14 +448,11 @@ public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBindin
         classViewModel.getDeviceChange().observe(this, new Observer<DeviceChange>() {
             @Override
             public void onChanged(DeviceChange deviceChange) {
-                Log.i(TAG, "DeviceChange:" + deviceChange.toString());
                 if (deviceChange != null) {
-                    if (TextUtils.equals(userInfoValue.getUserId(), deviceChange.userId)) {
-                        if (deviceChange.deviceType == DeviceType.Camera) {
-                            cameraStatus = deviceChange.isEnable ? 0 : 1;
-                            showCameraTip();
-                            return;
-                        }
+                    Log.i(TAG, "DeviceChange:" + deviceChange.toString());
+                    if (deviceChange.deviceType == DeviceType.Camera) {
+                        showCameraTip(deviceChange.userId);
+                        return;
                     }
                 }
             }
@@ -472,21 +468,46 @@ public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBindin
         is1V1Mode = classViewModel.is1V1Mode();
     }
 
-    private void setHandOnViewVisible(){
-        if(is1V1Mode){
+    private void setHandOnViewVisible() {
+        if (is1V1Mode) {
             iv_raise_hands.setVisibility(View.GONE);
-        }else{
+        } else {
             iv_raise_hands.setVisibility(View.VISIBLE);
         }
     }
 
-    private void showCameraTip() {
-        ScreenDisplay value = classViewModel.getDisplay().getValue();
-        if (TextUtils.equals(value.getUserId(), userInfoValue.getUserId())) {
-            ivCameraStatusTip.setVisibility(cameraStatus == 1 ? View.VISIBLE : View.GONE);
-        } else {
+    private void loadCameraCloseTip(String targetUserId) {
+        ScreenDisplay screenDisplay = classViewModel.getDisplay().getValue();
+        if (screenDisplay == null) {
             ivCameraStatusTip.setVisibility(View.GONE);
+            return;
         }
+
+        if (!TextUtils.equals(targetUserId, screenDisplay.getUserId())) {
+            return;
+        }
+
+        ScreenDisplay.Display type = screenDisplay.getType();
+        if (type != ScreenDisplay.Display.LECTURER && type != ScreenDisplay.Display.STUDENT) {
+            ivCameraStatusTip.setVisibility(View.GONE);
+            return;
+        }
+
+        ClassMember classMember = screenDisplay.getClassMember();
+        if (classMember == null) {
+            ivCameraStatusTip.setVisibility(View.GONE);
+            return;
+        }
+        if (classMember.isCamera()) {
+            ivCameraStatusTip.setVisibility(View.GONE);
+        } else {
+            ivCameraStatusTip.loadAvatar(classMember.getHeadUrl());
+            ivCameraStatusTip.setVisibility(View.VISIBLE);
+        }
+    }
+
+    private void showCameraTip(String targetUserId) {
+        loadCameraCloseTip(targetUserId);
     }
 
     private void switchTipVisibility(boolean isVisibility) {
@@ -499,14 +520,14 @@ public class StudentVideoFragment extends BaseMVPFragment<FgVideoLayoutStuBindin
     }
 
     private void startLocalPreview(TXCloudVideoView txCloudVideoView) {
-        if(isOnPreView()){
+        if (isOnPreView()) {
             return;
         }
         presenter.startLocalPreview(txCloudVideoView);
     }
 
     private void updateLocalPreview(TXCloudVideoView txCloudVideoView) {
-        if(isOnPreView()){
+        if (isOnPreView()) {
             return;
         }
         presenter.updateLocalView(txCloudVideoView);

+ 13 - 15
classRoom/src/main/java/com/dayayuemeng/classroom/ui/fragment/StudentVideoListFragment.java

@@ -38,7 +38,7 @@ import androidx.recyclerview.widget.RecyclerView;
  * Author by pq, Date on 2023/4/28.
  * fg_video_list_layout
  */
-public class StudentVideoListFragment extends BaseMVPFragment<FgVideoListLayoutBinding,VideoListFragmentPresenter> {
+public class StudentVideoListFragment extends BaseMVPFragment<FgVideoListLayoutBinding, VideoListFragmentPresenter> {
     public static final String TAG = "VideoListFragment";
     RecyclerView recyclerView;
     private ClassViewModel mClassViewModel;
@@ -60,7 +60,7 @@ public class StudentVideoListFragment extends BaseMVPFragment<FgVideoListLayoutB
 
     @Override
     protected void initView(View rootView) {
-        recyclerView =mViewBinding.recyclerView;
+        recyclerView = mViewBinding.recyclerView;
         mListAdapter = new VideoListAdapter();
         recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
         RecyclerView.ItemAnimator itemAnimator = recyclerView.getItemAnimator();
@@ -157,17 +157,15 @@ public class StudentVideoListFragment extends BaseMVPFragment<FgVideoListLayoutB
             public void onChanged(DeviceChange deviceChange) {
                 Log.i(TAG, "DeviceChange:" + deviceChange.toString());
                 if (deviceChange != null) {
-                    if (TextUtils.equals(currentUserId, deviceChange.userId)) {
-                        //控制自己的
-                        if (deviceChange.deviceType == DeviceType.Camera) {
-                            int i = checkContains(currentUserId);
-                            if (i != -1) {
-                                VideoListBean videoListBean = mVideoListBeans.get(i);
-                                videoListBean.setCameraStatus(deviceChange.isEnable ? 0 : 1);
-                                mListAdapter.notifyItemChanged(i);
-                            }
-                            return;
+                    //控制自己的
+                    if (deviceChange.deviceType == DeviceType.Camera) {
+                        int i = checkContains(currentUserId);
+                        if (i != -1) {
+                            VideoListBean videoListBean = mVideoListBeans.get(i);
+                            videoListBean.setCameraStatus(deviceChange.isEnable ? 0 : 1);
+                            mListAdapter.notifyItemChanged(i);
                         }
+                        return;
                     }
                 }
             }
@@ -182,7 +180,7 @@ public class StudentVideoListFragment extends BaseMVPFragment<FgVideoListLayoutB
             if (classMember.getRole() == Role.LECTURER) {
                 VideoListBean teacherListBean = getTeacherListBean();
                 if (teacherListBean != null) {
-                    updateVideoListBean(teacherListBean,classMember);
+                    updateVideoListBean(teacherListBean, classMember);
                     teacherListBean.setUserName(classMember.getUserName());
                     teacherListBean.setUserId(userId);
                 }
@@ -191,7 +189,7 @@ public class StudentVideoListFragment extends BaseMVPFragment<FgVideoListLayoutB
             int resultPos = checkContains(userId);
             if (resultPos != -1) {
                 VideoListBean videoListBean = mVideoListBeans.get(resultPos);
-                updateVideoListBean(videoListBean,classMember);
+                updateVideoListBean(videoListBean, classMember);
                 tempList.add(videoListBean);
             } else {
                 VideoListBean videoPlayerByClassMember = createVideoPlayerByClassMember(classMembers.get(i));
@@ -287,7 +285,7 @@ public class StudentVideoListFragment extends BaseMVPFragment<FgVideoListLayoutB
     }
 
     private void startLocalPreview(VideoListBean videoListBean) {
-        if(isOnPreView()){
+        if (isOnPreView()) {
             return;
         }
         presenter.startLocalPreview(videoListBean.getVideoView());

+ 61 - 32
classRoom/src/main/java/com/dayayuemeng/classroom/ui/fragment/VideoFragment.java

@@ -52,7 +52,7 @@ import androidx.lifecycle.ViewModelProviders;
 /**
  * Author by pq, Date on 2023/4/20.
  */
-public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVideoFragmentPresenter> implements View.OnClickListener {
+public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding, MainVideoFragmentPresenter> implements View.OnClickListener {
     public static final String TAG = "VideoFragment";
     RelativeLayout classShareRootView;
     DisplayNullView displayNull;
@@ -125,19 +125,19 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
         });
     }
 
-    private void initViews(){
-        classShareRootView =mViewBinding.classShareRootView;
-        displayNull =mViewBinding.classShareScreenNull;
-        shareVideoView =mViewBinding.classShareVideoview;
-        ll_operate =mViewBinding.llOperate;
-        tvSpeech =mViewBinding.tvSpeech;
-        iv_raise_hands =mViewBinding.ivRaiseHands;
-        tvShareName =mViewBinding.tvShareName;
-        viewMainClickHelp =mViewBinding.viewMainClickHelp;
-        ivCameraStatusTip =mViewBinding.ivCameraTip;
-        tvDisplayTip =mViewBinding.tvDisplayTip;
-        iv_signal =mViewBinding.ivSignal;
-        llNameTip =mViewBinding.llNameTip;
+    private void initViews() {
+        classShareRootView = mViewBinding.classShareRootView;
+        displayNull = mViewBinding.classShareScreenNull;
+        shareVideoView = mViewBinding.classShareVideoview;
+        ll_operate = mViewBinding.llOperate;
+        tvSpeech = mViewBinding.tvSpeech;
+        iv_raise_hands = mViewBinding.ivRaiseHands;
+        tvShareName = mViewBinding.tvShareName;
+        viewMainClickHelp = mViewBinding.viewMainClickHelp;
+        ivCameraStatusTip = mViewBinding.ivCameraTip;
+        tvDisplayTip = mViewBinding.tvDisplayTip;
+        iv_signal = mViewBinding.ivSignal;
+        llNameTip = mViewBinding.llNameTip;
     }
 
     private void setStudentOnStage(boolean isOnstage) {
@@ -407,7 +407,7 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
             item.width = width;
             item.height = width;
             item.left = marginLeft;
-            item.right =marginLeft;
+            item.right = marginLeft;
             item.type = OperateItem.Type.CHECKBOX;
             item.text = operate.text;
             rightItems.add(item);
@@ -425,7 +425,7 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
                 teachingToolsView.setTextColor(R.color.color_383a3d);
             }
             LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
-                layoutParams.setMargins(operateItem.left, 0, operateItem.right, 0);
+            layoutParams.setMargins(operateItem.left, 0, operateItem.right, 0);
 //            if (i != rightItems.size() - 1) {
 //            } else {
 //                layoutParams.setMargins(0, 0, 0, 0);
@@ -477,9 +477,8 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
                 if (!TextUtils.isEmpty(tUserId)) {
                     userIds.add(tUserId);
                 }
-//                shareVideoView.removeVideoView();
-//                shareVideoView.onPause();
                 ScreenDisplay.Display type = screenDisplay.getType();
+                showCameraTip(screenDisplay.getUserId());
                 switchTipVisibility(type == ScreenDisplay.Display.LECTURER || type == ScreenDisplay.Display.ASSISTANT || type == ScreenDisplay.Display.STUDENT);
                 if (type == ScreenDisplay.Display.LECTURER || type == ScreenDisplay.Display.ASSISTANT) {
                     String userId = screenDisplay.getUserId();
@@ -505,14 +504,7 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
                             updateLocalPreview(shareVideoView);
                         }
                     }
-                    //显示老师自己的时候 判断是否需要显示摄像头提示
-                    TeachingToolsView cbCamera = getToolsView(BtnOperate.CAMERA.getValue());
-                    boolean checked = cbCamera.isChecked();
-                    LOG.i("cameraView isChecked:"+checked);
-                    ivCameraStatusTip.setVisibility(checked ? View.VISIBLE : View.GONE);
-
                     displayNull.setVisibility(View.GONE);
-
                 } else if (type == ScreenDisplay.Display.STUDENT) {
                     String userId = screenDisplay.getUserId();
                     controlCameraBt(true);
@@ -536,7 +528,6 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
                     //根据userId,切换到对应的视频
                     shareVideoView.setVisibility(View.VISIBLE);
                     displayNull.setVisibility(View.GONE);
-                    ivCameraStatusTip.setVisibility(View.GONE);
                     startRemote(userId, shareVideoView);
                 } else if (type == null || type == ScreenDisplay.Display.NONE) {
                     if (Role.LECTURER == userInfoValue.getRole()) {
@@ -601,7 +592,10 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
                             return;
                         }
                     } else {
-
+                        if (deviceChange.deviceType == DeviceType.Camera) {
+                            showCameraTip(deviceChange.userId);
+                            return;
+                        }
                     }
                 }
             }
@@ -643,10 +637,45 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
         return value != null && value;
     }
 
+    private void showCameraTip(String targetUserId) {
+        loadCameraCloseTip(targetUserId);
+    }
+
+    private void loadCameraCloseTip(String targetUserId) {
+        ScreenDisplay screenDisplay = classViewModel.getDisplay().getValue();
+        if (screenDisplay == null) {
+            ivCameraStatusTip.setVisibility(View.GONE);
+            return;
+        }
+
+
+        if (!TextUtils.equals(targetUserId, screenDisplay.getUserId())) {
+            return;
+        }
+
+        ScreenDisplay.Display type = screenDisplay.getType();
+        if (type != ScreenDisplay.Display.LECTURER && type != ScreenDisplay.Display.STUDENT) {
+            ivCameraStatusTip.setVisibility(View.GONE);
+            return;
+        }
+
+        ClassMember classMember = screenDisplay.getClassMember();
+        if (classMember == null) {
+            ivCameraStatusTip.setVisibility(View.GONE);
+            return;
+        }
+        if (classMember.isCamera()) {
+            ivCameraStatusTip.setVisibility(View.GONE);
+        } else {
+            ivCameraStatusTip.loadAvatar(classMember.getHeadUrl());
+            ivCameraStatusTip.setVisibility(View.VISIBLE);
+        }
+    }
+
     private boolean isOnMainDisplay(String userId) {
         ScreenDisplay value = classViewModel.getDisplay().getValue();
         if (value != null && TextUtils.equals(value.getUserId(), userId)) {
-            if(value.getType() == ScreenDisplay.Display.STUDENT || value.getType() == ScreenDisplay.Display.LECTURER){
+            if (value.getType() == ScreenDisplay.Display.STUDENT || value.getType() == ScreenDisplay.Display.LECTURER) {
                 return true;
             }
         }
@@ -707,8 +736,8 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
 
     private void changeCameraState(boolean isEnable) {
         presenter.changeCameraEnable(!isEnable);//设置mute video流
-        if(isOnMainDisplay(userInfoValue.getUserId())){
-            ivCameraStatusTip.setVisibility(isEnable ? View.GONE : View.VISIBLE);
+        if (isOnMainDisplay(userInfoValue.getUserId())) {
+            showCameraTip(userInfoValue.getUserId());
             TeachingToolsView cbCamera = getToolsView(BtnOperate.CAMERA.getValue());
             if (cbCamera != null) {
                 cbCamera.setChecked(!isEnable);
@@ -718,7 +747,7 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
 
     private void changeMicPhoneState(boolean isEnable) {
         presenter.changeMicPhone(!isEnable);
-        if(isOnMainDisplay(userInfoValue.getUserId())){
+        if (isOnMainDisplay(userInfoValue.getUserId())) {
             TeachingToolsView cbMic = getToolsView(BtnOperate.MIC.getValue());
             if (cbMic != null) {
                 changeMicStatus(cbMic, !isEnable);
@@ -904,7 +933,7 @@ public class VideoFragment extends BaseMVPFragment<FgVideoLayoutBinding,MainVide
         if (banedCameraBox == null) {
             return;
         }
-        LOG.i(TAG,"setViewStatus:"+userInfo.toString());
+        LOG.i(TAG, "setViewStatus:" + userInfo.toString());
         if (hasVideoPermssion) {
             // 因为按钮 false 是否代表不禁止, true 待变禁止, 所以和 用户信息携带的状态值相反
             if (banedCameraBox.isChecked() == userInfo.isCamera()) {

+ 11 - 13
classRoom/src/main/java/com/dayayuemeng/classroom/ui/fragment/VideoListFragment.java

@@ -43,7 +43,7 @@ import androidx.recyclerview.widget.RecyclerView;
  * Author by pq, Date on 2023/4/28.
  * 这个页面的viewdeoList加载逻辑有待优化,之前有默认占位,现在改成不需要了,得联合主屏数据优化下
  */
-public class VideoListFragment extends BaseMVPFragment<FgVideoListLayoutBinding,VideoListFragmentPresenter> {
+public class VideoListFragment extends BaseMVPFragment<FgVideoListLayoutBinding, VideoListFragmentPresenter> {
     public static final String TAG = "VideoListFragment";
     RecyclerView recyclerView;
     FrameLayout fl_empty;
@@ -83,7 +83,7 @@ public class VideoListFragment extends BaseMVPFragment<FgVideoListLayoutBinding,
         recyclerView.setAdapter(mListAdapter);
     }
 
-    private void initViews(){
+    private void initViews() {
         recyclerView = mViewBinding.recyclerView;
         fl_empty = mViewBinding.flEmpty;
     }
@@ -190,18 +190,16 @@ public class VideoListFragment extends BaseMVPFragment<FgVideoListLayoutBinding,
             public void onChanged(DeviceChange deviceChange) {
                 Log.i(TAG, "DeviceChange:" + deviceChange.toString());
                 if (deviceChange != null) {
-                    if (TextUtils.equals(currentUserId, deviceChange.userId)) {
-                        //控制自己的
-                        if (deviceChange.deviceType == DeviceType.Camera) {
+                    //控制自己的
+                    if (deviceChange.deviceType == DeviceType.Camera) {
 //                            deviceChange.isEnable
-                            int i = checkContains(currentUserId);
-                            if (i != -1) {
-                                VideoListBean videoListBean = mVideoListBeans.get(i);
-                                videoListBean.setCameraStatus(deviceChange.isEnable ? 0 : 1);
-                                mListAdapter.notifyItemChanged(i);
-                            }
-                            return;
+                        int i = checkContains(currentUserId);
+                        if (i != -1) {
+                            VideoListBean videoListBean = mVideoListBeans.get(i);
+                            videoListBean.setCameraStatus(deviceChange.isEnable ? 0 : 1);
+                            mListAdapter.notifyItemChanged(i);
                         }
+                        return;
                     }
                 }
             }
@@ -340,7 +338,7 @@ public class VideoListFragment extends BaseMVPFragment<FgVideoListLayoutBinding,
             mVideoListBeans.get(i).setStatusTip(getEmptyTip());
         }
         mListAdapter.setList(mVideoListBeans);
-        showEmptyView(mVideoListBeans.size() <=1);//至少包含老师自己的
+        showEmptyView(mVideoListBeans.size() <= 1);//至少包含老师自己的
     }
 
     private void showEmptyView(boolean isShow) {