Explorar el Código

增加学生端作业详情页面

Pq hace 3 años
padre
commit
d29f375024

+ 5 - 0
BaseLibrary/src/main/res/drawable/selector_common_btn.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/shape_999999_39dp" android:state_enabled="false"/>
+    <item android:drawable="@drawable/shape_2dc7aa_39dp" />
+</selector>

+ 5 - 0
BaseLibrary/src/main/res/drawable/shape_999999_39dp.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@color/color_999999"/>
+    <corners android:radius="39dp"/>
+</shape>

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

@@ -138,6 +138,11 @@
             android:name=".ui.course.PracticeCourseDetailActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:screenOrientation="portrait" />
+
+        <activity
+            android:name=".ui.work.HomeWorkDetailActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
         <activity
             android:name=".ui.course.EvaluateTeacherActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"

+ 23 - 0
student/src/main/java/com/cooleshow/student/adapter/PracticeVideoWorkAdapter.java

@@ -1,5 +1,6 @@
 package com.cooleshow.student.adapter;
 
+import android.view.View;
 import android.widget.ImageView;
 
 import androidx.annotation.NonNull;
@@ -31,7 +32,25 @@ public class PracticeVideoWorkAdapter extends BaseMultiItemQuickAdapter<Practice
             case 0:
                 //加载视频缩略图
                 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());
+                        }
+                    }
+                });
+                iv_del.setVisibility(styleVideoBean.status == 0 ? View.VISIBLE : View.INVISIBLE);
                 break;
             case 1:
                 ImageView iv_video_add = holder.getView(R.id.iv_video_add);
@@ -54,5 +73,9 @@ public class PracticeVideoWorkAdapter extends BaseMultiItemQuickAdapter<Practice
 
     public interface ItemAddClickAction {
         void add();
+
+        void previewVideo(String url);
+
+        void delVideo(int pos);
     }
 }

+ 1 - 1
student/src/main/java/com/cooleshow/student/bean/HomeworkListBean.java

@@ -35,7 +35,7 @@ public class HomeworkListBean {
         public int absenteeism; //旷课 0:否,1:是,可用值:NO,YES
         public String courseGroupName;
         public String subjectName;
-        public int courseId;
+        public String courseId;
         public int classNum;
         public int teacherId;
         public int studentId;

+ 11 - 0
student/src/main/java/com/cooleshow/student/bean/PracticeVideoWorkBean.java

@@ -17,8 +17,19 @@ public class PracticeVideoWorkBean implements MultiItemEntity {
     public String videoUrl;
     //默认为0 为视频展示 为1时添加视频
     public int type;
+    public int status;//0可删除 1不可删除
+
     @Override
     public int getItemType() {
         return type;
     }
+
+
+    public static PracticeVideoWorkBean defaultInstance() {
+        return new PracticeVideoWorkBean("", 1);
+    }
+
+    public static PracticeVideoWorkBean createNormalInstance(String url) {
+        return new PracticeVideoWorkBean(url, 0);
+    }
 }

+ 2 - 0
student/src/main/java/com/cooleshow/student/constants/CourseConstants.java

@@ -23,4 +23,6 @@ public class CourseConstants {
     public static final String COURSE_ID = "course_id";
     public static final String COURSE_GROUP_ID = "course_group_id";
     public static final String STUDENT_ID = "student_id";
+
+    public static final int COURSE_HOMEWORK_MAX_VIDEO_COUNT=3;//课后作业最多视频数量
 }

+ 4 - 0
student/src/main/java/com/cooleshow/student/contract/HomeWorkDetailContract.java

@@ -12,6 +12,10 @@ import com.cooleshow.student.bean.HomeworkDetailBean;
 public interface HomeWorkDetailContract {
     interface HomeWorkDetailView extends BaseView {
         void getDetailInfoSuccess(HomeworkDetailBean homeworkDetailBean);
+
+        void upLoadVideoSuccess(String url);
+
+        void submitCourseHomeworkSuccess();
     }
 
     interface Presenter {

+ 57 - 0
student/src/main/java/com/cooleshow/student/presenter/homework/HomeWorkADetailPresenter.java

@@ -1,9 +1,12 @@
 package com.cooleshow.student.presenter.homework;
 
+import android.app.Activity;
+
 import com.cooleshow.base.constanst.Constants;
 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.HomeworkDetailBean;
 import com.cooleshow.student.bean.HomeworkListBean;
@@ -13,6 +16,8 @@ import com.cooleshow.student.contract.HomeWorkDetailContract;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.io.File;
+
 
 /**
  * 创建日期:2022/5/23 10:49
@@ -45,4 +50,56 @@ public class HomeWorkADetailPresenter extends BasePresenter<HomeWorkDetailContra
             }
         });
     }
+
+
+    public void upLoadVideo(Activity activity, String filePath) {
+        UploadHelper uploadHelper = new UploadHelper(activity);
+        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);
+            }
+        });
+    }
 }

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

@@ -16,6 +16,7 @@ import io.rong.imkit.utils.helper.OpenChatHelper;
 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;
@@ -35,6 +36,7 @@ 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;
@@ -87,7 +89,7 @@ public class PracticeCourseDetailActivity extends BaseMVPActivity<ActivityPracti
                 }
                 break;
             case R.id.tv_evaluate:
-                if(mInfoBean==null){
+                if (mInfoBean == null) {
                     return;
                 }
                 if (!TextUtils.equals(mInfoBean.courseStatus, CourseConstants.COURSE_STATUS_COMPLETE)) {
@@ -126,7 +128,27 @@ public class PracticeCourseDetailActivity extends BaseMVPActivity<ActivityPracti
         rvVideo.setLayoutManager(manager);
         practiceVideoWorkAdapter = new PracticeVideoWorkAdapter(listData);
         rvVideo.setAdapter(practiceVideoWorkAdapter);
-        practiceVideoWorkAdapter.setItemAddClickAction(() -> getVideoPermission());
+        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();
+                }
+            }
+        });
 
     }
 

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

@@ -1,55 +1,156 @@
 package com.cooleshow.student.ui.work;
 
+import android.Manifest;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
 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.OnItemClickListener;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.ui.video.VideoPlayActivity;
+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.ToastUtil;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.base.widgets.VideoThumbnailView;
 import com.cooleshow.student.R;
+import com.cooleshow.student.adapter.PracticeVideoWorkAdapter;
 import com.cooleshow.student.bean.HomeworkDetailBean;
 import com.cooleshow.student.bean.PianoRoomCourseHomeworkBean;
+import com.cooleshow.student.bean.PracticeVideoWorkBean;
 import com.cooleshow.student.constants.CourseConstants;
 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.tbruyelle.rxpermissions3.RxPermissions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
 
 /**
  * Author by pq, Date on 2022/7/6.
  * 学生端作业详情页面(包括琴房课,陪练课)
  */
 @Route(path = RouterPath.WorkCenter.STUDENT_HOMEWORK_DETAIL)
-public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDetailLayoutBinding, HomeWorkADetailPresenter> implements HomeWorkDetailContract.HomeWorkDetailView {
+public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDetailLayoutBinding, HomeWorkADetailPresenter> implements HomeWorkDetailContract.HomeWorkDetailView, View.OnClickListener {
     public static final String COURSE_ID_KEY = "course_id";
+    private final int CHOOSE_VIDEO = 1002;
     private String courseId;
     private HomeworkDetailBean mInfoBean;
+    private List<PracticeVideoWorkBean> homeworkVideoData = new ArrayList<>();
+    private PracticeVideoWorkAdapter mVideoWorkAdapter;
+    private boolean teacherIsReply = false;//老师是否已点评
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(this);
+    }
 
     @Override
     protected void initView() {
-        String courseId = getIntent().getStringExtra(COURSE_ID_KEY);
+        courseId = getIntent().getStringExtra(COURSE_ID_KEY);
         if (TextUtils.isEmpty(courseId)) {
             finish();
             return;
         }
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "作业详情");
+        viewBinding.tvCommit.setOnClickListener(this);
     }
 
     @Override
     public void initData() {
         super.initData();
+        mVideoWorkAdapter = new PracticeVideoWorkAdapter(homeworkVideoData);
+        homeworkVideoData.add(PracticeVideoWorkBean.defaultInstance());
+        viewBinding.rvVideo.setLayoutManager(new GridLayoutManager(this, 3));
+        viewBinding.rvVideo.setAdapter(mVideoWorkAdapter);
+        mVideoWorkAdapter.setItemAddClickAction(new PracticeVideoWorkAdapter.ItemAddClickAction() {
+            @Override
+            public void add() {
+                getVideoPermission();
+            }
+
+            @Override
+            public void previewVideo(String url) {
+                if (!TextUtils.isEmpty(url)) {
+                    VideoPlayActivity.start(HomeWorkDetailActivity.this, url);
+                }
+            }
 
+            @Override
+            public void delVideo(int pos) {
+                if (mVideoWorkAdapter != null && pos < homeworkVideoData.size()) {
+                    homeworkVideoData.remove(pos);
+                    checkVideoList();
+                    mVideoWorkAdapter.notifyDataSetChanged();
+                }
+            }
+        });
+        refresh();
+    }
+
+    private void checkVideoList() {
+        if (homeworkVideoData.size() < CourseConstants.COURSE_HOMEWORK_MAX_VIDEO_COUNT) {
+            if (!teacherIsReply && !checkAddItemExist()) {
+                //老师未点评的情况下才添加add按钮
+                homeworkVideoData.add(PracticeVideoWorkBean.defaultInstance());
+            }
+        }
+    }
+
+    private boolean checkAddItemExist() {
+        for (int i = 0; i < homeworkVideoData.size(); i++) {
+            PracticeVideoWorkBean videoWorkBean = homeworkVideoData.get(i);
+            if (videoWorkBean.type == 1) {
+                return true;
+            }
+        }
+        return false;
     }
 
     @Override
     protected void onResume() {
         super.onResume();
-        if (presenter != null) {
-            presenter.queryHomeworkDetail(courseId);
-        }
+    }
+
+    private void getVideoPermission() {
+        new RxPermissions(this)
+                .request(Manifest.permission.CAMERA,
+                        Manifest.permission.READ_EXTERNAL_STORAGE,
+                        Manifest.permission.WRITE_EXTERNAL_STORAGE)
+                .subscribe(granted -> {
+                    if (granted) {
+                        chooseVideo();
+                    } else {
+                        ToastUtil.getInstance().show(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);
+
     }
 
     @Override
@@ -71,9 +172,9 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
         //时间
         viewBinding.tvCourseTime.setText(infoBean.classDate);
         //学生头像
-        if(TextUtils.equals(infoBean.courseType,CourseConstants.OTHER_COURSE)){
+        if (TextUtils.equals(infoBean.courseType, CourseConstants.OTHER_COURSE)) {
             GlideUtils.INSTANCE.loadImage(this, infoBean.teacherAvatar, viewBinding.ivAvatar, R.drawable.icon_teacher_default_head);
-        }else{
+        } else {
             viewBinding.ivAvatar.setImageResource(R.drawable.icon_piano_room_course);
         }
         //title
@@ -99,10 +200,44 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
         }
         //课后作业
         handleHomeworkData(infoBean);
-        //作业视频
-        handleHomeworkStudentSubmit(infoBean);
         //作业点评
         handleHomeworkComment(infoBean);
+        //作业视频
+        handleHomeworkStudentSubmit(infoBean);
+    }
+
+    @Override
+    public void upLoadVideoSuccess(String url) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (mVideoWorkAdapter != null) {
+            addVideoData(PracticeVideoWorkBean.createNormalInstance(url));
+            mVideoWorkAdapter.notifyDataSetChanged();
+        }
+    }
+
+    @Override
+    public void submitCourseHomeworkSuccess() {
+        if (!checkActivityExist()) {
+            return;
+        }
+        ToastUtil.getInstance().showShort("提交成功");
+        refresh();
+    }
+
+    private void refresh() {
+        if (presenter != null) {
+            presenter.queryHomeworkDetail(courseId);
+        }
+    }
+
+    private void addVideoData(PracticeVideoWorkBean videoWorkBean) {
+        if (homeworkVideoData.size() < CourseConstants.COURSE_HOMEWORK_MAX_VIDEO_COUNT) {
+            homeworkVideoData.add(homeworkVideoData.size() - 1, videoWorkBean);
+        } else {
+            homeworkVideoData.set(homeworkVideoData.size() - 1, videoWorkBean);
+        }
     }
 
 
@@ -115,15 +250,16 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
         if (bean == null) {
             return;
         }
-        //tv_homework_video_empty_text
+        homeworkVideoData.clear();
         if (bean.submitHomework == CourseConstants.COURSE_HOMEWORK_STU_SUBMIT) {
             //学员已提交课后作业
-            viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.GONE);
-            viewBinding.llHomeworkVideoContent.removeAllViews();
             addVideoThumbnailView(bean.studentAttachments);
         } else {
             //学员未提交课后作业
-            viewBinding.tvHomeworkVideoEmptyText.setVisibility(View.VISIBLE);
+            homeworkVideoData.add(PracticeVideoWorkBean.defaultInstance());
+        }
+        if (mVideoWorkAdapter != null) {
+            mVideoWorkAdapter.notifyDataSetChanged();
         }
     }
 
@@ -137,18 +273,17 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
             if (!TextUtils.isEmpty(videoUrls)) {
                 String[] results = TextUtils.split(videoUrls, ",");
                 for (int i = 0; i < results.length; i++) {
-                    VideoThumbnailView videoThumbnailView = new VideoThumbnailView(HomeWorkDetailActivity.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);
                 }
+                checkVideoList();
             }
         } catch (Exception e) {
             e.printStackTrace();
-            viewBinding.llHomeworkVideoContent.removeAllViews();
         }
     }
 
@@ -182,16 +317,63 @@ public class HomeWorkDetailActivity extends BaseMVPActivity<ActivityHomeworkDeta
         if (bean == null) {
             return;
         }
-        if (!TextUtils.isEmpty(bean.teacherReplied)) {
+        teacherIsReply = !TextUtils.isEmpty(bean.teacherReplied);
+        if (teacherIsReply) {
             //老师已点评作业
+            viewBinding.tvCommit.setClickable(false);
+            viewBinding.tvCommit.setEnabled(false);
             viewBinding.tvHomeworkCommentEmptyText.setVisibility(View.GONE);
             viewBinding.tvHomeworkSetComment.setVisibility(View.GONE);
             viewBinding.tvHomeworkCommentContent.setVisibility(View.VISIBLE);
             viewBinding.tvHomeworkCommentContent.setText(bean.teacherReplied);
         } else {
+            viewBinding.tvCommit.setClickable(true);
+            viewBinding.tvCommit.setEnabled(true);
             viewBinding.tvHomeworkCommentEmptyText.setVisibility(View.VISIBLE);
             viewBinding.tvHomeworkSetComment.setVisibility(View.GONE);
             viewBinding.tvHomeworkCommentContent.setVisibility(View.GONE);
         }
     }
+
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_commit) {
+            //提交
+            String result = getVideoHomeworkResult();
+            if (!TextUtils.isEmpty(result)) {
+                presenter.submitCourseHomework(result, courseId);
+            } 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
+    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, HomeWorkDetailActivity.this);
+                presenter.upLoadVideo(HomeWorkDetailActivity.this, v_path);
+            }
+        }
+    }
+
 }

+ 32 - 21
student/src/main/java/com/cooleshow/student/ui/work/HomeWorkFragment.java

@@ -10,6 +10,7 @@ import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.alibaba.android.arouter.launcher.ARouter;
 import com.bigkoo.pickerview.builder.TimePickerBuilder;
 import com.bigkoo.pickerview.listener.CustomListener;
 import com.bigkoo.pickerview.view.TimePickerView;
@@ -17,6 +18,7 @@ import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.chad.library.adapter.base.listener.OnLoadMoreListener;
 import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.TimeUtils;
 
@@ -52,7 +54,7 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
 
     @Override
     public void onClick(View view) {
-        switch (view.getId()){
+        switch (view.getId()) {
             case R.id.tv_date:
                 showTimeSelectPicker();
                 break;
@@ -88,7 +90,14 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
         homeworkAdapter.setOnItemClickListener(new OnItemClickListener() {
             @Override
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
-
+                if (position < homeworkAdapter.getData().size()) {
+                    HomeworkListBean.RowsBean rowsBean = homeworkAdapter.getData().get(position);
+                    if (rowsBean != null) {
+                        ARouter.getInstance().build(RouterPath.WorkCenter.STUDENT_HOMEWORK_DETAIL)
+                                .withString("course_id", rowsBean.courseId)
+                                .navigation();
+                    }
+                }
             }
         });
     }
@@ -185,27 +194,27 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
             pvTime = new TimePickerBuilder(requireContext(), (date, v) -> {//选中事件回调
                 reBuildFilter(date);
             }).setLayoutRes(com.cooleshow.base.R.layout.pickerview_default_layout, new CustomListener() {
+                @Override
+                public void customLayout(View v) {
+                    //自定义布局中的控件初始化及事件处理
+                    final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_finish);
+                    TextView ivCancel = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_cancel);
+                    tvSubmit.setOnClickListener(new View.OnClickListener() {
                         @Override
-                        public void customLayout(View v) {
-                            //自定义布局中的控件初始化及事件处理
-                            final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_finish);
-                            TextView ivCancel = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_cancel);
-                            tvSubmit.setOnClickListener(new View.OnClickListener() {
-                                @Override
-                                public void onClick(View v) {
-                                    pvTime.returnData();
-                                    pvTime.dismiss();
-                                }
-                            });
-                            ivCancel.setOnClickListener(new View.OnClickListener() {
-                                @Override
-                                public void onClick(View v) {
-                                    pvTime.dismiss();
-                                }
-                            });
-
+                        public void onClick(View v) {
+                            pvTime.returnData();
+                            pvTime.dismiss();
+                        }
+                    });
+                    ivCancel.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            pvTime.dismiss();
                         }
-                    })
+                    });
+
+                }
+            })
                     .setLineSpacingMultiplier(2.5f)
                     .setType(new boolean[]{true, true, false, false, false, false})// 默认全部显示
                     .setTextColorCenter(getResources().getColor(com.cooleshow.base.R.color.color_1a1a1a))//设置选中项的颜色
@@ -220,8 +229,10 @@ public class HomeWorkFragment extends BaseMVPFragment<FragmentHomeworkBinding, H
             pvTime.show();
         }
     }
+
     private Date currentSelectDate;
     private String currentFilterDate;
+
     private void reBuildFilter(Date date) {
         currentSelectDate = date != null ? date : TimeUtils.getNowDate();
         String targetDateTimeStr = TimeUtils.date2String(currentSelectDate, TimeUtils.getSafeDateFormat("yyyy-MM"));

+ 33 - 18
student/src/main/res/layout/activity_homework_detail_layout.xml

@@ -7,7 +7,7 @@
 
     <include
         android:id="@+id/toolbar_include"
-        layout="@layout/common_toolbar_layout_white" />
+        layout="@layout/common_toolbar_layout" />
 
     <androidx.core.widget.NestedScrollView
         android:layout_width="match_parent"
@@ -83,7 +83,8 @@
                     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"
@@ -259,6 +260,7 @@
                     android:background="@drawable/shape_bg_f7f8f9_4dp"
                     android:minHeight="88dp"
                     android:padding="11dp"
+                    android:visibility="gone"
                     app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_video">
 
                     <TextView
@@ -282,6 +284,18 @@
                         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_5"
+                    android:layout_marginTop="6dp"
+                    android:layout_marginRight="@dimen/dp_5"
+                    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,22 +380,23 @@
                         tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
                 </FrameLayout>
             </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <TextView
+                android:id="@+id/tv_commit"
+                android:layout_width="match_parent"
+                android:layout_height="44dp"
+                android:layout_marginStart="27dp"
+                android:layout_marginTop="20dp"
+                android:layout_marginEnd="27dp"
+                android:layout_marginBottom="30dp"
+                android:background="@drawable/selector_common_btn"
+                android:gravity="center"
+                android:text="提交"
+                android:textColor="@color/white"
+                android:visibility="visible"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintRight_toRightOf="parent" />
         </LinearLayout>
     </androidx.core.widget.NestedScrollView>
-
-    <TextView
-        android:id="@+id/tv_enter_room"
-        android:layout_width="match_parent"
-        android:layout_height="44dp"
-        android:layout_marginStart="27dp"
-        android:layout_marginEnd="27dp"
-        android:layout_marginBottom="30dp"
-        android:background="@drawable/shape_2dc7aa_39dp"
-        android:gravity="center"
-        android:text="进入教室"
-        android:textColor="@color/white"
-        android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toRightOf="parent" />
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 8 - 0
student/src/main/res/layout/item_practice_video_layout.xml

@@ -8,6 +8,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginLeft="5dp"
+        android:layout_marginTop="5dp"
         android:layout_marginRight="5dp">
 
         <com.cooleshow.base.widgets.QMUIRadiusImageView
@@ -23,4 +24,11 @@
             android:src="@drawable/icon_play_video" />
     </FrameLayout>
 
+    <ImageView
+        android:id="@+id/iv_del"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentRight="true"
+        android:src="@drawable/icon_video_close"
+        android:visibility="visible" />
 </RelativeLayout>