Browse Source

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseDetailActivity.java
邓琴文 3 years ago
parent
commit
0015e25d17
27 changed files with 530 additions and 374 deletions
  1. 28 19
      BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java
  2. 33 14
      BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt
  3. 12 0
      BaseLibrary/src/main/java/com/cooleshow/base/utils/DateUtil.java
  4. 6 3
      live_teaching/build.gradle
  5. 4 4
      live_teaching/src/main/java/com/daya/live_teaching/api/LiveTeachingUrls.java
  6. 23 15
      live_teaching/src/main/java/com/daya/live_teaching/im/message/MemberChangedMessage.java
  7. 0 3
      live_teaching/src/main/java/com/daya/live_teaching/im/provider/RoleChangedMessageItemProvider.java
  8. 0 3
      live_teaching/src/main/java/com/daya/live_teaching/im/ui/ClassMessageListAdapter.java
  9. 90 72
      live_teaching/src/main/java/com/daya/live_teaching/model/ClassMember.java
  10. 46 84
      live_teaching/src/main/java/com/daya/live_teaching/model/LoginResult.java
  11. 8 7
      live_teaching/src/main/java/com/daya/live_teaching/model/Result.java
  12. 3 7
      live_teaching/src/main/java/com/daya/live_teaching/model/Role.java
  13. 5 6
      live_teaching/src/main/java/com/daya/live_teaching/model/ScreenDisplay.java
  14. 92 52
      live_teaching/src/main/java/com/daya/live_teaching/repository/ClassRepository.java
  15. 9 11
      live_teaching/src/main/java/com/daya/live_teaching/repository/UserRepository.java
  16. 18 32
      live_teaching/src/main/java/com/daya/live_teaching/ui/LiveActivity.java
  17. 1 1
      live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/BigVideoWindowFragment.java
  18. 1 1
      live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/ComplaintDialogFragment.java
  19. 2 2
      live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/ShareScreenFragment.java
  20. 1 1
      live_teaching/src/main/java/com/daya/live_teaching/ui/view/DisplayNullView.java
  21. 103 0
      live_teaching/src/main/java/com/daya/live_teaching/utils/helper/CourseEnterHelper.java
  22. 12 33
      live_teaching/src/main/java/com/daya/live_teaching/viewmodel/ClassViewModel.java
  23. 1 1
      student/src/main/java/com/cooleshow/student/ui/web/AccompanyFragment.java
  24. 2 2
      teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseHomeworkBean.java
  25. 13 0
      teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseDetailActivity.java
  26. 1 1
      teacher/src/main/java/com/cooleshow/teacher/ui/web/AccompanyFragment.java
  27. 16 0
      teacher/src/main/res/layout/activity_sparring_course_detail_layout.xml

+ 28 - 19
BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java

@@ -9,6 +9,17 @@ public abstract class WebConstants {
     public static final String WEB_UA_PARAMS = ";COLEXIUAPPA";
     public static final String WEB_JS_INTERFACE = "COLEXIU";
     public static final String WEB_URL = "web_url";//
+    public static final String WEB_SOCKET_URL_TEST = "wss://dev.colexiu.com/audioAnalysis";
+    public static final String WEB_SOCKET_URL_RELEASE = "wss://dev.colexiu.com/audioAnalysis";
+
+
+    public static String getWebSocketUrl() {
+        if (BuildConfig.DEBUG) {
+            return WEB_SOCKET_URL_TEST;
+        } else {
+            return WEB_SOCKET_URL_RELEASE;
+        }
+    }
 
     private static String getTeacherBaseUrlH5() {
         return BuildConfig.BASE_URL_H5;
@@ -21,38 +32,37 @@ public abstract class WebConstants {
     private static String getBaseUrlH5() {
         return BaseApplication.Companion.isTeacherClient() ? getTeacherBaseUrlH5() : getStudentBaseUrlH5();
     }
+
     //直播课列表
-    public static  final String STUDENT_LIVE_CLASS=getBaseUrlH5() +"/#/liveClass";
+    public static final String STUDENT_LIVE_CLASS = getBaseUrlH5() + "/#/liveClass";
     //视频课列表
-    public static  final String STUDENT_VIDEO_CLASS=getBaseUrlH5() +"/#/videoClass";
+    public static final String STUDENT_VIDEO_CLASS = getBaseUrlH5() + "/#/videoClass";
     //陪练课列表
-    public static  final String STUDENT_PRACTICE_CLASS=getBaseUrlH5() +"/#/practiceClass";
+    public static final String STUDENT_PRACTICE_CLASS = getBaseUrlH5() + "/#/practiceClass";
     //评测记录
-    public static  final String STUDENT_MEMBER_RECORD=getBaseUrlH5() +"/#/memberRecord";
+    public static final String STUDENT_MEMBER_RECORD = getBaseUrlH5() + "/#/memberRecord";
     //会员中心
-    public static  final String STUDENT_MEMBER_CENTER=getBaseUrlH5() +"/#/memberCenter";
+    public static final String STUDENT_MEMBER_CENTER = getBaseUrlH5() + "/#/memberCenter";
     //老师主页
-    public static  final String STUDENT_TEACHER_HOME=getBaseUrlH5() +"/#/teacherHome?teacherId=";
+    public static final String STUDENT_TEACHER_HOME = getBaseUrlH5() + "/#/teacherHome?teacherId=";
     //老师风采
-    public static  final String STUDENT_TEACHER_ELEGANT=getBaseUrlH5() +"/#/teacherElegant";
+    public static final String STUDENT_TEACHER_ELEGANT = getBaseUrlH5() + "/#/teacherElegant";
     //交易记录
-    public static  final String STUDENT_TRAD_RECORD=getBaseUrlH5() +"/#/tradeRecord";
+    public static final String STUDENT_TRAD_RECORD = getBaseUrlH5() + "/#/tradeRecord";
     //我的关注
-    public static  final String STUDENT_TEACHER_FOLLOW=getBaseUrlH5() +"/#/teacherFollow";
+    public static final String STUDENT_TEACHER_FOLLOW = getBaseUrlH5() + "/#/teacherFollow";
     //我的乐谱
-    public static  final String STUDENT_MUSIC_PERSONAL=getBaseUrlH5() +"/#/music-personal";
+    public static final String STUDENT_MUSIC_PERSONAL = getBaseUrlH5() + "/#/music-personal";
     //资讯详情
-    public static  final String STUDENT_SPECIAL_DETAIL=getBaseUrlH5() +"/#/specialDetail?id=";
+    public static final String STUDENT_SPECIAL_DETAIL = getBaseUrlH5() + "/#/specialDetail?id=";
     //精彩资讯
-    public static  final String STUDENT_SPECIAL=getBaseUrlH5() +"/#/special";
+    public static final String STUDENT_SPECIAL = getBaseUrlH5() + "/#/special";
     //热门专辑
-    public static  final String STUDENT_MUSIC_ALBUM=getBaseUrlH5() +"/#/music-album";
+    public static final String STUDENT_MUSIC_ALBUM = getBaseUrlH5() + "/#/music-album";
     //专辑详情
-    public static  final String STUDENT_MUSIC_ALBUM_DETAIL=getBaseUrlH5() +"/#/music-album-detail/";
+    public static final String STUDENT_MUSIC_ALBUM_DETAIL = getBaseUrlH5() + "/#/music-album-detail/";
     //学生端直播间购物车
-    public static  final String STUDENT_LIVE_SHOP_CAR_URL=getBaseUrlH5() +"/#/liveActiveList";
-
-
+    public static final String STUDENT_LIVE_SHOP_CAR_URL = getBaseUrlH5() + "/#/liveActiveList";
 
 
     //注册协议
@@ -98,8 +108,7 @@ public abstract class WebConstants {
     public static final String PIANO_ROOM = getBaseUrlH5() + "#/pianoRoom";
 
     //商品订单
-    public static final String MALL_GOODS_ORDER= getBaseUrlH5() + "/#/goodsOrder";
-
+    public static final String MALL_GOODS_ORDER = getBaseUrlH5() + "/#/goodsOrder";
 
 
 }

+ 33 - 14
BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt

@@ -21,13 +21,19 @@ object RouterPath {
         }
     }
 
-    class LiveCenter{
-        companion object{
-            const val PATH_LIVE ="/com/daya/live_teaching/ui/LiveActivity"
-            const val ACTIVITY_LIVE_ROOM="/com/cooleshow/student/ui/live/LiveRoomActivity"
-            const val ACTIVITY_PHOTO_PREVIEW ="/com/daya/live_teaching/ui/ACTIVITY_PHOTO_PREVIEW"
-            const val TEACHER_MINE_CREATE_COURSE = "/teacher/ui/live/CreateLiveActivity"
+    class LiveCenter {
+        companion object {
+            const val ACTIVITY_LIVE_ROOM = "/com/cooleshow/student/ui/live/LiveRoomActivity"
             const val ACTIVITY_LIVE_ROOM_TEACHER = "/teacher/ui/live/LiveRoomActivity"
+            const val TEACHER_MINE_CREATE_COURSE = "/teacher/ui/live/CreateLiveActivity"
+        }
+    }
+
+    //网络教室
+    class OnlineClassroom{
+        companion object {
+            const val PATH_LIVE = "/daya/live_teaching/ui/LiveActivity"
+            const val ACTIVITY_PHOTO_PREVIEW = "/daya/live_teaching/ui/ACTIVITY_PHOTO_PREVIEW"
         }
     }
 
@@ -46,7 +52,8 @@ object RouterPath {
         companion object {
             const val ACTIVITY_HTML = "/ui/activity/web/HtmlActivity"
             const val ACTIVITY_ACCOMPANY_HTML = "/ui/activity/web/AccompanyActivity"
-            const val ACTIVITY_HORIZONTAL_SCREEN_HTML = "/ui/activity/web/HtmlHorizontalScreenActivity"
+            const val ACTIVITY_HORIZONTAL_SCREEN_HTML =
+                "/ui/activity/web/HtmlHorizontalScreenActivity"
 
         }
     }
@@ -59,35 +66,43 @@ object RouterPath {
             const val PIANO_ROOM_COURSE_DETAIL = "/ui/course/PianoRoomCourseDetailActivity"
             const val PIANO_ROOM_COURSE_HOMEWORK = "/ui/course/PianoRoomCourseHomeWorkActivity"
             const val TEACHER_MINE_LIVE_COURSE = "/teacher/ui/course/MineLiveCourseActivity"
-            const val TEACHER_MINE_CREATE_LIVE_COURSE_INFO = "/teacher/ui/course/CreateLiveCourseInfoActivity"
-            const val TEACHER_MINE_CREATE_LIVE_COURSE_ARRANGEMENT = "/teacher/ui/course/CreateLiveCourseArrangementActivity"
+            const val TEACHER_MINE_CREATE_LIVE_COURSE_INFO =
+                "/teacher/ui/course/CreateLiveCourseInfoActivity"
+            const val TEACHER_MINE_CREATE_LIVE_COURSE_ARRANGEMENT =
+                "/teacher/ui/course/CreateLiveCourseArrangementActivity"
             const val TEACHER_MINE_VIDEO_COURSE = "/teacher/ui/course/MineVideoCourseActivity"
             const val SPARRING_EVALUATE_TEACHER = "/teacher/ui/course/EvaluateTeacherActivity"
 
         }
     }
+
     //曲谱模块
     class ScoreCenter {
         companion object {
             const val TEACHER_MINE_SCORE = "/teacher/ui/score/MineScoreActivity"
         }
     }
+
     //收入模块
     class IncomeCenter {
         companion object {
             const val TEACHER_MINE_INCOME = "/teacher/ui/income/MineIncomeActivity"
             const val TEACHER_MINE_WITHDRAWAL = "/teacher/ui/income/WithdrawalActivity"
-            const val TEACHER_MINE_WITHDRAWAL_SUCCESS = "/teacher/ui/income/WithdrawalSuccessActivity"
+            const val TEACHER_MINE_WITHDRAWAL_SUCCESS =
+                "/teacher/ui/income/WithdrawalSuccessActivity"
             const val TEACHER_MINE_WITHDRAWAL_RECORD = "/teacher/ui/income/WithdrawalRecordActivity"
-            const val TEACHER_MINE_EARNING_STATISTICS= "/teacher/ui/income/EarningStatisticsActivity"
+            const val TEACHER_MINE_EARNING_STATISTICS =
+                "/teacher/ui/income/EarningStatisticsActivity"
         }
     }
+
     //消息模块
     class MessageCenter {
         companion object {
             const val TEACHER_MESSAGE_MESSAGEBOX = "/teacher/ui/message/MessageBoxActivity"
         }
     }
+
     //作业模块
     class WorkCenter {
         companion object {
@@ -101,7 +116,8 @@ object RouterPath {
         companion object {
             const val TEACHER_RECEIVED_COMMENT = "/teacher/ui/comment/ReceivedCommentActivity"
             const val TEACHER_COURSE_COMMENT = "/teacher/ui/comment/CourseCommentActivity"
-            const val TEACHER_COURSE_COMMENT_DETAIL = "/teacher/ui/comment/CourseCommentDetailActivity"
+            const val TEACHER_COURSE_COMMENT_DETAIL =
+                "/teacher/ui/comment/CourseCommentDetailActivity"
         }
     }
 
@@ -110,7 +126,8 @@ object RouterPath {
         companion object {
             const val HOME_PAGE = "/teacher/ui/homepage/HomePageActivity"
             const val MINE_STYLE_PAGE = "/teacher/ui/minestyle/MineStyleActivity"
-            const val MINE_TEACHABLE_INSTRUMENT = "/teacher/ui/minestyle/TeachableInstrumentActivity"
+            const val MINE_TEACHABLE_INSTRUMENT =
+                "/teacher/ui/minestyle/TeachableInstrumentActivity"
             const val MINE_CHECK_TEACHABLE = "/ui/minestyle/CheckTeachableActivity"
             const val MINE_PERSONAL_SETTING = "/teacher/ui/mine/PersonalSettingActivity"
             const val MINE_SETTING = "/teacher/ui/mine/SettingActivity"
@@ -133,13 +150,15 @@ object RouterPath {
             const val MINE_EQUIPMENT_TEST = "/ui/mine/EquipmentTestActivity"
         }
     }
+
     //聊天模块
     class ChatCenter {
         companion object {
             const val CHAT_SELECT_SCORE = "/rong/imkit/activity/SelectScoreChatActivity"
             const val CHAT_CREATE_GROUP = "/rong/imkit/activity/CreateGroupActivity"
             const val CHAT_GROUP_SETTING = "/rong/imkit/activity/ChatGroupSettingActivity"
-            const val CHAT_GROUP_SEARCH_HISTORY = "/rong/imkit/activity/SearchHistoryMessageActivity"
+            const val CHAT_GROUP_SEARCH_HISTORY =
+                "/rong/imkit/activity/SearchHistoryMessageActivity"
             const val CHAT_GROUP_NOTICE = "/rong/imkit/activity/NoticeActivity"
             const val CHAT_GROUP_NOTICE_EDIT = "/rong/imkit/activity/NoticeEditActivity"
             const val CHAT_GROUP_SET_REMARK = "/rong/imkit/activity/SetRemarksActivity"

+ 12 - 0
BaseLibrary/src/main/java/com/cooleshow/base/utils/DateUtil.java

@@ -1031,6 +1031,18 @@ public class DateUtil {
     }
 
 
+    public static long forMatLong(String time,SimpleDateFormat datetimeFormat) {
+        try {
+            datetimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+            Date date = datetimeFormat.parse(time);
+            return date.getTime();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return 0;
+    }
+
     public static long forMatLong(String time) {
         try {
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");

+ 6 - 3
live_teaching/build.gradle

@@ -1,4 +1,5 @@
 apply plugin: 'com.android.library'
+
 android {
     compileSdkVersion rootProject.ext.android.compileSdkVersion
     defaultConfig {
@@ -10,10 +11,10 @@ android {
         ndk {
             abiFilters "armeabi-v7a", "arm64-v8a"
         }
+
         javaCompileOptions {
             annotationProcessorOptions {
                 arguments = [AROUTER_MODULE_NAME: project.getName()]
-                includeCompileClasspath = true
             }
         }
         multiDexEnabled true
@@ -48,11 +49,12 @@ android {
         }
     }
 
-    buildFeatures{
+    buildFeatures {
         viewBinding = true
     }
 }
 
+
 dependencies {
     api fileTree(dir: 'libs', include: ['*.jar'])
     implementation 'androidx.appcompat:appcompat:1.1.0'
@@ -72,5 +74,6 @@ dependencies {
     implementation project(path: ':usercenter')
     implementation project(path: ':BaseLibrary')
     implementation 'com.h6ah4i.android.widget.verticalseekbar:verticalseekbar:1.0.0'
-
+    //ARouter
+    annotationProcessor("com.alibaba:arouter-compiler:$rootProject.ext.android.arouter_api_version")
 }

+ 4 - 4
live_teaching/src/main/java/com/daya/live_teaching/api/LiveTeachingUrls.java

@@ -8,7 +8,7 @@ public class LiveTeachingUrls {
 //            public static final String DOMAIN = "http://192.168.3.38:8000/";
 
     public static final String DOMAIN    = BuildConfig.BASE_SERVER_URL;
-    static final        String api       = "api-im/";
+    static final        String api       = "api-classroom/";
     public static final String LOGIN     = api + "room/join";
     public static final String hereWhite = api + "hereWhite/create";
     public static final String SIGN_IN   = api + "room/signIn";
@@ -54,9 +54,9 @@ public class LiveTeachingUrls {
 
 
     public static final String SWITCH_DISPLAY              = api + "room/display";
-    public static final String PUSH_DOWNLOAD_EXAM_SONG_MSG = api + "room/pushDownloadMusicScoreMsg";
+    public static final String PUSH_DOWNLOAD_EXAM_SONG_MSG = api + "room/pushDownloadMusicSheetMsg";
 
-    public static final String ADJUST_EXAM_SONG = api + "room/adjustMusicScore";
-    public static final String JOIN_ROOM_STATUS_NOTIFY = api + "room/joinRoomStatusNotify";
+    public static final String ADJUST_EXAM_SONG = api + "room/musicSheetDownNotify";
+    public static final String JOIN_ROOM_STATUS_NOTIFY = api + "room/joinRoomFailure";
 
 }

+ 23 - 15
live_teaching/src/main/java/com/daya/live_teaching/im/message/MemberChangedMessage.java

@@ -1,6 +1,7 @@
 package com.daya.live_teaching.im.message;
 
 import android.os.Parcel;
+import android.text.TextUtils;
 
 import com.cooleshow.base.utils.LogUtils;
 import com.daya.live_teaching.model.ClassMemberChangedAction;
@@ -20,15 +21,15 @@ import io.rong.imlib.model.MessageContent;
  */
 @MessageTag(value = "SC:RMCMsg", flag = MessageTag.ISPERSISTED)
 public class MemberChangedMessage extends MessageContent {
-    private final static String  TAG = MemberChangedMessage.class.getSimpleName();
-    private              int     action;     // 用户行为:1.加入;2.离开;3.踢出
-    private              String  userId;
-    private              String  userName;
-    private              int     role;       // 用户角色
-    private              long    timestamp;
-    private              boolean metronomeSwitch;
-    private              boolean handUpOn;
-    private              boolean examSongSwitch;
+    private final static String TAG = MemberChangedMessage.class.getSimpleName();
+    private int action;     // 用户行为:1.加入;2.离开;3.踢出
+    private String userId;
+    private String userName;
+    private int role;       // 用户角色
+    private long timestamp;
+    private boolean metronomeSwitch;
+    private boolean handUpOn;
+    private boolean examSongSwitch;
 
     public MemberChangedMessage(byte[] data) {
         String jsonStr = null;
@@ -40,13 +41,20 @@ public class MemberChangedMessage extends MessageContent {
         }
         try {
             JSONObject jsonObject = new JSONObject(jsonStr);
-            action = jsonObject.optInt("action");
+            String changedEnum = jsonObject.optString("changedEnum");
+            if (TextUtils.equals(changedEnum, "LEAVE")) {
+                action = 2;
+            } else if (TextUtils.equals(changedEnum, "JOIN")) {
+                action = 1;
+            } else {
+                action = 3;
+            }
             userId = jsonObject.optString("userId");
-            userName = jsonObject.optString("userName");
+            userName = jsonObject.optString("username");
             role = jsonObject.optInt("role");
             timestamp = jsonObject.optLong("timestamp");
             metronomeSwitch = jsonObject.optBoolean("metronomeSwitch");
-            handUpOn = jsonObject.optBoolean("handUpOn");
+            handUpOn = jsonObject.optBoolean("handFlag");
             examSongSwitch = jsonObject.optBoolean("examSongSwitch");
         } catch (JSONException e) {
             SLog.e(TAG, e.toString());
@@ -100,13 +108,13 @@ public class MemberChangedMessage extends MessageContent {
     public byte[] encode() {
         JSONObject jsonObject = new JSONObject();
         try {
-            jsonObject.put("action", action);
+//            jsonObject.put("action", action);
             jsonObject.put("userId", userId);
-            jsonObject.put("userName", userName);
+            jsonObject.put("username", userName);
             jsonObject.put("role", role);
             jsonObject.put("timestamp", timestamp);
             jsonObject.put("metronomeSwitch", metronomeSwitch);
-            jsonObject.put("handUpOn", handUpOn);
+            jsonObject.put("handFlag", handUpOn);
             jsonObject.put("examSongSwitch", examSongSwitch);
         } catch (JSONException e) {
             SLog.e(TAG, e.toString());

+ 0 - 3
live_teaching/src/main/java/com/daya/live_teaching/im/provider/RoleChangedMessageItemProvider.java

@@ -67,9 +67,6 @@ public class RoleChangedMessageItemProvider extends BaseNotificationProvider<Rol
         String userNameUnion = userNameUnionBuilder.substring(0, userNameUnionBuilder.length() - 1);
         // 根据身份不同显示不同的信息
         switch (role) {
-            case ASSISTANT:
-                content = context.getString(R.string.class_conversation_notify_role_to_assistant, userNameUnion);
-                break;
             case LECTURER:
                 content = context.getString(R.string.class_conversation_notify_role_to_lecturer, userNameUnion);
                 break;

+ 0 - 3
live_teaching/src/main/java/com/daya/live_teaching/im/ui/ClassMessageListAdapter.java

@@ -119,9 +119,6 @@ public class ClassMessageListAdapter extends MessageListAdapter {
                         case LECTURER:
                             resourceId = R.drawable.class_portrait_lecturer;
                             break;
-                        case ASSISTANT:
-                            resourceId = R.drawable.class_portrait_assistant;
-                            break;
                         default:
                             resourceId = R.drawable.class_portrait_listener;
                     }

+ 90 - 72
live_teaching/src/main/java/com/daya/live_teaching/model/ClassMember.java

@@ -2,22 +2,51 @@ package com.daya.live_teaching.model;
 
 import android.text.TextUtils;
 
-import com.google.gson.annotations.SerializedName;
+import com.cooleshow.base.utils.DateUtil;
 
 import java.io.Serializable;
+import java.text.SimpleDateFormat;
 import java.util.List;
-import java.util.Objects;
 
 public class ClassMember implements Serializable {
-    private boolean camera;
-    private long joinTime;
-    private boolean microphone;
+    private boolean cameraFlag;
+    public String courseScheduleId;
+    public String id;
+    private String joinTime;
+
+    public boolean isMicrophone() {
+        return micFlag;
+    }
+
+    public void setMicrophone(boolean micFlag) {
+        this.micFlag = micFlag;
+    }
+
+    private boolean micFlag;//是否开启麦克风
     private int role;
     private String userId;
     private String headUrl;
     private String userName;
-    private boolean musicMode;
-    private boolean handUpOn;//是否举手
+
+    public boolean isMusicMode() {
+        return musicModeFlag;
+    }
+
+    public void setMusicMode(boolean musicModeFlag) {
+        this.musicModeFlag = musicModeFlag;
+    }
+
+    private boolean musicModeFlag;//音乐模式是否开启
+
+    public boolean isHandUpOn() {
+        return handFlag;
+    }
+
+    public void setHandUpOn(boolean handFlag) {
+        this.handFlag = handFlag;
+    }
+
+    private boolean handFlag;//是否举手
     private boolean isVisibiliyMic;//是否显示麦克风按钮
     private boolean isOnStage;//是否上台
 
@@ -33,21 +62,6 @@ public class ClassMember implements Serializable {
         this.headUrl = headUrl;
     }
 
-    public boolean isMusicMode() {
-        return musicMode;
-    }
-
-    public void setMusicMode(boolean musicMode) {
-        this.musicMode = musicMode;
-    }
-
-    public boolean isHandUpOn() {
-        return handUpOn;
-    }
-
-    public void setHandUpOn(boolean handUpOn) {
-        this.handUpOn = handUpOn;
-    }
 
     public boolean isOnStage() {
         return isOnStage;
@@ -65,28 +79,28 @@ public class ClassMember implements Serializable {
         isVisibiliyMic = visibiliyMic;
     }
 
-    public boolean isCamera() {
-        return camera;
-    }
-
-    public void setCamera(boolean camera) {
-        this.camera = camera;
-    }
 
     public long getJoinTime() {
-        return joinTime;
+        try {
+            long time = DateUtil.parseDatetime(joinTime).getTime();
+            return time;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return 0;
     }
 
     public void setJoinTime(long joinTime) {
-        this.joinTime = joinTime;
+        try {
+            this.joinTime = DateUtil.getMillon(joinTime);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
-    public boolean isMicrophone() {
-        return microphone;
-    }
 
-    public void setMicrophone(boolean microphone) {
-        this.microphone = microphone;
+    public void setJoinTime(String joinTime) {
+        this.joinTime = joinTime;
     }
 
     public Role getRole() {
@@ -121,21 +135,28 @@ public class ClassMember implements Serializable {
         this.playMidiJson = playMidiJson;
     }
 
+    public boolean isCamera() {
+        return cameraFlag;
+    }
+
+    public void setCamera(boolean cameraFlag) {
+        this.cameraFlag = cameraFlag;
+    }
 
     public static class PlayMidiJsonBean implements Serializable {
+
         /**
          * customType : 0
-         * enable : false
-         * userId :
+         * enable : true
+         * playVolume : 0
          * rate : 0
+         * roomId : 0
+         * type :
+         * userId :
          */
 
-        private int customType;
-        private boolean enable;
-        @SerializedName("userId")
-        private String userIdX;
-        private int rate;
-        private int playVolume;
+        public int customType;
+        public boolean enable;
 
         public int getPlayVolume() {
             return playVolume;
@@ -145,12 +166,18 @@ public class ClassMember implements Serializable {
             this.playVolume = playVolume;
         }
 
-        public int getCustomType() {
-            return customType;
+        public int playVolume;
+        public int rate;
+        public int roomId;
+        public String type;
+        public String userId;
+
+        public int getRate() {
+            return rate;
         }
 
-        public void setCustomType(int customType) {
-            this.customType = customType;
+        public void setRate(int rate) {
+            this.rate = rate;
         }
 
         public boolean isEnable() {
@@ -161,20 +188,12 @@ public class ClassMember implements Serializable {
             this.enable = enable;
         }
 
-        public String getUserIdX() {
-            return userIdX;
-        }
-
-        public void setUserIdX(String userIdX) {
-            this.userIdX = userIdX;
-        }
-
-        public int getRate() {
-            return rate;
+        public int getCustomType() {
+            return customType;
         }
 
-        public void setRate(int rate) {
-            this.rate = rate;
+        public void setCustomType(int customType) {
+            this.customType = customType;
         }
     }
 
@@ -188,6 +207,17 @@ public class ClassMember implements Serializable {
     }
 
     public static class ScheduleStudentMusicScoresBean implements Serializable {
+        private int accompanimentPlayStatus;
+        private int downStatus;
+        private String id;
+        private String musicScoreAccompanimentId;
+        private int playStatus;
+        private int speed;
+        private String url;
+        private String mp3Url;
+        private String musicScoreName;
+        private int isAccompaniment;
+
         public ScheduleStudentMusicScoresBean() {
 
         }
@@ -219,18 +249,6 @@ public class ClassMember implements Serializable {
          * mp3Url :
          */
 
-        private int accompanimentPlayStatus;
-        private int downStatus;
-        private String id;
-        private String musicScoreAccompanimentId;
-        private int playStatus;
-        private int speed;
-        private String url;
-        private String mp3Url;
-        private String musicScoreName;
-        private int isAccompaniment;
-
-
         public int getIsAccompaniment() {
             return isAccompaniment;
         }

+ 46 - 84
live_teaching/src/main/java/com/daya/live_teaching/model/LoginResult.java

@@ -4,66 +4,25 @@ import java.io.Serializable;
 import java.util.List;
 
 public class LoginResult implements Serializable {
-    private String            authorization;
-    private String            display;
-    private String            imToken;
-    private String            roomId;
-    private int surplusTime;
-    private int soundVolume; //音量
-    private String            whiteBoradUuid;//白板uuid 白板对象赋值
-    private String            whiteBoradRoomToken; //白板token白板对象赋值
-    private UserInfo          userInfo;
-    private List<ClassMember> members;
-    private List<WhiteBoard>  whiteboards;
-    private boolean autoCloseFlag ;//课程结束后是否自动关闭课程
-    private int autoCloseNetworkRoomTime ;//课程结束后多少分钟关闭网络教室
-    public boolean isAutoCloseFlag() {
-        return autoCloseFlag;
-    }
-
-    public int getAutoCloseNetworkRoomTime() {
-        return autoCloseNetworkRoomTime;
-    }
-
-    public void setAutoCloseFlag(boolean autoCloseFlag) {
-        this.autoCloseFlag = autoCloseFlag;
-    }
-
-    public void setAutoCloseNetworkRoomTime(int autoCloseNetworkRoomTime) {
-        this.autoCloseNetworkRoomTime = autoCloseNetworkRoomTime;
-    }
-
-    public int getSurplusTime() {
-        return surplusTime;
-    }
-
-    public void setSurplusTime(int surplusTime) {
-        this.surplusTime = surplusTime;
-    }
-
-    public String getWhiteBoradUuid() {
-        return whiteBoradUuid;
-    }
-
-    public void setWhiteBoradUuid(String whiteBoradUuid) {
-        this.whiteBoradUuid = whiteBoradUuid;
-    }
-
-    public String getWhiteBoradRoomToken() {
-        return whiteBoradRoomToken;
-    }
-
-    public void setWhiteBoradRoomToken(String whiteBoradRoomToken) {
-        this.whiteBoradRoomToken = whiteBoradRoomToken;
-    }
-
-    public String getAuthorization() {
-        return authorization;
-    }
 
-    public void setAuthorization(String authorization) {
-        this.authorization = authorization;
-    }
+    /**
+     * autoCloseNetworkRoomTime :
+     * courseScheduleId : 0
+     * createTime :
+     * display :
+     * id : 0
+     * midiJson : {"customType":0,"enable":true,"playVolume":0,"rate":0,"roomId":0,"type":"","userId":""}
+     * roomId :
+     * roomMember : {"avatar":"","cameraFlag":true,"courseScheduleId":0,"handFlag":true,"id":0,"joinTime":"","micFlag":true,"musicModeFlag":true,"musicSheetResults":[{"accompanimentPlayStatus":0,"audioFileUrl":"","courseScheduleId":0,"createTime":"","downStatus":0,"id":0,"mp3Url":"","musicSheetAccompanimentId":0,"musicSheetName":"","playStatus":0,"soundVolume":0,"speed":0,"updateTime":"","userId":0,"userType":0}],"role":0,"roomId":"","userId":0,"username":""}
+     * roomMemberList : [{}]
+     * soundVolume : 0
+     * surplusTime : 0
+     * updateTime :
+     */
+
+    public String autoCloseNetworkRoomTime;
+    public int courseScheduleId;
+    public String createTime;
 
     public String getDisplay() {
         return display;
@@ -73,51 +32,54 @@ public class LoginResult implements Serializable {
         this.display = display;
     }
 
-    public String getImToken() {
-        return imToken;
-    }
-
-    public void setImToken(String imToken) {
-        this.imToken = imToken;
-    }
+    public String display;
+    public int id;
+    public ClassMember.PlayMidiJsonBean midiJson;
 
     public String getRoomId() {
         return roomId;
     }
 
-    public void setRoomId(String roomId) {
-        this.roomId = roomId;
-    }
+    public String roomId;
 
     public UserInfo getUserInfo() {
-        return userInfo;
+        return roomMember;
     }
 
-    public void setUserInfo(UserInfo userInfo) {
-        this.userInfo = userInfo;
+    public void setUserInfo(UserInfo roomMember) {
+        this.roomMember = roomMember;
     }
 
-    public List<ClassMember> getMembers() {
-        return members;
+    public UserInfo roomMember;
+
+    public int getSoundVolume() {
+        return soundVolume;
     }
 
-    public void setMembers(List<ClassMember> members) {
-        this.members = members;
+    public void setSoundVolume(int soundVolume) {
+        this.soundVolume = soundVolume;
     }
 
-    public List<WhiteBoard> getWhiteboards() {
-        return whiteboards;
+    public int soundVolume;
+
+    public int getSurplusTime() {
+        return surplusTime;
     }
 
-    public void setWhiteboards(List<WhiteBoard> whiteboards) {
-        this.whiteboards = whiteboards;
+    public void setSurplusTime(int surplusTime) {
+        this.surplusTime = surplusTime;
     }
 
-    public int getSoundVolume() {
-        return soundVolume;
+    public int surplusTime;
+    public String updateTime;
+
+    public List<ClassMember> getMembers() {
+        return roomMemberList;
     }
 
-    public void setSoundVolume(int soundVolume) {
-        this.soundVolume = soundVolume;
+    public void setMembers(List<ClassMember> roomMemberList) {
+        this.roomMemberList = roomMemberList;
     }
+
+    public List<ClassMember> roomMemberList;
 }

+ 8 - 7
live_teaching/src/main/java/com/daya/live_teaching/model/Result.java

@@ -6,10 +6,10 @@ package com.daya.live_teaching.model;
  * @param <R> 请求结果的实体类
  */
 public class Result<R> {
-    private Data<R> data;
-
+    private R data;
     private int errCode;
     private int code;
+    private String nowTime;
 
     public int getCode() {
         return code;
@@ -23,11 +23,11 @@ public class Result<R> {
 
     private String errMsg;
 
-    public Data<R> getData() {
+    public R getData() {
         return data;
     }
 
-    public void setData(Data<R> data) {
+    public void setData(R data) {
         this.data = data;
     }
 
@@ -62,21 +62,22 @@ public class Result<R> {
      */
     public R getDataResult() {
         if (data != null) {
-            return data.getResult();
+            return data;
         }
-
         return null;
     }
 
     public static class Data<R> {
         public R result;
+        public R data;
 
         public R getResult() {
-            return result;
+            return data;
         }
 
         public void setResult(R result) {
             this.result = result;
+            this.data = result;
         }
     }
 }

+ 3 - 7
live_teaching/src/main/java/com/daya/live_teaching/model/Role.java

@@ -12,22 +12,18 @@ import com.daya.live_teaching.permission.PermissionGroupLevel;
  */
 public enum Role {
     /**
-     * 助教权限组
-     */
-    ASSISTANT(1, PermissionGroupLevel.GROUP_ASSISTANT),
-    /**
      * 讲师权限组
      */
-    LECTURER(2, PermissionGroupLevel.GROUP_LECTURER),
+    LECTURER(1, PermissionGroupLevel.GROUP_LECTURER),
 
     /**
      * 学员权限组
      */
-    STUDENT(3, PermissionGroupLevel.GROUP_STUDENT),
+    STUDENT(0, PermissionGroupLevel.GROUP_STUDENT),
     /**
      * 旁听者权限组
      */
-    LISTENER(4, PermissionGroupLevel.GROUP_LISTENER);
+    LISTENER(3, PermissionGroupLevel.GROUP_LISTENER);
 
 
 

+ 5 - 6
live_teaching/src/main/java/com/daya/live_teaching/model/ScreenDisplay.java

@@ -89,12 +89,11 @@ public class ScreenDisplay {
     }
 
     public enum Display {
-        ASSISTANT(0),   //0 助教
-        LECTURER(1),    //1 讲师
-        WHITEBOARD(2),  //2 白板
-        SCREEN(3),      //3 屏幕
-        NONE(4),       //4清空 display
-        STUDENT(5);     //5学生
+        LECTURER(0),    //1 讲师
+        WHITEBOARD(1),  //2 白板
+        SCREEN(2),      //3 屏幕
+        NONE(3),       //4清空 display
+        STUDENT(4);     //5学生
         private int type;
 
         Display(int type) {

+ 92 - 52
live_teaching/src/main/java/com/daya/live_teaching/repository/ClassRepository.java

@@ -8,6 +8,7 @@ import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.base.data.net.RetrofitClientNoToken;
 import com.cooleshow.base.data.net.RetrofitFactory;
 import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.DateUtil;
 import com.cooleshow.base.utils.FileUtils;
 import com.cooleshow.base.utils.SystemUtils;
 import com.daya.live_teaching.api.LiveTeachingApi;
@@ -83,6 +84,17 @@ public class ClassRepository extends BaseRepository {
     private static final String PARAM_ROOM_ID = "roomId";
     private static final String PARAM_USER_ID = "userId";
     private static final String PARAM_CAMERA_ON = "cameraOn";
+
+
+    public static final String PARAM_CAMERA_TYPE = "CAMERA";
+    public static final String PARAM_MICROPHONE_TYPE = "MICROPHONE";
+    public static final String PARAM_MUSIC_MODE_TYPE = "MUSIC_MODE";
+    public static final String PARAM_HAND_UP_TYPE = "HAND_UP";
+    public static final String PARAM_EXAM_SONG_TYPE = "EXAM_SONG";
+    public static final String PARAM_MUSIC_SHEET_TYPE = "MUSIC_SHEET";
+    public static final String PARAM_ACCOMPANIMENT_TYPE = "ACCOMPANIMENT";
+
+
     // 5 原音6 伴奏
     private static final String PARAM_DEVICE_TYPE = "deviceType";
     private static final String PARAM_SOUND_VOLUME = "soundVolume";
@@ -139,7 +151,8 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(PARAM_CAMERA_ON, cameraOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_CAMERA_TYPE);
+        bodyMap.put("enable", cameraOn);
         sealClassService.deviceControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
@@ -147,9 +160,9 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(PARAM_CAMERA_ON, cameraOn);
-        bodyMap.put(PARAM_DEVICE_TYPE, deviceType);
         bodyMap.put(PARAM_SOUND_VOLUME, soundVolume);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MICROPHONE_TYPE);
+        bodyMap.put("enable", cameraOn);
         sealClassService.deviceControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
@@ -173,7 +186,8 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(PARAM_MIC_ON, microphone);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MICROPHONE_TYPE);
+        bodyMap.put("enable", microphone);
         sealClassService.deviceControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
@@ -181,7 +195,8 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(HAND_UP_ON, handUpOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_HAND_UP_TYPE);
+        bodyMap.put("enable", handUpOn);
         sealClassService.deviceControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
@@ -189,7 +204,8 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(MUSIC_MODE_ON, musicModeOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_MODE_TYPE);
+        bodyMap.put("enable", musicModeOn);
         sealClassService.deviceControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
 
     }
@@ -197,23 +213,26 @@ public class ClassRepository extends BaseRepository {
     public void batchControlCamera(String roomId, boolean cameraOn, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(PARAM_CAMERA_ON, cameraOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_CAMERA_TYPE);
+        bodyMap.put("enable", cameraOn);
         sealClassService.deviceBatchControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
 
-    public void batchControlMusicMode(String roomId, boolean microphone, ResultCallback<Boolean> callBack) {
+    public void batchControlMusicMode(String roomId, boolean musicMode, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(MUSIC_MODE_ON, microphone);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_MODE_TYPE);
+        bodyMap.put("enable", musicMode);
         sealClassService.deviceBatchControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
-    public void batchControlMicrophone(String roomId, String userId, boolean musicModeOn, ResultCallback<Boolean> callBack) {
+    public void batchControlMicrophone(String roomId, String userId, boolean microphone, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(PARAM_MIC_ON, musicModeOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MICROPHONE_TYPE);
+        bodyMap.put("enable", microphone);
         sealClassService.deviceBatchControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
 
     }
@@ -221,12 +240,24 @@ public class ClassRepository extends BaseRepository {
     //伴奏
     public void batchControlExamSong(String roomId, String userId, String musicScoreOn, String accompanimentOn, String musicScoreAccompanimentId, String soudnValue, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
+
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(MUSIC_SCORE_ON, musicScoreOn);
-        bodyMap.put(ACCOMPANIMENT_ON, accompanimentOn);
         bodyMap.put(EXAM_SONG_ID, musicScoreAccompanimentId);
         bodyMap.put(PARAM_SOUND_VOLUME, soudnValue);
+        if (TextUtils.equals("true", musicScoreOn)) {
+            bodyMap.put("enable", true);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_SHEET_TYPE);
+        } else if (TextUtils.equals("false", musicScoreOn)) {
+            bodyMap.put("enable", false);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_SHEET_TYPE);
+        } else if (TextUtils.equals("true", accompanimentOn)) {
+            bodyMap.put("enable", true);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_ACCOMPANIMENT_TYPE);
+        } else if (TextUtils.equals("false", accompanimentOn)) {
+            bodyMap.put("enable", false);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_ACCOMPANIMENT_TYPE);
+        }
         sealClassService.deviceBatchControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
 
     }
@@ -235,31 +266,44 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_USER_ID, userId);
-        bodyMap.put(MUSIC_SCORE_ON, musicScoreOn);
-        bodyMap.put(ACCOMPANIMENT_ON, accompanimentOn);
         bodyMap.put(EXAM_SONG_ID, musicScoreAccompanimentId);
+
+        if (TextUtils.equals("true", musicScoreOn)) {
+            bodyMap.put("enable", true);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_SHEET_TYPE);
+        } else if (TextUtils.equals("false", musicScoreOn)) {
+            bodyMap.put("enable", false);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_SHEET_TYPE);
+        } else if (TextUtils.equals("true", accompanimentOn)) {
+            bodyMap.put("enable", true);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_ACCOMPANIMENT_TYPE);
+        } else if (TextUtils.equals("false", accompanimentOn)) {
+            bodyMap.put("enable", false);
+            bodyMap.put(PARAM_DEVICE_TYPE, PARAM_ACCOMPANIMENT_TYPE);
+        }
         sealClassService.deviceControl(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
-    public void deviceApprove(String roomId, String ticket, ResultCallback<Boolean> callBack) {
+    public void deviceApprove(String roomId, String deviceType, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(PARAM_TICKET, ticket);
+        bodyMap.put(PARAM_DEVICE_TYPE, deviceType);
         sealClassService.deviceApprove(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
-    public void deviceReject(String roomId, String ticket, ResultCallback<Boolean> callBack) {
+    public void deviceReject(String roomId, String deviceType, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(PARAM_TICKET, ticket);
+        bodyMap.put(PARAM_DEVICE_TYPE, deviceType);
         sealClassService.deviceReject(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
     public void deviceSyncHandUpOn(String roomId, String userId, boolean handUpOn, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(HAND_UP_ON, handUpOn);
         bodyMap.put(PARAM_USER_ID, userId);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_HAND_UP_TYPE);
+        bodyMap.put("enable", handUpOn);
         sealClassService.deviceSync(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
@@ -267,6 +311,8 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(MUSIC_MODE_ON, musicModeOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_MODE_TYPE);
+        bodyMap.put("enable", musicModeOn);
         sealClassService.deviceSync(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
@@ -274,20 +320,24 @@ public class ClassRepository extends BaseRepository {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
         bodyMap.put(PARAM_CAMERA_ON, cameraOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_CAMERA_TYPE);
+        bodyMap.put("enable", cameraOn);
         sealClassService.deviceSync(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
     public void deviceSyncMic(String roomId, boolean microphoneOn, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(PARAM_MIC_ON, microphoneOn);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MICROPHONE_TYPE);
+        bodyMap.put("enable", microphoneOn);
         sealClassService.deviceSync(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
     public void deviceSyncExamSong(String roomId, boolean examSong, ResultCallback<Boolean> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(MUSIC_SCORE_ON, examSong);
+        bodyMap.put(PARAM_DEVICE_TYPE, PARAM_MUSIC_SHEET_TYPE);
+        bodyMap.put("enable", examSong);
         sealClassService.deviceSync(RetrofitUtil.createJsonRequest(bodyMap)).enqueue(new CallBackWrapper<Boolean>(callBack));
     }
 
@@ -467,7 +517,19 @@ public class ClassRepository extends BaseRepository {
     public void switchDisplay(String roomId, int type, String userId, String uri, ResultCallback<Boolean> callback) {
         HashMap<String, Object> bodyMap = new HashMap<>();
         bodyMap.put(PARAM_ROOM_ID, roomId);
-        bodyMap.put(PARAM_TYPE, type);
+        String typeParams;
+        if (type == ScreenDisplay.Display.LECTURER.getType()) {
+            typeParams = "TEACHER";
+        } else if (type == ScreenDisplay.Display.WHITEBOARD.getType()) {
+            typeParams = "WHITE_BOARD";
+        } else if (type == ScreenDisplay.Display.SCREEN.getType()) {
+            typeParams = "SCREEN";
+        } else if (type == ScreenDisplay.Display.NONE.getType()) {
+            typeParams = "NONE";
+        } else {
+            typeParams = "STUDENT";
+        }
+        bodyMap.put(PARAM_TYPE, typeParams);
         if (userId != null) {
             bodyMap.put(PARAM_USER_ID, userId);
         }
@@ -524,7 +586,13 @@ public class ClassRepository extends BaseRepository {
                 classMember.setRole(memberChangedMessage.getRole().getValue());
                 classMember.setUserId(memberChangedMessage.getUserId());
                 classMember.setUserName(memberChangedMessage.getUserName());
-                classMember.setJoinTime(memberChangedMessage.getTimestamp());
+                try {
+                    long timestamp = memberChangedMessage.getTimestamp();
+                    String millon = DateUtil.getMillon(timestamp);
+                    classMember.setJoinTime(millon);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
                 classMember.setHandUpOn(memberChangedMessage.isHandUpOn());
                 ClassMember.PlayMidiJsonBean playMidiJsonBean = new ClassMember.PlayMidiJsonBean();
                 playMidiJsonBean.setEnable(memberChangedMessage.isMetronomeSwitch());
@@ -611,34 +679,6 @@ public class ClassRepository extends BaseRepository {
                 result.setAccept(speechResultMessage.isAccept());
                 eventListener.onRequestSpeechResult(result);
                 return true;
-            } else if (content instanceof AssistantTransferMessage) {    // 转让助教
-                AssistantTransferMessage assistantTransferMessage = (AssistantTransferMessage) content;
-
-                List<RoleChangedUser> roleChangedUserList = new ArrayList<>();
-                RoleChangedUser assistant = new RoleChangedUser();
-                assistant.setRole(Role.ASSISTANT.getValue());
-                assistant.setUserId(assistantTransferMessage.getToUserId());
-                roleChangedUserList.add(assistant);
-
-                // 操作者
-                RoleChangedUser oldAssistant = new RoleChangedUser();
-                oldAssistant.setRole(Role.STUDENT.getValue());
-                oldAssistant.setUserId(assistantTransferMessage.getOpUserId());
-                roleChangedUserList.add(oldAssistant);
-
-                eventListener.onRoleChanged(roleChangedUserList, assistantTransferMessage.getOpUserId());
-                return true;
-
-            } else if (content instanceof UpgradeRoleMessage) {      // 邀请升级
-                UpgradeRoleMessage upgradeRoleMessage = (UpgradeRoleMessage) content;
-                UpgradeRoleInvite upgradeRoleInvite = new UpgradeRoleInvite();
-                upgradeRoleInvite.setOpUserId(upgradeRoleMessage.getOpUserId());
-                upgradeRoleInvite.setOpUserName(upgradeRoleMessage.getOpUserName());
-                upgradeRoleInvite.setAction(upgradeRoleMessage.getAction());
-                upgradeRoleInvite.setRole(upgradeRoleMessage.getRole());
-                upgradeRoleInvite.setTicket(upgradeRoleMessage.getTicket());
-                eventListener.onInviteUpgradeRole(upgradeRoleInvite);
-                return true;
             } else if (content instanceof PlayMidiMessage) {      // 播放节拍器
                 PlayMidiMessage playMidiMessage = (PlayMidiMessage) content;
                 PlayMidi playMidi = new PlayMidi();

+ 9 - 11
live_teaching/src/main/java/com/daya/live_teaching/repository/UserRepository.java

@@ -44,6 +44,7 @@ public class UserRepository extends BaseRepository {
         this.imToken = imToken;
         login(roomId, isListener, userName, callBack);
     }
+
     //加入房间
     public void login(String roomId, boolean isListener, String userName, final ResultCallback<LoginResult> callBack) {
         HashMap<String, Object> bodyMap = new HashMap<>();
@@ -61,20 +62,21 @@ public class UserRepository extends BaseRepository {
                     return;
                 }
                 // 进入音视频房间
-                RtcManager.getInstance().joinRtcRoom(result.getRoomId(), new ResultCallback<String>() {
+                RtcManager.getInstance().joinRtcRoom(result.roomId, new ResultCallback<String>() {
                     @Override
                     public void onSuccess(String rtcRoomId) {
-                        UserInfo loginUser = result.getUserInfo();
-                        if (loginUser != null) {
-                            if (loginUser.getRole() == Role.LECTURER) {
-                                List<ClassMember.ScheduleStudentMusicScoresBean> userMusicScoresBeans = loginUser.getScheduleStudentMusicScores();
-                                List<ClassMember> members = result.getMembers();
+                        UserInfo roomMember = result.roomMember;
+                        if (roomMember != null) {
+                            if (roomMember.getRole() == Role.LECTURER) {
+                                List<ClassMember.ScheduleStudentMusicScoresBean> userMusicScoresBeans = roomMember.getScheduleStudentMusicScores();
+                                List<ClassMember> members = result.roomMemberList;
                                 if (userMusicScoresBeans != null && userMusicScoresBeans.size() > 0 && members != null && members.size() > 0) {
                                     for (ClassMember.ScheduleStudentMusicScoresBean scoresBean : userMusicScoresBeans) {
                                         int downStatus = 1;
                                         if (scoresBean != null) {
                                             for (ClassMember member : members) {
                                                 if (member.getRole() != Role.LECTURER) {
+                                                    member.setPlayMidiJson(result.midiJson);
                                                     List<ClassMember.ScheduleStudentMusicScoresBean> memberMusicScoresBeans = member.getScheduleStudentMusicScores();
                                                     for (ClassMember.ScheduleStudentMusicScoresBean memberScoresBean : memberMusicScoresBeans) {
                                                         if (memberScoresBean != null &&
@@ -90,13 +92,9 @@ public class UserRepository extends BaseRepository {
                                         }
                                     }
                                 }
-                                loginUser.setScheduleStudentMusicScores(userMusicScoresBeans);
+                                roomMember.setScheduleStudentMusicScores(userMusicScoresBeans);
                             }
 
-                            io.rong.imlib.model.UserInfo userInfo
-                                    = new io.rong.imlib.model.UserInfo(
-                                    loginUser.getUserId(), loginUser.getUserName(), Uri.parse(""));
-                            joinRoomStatusNotify(result.getRoomId(), UserHelper.getUserId(), true);
                             callBack.onSuccess(result);
                         } else {
                             callBack.onFail(-1, "加入房间错误,请重试");

+ 18 - 32
live_teaching/src/main/java/com/daya/live_teaching/ui/LiveActivity.java

@@ -49,6 +49,7 @@ import com.daya.live_teaching.model.StreamResource;
 import com.daya.live_teaching.model.UpgradeRoleInvite;
 import com.daya.live_teaching.model.UserInfo;
 import com.daya.live_teaching.model.WhiteBoard;
+import com.daya.live_teaching.repository.ClassRepository;
 import com.daya.live_teaching.repository.OnClassEventListener;
 import com.daya.live_teaching.rtc.RtcManager;
 import com.daya.live_teaching.ui.adapter.WhiteBoardListAdapter;
@@ -85,7 +86,7 @@ import io.rong.imlib.model.Conversation;
 /**
  * 网络教室
  */
-@Route(path = RouterPath.LiveCenter.PATH_LIVE)
+@Route(path = RouterPath.OnlineClassroom.PATH_LIVE)
 public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
     //加入房间的信息 LoginResult
     public static final String EXTRA_LOGIN_RESULT = "extra_login_result";
@@ -104,7 +105,7 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
     private int visibilityTopFragmentdMillis = 5000;
     private String roomId;
     private boolean isTeacher;
-    private UserInfo userInfo;
+    private ClassMember userInfo;
     private VideoListFragment videoListFragment;
     AlphaAnimation alphaAnimation = null;
     private FrameLayout topOperateControlFragmentViewLayout;
@@ -507,8 +508,8 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
             finish();
         }
         roomId = loginResult.getRoomId();
-        userInfo = loginResult.getUserInfo();
-        autoCloseNetworkRoomTime = loginResult.getAutoCloseNetworkRoomTime();
+        userInfo = loginResult.roomMember;
+        autoCloseNetworkRoomTime = Integer.parseInt(loginResult.autoCloseNetworkRoomTime);
 
         handler = new Handler();
         classViewModel = ViewModelProviders.of(this, new ClassViewModel.Factory(loginResult, this.getApplication())).get(ClassViewModel.class);
@@ -709,7 +710,7 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
             finish();
         }
 
-        userInfo = loginResult.getUserInfo();
+        userInfo = loginResult.roomMember;
         if (userInfo != null) {
             userInfo.setCamera(!isCloseCamera);
         }
@@ -780,7 +781,7 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
             public void onChanged(PassedTime passedTime) {
                 String time = passedTime.getPassedTime();
                 tvTime.setText(time);
-                if ("00:00:00".equals(time) && loginResult.isAutoCloseFlag() && isFinish && autoCloseNetworkRoomTime > 0) {
+                if ("00:00:00".equals(time) && isFinish && autoCloseNetworkRoomTime > 0) {
                     classViewModel.startQuitRoomPaseedTime(autoCloseNetworkRoomTime * 60);
                 }
                 if (passedTime.isTwinkle()) {
@@ -996,33 +997,19 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
 
     // 设备控制请求 dialog
     private void inviteOpenedDevicesDialog(DeviceType deviceType, final String ticket) {
-        //        if (deviceType == DeviceType.ExamSong) {
-        //            if (classViewModel.getUserInfo().getValue().getExamSongDownloadJson() != null) {
-        //                deviceApprove(roomId, ticket);
-        //            } else {
-        //                deviceReject(roomId, ticket);
-        //            }
-        //            return;
-        //        }
-        if (deviceType == DeviceType.handUpOn || deviceType == DeviceType.musicMode || deviceType == DeviceType.Microphone) {
+        if (deviceType == DeviceType.musicMode || deviceType == DeviceType.Microphone) {
             if (deviceType == DeviceType.Microphone) {
                 showToast("老师开启了你的麦克风");
+                deviceApprove(roomId, ClassRepository.PARAM_MICROPHONE_TYPE);
+            }else{
+                deviceApprove(roomId, ClassRepository.PARAM_MUSIC_MODE_TYPE);
             }
-            deviceApprove(roomId, ticket);
             return;
         }
         int contentMessage = R.string.class_dialog_request_invite_camera_connect;
         String toast = "老师开启了你的摄像头";
-        if (deviceType == DeviceType.Microphone) {
-            contentMessage = R.string.class_dialog_request_invite_mic_connect;
-            toast = "老师开启了你的麦克风";
-        }
-        if (deviceType == DeviceType.musicMode) {
-            contentMessage = R.string.class_dialog_request_invite_music_connect;
-            toast = "老师开启了你的音乐模式";
-        }
         int finalContentMessage = contentMessage;
-        LiveCommonDialog dialog =new LiveCommonDialog(this);
+        LiveCommonDialog dialog = new LiveCommonDialog(this);
         dialog.show();
         dialog.setTitle("提示");
         dialog.setConfirmBtnText("同意");
@@ -1032,30 +1019,30 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
             @Override
             public void onClick(View v) {
                 dialog.dismiss();
-                deviceApprove(roomId, ticket);
+                deviceApprove(roomId, ClassRepository.PARAM_CAMERA_TYPE);
             }
         });
         dialog.setOnCancelClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 dialog.dismiss();
-                deviceReject(roomId, ticket);
+                deviceReject(roomId, ClassRepository.PARAM_CAMERA_TYPE);
             }
         });
     }
 
     // deviceReject
-    private void deviceApprove(String roomId, String ticket) {
+    private void deviceApprove(String roomId, String deviceType) {
         if (classViewModel != null) {
-            classViewModel.deviceApprove(roomId, ticket).observe(this, new ShowToastObserver(this));
+            classViewModel.deviceApprove(roomId, deviceType).observe(this, new ShowToastObserver(this));
         }
 
     }
 
     //拒绝设备开启请求
-    private void deviceReject(String roomId, String ticket) {
+    private void deviceReject(String roomId, String deviceType) {
         if (classViewModel != null) {
-            classViewModel.deviceReject(roomId, ticket).observe(this, new ShowToastObserver(this));
+            classViewModel.deviceReject(roomId, deviceType).observe(this, new ShowToastObserver(this));
         }
 
     }
@@ -1260,7 +1247,6 @@ public class LiveActivity extends BaseActivity<ActivityLiveBinding> {
     }
 
 
-
     class LeaveRoom extends BroadcastReceiver {
         //实现接收到广播的处理
         @Override

+ 1 - 1
live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/BigVideoWindowFragment.java

@@ -162,7 +162,7 @@ public class BigVideoWindowFragment extends BaseFragment<FragmentBigVideoWindowB
         if (value == null) {
             return false;
         }
-        if (value.getType() != ScreenDisplay.Display.ASSISTANT && value.getType() != ScreenDisplay.Display.LECTURER) {
+        if (value.getType() != ScreenDisplay.Display.LECTURER) {
             return false;
         }
 

+ 1 - 1
live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/ComplaintDialogFragment.java

@@ -120,7 +120,7 @@ public class ComplaintDialogFragment extends BaseDialogFragment {
                             .isCompress(true)// 是否压缩 true or false
                             .forResult(PictureConfig.CHOOSE_REQUEST);
                 } else {
-                    Postcard postcard = ARouter.getInstance().build(RouterPath.LiveCenter.ACTIVITY_PHOTO_PREVIEW)
+                    Postcard postcard = ARouter.getInstance().build(RouterPath.OnlineClassroom.ACTIVITY_PHOTO_PREVIEW)
                             .withParcelableArrayList("list", (ArrayList<? extends Parcelable>) selectList)
                             .withInt("position", position);
                     LogisticsCenter.completion(postcard);

+ 2 - 2
live_teaching/src/main/java/com/daya/live_teaching/ui/fragmnet/ShareScreenFragment.java

@@ -384,7 +384,7 @@ public class ShareScreenFragment extends BaseFragment<FragmentShareScreenBinding
 
                     if (data.getUserId().equals(member.getUserId())) { // 刷新
                         // 如果现在的角色是助教或者讲师, 则需要对视频的信息更新
-                        if (member.getRole() == Role.LECTURER || member.getRole() == Role.ASSISTANT) {
+                        if (member.getRole() == Role.LECTURER) {
                             shareVideoView.setData(member);
                         } else {
                             // 如果其他的用户, 则移除
@@ -422,7 +422,7 @@ public class ShareScreenFragment extends BaseFragment<FragmentShareScreenBinding
                 shareVideoView.setData(null);
                 ScreenDisplay.Display type = screenDisplay.getType();
 
-                if (type == ScreenDisplay.Display.LECTURER || type == ScreenDisplay.Display.ASSISTANT) {
+                if (type == ScreenDisplay.Display.LECTURER) {
                     String userId = screenDisplay.getUserId();
                     if (Role.LECTURER == userInfoValue.getRole()) {
                         shareOperateView.setVisibility(View.VISIBLE);

+ 1 - 1
live_teaching/src/main/java/com/daya/live_teaching/ui/view/DisplayNullView.java

@@ -44,7 +44,7 @@ public class DisplayNullView extends LinearLayout {
 
 
     public void setContent(ClassMember member) {
-        if (member.getRole() == Role.ASSISTANT || member.getRole() == Role.LECTURER) {
+        if (member.getRole() == Role.LECTURER) {
             displayNullContent.setText(R.string.class_share_screen_null_text);
             displayNullImage.setImageResource(R.drawable.class_share_screen_null);
         } else {

+ 103 - 0
live_teaching/src/main/java/com/daya/live_teaching/utils/helper/CourseEnterHelper.java

@@ -0,0 +1,103 @@
+package com.daya.live_teaching.utils.helper;
+
+import android.Manifest;
+import android.app.Activity;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.utils.PermissionUtils;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.widgets.dialog.CommonConfirmDialog;
+import com.cooleshow.usercenter.helper.UserHelper;
+import com.daya.live_teaching.common.ResultCallback;
+import com.daya.live_teaching.model.LoginResult;
+import com.daya.live_teaching.repository.UserRepository;
+import com.daya.live_teaching.rtc.RtcManager;
+import com.daya.live_teaching.ui.LiveActivity;
+import com.tbruyelle.rxpermissions3.RxPermissions;
+
+import androidx.fragment.app.FragmentActivity;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.rong.imlib.RongIMClient;
+
+/**
+ * Author by pq, Date on 2022/6/29.
+ * 网络教室进入helper
+ */
+public class CourseEnterHelper {
+    public static final String SNARE_DRUM = "小军鼓";
+    public static final String FLUTE = "长笛";
+
+    public static void start(FragmentActivity activity, String sealClassId, String subjectName) {
+        checkPermission(activity, sealClassId, subjectName);
+    }
+
+    private static void checkPermission(FragmentActivity activity, String sealClassId, String subjectName) {
+        Disposable subscribe = new RxPermissions(activity)
+                .request(Manifest.permission.MODIFY_AUDIO_SETTINGS,
+                        Manifest.permission.RECORD_AUDIO,
+                        Manifest.permission.CAMERA)
+                .subscribe(isAllowPermission -> {
+                    if (isAllowPermission) {
+                        prepareOpenCourseRoom(activity, sealClassId, subjectName);
+                    } else {
+                        showTipDialog(activity);
+                    }
+                });
+    }
+
+    private static void prepareOpenCourseRoom(Activity activity, String sealClassId, String subjectName) {
+        RongIMClient.ConnectionStatusListener.ConnectionStatus currentConnectionStatus = RongIMClient.getInstance().getCurrentConnectionStatus();
+        if (currentConnectionStatus == RongIMClient.ConnectionStatusListener.ConnectionStatus.CONNECTED) {
+            if (!TextUtils.isEmpty(subjectName) && (subjectName.equals(SNARE_DRUM) || subjectName.equals(FLUTE))) {
+                RtcManager.getInstance().setVideoResolution(0, activity);
+            } else {
+                RtcManager.getInstance().setVideoResolution(3, activity);
+            }
+            UserRepository userRepository = new UserRepository(activity);
+            String userName = UserHelper.getUserName();
+            userRepository.login(sealClassId, false, userName, new ResultCallback<LoginResult>() {
+                @Override
+                public void onSuccess(LoginResult loginResult) {
+                    ARouter.getInstance().build(RouterPath.OnlineClassroom.PATH_LIVE)
+                            .withSerializable(LiveActivity.EXTRA_LOGIN_RESULT, loginResult)
+                            .withBoolean(LiveActivity.EXTRA_CLOSE_CAMERA, false)
+                            .navigation();
+                }
+
+                @Override
+                public void onFail(int errorCode, String errorStr) {
+                    if (activity != null) {
+                        activity.runOnUiThread(new Runnable() {
+                            @Override
+                            public void run() {
+                                if (!TextUtils.isEmpty(errorStr)) {
+                                    ToastUtil.getInstance().show(activity, errorStr);
+                                } else {
+                                    ToastUtil.getInstance().show(activity, "加入课堂失败,请重试;错误码:" + errorCode);
+                                }
+                            }
+                        });
+                    }
+                }
+            });
+        } else {
+            ToastUtil.getInstance().show(activity, "聊天服务未连接,进入教室异常");
+        }
+    }
+
+    private static void showTipDialog(Activity activity) {
+        CommonConfirmDialog confirmDialog = new CommonConfirmDialog(activity);
+        confirmDialog.show();
+        confirmDialog.setContent("加入课堂需要开启音视频相关权限");
+        confirmDialog.setConfirmText("去设置");
+        confirmDialog.setOnConfirmClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                PermissionUtils.toSelfSetting(activity);
+            }
+        });
+    }
+}

+ 12 - 33
live_teaching/src/main/java/com/daya/live_teaching/viewmodel/ClassViewModel.java

@@ -185,8 +185,7 @@ public class ClassViewModel extends ViewModel {
         soundVolume.setValue(result.getSoundVolume());
         userInfo.setValue(result.getUserInfo());
         memberList.setValue(sortClassMember(result.getMembers()));
-        whiteBoardList.setValue(result.getWhiteboards());
-        ScreenDisplay screenDisplay = ScreenDisplay.createScreenDisplay(result.getDisplay());
+        ScreenDisplay screenDisplay = ScreenDisplay.createScreenDisplay(result.display);
         StuDisplayUserId = screenDisplay.getUserId();
         display.setValue(getDisplayWithClassMember(screenDisplay));
         ClassMember.PlayMidiJsonBean playMidiJsonBean = result.getUserInfo().getPlayMidiJson();
@@ -201,7 +200,7 @@ public class ClassViewModel extends ViewModel {
         setMetronomeInfo(new MetronomeInfo(90, 3, 100));
         // 从成员中筛选出特定的角色用于单独对特殊角色的刷新
         findAndUpdateSpecialRole();
-        int surplusTime = result.getSurplusTime();
+        int surplusTime = result.surplusTime;
 
         // 记时进入课堂的时间
         Calendar calendar = Calendar.getInstance();
@@ -233,7 +232,6 @@ public class ClassViewModel extends ViewModel {
         userInfo.setValue(result.getUserInfo());
         soundVolume.setValue(result.getSoundVolume());
         memberList.setValue(sortClassMember(result.getMembers()));
-        whiteBoardList.setValue(result.getWhiteboards());
         setMetronomeInfo(new MetronomeInfo(90, 3, 100));
         if (result.getUserInfo().getRole() == Role.STUDENT) {
             ScreenDisplay screenDisplay = ScreenDisplay.createScreenDisplay(result.getDisplay());
@@ -680,7 +678,7 @@ public class ClassViewModel extends ViewModel {
                 //                    }
                 //                });
 
-                UserInfo userInfoValue = userInfo.getValue();
+                ClassMember userInfoValue = userInfo.getValue();
                 ArrayList<ClassMember> members = new ArrayList<>();
                 boolean hasLecture = false;
                 for (ClassMember member : input) {
@@ -733,9 +731,7 @@ public class ClassViewModel extends ViewModel {
 
                 ArrayList<ClassMember> members = new ArrayList<>();
                 for (ClassMember member : input) {
-                    if (member.getRole() == Role.ASSISTANT) {
-                        members.add(0, member);
-                    } else if (member.getRole() == Role.LECTURER) {
+                    if (member.getRole() == Role.LECTURER) {
                         members.add(member);
                     }
                 }
@@ -1321,10 +1317,10 @@ public class ClassViewModel extends ViewModel {
      * @param ticket
      * @return
      */
-    public LiveData<RequestState> deviceApprove(String roomId, String ticket) {
+    public LiveData<RequestState> deviceApprove(String roomId, String deviceType) {
         final StateLiveData stateLiveData = new StateLiveData();
         stateLiveData.loading();
-        classRepository.deviceApprove(roomId, ticket, new ResultCallback<Boolean>() {
+        classRepository.deviceApprove(roomId, deviceType, new ResultCallback<Boolean>() {
             @Override
             public void onSuccess(Boolean result) {
                 stateLiveData.success();
@@ -1346,10 +1342,10 @@ public class ClassViewModel extends ViewModel {
      * @param ticket
      * @return
      */
-    public LiveData<RequestState> deviceReject(String roomId, String ticket) {
+    public LiveData<RequestState> deviceReject(String roomId, String deviceType) {
         final StateLiveData stateLiveData = new StateLiveData();
         stateLiveData.loading();
-        classRepository.deviceReject(roomId, ticket, new ResultCallback<Boolean>() {
+        classRepository.deviceReject(roomId, deviceType, new ResultCallback<Boolean>() {
             @Override
             public void onSuccess(Boolean result) {
                 stateLiveData.success();
@@ -1874,7 +1870,6 @@ public class ClassViewModel extends ViewModel {
         final String whiteBoardId;
         switch (type) {
             case LECTURER:
-            case ASSISTANT:
             case STUDENT:
             case SCREEN:
                 userId = id;
@@ -2438,7 +2433,7 @@ public class ClassViewModel extends ViewModel {
                 if (member.getUserId().equals(classMember.getUserId())) {
                     member.setRole(classMember.getRole().getValue());
                     member.setCamera(classMember.isCamera());
-                    member.setMicrophone(classMember.isCamera());
+                    member.setMicrophone(classMember.isMicrophone());
                     member.setJoinTime(classMember.getJoinTime());
                     member.setUserName(classMember.getUserName());
                     memberList.postValue(memberListValue);
@@ -2482,13 +2477,7 @@ public class ClassViewModel extends ViewModel {
             if (user.getUserId().equals(member.getUserId())) {
                 member.setUserName("我");
                 sortList.add(0, member);
-            } else if (member.getRole() == Role.ASSISTANT) {
-                if (sortList.size() > 1) {
-                    sortList.add(1, member);
-                } else {
-                    sortList.add(member);
-                }
-            } else if (member.getRole() == Role.LECTURER) {
+            }  else if (member.getRole() == Role.LECTURER) {
                 sortList.add(member);
             } else if (member.getRole() == Role.STUDENT) {
                 students.add(member);
@@ -2647,7 +2636,7 @@ public class ClassViewModel extends ViewModel {
                             ScreenDisplay value = display.getValue();
                             String displayUserId = value.getUserId();
                             if (value != null && userId.equals(displayUserId)) {
-                                if (!isEnable && (value.getType() == ScreenDisplay.Display.LECTURER || value.getType() == ScreenDisplay.Display.ASSISTANT ||
+                                if (!isEnable && (value.getType() == ScreenDisplay.Display.LECTURER  ||
                                         (info.getRole() != Role.LECTURER && value.getType() == ScreenDisplay.Display.STUDENT))) {
                                     value.setType(ScreenDisplay.Display.NONE);
                                     display.postValue(value);
@@ -2655,8 +2644,6 @@ public class ClassViewModel extends ViewModel {
                                     ClassMember classMember = value.getClassMember();
                                     if (classMember.getRole() == Role.LECTURER) {
                                         value.setType(ScreenDisplay.Display.LECTURER);
-                                    } else if (classMember.getRole() == Role.ASSISTANT) {
-                                        value.setType(ScreenDisplay.Display.ASSISTANT);
                                     } else if (classMember.getRole() == Role.STUDENT) {
                                         value.setType(ScreenDisplay.Display.STUDENT);
                                     }
@@ -2791,12 +2778,6 @@ public class ClassViewModel extends ViewModel {
                     || !lecturer.getUserId().equals(member.getUserId())) {
                 lecturerRole.postValue(member);
             }
-        } else if (role == Role.ASSISTANT) {
-            ClassMember assistant = assistantRole.getValue();
-            if (assistant == null
-                    || !assistant.getUserId().equals(member.getUserId())) {
-                assistantRole.postValue(member);
-            }
         }
     }
 
@@ -2832,9 +2813,7 @@ public class ClassViewModel extends ViewModel {
         if (!TextUtils.isEmpty(screenDisplay.getUserId()) && screenDisplay.getClassMember() == null) {
             ClassMember classMember = new ClassMember();
             classMember.setUserId(screenDisplay.getUserId());
-            if (screenDisplay.getType() == ScreenDisplay.Display.ASSISTANT) {
-                classMember.setRole(Role.ASSISTANT.getValue());
-            } else if (screenDisplay.getType() == ScreenDisplay.Display.LECTURER) {
+             if (screenDisplay.getType() == ScreenDisplay.Display.LECTURER) {
                 classMember.setRole(Role.LECTURER.getValue());
             }
             screenDisplay.setClassMember(classMember);

+ 1 - 1
student/src/main/java/com/cooleshow/student/ui/web/AccompanyFragment.java

@@ -163,7 +163,7 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
             url = getArguments().getString("url");
         }
         String localUserId = UserHelper.getUserId();
-        webSocketUri = URI.create("ws://192.168.3.119:8090/audioAnalysis" + "/" + localUserId);
+        webSocketUri = URI.create(WebConstants.getWebSocketUrl() + "/" + localUserId);
         try {
             if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) {
                 webView = new LollipopFixedWebView(getActivity());

+ 2 - 2
teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseHomeworkBean.java

@@ -36,10 +36,10 @@ public class SparringCourseHomeworkBean {
 
     public String startTime;
     public String endTime;
-    public int id;
+    public String id;
     public String content;
     public Object decorateTime;
-    public int courseScheduleId;
+    public String courseScheduleId;
     public int courseGroupId;
     public String courseType;
     public String subjectName;

+ 13 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseDetailActivity.java

@@ -20,6 +20,7 @@ import com.cooleshow.teacher.databinding.ActivitySparringCourseDetailLayoutBindi
 import com.cooleshow.teacher.presenter.course.SparringCourseDetailPresenter;
 import com.cooleshow.teacher.widgets.CourseSetCommentDialog;
 import com.cooleshow.usercenter.helper.UserHelper;
+import com.daya.live_teaching.utils.helper.CourseEnterHelper;
 
 import androidx.annotation.NonNull;
 
@@ -59,6 +60,7 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
         viewBinding.tvSetHomework.setOnClickListener(this);
         viewBinding.tvHomeworkSetComment.setOnClickListener(this);
         viewBinding.tvSetTeacherComment.setOnClickListener(this);
+        viewBinding.tvEnterRoom.setOnClickListener(this);
     }
 
     @Override
@@ -107,16 +109,19 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             //课程未开始
             viewBinding.tvCourseStatus.setText(getString(R.string.course_not_start_str));
             viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
+            viewBinding.tvEnterRoom.setVisibility(View.GONE);
         }
         if (TextUtils.equals(CourseConstants.COURSE_STATUS_ING, status)) {
             //课程进行中
             viewBinding.tvCourseStatus.setText(R.string.course_ing_str);
             viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
+            viewBinding.tvEnterRoom.setVisibility(View.VISIBLE);
         }
         if (TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, status)) {
             //课程已结束
             viewBinding.tvCourseStatus.setText(R.string.course_is_completed);
             viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+            viewBinding.tvEnterRoom.setVisibility(View.GONE);
         }
         //课后作业
         handleHomeworkData(infoBean);
@@ -288,6 +293,14 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             showSetCommentDialog(CourseSetCommentDialog.TYPE_SET_TEACHER_COMMENT);
             return;
         }
+
+        if (v.getId() == R.id.tv_enter_room) {
+            //进入教室
+            if (mInfoBean != null && TextUtils.equals(CourseConstants.COURSE_STATUS_ING, courseInfoBean.courseStatus)) {
+                CourseEnterHelper.start(this, mInfoBean.courseScheduleId, courseInfoBean.subjectName);
+            }
+            return;
+        }
     }
 
     private void showSetCommentDialog(int typeSetTeacherComment) {

+ 1 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/web/AccompanyFragment.java

@@ -168,7 +168,7 @@ public class AccompanyFragment extends BaseMVPFragment<FragmentAccompanyBinding,
             url = getArguments().getString("url");
         }
         String localUserId = UserHelper.getUserId();
-        webSocketUri = URI.create("ws://192.168.3.119:8090/audioAnalysis" + "/" + localUserId);
+        webSocketUri = URI.create(WebConstants.getWebSocketUrl() + "/" + localUserId);
         try {
             if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) {
                 webView = new LollipopFixedWebView(getActivity());

+ 16 - 0
teacher/src/main/res/layout/activity_sparring_course_detail_layout.xml

@@ -530,4 +530,20 @@
         </LinearLayout>
     </androidx.core.widget.NestedScrollView>
 
+
+    <TextView
+        android:visibility="gone"
+        android:id="@+id/tv_enter_room"
+        android:layout_width="match_parent"
+        android:layout_height="44dp"
+        android:layout_marginStart="27dp"
+        android:layout_marginEnd="27dp"
+        android:layout_marginBottom="30dp"
+        android:background="@drawable/shape_2dc7aa_39dp"
+        android:gravity="center"
+        android:text="进入教室"
+        android:textColor="@color/white"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent" />
 </androidx.constraintlayout.widget.ConstraintLayout>