Browse Source

修改学生端趣纠课和VIP课课程详情作业视频交互和UI

Pq 7 tháng trước cách đây
mục cha
commit
ed015a2e04

+ 3 - 0
student/src/main/java/com/cooleshow/student/contract/PianoRoomCourseDetailContract.java

@@ -19,6 +19,9 @@ public interface PianoRoomCourseDetailContract {
 
         void getCourseConfigSuccess(CommonCourseConfigBean data);
 
+        void upLoadVideoSuccess(String url);
+
+        void submitCourseHomeworkSuccess();
     }
 
     interface Presenter {

+ 56 - 0
student/src/main/java/com/cooleshow/student/presenter/course/PianoRoomCourseDetailPresenter.java

@@ -1,9 +1,13 @@
 package com.cooleshow.student.presenter.course;
 
+import android.app.Activity;
+
 import com.cooleshow.base.bean.CommonCourseConfigBean;
+import com.cooleshow.base.constanst.UploadConstants;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.rx.BaseObserver;
 import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.base.utils.helper.upload.UploadHelper;
 import com.cooleshow.student.api.APIService;
 import com.cooleshow.student.bean.PianoRoomCourseHomeworkBean;
 import com.cooleshow.student.bean.SparringCourseCommentBean;
@@ -14,6 +18,8 @@ import com.cooleshow.student.contract.SparringCourseDetailContract;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.io.File;
+
 /**
  * Author by pq, Date on 2022/4/27.
  */
@@ -52,4 +58,54 @@ public class PianoRoomCourseDetailPresenter extends BasePresenter<PianoRoomCours
             }
         });
     }
+
+    public void upLoadVideo(Activity activity, String filePath) {
+        UploadHelper uploadHelper = new UploadHelper(activity, UploadConstants.UPLOAD_TYPE_HOMEWORK);
+        uploadHelper.uploadFile(new File(filePath));
+        uploadHelper.setUpLoadCallBack(new UploadHelper.UpLoadCallBack() {
+            @Override
+            public void onSuccess(String url) {
+                if (getView() != null) {
+                    getView().upLoadVideoSuccess(url);
+                }
+            }
+
+            @Override
+            public void onFailure() {
+
+            }
+        });
+    }
+
+    /**
+     * 提交作业
+     * @param commentContent
+     * @param courseScheduleId
+     */
+    public void submitCourseHomework(String commentContent, String courseScheduleId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("submit", commentContent);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).submitSparringCourseHomework(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object o) {
+                if (getView() != null) {
+                    getView().submitCourseHomeworkSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
 }

+ 174 - 27
student/src/main/java/com/cooleshow/student/ui/course/PianoRoomCourseDetailActivity.java

@@ -1,5 +1,9 @@
 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;
@@ -10,25 +14,36 @@ import com.alibaba.android.arouter.launcher.ARouter;
 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.GlideUtils;
 import com.cooleshow.base.utils.SizeUtils;
 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.ActivityPianoRoomCourseDetailLayoutBinding;
 import com.cooleshow.student.presenter.course.PianoRoomCourseDetailPresenter;
 import com.cooleshow.base.widgets.VideoThumbnailView;
+import com.cooleshow.student.widgets.dialog.UploadHomeworkVideoDialog;
 import com.cooleshow.student.widgets.helper.CourseHelper;
 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.
@@ -37,11 +52,14 @@ import androidx.annotation.Nullable;
 @Route(path = RouterPath.CourseCenter.PIANO_ROOM_COURSE_DETAIL)
 public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPianoRoomCourseDetailLayoutBinding, 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
@@ -59,12 +77,12 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
     @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.ivGoChat.setOnClickListener(this);
         viewBinding.tvEnterRoom.setOnClickListener(this);
         viewBinding.tvEditHomework.setOnClickListener(this);
     }
@@ -72,7 +90,10 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
     @Override
     public void initData() {
         super.initData();
-
+        mVideoWorkAdapter = new PracticeVideoWorkAdapter();
+        mVideoWorkAdapter.setNeedDel(false);
+        viewBinding.rvVideo.setLayoutManager(new GridLayoutManager(this, 3));
+        viewBinding.rvVideo.setAdapter(mVideoWorkAdapter);
     }
 
     @Override
@@ -108,7 +129,7 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
         }
         this.mInfoBean = infoBean;
         //时间
-        viewBinding.tvCourseTime.setText(UiUtils.getCourseTimeString(infoBean.startTime, infoBean.endTime));
+        viewBinding.tvTime.setText(UiUtils.getCourseTimeString(infoBean.startTime, infoBean.endTime));
         //title
         viewBinding.tvTitle.setText(infoBean.courseGroupName);
         //subjectName
@@ -138,10 +159,10 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
         }
         //课后作业
         handleHomeworkData(infoBean);
-        //作业视频
-        handleHomeworkStudentSubmit(infoBean);
         //作业点评
         handleHomeworkComment(infoBean);
+        //作业视频
+        handleHomeworkStudentSubmit(infoBean);
     }
 
     @Override
@@ -184,24 +205,25 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
             return;
         }
         if (!TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, bean.courseStatus)) {
-            viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
+            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.tvHomeworkVideoEmptyText.setVisibility(View.GONE);
-                viewBinding.llHomeworkVideoContent.removeAllViews();
+                viewBinding.rvVideo.setVisibility(View.VISIBLE);
+                viewBinding.viewHomeworkVideoContentBg.setVisibility(View.GONE);
                 addVideoThumbnailView(bean.studentAttachments);
             } else {
-                viewBinding.llHomeworkVideoContent.setVisibility(View.GONE);
-                viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
+                viewBinding.rvVideo.setVisibility(View.GONE);
+                viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
                 viewBinding.tvHomeworkVideoEmptyText.setText("作业已过期无法提交和查看!");
             }
-
-            if (teacherIsReply || bean.homeworkExpire == CourseConstants.COURSE_HOMEWORK_SET) {
+            if (teacherIsReply || bean.homeworkExpire != CourseConstants.COURSE_HOMEWORK_NO_EXPIRED) {
+                //老师已回复或者作业过期的话不可再编辑作业
                 viewBinding.tvEditHomework.setVisibility(View.GONE);
             } else {
                 viewBinding.tvEditHomework.setVisibility(View.VISIBLE);
@@ -211,12 +233,15 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
             if (bean.decorateHomework == CourseConstants.COURSE_HOMEWORK_SET) {
                 //有课后作业才显示编辑按钮
                 viewBinding.tvEditHomework.setVisibility(View.VISIBLE);
-                viewBinding.tvHomeworkVideoEmptyText.setText("您尚未上传作业视频");
             } else {
                 viewBinding.tvEditHomework.setVisibility(View.GONE);
-                viewBinding.tvHomeworkVideoEmptyText.setText("课程结束之后可上传视频作业");
             }
-            viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.rvVideo.setVisibility(View.GONE);
+            viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkVideoEmptyText.setText(CourseConstants.getHomeworkVideoDefaultTip(bean.courseStatus));
+        }
+        if (mVideoWorkAdapter != null) {
+            mVideoWorkAdapter.setList(homeworkVideoData);
         }
     }
 
@@ -230,18 +255,16 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
             if (!TextUtils.isEmpty(videoUrls)) {
                 String[] results = TextUtils.split(videoUrls, ",");
                 for (int i = 0; i < results.length; i++) {
-                    VideoThumbnailView videoThumbnailView = new VideoThumbnailView(PianoRoomCourseDetailActivity.this);
-                    videoThumbnailView.setData(results[i]);
-                    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
-                    int left = i == 0 ? 0 : SizeUtils.dp2px(6);
-                    layoutParams.setMargins(left, 0, 0, 0);
-                    layoutParams.weight = 1;
-                    viewBinding.llHomeworkVideoContent.addView(videoThumbnailView, layoutParams);
+                    String videoPath = results[i];
+                    PracticeVideoWorkBean videoWorkBean = new PracticeVideoWorkBean(videoPath, 0);
+                    if (teacherIsReply) {
+                        videoWorkBean.status = 1;//不可删除
+                    }
+                    homeworkVideoData.add(videoWorkBean);
                 }
             }
         } catch (Exception e) {
             e.printStackTrace();
-            viewBinding.llHomeworkVideoContent.removeAllViews();
         }
     }
 
@@ -297,13 +320,137 @@ public class PianoRoomCourseDetailActivity extends BaseMVPActivity<ActivityPiano
             if (TextUtils.isEmpty(mCourseId)) {
                 return;
             }
-            ARouter.getInstance().build(RouterPath.WorkCenter.STUDENT_HOMEWORK_DETAIL)
-                    .withString("course_id", mCourseId)
-                    .navigation();
+            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, PianoRoomCourseDetailActivity.this);
+                presenter.upLoadVideo(PianoRoomCourseDetailActivity.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();

+ 6 - 6
student/src/main/java/com/cooleshow/student/ui/course/SparringCourseDetailActivity.java

@@ -211,7 +211,7 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             return;
         }
         if (!TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, bean.courseStatus)) {
-            viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
             viewBinding.tvHomeworkVideoEmptyText.setText("课程结束后才可提交作业");
             viewBinding.tvEditHomework.setVisibility(View.GONE);
             return;
@@ -221,15 +221,15 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             //学员已提交课后作业
             if (bean.homeworkExpire == CourseConstants.COURSE_HOMEWORK_NO_EXPIRED) {
                 viewBinding.rvVideo.setVisibility(View.VISIBLE);
-                viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.GONE);
+                viewBinding.viewHomeworkVideoContentBg.setVisibility(View.GONE);
                 addVideoThumbnailView(bean.studentAttachments);
             } else {
                 viewBinding.rvVideo.setVisibility(View.GONE);
-                viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
+                viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
                 viewBinding.tvHomeworkVideoEmptyText.setText("作业已过期无法提交和查看!");
             }
-            if (teacherIsReply) {
-                //老师已回复的话不可再编辑作业
+            if (teacherIsReply || bean.homeworkExpire != CourseConstants.COURSE_HOMEWORK_NO_EXPIRED) {
+                //老师已回复或者作业过期的话不可再编辑作业
                 viewBinding.tvEditHomework.setVisibility(View.GONE);
             } else {
                 viewBinding.tvEditHomework.setVisibility(View.VISIBLE);
@@ -243,7 +243,7 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
                 viewBinding.tvEditHomework.setVisibility(View.GONE);
             }
             viewBinding.rvVideo.setVisibility(View.GONE);
-            viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
             viewBinding.tvHomeworkVideoEmptyText.setText(CourseConstants.getHomeworkVideoDefaultTip(bean.courseStatus));
         }
         if (mVideoWorkAdapter != null) {

+ 1 - 0
student/src/main/java/com/cooleshow/student/ui/work/HomeWorkDetailActivity.java

@@ -252,6 +252,7 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
                 viewBinding.viewHomeworkVideoContentBg.setVisibility(View.GONE);
             } else {
                 //作业视频已过期
+                viewBinding.tvEditHomework.setVisibility(View.GONE);
                 viewBinding.rvVideo.setVisibility(View.GONE);
                 viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
                 viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);

+ 115 - 64
student/src/main/res/layout/activity_piano_room_course_detail_layout.xml

@@ -6,6 +6,14 @@
     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" />
@@ -28,100 +36,118 @@
             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:paddingBottom="20dp">
+                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_time_icon"
+                    android:id="@+id/iv_clock_icon"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_marginStart="11dp"
-                    android:layout_marginTop="12dp"
+                    android:layout_marginTop="15dp"
                     android:src="@drawable/icon_clock"
                     app:layout_constraintLeft_toLeftOf="parent"
                     app:layout_constraintTop_toTopOf="parent" />
 
                 <TextView
-                    android:id="@+id/tv_course_time"
+                    android:id="@+id/tv_time"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:layout_marginStart="6dp"
                     android:includeFontPadding="false"
-                    android:paddingStart="7dp"
                     android:textColor="@color/color_666666"
                     android:textSize="@dimen/sp_13"
-                    app:layout_constraintBottom_toBottomOf="@+id/iv_time_icon"
-                    app:layout_constraintLeft_toRightOf="@+id/iv_time_icon"
-                    app:layout_constraintTop_toTopOf="@+id/iv_time_icon"
+                    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" />
 
-                <TextView
-                    android:id="@+id/tv_course_status"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginEnd="11dp"
-                    android:text="已结束"
-                    android:textColor="@color/color_999999"
-                    android:textSize="@dimen/sp_14"
-                    app:layout_constraintBottom_toBottomOf="@+id/iv_time_icon"
-                    app:layout_constraintRight_toRightOf="parent"
-                    app:layout_constraintTop_toTopOf="@+id/iv_time_icon" />
-
                 <View
                     android:id="@+id/view_line"
-                    android:layout_width="match_parent"
-                    android:layout_height="1px"
-                    android:layout_marginTop="10dp"
+                    android:layout_width="0dp"
+                    android:layout_height="1dp"
+                    android:layout_marginTop="15dp"
                     android:background="@color/color_f2f2f2"
-                    app:layout_constraintTop_toBottomOf="@+id/iv_time_icon" />
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/iv_clock_icon" />
 
-                <com.cooleshow.base.widgets.QMUIRadiusImageView
+                <de.hdodenhof.circleimageview.CircleImageView
                     android:id="@+id/iv_avatar"
-                    android:layout_width="54dp"
-                    android:layout_height="54dp"
+                    android:layout_width="40dp"
+                    android:layout_height="40dp"
+                    android:layout_marginTop="12dp"
                     android:src="@drawable/icon_piano_room_course"
-                    android:layout_marginStart="11dp"
-                    android:layout_marginTop="17dp"
-                    app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintLeft_toLeftOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/view_line" />
+                    app:layout_constraintTop_toBottomOf="@+id/view_line"
+                    app:qmui_corner_radius="5dp" />
 
                 <TextView
                     android:id="@+id/tv_title"
-                    android:layout_width="wrap_content"
+                    android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginStart="10dp"
-                    android:layout_marginEnd="10dp"
                     android:ellipsize="end"
                     android:includeFontPadding="false"
-                    android:maxLines="2"
+                    android:maxLines="1"
                     android:textColor="@color/color_1a1a1a"
-                    android:textSize="@dimen/sp_16"
-                    android:textStyle="bold"
-                    app:layout_constraintBottom_toTopOf="@+id/tv_course_name"
+                    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_go_chat"
+                    app:layout_constraintRight_toLeftOf="@+id/iv_attendance_status"
                     app:layout_constraintTop_toTopOf="@+id/iv_avatar"
                     app:layout_constraintVertical_chainStyle="packed"
-                    tools:text="张豆豆张豆豆张豆豆张豆" />
-
+                    app:layout_constraintWidth_default="wrap"
+                    tools:text="VIP定制课-张豆豆VIP定制课-张豆豆" />
 
                 <ImageView
-                    android:id="@+id/iv_go_chat"
+                    android:id="@+id/iv_attendance_status"
                     android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="8dp"
-                    android:src="@drawable/icon_chat_small"
+                    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_marginTop="8dp"
+                    android:layout_marginStart="5dp"
+                    android:layout_marginEnd="5dp"
                     android:background="@drawable/shape_couse_type_text_bg"
                     android:gravity="center"
                     android:includeFontPadding="false"
@@ -131,11 +157,25 @@
                     android:paddingBottom="1.5dp"
                     android:textColor="@color/color_ff8c00"
                     android:textSize="@dimen/sp_10"
-                    app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
-                    app:layout_constraintLeft_toLeftOf="@+id/tv_title"
-                    app:layout_constraintTop_toBottomOf="@+id/tv_title"
+                    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>
 
 
@@ -199,11 +239,13 @@
 
                     <TextView
                         android:id="@+id/tv_homework_empty_text"
-                        android:layout_width="wrap_content"
+                        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:drawablePadding="8dp"
                         android:gravity="center_vertical"
                         android:text="老师尚未布置作业"
                         android:textColor="@color/color_999999"
@@ -265,6 +307,7 @@
                     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" />
@@ -284,25 +327,31 @@
 
                     <TextView
                         android:id="@+id/tv_homework_video_empty_text"
-                        android:layout_width="wrap_content"
+                        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:drawablePadding="8dp"
                         android:gravity="center_vertical"
                         android:text="您尚未上传作业视频"
                         android:textColor="@color/color_999999"
                         android:textSize="@dimen/sp_13" />
-
-                    <LinearLayout
-                        android:id="@+id/ll_homework_video_content"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="center_vertical"
-                        android:orientation="horizontal"
-                        android:weightSum="3"
-                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
                 </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>
 
 
@@ -366,11 +415,13 @@
 
                     <TextView
                         android:id="@+id/tv_homework_comment_empty_text"
-                        android:layout_width="wrap_content"
+                        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:drawablePadding="8dp"
                         android:gravity="center_vertical"
                         android:text="课程结束后上传视频会得到老师点评哦~"
                         android:textColor="@color/color_999999"