Parcourir la source

增加学生端课程详情页面

Pq il y a 8 mois
Parent
commit
0cfa0e43be

+ 6 - 0
student/src/main/AndroidManifest.xml

@@ -177,6 +177,12 @@
             android:windowSoftInputMode="adjustNothing" />
 
         <activity
+            android:name=".ui.course.GroupCourseDetailActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden|fontScale|smallestScreenSize|screenLayout|uiMode"
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustNothing" />
+
+        <activity
             android:name=".ui.course.PracticeCourseDetailActivity"
             android:configChanges="orientation|screenSize|keyboardHidden|fontScale|smallestScreenSize|screenLayout|uiMode"
             android:screenOrientation="portrait" />

+ 455 - 0
student/src/main/java/com/cooleshow/student/ui/course/GroupCourseDetailActivity.java

@@ -0,0 +1,455 @@
+
+package com.cooleshow.student.ui.course;
+
+import android.Manifest;
+import android.content.Intent;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.cooleshow.base.bean.CommonCourseConfigBean;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.ActivityUtils;
+import com.cooleshow.base.utils.FileUtils;
+import com.cooleshow.base.utils.TimeUtils;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.base.utils.helper.PermissionTipHelper;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.chatmodule.utils.helper.ChatHelper;
+import com.cooleshow.student.R;
+import com.cooleshow.student.adapter.PracticeVideoWorkAdapter;
+import com.cooleshow.student.bean.PianoRoomCourseHomeworkBean;
+import com.cooleshow.student.bean.PracticeVideoWorkBean;
+import com.cooleshow.student.constants.CourseConstants;
+import com.cooleshow.student.contract.PianoRoomCourseDetailContract;
+import com.cooleshow.student.databinding.ActivityGroupCourseDetailLayoutBinding;
+import com.cooleshow.student.databinding.ActivityPianoRoomCourseDetailLayoutBinding;
+import com.cooleshow.student.presenter.course.PianoRoomCourseDetailPresenter;
+import com.cooleshow.student.widgets.dialog.UploadHomeworkVideoDialog;
+import com.dayayuemeng.classroom.helper.OpenClassRoomHelper;
+import com.tbruyelle.rxpermissions3.RxPermissions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+
+@Route(path = RouterPath.CourseCenter.PIANO_ROOM_COURSE_DETAIL)
+public class GroupCourseDetailActivity extends BaseMVPActivity<ActivityGroupCourseDetailLayoutBinding, PianoRoomCourseDetailPresenter> implements PianoRoomCourseDetailContract.PianoRoomCourseDetailView, View.OnClickListener {
+    public static final String COURSE_ID = "course_id";
+    private static final int CHOOSE_VIDEO = 1002;
+    private String mCourseId;
+    private PianoRoomCourseHomeworkBean mInfoBean;
+    private boolean teacherIsReply = false;//老师是否已点评作业
+    private CommonCourseConfigBean mConfigBean;
+    private List<PracticeVideoWorkBean> homeworkVideoData = new ArrayList<>();
+    private PracticeVideoWorkAdapter mVideoWorkAdapter;
+    private UploadHomeworkVideoDialog mVideoDialog;
+
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
+
+    @NonNull
+    @Override
+    protected ActivityGroupCourseDetailLayoutBinding getLayoutView() {
+        return ActivityGroupCourseDetailLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "课程详情");
+        viewBinding.toolbarInclude.toolbar.setBackgroundColor(Color.TRANSPARENT);
+        mCourseId = getIntent().getStringExtra(COURSE_ID);
+        if (TextUtils.isEmpty(mCourseId)) {
+            finish();
+            return;
+        }
+        viewBinding.tvEnterRoom.setOnClickListener(this);
+        viewBinding.tvEditHomework.setOnClickListener(this);
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        mVideoWorkAdapter = new PracticeVideoWorkAdapter();
+        mVideoWorkAdapter.setNeedDel(false);
+        viewBinding.rvVideo.setLayoutManager(new GridLayoutManager(this, 3));
+        viewBinding.rvVideo.setAdapter(mVideoWorkAdapter);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        refresh();
+    }
+
+    private void refresh() {
+        if (presenter != null) {
+            presenter.getCourseConfig();
+            presenter.getPianoRoomCourseInfo(mCourseId);
+        }
+    }
+
+    @Override
+    protected PianoRoomCourseDetailPresenter createPresenter() {
+        return new PianoRoomCourseDetailPresenter();
+    }
+
+    /**
+     * 获取课程详情成功
+     *
+     * @param infoBean
+     */
+    @Override
+    public void getPianoRoomCourseSuccess(PianoRoomCourseHomeworkBean infoBean) {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        if (infoBean == null) {
+            return;
+        }
+        this.mInfoBean = infoBean;
+        //时间
+        viewBinding.tvTime.setText(UiUtils.getCourseTimeString(infoBean.startTime, infoBean.endTime));
+        //title
+        viewBinding.tvTitle.setText(infoBean.courseGroupName);
+        //subjectName
+        viewBinding.tvCourseName.setText(infoBean.subjectName);
+
+        String status = infoBean.courseStatus;
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_NOT_START, status)) {
+            //课程未开始
+            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.VISIBLE);
+            viewBinding.bottomView.setVisibility(View.VISIBLE);
+        }
+        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);
+            viewBinding.bottomView.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);
+            viewBinding.bottomView.setVisibility(View.GONE);
+        }
+        //课后作业
+        handleHomeworkData(infoBean);
+        //作业点评
+        handleHomeworkComment(infoBean);
+        //作业视频
+        handleHomeworkStudentSubmit(infoBean);
+    }
+
+    @Override
+    public void getPianoRoomCourseHomeworkError() {
+
+    }
+
+    @Override
+    public void getCourseConfigSuccess(CommonCourseConfigBean data) {
+        this.mConfigBean = data;
+    }
+
+    /**
+     * 作业点评
+     */
+    private void handleHomeworkComment(PianoRoomCourseHomeworkBean bean) {
+        //tv_homework_comment_content
+        if (bean == null) {
+            return;
+        }
+        teacherIsReply = !TextUtils.isEmpty(bean.teacherReplied);
+        if (teacherIsReply) {
+            //老师已点评作业
+            viewBinding.tvHomeworkCommentEmptyText.setVisibility(View.GONE);
+            viewBinding.tvHomeworkCommentContent.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkCommentContent.setText(bean.teacherReplied);
+        } else {
+            viewBinding.tvHomeworkCommentEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkCommentContent.setVisibility(View.GONE);
+        }
+    }
+
+    /**
+     * 学生提交的作业
+     *
+     * @param bean
+     */
+    private void handleHomeworkStudentSubmit(PianoRoomCourseHomeworkBean bean) {
+        if (bean == null) {
+            return;
+        }
+        if (!TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, bean.courseStatus)) {
+            viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkVideoEmptyText.setText("课程结束后才可提交作业");
+            viewBinding.tvEditHomework.setVisibility(View.GONE);
+            return;
+        }
+        homeworkVideoData.clear();
+        if (bean.submitHomework == CourseConstants.COURSE_HOMEWORK_STU_SUBMIT) {
+            //学员已提交课后作业
+            if (bean.homeworkExpire == CourseConstants.COURSE_HOMEWORK_NO_EXPIRED) {
+                viewBinding.rvVideo.setVisibility(View.VISIBLE);
+                viewBinding.viewHomeworkVideoContentBg.setVisibility(View.GONE);
+                addVideoThumbnailView(bean.studentAttachments);
+            } else {
+                viewBinding.rvVideo.setVisibility(View.GONE);
+                viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
+                viewBinding.tvHomeworkVideoEmptyText.setText("作业已过期无法提交和查看!");
+            }
+            if (teacherIsReply || bean.homeworkExpire != CourseConstants.COURSE_HOMEWORK_NO_EXPIRED) {
+                //老师已回复或者作业过期的话不可再编辑作业
+                viewBinding.tvEditHomework.setVisibility(View.GONE);
+            } else {
+                viewBinding.tvEditHomework.setVisibility(View.VISIBLE);
+            }
+        } else {
+            //学员未提交课后作业
+            if (bean.decorateHomework == CourseConstants.COURSE_HOMEWORK_SET) {
+                //有课后作业才显示编辑按钮
+                viewBinding.tvEditHomework.setVisibility(View.VISIBLE);
+            } else {
+                viewBinding.tvEditHomework.setVisibility(View.GONE);
+            }
+            viewBinding.rvVideo.setVisibility(View.GONE);
+            viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkVideoEmptyText.setText(CourseConstants.getHomeworkVideoDefaultTip(bean.courseStatus));
+        }
+        if (mVideoWorkAdapter != null) {
+            mVideoWorkAdapter.setList(homeworkVideoData);
+        }
+    }
+
+    /**
+     * 添加视频缩略图
+     *
+     * @param videoUrls
+     */
+    private void addVideoThumbnailView(String videoUrls) {
+        try {
+            if (!TextUtils.isEmpty(videoUrls)) {
+                String[] results = TextUtils.split(videoUrls, ",");
+                for (int i = 0; i < results.length; i++) {
+                    String videoPath = results[i];
+                    PracticeVideoWorkBean videoWorkBean = new PracticeVideoWorkBean(videoPath, 0);
+                    if (teacherIsReply) {
+                        videoWorkBean.status = 1;//不可删除
+                    }
+                    homeworkVideoData.add(videoWorkBean);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 课后作业
+     */
+    private void handleHomeworkData(PianoRoomCourseHomeworkBean bean) {
+        if (bean == null) {
+            return;
+        }
+        if (bean.decorateHomework == CourseConstants.COURSE_HOMEWORK_SET) {
+            //已布置课后作业
+            viewBinding.tvHomeworkEmptyText.setVisibility(View.GONE);
+            viewBinding.tvHomeworkContent.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkContent.setText(bean.content);
+            viewBinding.tvSetHomework.setVisibility(View.GONE);
+        } else {
+            //未布置课后作业
+            viewBinding.tvHomeworkEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkContent.setVisibility(View.GONE);
+            viewBinding.tvSetHomework.setVisibility(View.GONE);
+        }
+    }
+
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.iv_go_chat) {
+            //跳转聊天
+            if (mInfoBean != null) {
+                ChatHelper.getInstance().goGroupChat(mInfoBean.imGroupId, "");
+            }
+            return;
+        }
+        if (v.getId() == R.id.tv_enter_room) {
+            //进入教室
+            if (mInfoBean != null) {
+                if (mConfigBean != null) {
+                    boolean lessThanTargetTime = TimeUtils.isLessThanTargetTime(mConfigBean.getPianoStartTime(), mInfoBean.startTime);
+                    if (!lessThanTargetTime) {
+                        ToastUtil.getInstance().showShort("课程还未开始,请在上课前" + mConfigBean.getPianoStartTime() + "分钟进入");
+                        return;
+                    }
+                    OpenClassRoomHelper.start(this, mCourseId, mInfoBean.subjectName);
+                }
+            }
+            return;
+        }
+
+        if (v.getId() == R.id.tv_edit_homework) {
+            //跳转课后作业
+            if (TextUtils.isEmpty(mCourseId)) {
+                return;
+            }
+            showUploadDialog();
+//            ARouter.getInstance().build(RouterPath.WorkCenter.STUDENT_HOMEWORK_DETAIL)
+//                    .withString("course_id", mCourseId)
+//                    .navigation();
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK) {
+            if (requestCode == CHOOSE_VIDEO) {
+                Uri uri = data.getData();
+                String v_path = FileUtils.getFilePathForN(uri, GroupCourseDetailActivity.this);
+                presenter.upLoadVideo(GroupCourseDetailActivity.this, v_path);
+            }
+        }
+    }
+
+    @Override
+    public void upLoadVideoSuccess(String url) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        PracticeVideoWorkBean normalInstance = PracticeVideoWorkBean.createNormalInstance(url);
+        addVideoData(normalInstance);
+        if (mVideoDialog != null) {
+            mVideoDialog.setData(homeworkVideoData);
+        }
+    }
+
+    @Override
+    public void submitCourseHomeworkSuccess() {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (mVideoDialog != null) {
+            mVideoDialog.dismiss();
+        }
+        ToastUtil.getInstance().showShort("提交成功");
+        refresh();
+    }
+
+    private void addVideoData(PracticeVideoWorkBean videoWorkBean) {
+        if (homeworkVideoData.size() < CourseConstants.COURSE_HOMEWORK_MAX_VIDEO_COUNT) {
+            homeworkVideoData.add(videoWorkBean);
+        }
+    }
+
+
+    private void showUploadDialog() {
+        if (mVideoDialog == null) {
+            mVideoDialog = new UploadHomeworkVideoDialog(this);
+            mVideoDialog.setOnEventListener(new UploadHomeworkVideoDialog.OnEventListener() {
+                @Override
+                public void onResult() {
+                    submit();
+                }
+
+                @Override
+                public void goUpload() {
+                    getVideoPermission();
+                }
+
+                @Override
+                public void onDel(int pos) {
+                    if (homeworkVideoData != null && pos < homeworkVideoData.size()) {
+                        homeworkVideoData.remove(pos);
+                    }
+                }
+            });
+        }
+        if (!mVideoDialog.isShowing()) {
+            mVideoDialog.show();
+        }
+        mVideoDialog.setData(homeworkVideoData);
+    }
+
+    private void getVideoPermission() {
+        String[] permissions = new String[]{Manifest.permission.CAMERA,
+                Manifest.permission.READ_EXTERNAL_STORAGE,
+                Manifest.permission.WRITE_EXTERNAL_STORAGE};
+        PermissionTipHelper.getInstance().showTipDialog(this, permissions);
+        new RxPermissions(this)
+                .request(permissions)
+                .subscribe(granted -> {
+                    PermissionTipHelper.getInstance().dismissDialog();
+                    if (granted) {
+                        chooseVideo();
+                    } else {
+                        UiUtils.showPermissionTipDialog(getSupportFragmentManager(), this, "提示", "请打开存储和相机权限!");
+                    }
+                });
+    }
+
+    private void chooseVideo() {
+        Intent intent = new Intent();
+        intent.setType("video/*"); //选择视频 (mp4 3gp 是android支持的视频格式)
+        intent.setAction(Intent.ACTION_GET_CONTENT);
+        /* 取得相片后返回本画面 */
+        ActivityUtils.startActivityForResult(this, intent, CHOOSE_VIDEO);
+
+    }
+
+    private void submit() {
+        if (UiUtils.isFastClick()) {
+            return;
+        }
+        //提交
+        String result = getVideoHomeworkResult();
+        if (!TextUtils.isEmpty(result)) {
+            presenter.submitCourseHomework(result, mCourseId);
+        } else {
+            ToastUtil.getInstance().showShort("请选择视频文件");
+        }
+    }
+
+    private String getVideoHomeworkResult() {
+        StringBuilder stringBuilder = new StringBuilder();
+        for (int i = 0; i < homeworkVideoData.size(); i++) {
+            PracticeVideoWorkBean videoWorkBean = homeworkVideoData.get(i);
+            if (!TextUtils.isEmpty(videoWorkBean.videoUrl)) {
+                if (i != 0) {
+                    stringBuilder.append(",");
+                }
+                stringBuilder.append(videoWorkBean.videoUrl);
+            }
+        }
+        return stringBuilder.toString();
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+}

+ 3 - 3
student/src/main/java/com/cooleshow/student/ui/course/GroupCourseGroupDetailActivity.java

@@ -150,9 +150,9 @@ public class GroupCourseGroupDetailActivity extends BaseMVPActivity<AcGroupCours
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                 if (position < mAdapter.getData().size()) {
                     VIPCourseGroupDetailListBean bean = mAdapter.getData().get(position);
-//                    ARouter.getInstance().build(RouterPath.CourseCenter.PIANO_ROOM_COURSE_DETAIL)
-//                            .withString(CourseConstants.COURSE_ID, bean.getCourseId())
-//                            .navigation();
+                    ARouter.getInstance().build(RouterPath.CourseCenter.PIANO_ROOM_COURSE_DETAIL)
+                            .withString(CourseConstants.COURSE_ID, bean.getCourseId())
+                            .navigation();
                 }
             }
         });

+ 465 - 0
student/src/main/res/layout/activity_group_course_detail_layout.xml

@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:adjustViewBounds="true"
+        android:src="@drawable/bg_appointment_top"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout" />
+
+    <androidx.core.widget.NestedScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:overScrollMode="never"
+        android:scrollbars="none"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:paddingStart="14dp"
+            android:paddingTop="12dp"
+            android:paddingEnd="14dp"
+            android:paddingBottom="12dp">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/cs_top_info"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingStart="12dp"
+                android:paddingEnd="12dp"
+                android:paddingBottom="12dp"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/title_view">
+
+                <ImageView
+                    android:id="@+id/iv_clock_icon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="15dp"
+                    android:src="@drawable/icon_clock"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_time"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="6dp"
+                    android:includeFontPadding="false"
+                    android:textColor="@color/color_666666"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_clock_icon"
+                    app:layout_constraintLeft_toRightOf="@+id/iv_clock_icon"
+                    app:layout_constraintTop_toTopOf="@+id/iv_clock_icon"
+                    tools:text="2021/09/17 14:00~14:25" />
+
+                <View
+                    android:id="@+id/view_line"
+                    android:layout_width="0dp"
+                    android:layout_height="1dp"
+                    android:layout_marginTop="15dp"
+                    android:background="@color/color_f2f2f2"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/iv_clock_icon" />
+
+                <de.hdodenhof.circleimageview.CircleImageView
+                    android:id="@+id/iv_avatar"
+                    android:layout_width="40dp"
+                    android:layout_height="40dp"
+                    android:layout_marginTop="12dp"
+                    android:src="@drawable/icon_group_course_avatar"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/view_line"
+                    app:qmui_corner_radius="5dp" />
+
+                <TextView
+                    android:id="@+id/tv_title"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="10dp"
+                    android:ellipsize="end"
+                    android:includeFontPadding="false"
+                    android:maxLines="1"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_15"
+                    app:layout_constraintBottom_toTopOf="@+id/tv_name"
+                    app:layout_constraintHorizontal_bias="0"
+                    app:layout_constraintHorizontal_chainStyle="packed"
+                    app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+                    app:layout_constraintRight_toLeftOf="@+id/iv_attendance_status"
+                    app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+                    app:layout_constraintVertical_chainStyle="packed"
+                    app:layout_constraintWidth_default="wrap"
+                    tools:text="VIP定制课-张豆豆VIP定制课-张豆豆" />
+
+                <ImageView
+                    android:id="@+id/iv_attendance_status"
+                    android:layout_width="wrap_content"
+                    android:layout_height="17.1dp"
+                    android:layout_marginStart="5dp"
+                    android:layout_marginEnd="5dp"
+                    android:adjustViewBounds="true"
+                    android:src="@drawable/icon_course_attendance_truancy"
+                    android:visibility="gone"
+                    app:layout_constraintBottom_toBottomOf="@+id/tv_title"
+                    app:layout_constraintLeft_toRightOf="@+id/tv_title"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/tv_title" />
+
+                <TextView
+                    android:id="@+id/tv_name"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="4dp"
+                    android:ellipsize="middle"
+                    android:includeFontPadding="false"
+                    android:singleLine="true"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+                    app:layout_constraintHorizontal_bias="0"
+                    app:layout_constraintHorizontal_chainStyle="packed"
+                    app:layout_constraintLeft_toLeftOf="@+id/tv_title"
+                    app:layout_constraintRight_toLeftOf="@+id/tv_course_name"
+                    app:layout_constraintTop_toBottomOf="@+id/tv_title"
+                    app:layout_constraintWidth_default="wrap"
+                    tools:text="张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆" />
+
+
+                <TextView
+                    android:id="@+id/tv_course_name"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="5dp"
+                    android:layout_marginEnd="5dp"
+                    android:background="@drawable/shape_couse_type_text_bg"
+                    android:gravity="center"
+                    android:includeFontPadding="false"
+                    android:paddingStart="4dp"
+                    android:paddingTop="1.5dp"
+                    android:paddingEnd="4dp"
+                    android:paddingBottom="1.5dp"
+                    android:textColor="@color/color_ff8c00"
+                    android:textSize="@dimen/sp_10"
+                    app:layout_constraintBottom_toBottomOf="@+id/tv_name"
+                    app:layout_constraintLeft_toRightOf="@+id/tv_name"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/tv_name"
+                    tools:text="单簧管" />
+
+
+                <TextView
+                    android:id="@+id/tv_course_status"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintBottom_toTopOf="@+id/view_line"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    tools:text="未开始" />
+
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_homework"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_homework_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="课后作业"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
+
+                <TextView
+                    android:id="@+id/tv_set_homework"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:drawableLeft="@drawable/icon_set_homework"
+                    android:drawablePadding="3dp"
+                    android:includeFontPadding="false"
+                    android:paddingEnd="11dp"
+                    android:text="@string/set_homework_str"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="invisible"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
+
+                <FrameLayout
+                    android:id="@+id/view_homework_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework">
+
+                    <TextView
+                        android:id="@+id/tv_homework_empty_text"
+                        android:layout_width="match_parent"
+                        android:layout_marginEnd="20dp"
+                        android:layout_marginStart="20dp"
+                        android:drawablePadding="10dp"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_homework_empty"
+                        android:gravity="center_vertical"
+                        android:text="老师尚未布置作业"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+
+                    <TextView
+                        android:id="@+id/tv_homework_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:includeFontPadding="false"
+                        android:textColor="@color/color_333333"
+                        android:textSize="@dimen/sp_13"
+                        android:visibility="gone"
+                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+                </FrameLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_homework_video"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_homework_video_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="作业视频"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_video"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework_video"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_video" />
+
+                <TextView
+                    android:id="@+id/tv_edit_homework"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:drawableLeft="@drawable/icon_edit_appraisal"
+                    android:drawablePadding="3dp"
+                    android:includeFontPadding="false"
+                    android:paddingTop="5dp"
+                    android:paddingEnd="11dp"
+                    android:paddingBottom="5dp"
+                    android:text="提交作业"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="gone"
+                    tools:visibility="visible"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_video"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_video" />
+
+
+                <FrameLayout
+                    android:id="@+id/view_homework_video_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_video">
+
+                    <TextView
+                        android:id="@+id/tv_homework_video_empty_text"
+                        android:layout_width="match_parent"
+                        android:layout_marginEnd="20dp"
+                        android:layout_marginStart="20dp"
+                        android:drawablePadding="10dp"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_homework_video_empty"
+                        android:gravity="center_vertical"
+                        android:text="您尚未上传作业视频"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+                </FrameLayout>
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rv_video"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="@dimen/dp_7"
+                    android:layout_marginTop="12dp"
+                    android:layout_marginRight="@dimen/dp_7"
+                    android:visibility="gone"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_video" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_homework_comment"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_homework_comment_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="作业点评"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework_comment"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
+
+                <TextView
+                    android:id="@+id/tv_homework_set_comment"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:drawableLeft="@drawable/icon_edit_appraisal"
+                    android:drawablePadding="3dp"
+                    android:includeFontPadding="false"
+                    android:paddingEnd="11dp"
+                    android:text="@string/comment_str"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="gone"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
+
+                <FrameLayout
+                    android:id="@+id/view_homework_comment_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_comment">
+
+                    <TextView
+                        android:id="@+id/tv_homework_comment_empty_text"
+                        android:layout_width="match_parent"
+                        android:layout_marginEnd="20dp"
+                        android:layout_marginStart="20dp"
+                        android:drawablePadding="10dp"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_homework_comment"
+                        android:gravity="center_vertical"
+                        android:text="课程结束后上传视频会得到老师点评哦~"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+
+                    <TextView
+                        android:id="@+id/tv_homework_comment_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:includeFontPadding="false"
+                        android:textColor="@color/color_333333"
+                        android:textSize="@dimen/sp_13"
+                        android:visibility="gone"
+                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+                </FrameLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <View
+                android:visibility="gone"
+                android:id="@+id/bottom_view"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dp_100"/>
+        </LinearLayout>
+    </androidx.core.widget.NestedScrollView>
+
+    <TextView
+        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"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>