浏览代码

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

Pq 7 月之前
父节点
当前提交
5ec2efb84b

+ 2 - 36
student/src/main/java/com/cooleshow/student/adapter/PracticeVideoWorkAdapter.java

@@ -25,12 +25,14 @@ public class PracticeVideoWorkAdapter extends BaseMultiItemQuickAdapter<Practice
         super();
         addItemType(0, R.layout.item_practice_video_layout);
         addItemType(1, R.layout.item_practice_video_layout_add);
+        addChildClickViewIds(R.id.iv_del,R.id.iv_video_add,R.id.iv_video_bg);
     }
 
     public PracticeVideoWorkAdapter(List<PracticeVideoWorkBean> list) {
         super(list);
         addItemType(0, R.layout.item_practice_video_layout);
         addItemType(1, R.layout.item_practice_video_layout_add);
+        addChildClickViewIds(R.id.iv_del,R.id.iv_video_add,R.id.iv_video_bg);
     }
 
 
@@ -46,22 +48,6 @@ public class PracticeVideoWorkAdapter extends BaseMultiItemQuickAdapter<Practice
                 ImageView iv_video_bg = holder.getView(R.id.iv_video_bg);
                 ImageView iv_del = holder.getView(R.id.iv_del);
                 GlideUtils.INSTANCE.loadVideoThumbnail(getContext(), styleVideoBean.videoUrl, iv_video_bg);
-                iv_video_bg.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        if (itemAddClickAction != null) {
-                            itemAddClickAction.previewVideo(styleVideoBean.videoUrl);
-                        }
-                    }
-                });
-                iv_del.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View v) {
-                        if (itemAddClickAction != null) {
-                            itemAddClickAction.delVideo(holder.getLayoutPosition());
-                        }
-                    }
-                });
                 if(isNeedDel){
                     iv_del.setVisibility(styleVideoBean.status == 0 ? View.VISIBLE : View.INVISIBLE);
                 }else{
@@ -70,28 +56,8 @@ public class PracticeVideoWorkAdapter extends BaseMultiItemQuickAdapter<Practice
                 break;
             case 1:
                 View iv_video_add = holder.getView(R.id.iv_video_add);
-                iv_video_add.setOnClickListener(view -> {
-                    if (null != itemAddClickAction) {
-                        itemAddClickAction.add();
-                    }
-                });
                 break;
 
         }
     }
-
-    private ItemAddClickAction itemAddClickAction;
-
-    public void setItemAddClickAction(ItemAddClickAction itemAddClickAction) {
-        this.itemAddClickAction = itemAddClickAction;
-
-    }
-
-    public interface ItemAddClickAction {
-        void add();
-
-        void previewVideo(String url);
-
-        void delVideo(int pos);
-    }
 }

+ 5 - 0
student/src/main/java/com/cooleshow/student/contract/SparringCourseDetailContract.java

@@ -27,6 +27,11 @@ public interface SparringCourseDetailContract {
 
         void getCourseConfigSuccess(CommonCourseConfigBean data);
 
+        void upLoadVideoSuccess(String url);
+
+        void submitCourseHomeworkSuccess();
+
+
     }
 
     interface Presenter {

+ 56 - 0
student/src/main/java/com/cooleshow/student/presenter/course/SparringCourseDetailPresenter.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.SparringCourseCommentBean;
 import com.cooleshow.student.bean.SparringCourseHomeworkBean;
@@ -13,6 +17,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.
  */
@@ -175,4 +181,54 @@ public class SparringCourseDetailPresenter extends BasePresenter<SparringCourseD
             }
         });
     }
+
+    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);
+            }
+        });
+    }
 }

+ 416 - 416
student/src/main/java/com/cooleshow/student/ui/course/PracticeCourseDetailActivity.java

@@ -1,416 +1,416 @@
-package com.cooleshow.student.ui.course;
-
-import android.Manifest;
-import android.content.Intent;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.view.Gravity;
-import android.view.View;
-
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.GridLayoutManager;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import com.alibaba.android.arouter.facade.annotation.Route;
-import com.alibaba.android.arouter.launcher.ARouter;
-import com.cooleshow.base.router.RouterPath;
-import com.cooleshow.base.ui.video.VideoPlayActivity;
-import com.cooleshow.base.utils.TimeUtils;
-import com.cooleshow.base.utils.ToastUtils;
-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.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.ItemMarkAdapter;
-import com.cooleshow.student.adapter.PracticeVideoWorkAdapter;
-import com.cooleshow.student.bean.PracticeVideoWorkBean;
-import com.cooleshow.student.bean.SparringCourseCommentBean;
-import com.cooleshow.student.bean.SparringCourseHomeworkBean;
-import com.cooleshow.student.constants.CourseConstants;
-import com.cooleshow.student.contract.PracticeCourseDetailContract;
-import com.cooleshow.student.databinding.ActivityPracticeCourseDetailLayoutBinding;
-import com.cooleshow.student.presenter.course.PracticeCourseDetailPresenter;
-import com.cooleshow.student.ui.work.HomeWorkDetailActivity;
-import com.tbruyelle.rxpermissions3.RxPermissions;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * 创建日期:2022/5/31 9:40
- *
- * @author Ryan
- * 类说明:陪练课详情
- */
-@Deprecated
-public class PracticeCourseDetailActivity extends BaseMVPActivity<ActivityPracticeCourseDetailLayoutBinding, PracticeCourseDetailPresenter> implements PracticeCourseDetailContract.PracticeCourseDetailView, View.OnClickListener {
-    private final int CHOOSE_VIDEO = 1002;
-    public static final String COURSE_ID = "course_id";
-    public static final String COURSE_GROUP_ID = "course_group_id";
-    private String mCourseId;
-    private String mCourseGroupId;
-    private String courseStatus = "";
-    private RecyclerView rvVideo;
-    private PracticeVideoWorkAdapter practiceVideoWorkAdapter;
-    private SparringCourseHomeworkBean mInfoBean;
-
-    @Override
-    public void onClick(View view) {
-        switch (view.getId()) {
-            case R.id.tv_do:
-                switch (courseStatus) {
-                    case CourseConstants.COURSE_STATUS_NOT_START:
-                        //课程未开始
-                        ToastUtil.getInstance().showShort("课程还未开始,请在上课前5分钟进入");
-                        break;
-                    case CourseConstants.COURSE_STATUS_ING:
-                        //课程进行中
-                        break;
-                    case CourseConstants.COURSE_STATUS_COMPLETE:
-                        //课程已结束
-                        String submitContent = "";
-                        for (PracticeVideoWorkBean listDatum : listData) {
-                            if (!TextUtils.isEmpty(listDatum.videoUrl)) {
-                                submitContent = listDatum.videoUrl + ",";
-                            }
-                        }
-                        if (submitContent.contains(",")) {
-                            submitContent = submitContent.substring(0, submitContent.length() - 1);
-                            presenter.submitSparringCourseHomework(submitContent, mCourseId);
-                        }
-                        break;
-                }
-                break;
-            case R.id.tv_evaluate:
-                if (mInfoBean == null) {
-                    return;
-                }
-                if (!TextUtils.equals(mInfoBean.courseStatus, CourseConstants.COURSE_STATUS_COMPLETE)) {
-                    ToastUtil.getInstance().show(this, "课程结束之后才可以评价哦~");
-                    return;
-                }
-                //评价老师
-                ARouter.getInstance()
-                        .build(RouterPath.CourseCenter.SPARRING_EVALUATE_TEACHER)
-                        .withString("course_id", mCourseId)
-                        .withString("course_group_id", mCourseGroupId)
-                        .navigation();
-                break;
-            case R.id.iv_go_chat:
-                //聊天
-                if (mInfoBean != null) {
-                    ChatHelper.getInstance().goChat(mInfoBean.imUserId, mInfoBean.teacherName);
-                }
-                break;
-        }
-    }
-
-
-    @Override
-    protected void initView() {
-        QMUIStatusBarHelper.setStatusBarLightMode(this);
-        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "课程详情");
-        mCourseId = getIntent().getStringExtra(COURSE_ID);
-        mCourseGroupId = getIntent().getStringExtra(COURSE_GROUP_ID);
-        viewBinding.tvDo.setOnClickListener(this);
-        viewBinding.tvEvaluate.setOnClickListener(this);
-        viewBinding.ivGoChat.setOnClickListener(this);
-
-        rvVideo = viewBinding.rvVideo;
-        GridLayoutManager manager = new GridLayoutManager(this, 3);
-        rvVideo.setLayoutManager(manager);
-        practiceVideoWorkAdapter = new PracticeVideoWorkAdapter(listData);
-        rvVideo.setAdapter(practiceVideoWorkAdapter);
-        practiceVideoWorkAdapter.setItemAddClickAction(new PracticeVideoWorkAdapter.ItemAddClickAction() {
-            @Override
-            public void add() {
-                getVideoPermission();
-            }
-
-            @Override
-            public void previewVideo(String url) {
-                if (!TextUtils.isEmpty(url)) {
-                    VideoPlayActivity.start(PracticeCourseDetailActivity.this, url);
-                }
-            }
-
-            @Override
-            public void delVideo(int pos) {
-                if (practiceVideoWorkAdapter != null && pos < listData.size()) {
-                    listData.remove(pos);
-                    practiceVideoWorkAdapter.notifyDataSetChanged();
-                }
-            }
-        });
-
-    }
-
-    @Override
-    protected ActivityPracticeCourseDetailLayoutBinding getLayoutView() {
-        return ActivityPracticeCourseDetailLayoutBinding.inflate(getLayoutInflater());
-    }
-
-    @Override
-    protected PracticeCourseDetailPresenter createPresenter() {
-        return new PracticeCourseDetailPresenter();
-    }
-
-    @Override
-    public void initData() {
-        super.initData();
-
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        refresh();
-    }
-
-    private void refresh() {
-        if (presenter != null) {
-            presenter.getSparringCourseHomework(mCourseId);
-            presenter.getSparringCourseComment(mCourseId, mCourseGroupId);
-        }
-    }
-
-    @Override
-    public void getSparringCourseHomeworkSuccess(SparringCourseHomeworkBean infoBean) {
-        if (infoBean == null) {
-            return;
-        }
-        mInfoBean = infoBean;
-        viewBinding.tvCourseTime.setText(UiUtils.getCourseTimeString(infoBean.startTime, infoBean.endTime));
-
-        //时间
-        //老师头像
-        GlideUtils.INSTANCE.loadImage(this, infoBean.teacherAvatar, viewBinding.ivAvatar, R.drawable.icon_teacher_default_head);
-        //title
-        viewBinding.tvTitle.setText(infoBean.teacherName);
-        //声部名称
-        RecyclerView rv_mark = viewBinding.rvCourseName;
-        if (!TextUtils.isEmpty(infoBean.subjectName)) {
-            rv_mark.setVisibility(View.VISIBLE);
-            List<String> markList = new ArrayList<>();
-            if (infoBean.subjectName.contains(",")) {
-                String[] split = infoBean.subjectName.split(",");
-                for (String s : split) {
-                    markList.add(s);
-                }
-            } else {
-                markList.add(infoBean.subjectName);
-            }
-            LinearLayoutManager manager = new LinearLayoutManager(this);
-            manager.setOrientation(LinearLayoutManager.HORIZONTAL);
-            rv_mark.setLayoutManager(manager);
-            ItemMarkAdapter itemMarkAdapter = new ItemMarkAdapter(markList);
-            rv_mark.setAdapter(itemMarkAdapter);
-        } else {
-            rv_mark.setVisibility(View.GONE);
-        }
-        courseStatus = infoBean.courseStatus;
-        switch (courseStatus) {
-            case CourseConstants.COURSE_STATUS_NOT_START:
-                //课程未开始
-                viewBinding.tvCourseStatus.setText(getString(R.string.course_not_start_str));
-                viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
-                viewBinding.tvDo.setTextColor(getResources().getColor(R.color.white));
-                viewBinding.tvDo.setText("进入教室");
-                viewBinding.tvDo.setBackgroundResource(R.drawable.shape_course_status_ing);
-                break;
-            case CourseConstants.COURSE_STATUS_ING:
-                //课程进行中
-                viewBinding.tvCourseStatus.setText(R.string.course_ing_str);
-                viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
-                viewBinding.tvDo.setTextColor(getResources().getColor(R.color.white));
-                viewBinding.tvDo.setText("进入教室");
-                viewBinding.tvDo.setBackgroundResource(R.drawable.shape_course_status_ing);
-                break;
-            case CourseConstants.COURSE_STATUS_COMPLETE:
-                //课程已结束
-                viewBinding.tvCourseStatus.setText(R.string.course_is_completed);
-                viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
-                viewBinding.tvDo.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_666666));
-                viewBinding.tvDo.setText("确认提交");
-                viewBinding.tvDo.setBackgroundResource(R.drawable.shape_e5e5e5_radius);
-                break;
-        }
-        //课后作业
-        handleHomeworkData(infoBean);
-        //作业视频
-        handleHomeworkStudentSubmit(infoBean);
-        //作业点评
-        handleHomeworkComment(infoBean);
-    }
-
-    private void handleHomeworkComment(SparringCourseHomeworkBean infoBean) {
-        if (infoBean == null) {
-            return;
-        }
-        if (infoBean.reviewHomework == 1) {
-            //老师已点评作业
-            viewBinding.tvWorkReview.setGravity(Gravity.LEFT | Gravity.TOP);
-            viewBinding.tvWorkReview.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
-            viewBinding.tvWorkReview.setText(infoBean.teacherReplied);
-        } else {
-            viewBinding.tvWorkReview.setGravity(Gravity.CENTER);
-            viewBinding.tvWorkReview.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
-            viewBinding.tvWorkReview.setText("课程结束后上传作业视频会得倒老师点评喔~");
-        }
-    }
-
-    private List<PracticeVideoWorkBean> listData = new ArrayList<>();
-
-    private void handleHomeworkStudentSubmit(SparringCourseHomeworkBean infoBean) {
-        switch (courseStatus) {
-            case CourseConstants.COURSE_STATUS_NOT_START:
-                //课程未开始
-            case CourseConstants.COURSE_STATUS_ING:
-                //课程进行中
-                rvVideo.setVisibility(View.GONE);
-                viewBinding.tvVideoWork.setVisibility(View.VISIBLE);
-                break;
-            case CourseConstants.COURSE_STATUS_COMPLETE:
-                //课程已结束
-                if (infoBean.submitHomework == CourseConstants.COURSE_HOMEWORK_SET) {
-                    rvVideo.setVisibility(View.VISIBLE);
-                    viewBinding.tvVideoWork.setVisibility(View.GONE);
-                    listData.clear();
-                    if (!TextUtils.isEmpty(infoBean.studentAttachments)) {
-                        String[] results = TextUtils.split(infoBean.studentAttachments, ",");
-                        for (String result : results) {
-                            listData.add(new PracticeVideoWorkBean(result, 0));
-                        }
-                    }
-                    listData.add(new PracticeVideoWorkBean("", 1));
-                    if (null != practiceVideoWorkAdapter) {
-                        practiceVideoWorkAdapter.notifyDataSetChanged();
-                    }
-                } else {
-                    rvVideo.setVisibility(View.GONE);
-                    viewBinding.tvVideoWork.setVisibility(View.VISIBLE);
-                }
-                break;
-        }
-    }
-
-    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 handleHomeworkData(SparringCourseHomeworkBean infoBean) {
-        if (infoBean == null) {
-            return;
-        }
-        if (infoBean.decorateHomework == CourseConstants.COURSE_HOMEWORK_SET) {
-            //已布置课后作业
-            viewBinding.tvHomework.setGravity(Gravity.LEFT | Gravity.TOP);
-            viewBinding.tvHomework.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
-            viewBinding.tvHomework.setText(infoBean.content);
-        } else {
-            //未布置课后作业
-            viewBinding.tvHomework.setGravity(Gravity.CENTER);
-            viewBinding.tvHomework.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
-            viewBinding.tvHomework.setText("课程结束后老师会布置作业喔~");
-        }
-    }
-
-
-    @Override
-    public void getSparringCourseCommentSuccess(SparringCourseCommentBean commentBean) {
-        if (isFinishing() || isDestroyed()) {
-            return;
-        }
-        if (commentBean != null && !TextUtils.isEmpty(commentBean.teacherReplied)) {
-            //老师已评价 tv_set_teacher_comment
-            viewBinding.tvTeacherAppraisal.setGravity(Gravity.LEFT | Gravity.TOP);
-            viewBinding.tvTeacherAppraisal.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
-            viewBinding.tvTeacherAppraisal.setText(commentBean.teacherReplied);
-        } else {
-            //老师未评价
-            viewBinding.tvTeacherAppraisal.setGravity(Gravity.CENTER);
-            viewBinding.tvTeacherAppraisal.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
-            viewBinding.tvTeacherAppraisal.setText("课程结束之后老师会对您的学习进行点评喔~");
-        }
-
-        if (commentBean != null && !TextUtils.isEmpty(commentBean.studentReplied)) {
-            //学生已评价 tv_stu_comment
-            //评分星级
-            viewBinding.ratingBarForStudent.setVisibility(View.VISIBLE);
-            viewBinding.ratingBarForStudent.setRating(commentBean.score);
-            viewBinding.tvStuComment.setGravity(Gravity.LEFT | Gravity.TOP);
-            viewBinding.tvStuComment.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
-            viewBinding.tvStuComment.setText(commentBean.studentReplied);
-
-        } else {
-            //学员未评价
-            viewBinding.ratingBarForStudent.setVisibility(View.GONE);
-            viewBinding.tvStuComment.setGravity(Gravity.CENTER);
-            viewBinding.tvStuComment.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
-            viewBinding.tvStuComment.setText("课程结束之后记得对老师的教学进行评价哦!");
-        }
-    }
-
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        super.onActivityResult(requestCode, resultCode, data);
-        if (resultCode == RESULT_OK) {
-            if (requestCode == CHOOSE_VIDEO) {
-                showLoading();
-                Uri uri = data.getData();
-                String v_path = FileUtils.getFilePathForN(uri, PracticeCourseDetailActivity.this);
-                presenter.upLoadVideo(PracticeCourseDetailActivity.this, v_path);
-            }
-        }
-    }
-
-    @Override
-    public void upLoadVideoSuccess(String url) {
-        listData.add(listData.size() - 1, new PracticeVideoWorkBean(url, 0));
-        if (null != practiceVideoWorkAdapter) {
-            practiceVideoWorkAdapter.notifyDataSetChanged();
-        }
-    }
-
-    @Override
-    public void submitSparringCourseHomeworkSuccess() {
-        //提交成功
-        if (isFinishing() || isDestroyed()) {
-            return;
-        }
-        refresh();
-    }
-
-
-}
+//package com.cooleshow.student.ui.course;
+//
+//import android.Manifest;
+//import android.content.Intent;
+//import android.net.Uri;
+//import android.text.TextUtils;
+//import android.view.Gravity;
+//import android.view.View;
+//
+//import androidx.annotation.Nullable;
+//import androidx.recyclerview.widget.GridLayoutManager;
+//import androidx.recyclerview.widget.LinearLayoutManager;
+//import androidx.recyclerview.widget.RecyclerView;
+//
+//import com.alibaba.android.arouter.facade.annotation.Route;
+//import com.alibaba.android.arouter.launcher.ARouter;
+//import com.cooleshow.base.router.RouterPath;
+//import com.cooleshow.base.ui.video.VideoPlayActivity;
+//import com.cooleshow.base.utils.TimeUtils;
+//import com.cooleshow.base.utils.ToastUtils;
+//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.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.ItemMarkAdapter;
+//import com.cooleshow.student.adapter.PracticeVideoWorkAdapter;
+//import com.cooleshow.student.bean.PracticeVideoWorkBean;
+//import com.cooleshow.student.bean.SparringCourseCommentBean;
+//import com.cooleshow.student.bean.SparringCourseHomeworkBean;
+//import com.cooleshow.student.constants.CourseConstants;
+//import com.cooleshow.student.contract.PracticeCourseDetailContract;
+//import com.cooleshow.student.databinding.ActivityPracticeCourseDetailLayoutBinding;
+//import com.cooleshow.student.presenter.course.PracticeCourseDetailPresenter;
+//import com.cooleshow.student.ui.work.HomeWorkDetailActivity;
+//import com.tbruyelle.rxpermissions3.RxPermissions;
+//
+//import java.util.ArrayList;
+//import java.util.Date;
+//import java.util.List;
+//
+///**
+// * 创建日期:2022/5/31 9:40
+// *
+// * @author Ryan
+// * 类说明:陪练课详情
+// */
+//@Deprecated
+//public class PracticeCourseDetailActivity extends BaseMVPActivity<ActivityPracticeCourseDetailLayoutBinding, PracticeCourseDetailPresenter> implements PracticeCourseDetailContract.PracticeCourseDetailView, View.OnClickListener {
+//    private final int CHOOSE_VIDEO = 1002;
+//    public static final String COURSE_ID = "course_id";
+//    public static final String COURSE_GROUP_ID = "course_group_id";
+//    private String mCourseId;
+//    private String mCourseGroupId;
+//    private String courseStatus = "";
+//    private RecyclerView rvVideo;
+//    private PracticeVideoWorkAdapter practiceVideoWorkAdapter;
+//    private SparringCourseHomeworkBean mInfoBean;
+//
+//    @Override
+//    public void onClick(View view) {
+//        switch (view.getId()) {
+//            case R.id.tv_do:
+//                switch (courseStatus) {
+//                    case CourseConstants.COURSE_STATUS_NOT_START:
+//                        //课程未开始
+//                        ToastUtil.getInstance().showShort("课程还未开始,请在上课前5分钟进入");
+//                        break;
+//                    case CourseConstants.COURSE_STATUS_ING:
+//                        //课程进行中
+//                        break;
+//                    case CourseConstants.COURSE_STATUS_COMPLETE:
+//                        //课程已结束
+//                        String submitContent = "";
+//                        for (PracticeVideoWorkBean listDatum : listData) {
+//                            if (!TextUtils.isEmpty(listDatum.videoUrl)) {
+//                                submitContent = listDatum.videoUrl + ",";
+//                            }
+//                        }
+//                        if (submitContent.contains(",")) {
+//                            submitContent = submitContent.substring(0, submitContent.length() - 1);
+//                            presenter.submitSparringCourseHomework(submitContent, mCourseId);
+//                        }
+//                        break;
+//                }
+//                break;
+//            case R.id.tv_evaluate:
+//                if (mInfoBean == null) {
+//                    return;
+//                }
+//                if (!TextUtils.equals(mInfoBean.courseStatus, CourseConstants.COURSE_STATUS_COMPLETE)) {
+//                    ToastUtil.getInstance().show(this, "课程结束之后才可以评价哦~");
+//                    return;
+//                }
+//                //评价老师
+//                ARouter.getInstance()
+//                        .build(RouterPath.CourseCenter.SPARRING_EVALUATE_TEACHER)
+//                        .withString("course_id", mCourseId)
+//                        .withString("course_group_id", mCourseGroupId)
+//                        .navigation();
+//                break;
+//            case R.id.iv_go_chat:
+//                //聊天
+//                if (mInfoBean != null) {
+//                    ChatHelper.getInstance().goChat(mInfoBean.imUserId, mInfoBean.teacherName);
+//                }
+//                break;
+//        }
+//    }
+//
+//
+//    @Override
+//    protected void initView() {
+//        QMUIStatusBarHelper.setStatusBarLightMode(this);
+//        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "课程详情");
+//        mCourseId = getIntent().getStringExtra(COURSE_ID);
+//        mCourseGroupId = getIntent().getStringExtra(COURSE_GROUP_ID);
+//        viewBinding.tvDo.setOnClickListener(this);
+//        viewBinding.tvEvaluate.setOnClickListener(this);
+//        viewBinding.ivGoChat.setOnClickListener(this);
+//
+//        rvVideo = viewBinding.rvVideo;
+//        GridLayoutManager manager = new GridLayoutManager(this, 3);
+//        rvVideo.setLayoutManager(manager);
+//        practiceVideoWorkAdapter = new PracticeVideoWorkAdapter(listData);
+//        rvVideo.setAdapter(practiceVideoWorkAdapter);
+//        practiceVideoWorkAdapter.setItemAddClickAction(new PracticeVideoWorkAdapter.ItemAddClickAction() {
+//            @Override
+//            public void add() {
+//                getVideoPermission();
+//            }
+//
+//            @Override
+//            public void previewVideo(String url) {
+//                if (!TextUtils.isEmpty(url)) {
+//                    VideoPlayActivity.start(PracticeCourseDetailActivity.this, url);
+//                }
+//            }
+//
+//            @Override
+//            public void delVideo(int pos) {
+//                if (practiceVideoWorkAdapter != null && pos < listData.size()) {
+//                    listData.remove(pos);
+//                    practiceVideoWorkAdapter.notifyDataSetChanged();
+//                }
+//            }
+//        });
+//
+//    }
+//
+//    @Override
+//    protected ActivityPracticeCourseDetailLayoutBinding getLayoutView() {
+//        return ActivityPracticeCourseDetailLayoutBinding.inflate(getLayoutInflater());
+//    }
+//
+//    @Override
+//    protected PracticeCourseDetailPresenter createPresenter() {
+//        return new PracticeCourseDetailPresenter();
+//    }
+//
+//    @Override
+//    public void initData() {
+//        super.initData();
+//
+//    }
+//
+//    @Override
+//    protected void onResume() {
+//        super.onResume();
+//        refresh();
+//    }
+//
+//    private void refresh() {
+//        if (presenter != null) {
+//            presenter.getSparringCourseHomework(mCourseId);
+//            presenter.getSparringCourseComment(mCourseId, mCourseGroupId);
+//        }
+//    }
+//
+//    @Override
+//    public void getSparringCourseHomeworkSuccess(SparringCourseHomeworkBean infoBean) {
+//        if (infoBean == null) {
+//            return;
+//        }
+//        mInfoBean = infoBean;
+//        viewBinding.tvCourseTime.setText(UiUtils.getCourseTimeString(infoBean.startTime, infoBean.endTime));
+//
+//        //时间
+//        //老师头像
+//        GlideUtils.INSTANCE.loadImage(this, infoBean.teacherAvatar, viewBinding.ivAvatar, R.drawable.icon_teacher_default_head);
+//        //title
+//        viewBinding.tvTitle.setText(infoBean.teacherName);
+//        //声部名称
+//        RecyclerView rv_mark = viewBinding.rvCourseName;
+//        if (!TextUtils.isEmpty(infoBean.subjectName)) {
+//            rv_mark.setVisibility(View.VISIBLE);
+//            List<String> markList = new ArrayList<>();
+//            if (infoBean.subjectName.contains(",")) {
+//                String[] split = infoBean.subjectName.split(",");
+//                for (String s : split) {
+//                    markList.add(s);
+//                }
+//            } else {
+//                markList.add(infoBean.subjectName);
+//            }
+//            LinearLayoutManager manager = new LinearLayoutManager(this);
+//            manager.setOrientation(LinearLayoutManager.HORIZONTAL);
+//            rv_mark.setLayoutManager(manager);
+//            ItemMarkAdapter itemMarkAdapter = new ItemMarkAdapter(markList);
+//            rv_mark.setAdapter(itemMarkAdapter);
+//        } else {
+//            rv_mark.setVisibility(View.GONE);
+//        }
+//        courseStatus = infoBean.courseStatus;
+//        switch (courseStatus) {
+//            case CourseConstants.COURSE_STATUS_NOT_START:
+//                //课程未开始
+//                viewBinding.tvCourseStatus.setText(getString(R.string.course_not_start_str));
+//                viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
+//                viewBinding.tvDo.setTextColor(getResources().getColor(R.color.white));
+//                viewBinding.tvDo.setText("进入教室");
+//                viewBinding.tvDo.setBackgroundResource(R.drawable.shape_course_status_ing);
+//                break;
+//            case CourseConstants.COURSE_STATUS_ING:
+//                //课程进行中
+//                viewBinding.tvCourseStatus.setText(R.string.course_ing_str);
+//                viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
+//                viewBinding.tvDo.setTextColor(getResources().getColor(R.color.white));
+//                viewBinding.tvDo.setText("进入教室");
+//                viewBinding.tvDo.setBackgroundResource(R.drawable.shape_course_status_ing);
+//                break;
+//            case CourseConstants.COURSE_STATUS_COMPLETE:
+//                //课程已结束
+//                viewBinding.tvCourseStatus.setText(R.string.course_is_completed);
+//                viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+//                viewBinding.tvDo.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_666666));
+//                viewBinding.tvDo.setText("确认提交");
+//                viewBinding.tvDo.setBackgroundResource(R.drawable.shape_e5e5e5_radius);
+//                break;
+//        }
+//        //课后作业
+//        handleHomeworkData(infoBean);
+//        //作业视频
+//        handleHomeworkStudentSubmit(infoBean);
+//        //作业点评
+//        handleHomeworkComment(infoBean);
+//    }
+//
+//    private void handleHomeworkComment(SparringCourseHomeworkBean infoBean) {
+//        if (infoBean == null) {
+//            return;
+//        }
+//        if (infoBean.reviewHomework == 1) {
+//            //老师已点评作业
+//            viewBinding.tvWorkReview.setGravity(Gravity.LEFT | Gravity.TOP);
+//            viewBinding.tvWorkReview.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
+//            viewBinding.tvWorkReview.setText(infoBean.teacherReplied);
+//        } else {
+//            viewBinding.tvWorkReview.setGravity(Gravity.CENTER);
+//            viewBinding.tvWorkReview.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+//            viewBinding.tvWorkReview.setText("课程结束后上传作业视频会得倒老师点评喔~");
+//        }
+//    }
+//
+//    private List<PracticeVideoWorkBean> listData = new ArrayList<>();
+//
+//    private void handleHomeworkStudentSubmit(SparringCourseHomeworkBean infoBean) {
+//        switch (courseStatus) {
+//            case CourseConstants.COURSE_STATUS_NOT_START:
+//                //课程未开始
+//            case CourseConstants.COURSE_STATUS_ING:
+//                //课程进行中
+//                rvVideo.setVisibility(View.GONE);
+//                viewBinding.tvVideoWork.setVisibility(View.VISIBLE);
+//                break;
+//            case CourseConstants.COURSE_STATUS_COMPLETE:
+//                //课程已结束
+//                if (infoBean.submitHomework == CourseConstants.COURSE_HOMEWORK_SET) {
+//                    rvVideo.setVisibility(View.VISIBLE);
+//                    viewBinding.tvVideoWork.setVisibility(View.GONE);
+//                    listData.clear();
+//                    if (!TextUtils.isEmpty(infoBean.studentAttachments)) {
+//                        String[] results = TextUtils.split(infoBean.studentAttachments, ",");
+//                        for (String result : results) {
+//                            listData.add(new PracticeVideoWorkBean(result, 0));
+//                        }
+//                    }
+//                    listData.add(new PracticeVideoWorkBean("", 1));
+//                    if (null != practiceVideoWorkAdapter) {
+//                        practiceVideoWorkAdapter.notifyDataSetChanged();
+//                    }
+//                } else {
+//                    rvVideo.setVisibility(View.GONE);
+//                    viewBinding.tvVideoWork.setVisibility(View.VISIBLE);
+//                }
+//                break;
+//        }
+//    }
+//
+//    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 handleHomeworkData(SparringCourseHomeworkBean infoBean) {
+//        if (infoBean == null) {
+//            return;
+//        }
+//        if (infoBean.decorateHomework == CourseConstants.COURSE_HOMEWORK_SET) {
+//            //已布置课后作业
+//            viewBinding.tvHomework.setGravity(Gravity.LEFT | Gravity.TOP);
+//            viewBinding.tvHomework.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
+//            viewBinding.tvHomework.setText(infoBean.content);
+//        } else {
+//            //未布置课后作业
+//            viewBinding.tvHomework.setGravity(Gravity.CENTER);
+//            viewBinding.tvHomework.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+//            viewBinding.tvHomework.setText("课程结束后老师会布置作业喔~");
+//        }
+//    }
+//
+//
+//    @Override
+//    public void getSparringCourseCommentSuccess(SparringCourseCommentBean commentBean) {
+//        if (isFinishing() || isDestroyed()) {
+//            return;
+//        }
+//        if (commentBean != null && !TextUtils.isEmpty(commentBean.teacherReplied)) {
+//            //老师已评价 tv_set_teacher_comment
+//            viewBinding.tvTeacherAppraisal.setGravity(Gravity.LEFT | Gravity.TOP);
+//            viewBinding.tvTeacherAppraisal.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
+//            viewBinding.tvTeacherAppraisal.setText(commentBean.teacherReplied);
+//        } else {
+//            //老师未评价
+//            viewBinding.tvTeacherAppraisal.setGravity(Gravity.CENTER);
+//            viewBinding.tvTeacherAppraisal.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+//            viewBinding.tvTeacherAppraisal.setText("课程结束之后老师会对您的学习进行点评喔~");
+//        }
+//
+//        if (commentBean != null && !TextUtils.isEmpty(commentBean.studentReplied)) {
+//            //学生已评价 tv_stu_comment
+//            //评分星级
+//            viewBinding.ratingBarForStudent.setVisibility(View.VISIBLE);
+//            viewBinding.ratingBarForStudent.setRating(commentBean.score);
+//            viewBinding.tvStuComment.setGravity(Gravity.LEFT | Gravity.TOP);
+//            viewBinding.tvStuComment.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
+//            viewBinding.tvStuComment.setText(commentBean.studentReplied);
+//
+//        } else {
+//            //学员未评价
+//            viewBinding.ratingBarForStudent.setVisibility(View.GONE);
+//            viewBinding.tvStuComment.setGravity(Gravity.CENTER);
+//            viewBinding.tvStuComment.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+//            viewBinding.tvStuComment.setText("课程结束之后记得对老师的教学进行评价哦!");
+//        }
+//    }
+//
+//
+//    @Override
+//    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+//        super.onActivityResult(requestCode, resultCode, data);
+//        if (resultCode == RESULT_OK) {
+//            if (requestCode == CHOOSE_VIDEO) {
+//                showLoading();
+//                Uri uri = data.getData();
+//                String v_path = FileUtils.getFilePathForN(uri, PracticeCourseDetailActivity.this);
+//                presenter.upLoadVideo(PracticeCourseDetailActivity.this, v_path);
+//            }
+//        }
+//    }
+//
+//    @Override
+//    public void upLoadVideoSuccess(String url) {
+//        listData.add(listData.size() - 1, new PracticeVideoWorkBean(url, 0));
+//        if (null != practiceVideoWorkAdapter) {
+//            practiceVideoWorkAdapter.notifyDataSetChanged();
+//        }
+//    }
+//
+//    @Override
+//    public void submitSparringCourseHomeworkSuccess() {
+//        //提交成功
+//        if (isFinishing() || isDestroyed()) {
+//            return;
+//        }
+//        refresh();
+//    }
+//
+//
+//}

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

@@ -1,5 +1,8 @@
 package com.cooleshow.student.ui.course;
 
+import android.Manifest;
+import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
@@ -7,6 +10,7 @@ import android.widget.LinearLayout;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.alibaba.android.arouter.launcher.ARouter;
@@ -14,24 +18,35 @@ import com.cooleshow.base.bean.CommonCourseConfigBean;
 import com.cooleshow.base.constanst.CourseStatusType;
 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.PracticeVideoWorkBean;
 import com.cooleshow.student.bean.SparringCourseCommentBean;
 import com.cooleshow.student.bean.SparringCourseHomeworkBean;
 import com.cooleshow.student.constants.CourseConstants;
 import com.cooleshow.student.contract.SparringCourseDetailContract;
 import com.cooleshow.student.databinding.ActivitySparringCourseDetailLayoutBinding;
 import com.cooleshow.student.presenter.course.SparringCourseDetailPresenter;
+import com.cooleshow.student.ui.work.HomeWorkDetailActivity;
 import com.cooleshow.student.widgets.CourseSetCommentDialog;
 import com.cooleshow.base.widgets.VideoThumbnailView;
+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;
 
 /**
  * Author by pq, Date on 2022/4/27.
@@ -40,12 +55,16 @@ import com.dayayuemeng.classroom.helper.OpenClassRoomHelper;
 public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparringCourseDetailLayoutBinding, SparringCourseDetailPresenter> implements SparringCourseDetailContract.SparringCourseDetailView, View.OnClickListener {
     public static final String COURSE_ID = "course_id";
     public static final String COURSE_GROUP_ID = "course_group_id";
+    private static final int CHOOSE_VIDEO = 1002;
     private String mCourseId;
     private String mCourseGroupId;
     private CourseSetCommentDialog mSetCommentDialog;
     private SparringCourseHomeworkBean 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) {
@@ -79,7 +98,10 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
     @Override
     public void initData() {
         super.initData();
-
+        mVideoWorkAdapter = new PracticeVideoWorkAdapter();
+        mVideoWorkAdapter.setNeedDel(false);
+        viewBinding.rvVideo.setLayoutManager(new GridLayoutManager(this, 3));
+        viewBinding.rvVideo.setAdapter(mVideoWorkAdapter);
     }
 
     private void refresh() {
@@ -194,18 +216,19 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             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.tvHomeworkVideoEmptyText.setVisibility(View.GONE);
-                viewBinding.llHomeworkVideoContent.removeAllViews();
                 addVideoThumbnailView(bean.studentAttachments);
             } else {
-                viewBinding.llHomeworkVideoContent.setVisibility(View.GONE);
+                viewBinding.rvVideo.setVisibility(View.GONE);
                 viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
                 viewBinding.tvHomeworkVideoEmptyText.setText("作业已过期无法提交和查看!");
             }
-            if (teacherIsReply || bean.homeworkExpire == CourseConstants.COURSE_HOMEWORK_SET) {
+            if (teacherIsReply) {
                 //老师已回复的话不可再编辑作业
                 viewBinding.tvEditHomework.setVisibility(View.GONE);
             } else {
@@ -219,8 +242,12 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             } else {
                 viewBinding.tvEditHomework.setVisibility(View.GONE);
             }
+            viewBinding.rvVideo.setVisibility(View.GONE);
             viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
-            viewBinding.tvHomeworkVideoEmptyText.setText( CourseConstants.getHomeworkVideoDefaultTip(bean.courseStatus));
+            viewBinding.tvHomeworkVideoEmptyText.setText(CourseConstants.getHomeworkVideoDefaultTip(bean.courseStatus));
+        }
+        if (mVideoWorkAdapter != null) {
+            mVideoWorkAdapter.setList(homeworkVideoData);
         }
     }
 
@@ -234,18 +261,16 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             if (!TextUtils.isEmpty(videoUrls)) {
                 String[] results = TextUtils.split(videoUrls, ",");
                 for (int i = 0; i < results.length; i++) {
-                    VideoThumbnailView videoThumbnailView = new VideoThumbnailView(SparringCourseDetailActivity.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();
         }
     }
 
@@ -351,9 +376,10 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
             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();
         }
 
         if (v.getId() == R.id.tv_evaluate) {
@@ -452,6 +478,129 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
     }
 
     @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, SparringCourseDetailActivity.this);
+                presenter.upLoadVideo(SparringCourseDetailActivity.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();
         if (mSetCommentDialog != null) {

+ 15 - 22
student/src/main/java/com/cooleshow/student/ui/work/HomeWorkDetailActivity.java

@@ -11,6 +11,7 @@ import android.widget.LinearLayout;
 
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemChildClickListener;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
@@ -35,7 +36,6 @@ import com.cooleshow.student.contract.HomeWorkDetailContract;
 import com.cooleshow.student.databinding.ActivityHomeworkDetailLayoutBinding;
 import com.cooleshow.student.presenter.homework.HomeWorkADetailPresenter;
 import com.cooleshow.student.ui.course.PianoRoomCourseDetailActivity;
-import com.cooleshow.student.ui.course.PracticeCourseDetailActivity;
 import com.cooleshow.student.widgets.dialog.UploadHomeworkVideoDialog;
 import com.tbruyelle.rxpermissions3.RxPermissions;
 
@@ -90,29 +90,19 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
         mVideoWorkAdapter.setNeedDel(false);
         viewBinding.rvVideo.setLayoutManager(new GridLayoutManager(this, 3));
         viewBinding.rvVideo.setAdapter(mVideoWorkAdapter);
-        mVideoWorkAdapter.setItemAddClickAction(new PracticeVideoWorkAdapter.ItemAddClickAction() {
-            @Override
-            public void add() {
-                if (UiUtils.isFastClick()) {
-                    return;
-                }
-                isChangeHomeWork = true;
-                getVideoPermission();
-            }
-
-            @Override
-            public void previewVideo(String url) {
-                if (!TextUtils.isEmpty(url)) {
-                    VideoPlayActivity.start(HomeWorkDetailActivity.this, url);
-                }
-            }
 
+        mVideoWorkAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
             @Override
-            public void delVideo(int pos) {
-                isChangeHomeWork = true;
-                if (mVideoWorkAdapter != null && pos < homeworkVideoData.size()) {
-                    homeworkVideoData.remove(pos);
-                    mVideoWorkAdapter.notifyDataSetChanged();
+            public void onItemChildClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                int id = view.getId();
+                if (position < mVideoWorkAdapter.getData().size()) {
+                    PracticeVideoWorkBean practiceVideoWorkBean = mVideoWorkAdapter.getData().get(position);
+                    if (id == R.id.iv_video_bg) {
+                        if (!TextUtils.isEmpty(practiceVideoWorkBean.videoUrl)) {
+                            VideoPlayActivity.start(HomeWorkDetailActivity.this, practiceVideoWorkBean.videoUrl);
+                        }
+                        return;
+                    }
                 }
             }
         });
@@ -257,10 +247,12 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
             if (bean.homeworkExpire == CourseConstants.COURSE_HOMEWORK_NO_EXPIRED) {
                 //未过期
                 //学员已提交课后作业
+                viewBinding.rvVideo.setVisibility(View.VISIBLE);
                 addVideoThumbnailView(bean.studentAttachments);
                 viewBinding.viewHomeworkVideoContentBg.setVisibility(View.GONE);
             } else {
                 //作业视频已过期
+                viewBinding.rvVideo.setVisibility(View.GONE);
                 viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
                 viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
                 viewBinding.tvHomeworkVideoEmptyText.setText("作业已过期无法提交和查看!");
@@ -268,6 +260,7 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
         } else {
             //学员未提交课后作业
             viewBinding.csTeacherReply.setVisibility(View.GONE);
+            viewBinding.rvVideo.setVisibility(View.GONE);
             viewBinding.viewHomeworkVideoContentBg.setVisibility(View.VISIBLE);
             viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
             viewBinding.tvHomeworkVideoEmptyText.setText(CourseConstants.getHomeworkVideoDefaultTip(""));

+ 30 - 24
student/src/main/java/com/cooleshow/student/widgets/dialog/UploadHomeworkVideoDialog.java

@@ -16,6 +16,7 @@ import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemChildClickListener;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.cooleshow.base.ui.video.VideoPlayActivity;
 import com.cooleshow.base.utils.ToastUtil;
@@ -71,7 +72,7 @@ public class UploadHomeworkVideoDialog extends Dialog implements View.OnClickLis
 
     private void initData() {
         mVideoWorkAdapter = new PracticeVideoWorkAdapter();
-        mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(),3));
+        mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
         mRecyclerView.setAdapter(mVideoWorkAdapter);
     }
 
@@ -80,32 +81,37 @@ public class UploadHomeworkVideoDialog extends Dialog implements View.OnClickLis
         mTvConfirm.setOnClickListener(this);
         mLlUploadEmptyView.setOnClickListener(this);
 
-        mVideoWorkAdapter.setItemAddClickAction(new PracticeVideoWorkAdapter.ItemAddClickAction() {
+        mVideoWorkAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
             @Override
-            public void add() {
-                if (UiUtils.isFastClick()) {
-                    return;
-                }
-                if (mEventListener != null) {
-                    mEventListener.goUpload();
-                }
-            }
+            public void onItemChildClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                int id = view.getId();
+                if (position < mVideoWorkAdapter.getData().size()) {
+                    PracticeVideoWorkBean practiceVideoWorkBean = mVideoWorkAdapter.getData().get(position);
+                    if (id == R.id.iv_del) {
+                        if (mEventListener != null) {
+                            mVideoWorkAdapter.getData().remove(position);
+                            mEventListener.onDel(position);
+                            checkVideoList();
+                            mVideoWorkAdapter.notifyDataSetChanged();
+                        }
+                        return;
+                    }
 
-            @Override
-            public void previewVideo(String url) {
-                if (!TextUtils.isEmpty(url)) {
-                    VideoPlayActivity.start(getContext(), url);
-                }
-            }
+                    if (id == R.id.iv_video_add) {
+                        if (UiUtils.isFastClick()) {
+                            return;
+                        }
+                        if (mEventListener != null) {
+                            mEventListener.goUpload();
+                        }
+                        return;
+                    }
 
-            @Override
-            public void delVideo(int pos) {
-                if (mVideoWorkAdapter != null && pos < mVideoWorkAdapter.getData().size()) {
-                    if (mEventListener != null) {
-                        mVideoWorkAdapter.getData().remove(pos);
-                        mEventListener.onDel(pos);
-                        checkVideoList();
-                        mVideoWorkAdapter.notifyDataSetChanged();
+                    if (id == R.id.iv_video_bg) {
+                        if (!TextUtils.isEmpty(practiceVideoWorkBean.videoUrl)) {
+                            VideoPlayActivity.start(getContext(), practiceVideoWorkBean.videoUrl);
+                        }
+                        return;
                     }
                 }
             }

+ 2 - 1
student/src/main/res/layout/activity_homework_detail_layout.xml

@@ -322,7 +322,7 @@
                     android:background="@drawable/shape_bg_f7f8f9_4dp"
                     android:minHeight="88dp"
                     android:padding="11dp"
-                    android:visibility="gone"
+                    android:visibility="visible"
                     app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_video">
 
                     <TextView
@@ -351,6 +351,7 @@
 
                 <androidx.recyclerview.widget.RecyclerView
                     android:id="@+id/rv_video"
+                    android:visibility="gone"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginLeft="@dimen/dp_7"

+ 13 - 9
student/src/main/res/layout/activity_sparring_course_detail_layout.xml

@@ -502,16 +502,20 @@
                         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>