瀏覽代碼

修改老师端陪练课详情

Pq 3 年之前
父節點
當前提交
e0ea607366
共有 26 個文件被更改,包括 468 次插入65 次删除
  1. 1 1
      BaseLibrary/build.gradle
  2. 1 1
      BaseLibrary/src/main/java/com/cooleshow/base/data/net/RetrofitFactory.kt
  3. 2 2
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.java
  4. 7 2
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java
  5. 二進制
      BaseLibrary/src/main/res/drawable-xhdpi/bg_video_placeholder.png
  6. 二進制
      BaseLibrary/src/main/res/drawable-xxhdpi/bg_video_placeholder.png
  7. 4 5
      teacher/src/main/java/com/cooleshow/teacher/adapter/LiveCourseListAdapter.java
  8. 4 4
      teacher/src/main/java/com/cooleshow/teacher/adapter/SparringCourseListAdapter.java
  9. 12 0
      teacher/src/main/java/com/cooleshow/teacher/api/APIService.java
  10. 63 0
      teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseHomeworkBean.java
  11. 1 1
      teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseListBean.java
  12. 7 1
      teacher/src/main/java/com/cooleshow/teacher/constants/CourseConstants.java
  13. 4 0
      teacher/src/main/java/com/cooleshow/teacher/contract/SparringCourseDetailContract.java
  14. 30 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/course/SparringCourseDetailPresenter.java
  15. 8 13
      teacher/src/main/java/com/cooleshow/teacher/ui/course/LiveCourseFragment.java
  16. 184 1
      teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseDetailActivity.java
  17. 22 12
      teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseFragment.java
  18. 0 15
      teacher/src/main/java/com/cooleshow/teacher/ui/course/VideoCourseFragment.java
  19. 53 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/HomeworkVideoThumbnailView.java
  20. 二進制
      teacher/src/main/res/drawable-xhdpi/icon_set_homework.png
  21. 二進制
      teacher/src/main/res/drawable-xhdpi/icon_video_play.png
  22. 二進制
      teacher/src/main/res/drawable-xxhdpi/icon_set_homework.png
  23. 二進制
      teacher/src/main/res/drawable-xxhdpi/icon_video_play.png
  24. 42 7
      teacher/src/main/res/layout/activity_sparring_course_detail_layout.xml
  25. 18 0
      teacher/src/main/res/layout/view_homework_video_thumbnail_layout.xml
  26. 5 0
      teacher/src/main/res/values/strings.xml

+ 1 - 1
BaseLibrary/build.gradle

@@ -86,7 +86,7 @@ dependencies {
     //Glide
 //    implementation "com.github.bumptech.glide:glide:$glide_version"
 
-    implementation "com.github.bumptech.glide:glide:$glide_version"
+    api "com.github.bumptech.glide:glide:$glide_version"
     kapt "com.github.bumptech.glide:compiler:$glide_version"
     //Banner
     api 'io.github.youth5201314:banner:2.2.2'

+ 1 - 1
BaseLibrary/src/main/java/com/cooleshow/base/data/net/RetrofitFactory.kt

@@ -55,7 +55,7 @@ class RetrofitFactory private constructor() {
         return OkHttpClient.Builder()
             .addInterceptor(initLogInterceptor())
             .addInterceptor(CommonInterceptor())
-            .connectTimeout(10, TimeUnit.SECONDS)
+            .connectTimeout(20, TimeUnit.SECONDS)
             .readTimeout(10, TimeUnit.SECONDS)
             .build()
     }

+ 2 - 2
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseActivity.java

@@ -53,8 +53,8 @@ public abstract class BaseActivity<V extends ViewBinding> extends RxAppCompatAct
             }
         });
         toolbar.setTitle("");
-        ivBack.setImageResource(R.drawable.icon_back_black);
-        tv_title.setTextColor(getResources().getColor(R.color.common_black));
+//        ivBack.setImageResource(R.drawable.icon_back_black);
+//        tv_title.setTextColor(getResources().getColor(R.color.common_black));
         tv_title.setText(title);
         setSupportActionBar(toolbar);
         getSupportActionBar().setDisplayHomeAsUpEnabled(false);

+ 7 - 2
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java

@@ -7,9 +7,9 @@ import androidx.viewbinding.ViewBinding;
 public abstract class BaseMVPActivity<V extends ViewBinding, P extends BasePresenter> extends BaseActivity<V> {
     protected P presenter;
 
+
     @Override
-    public void initData() {
-        super.initData();
+    protected void initView() {
         presenter = createPresenter();
         // presenter 绑定 view
         if (presenter != null) {
@@ -17,6 +17,11 @@ public abstract class BaseMVPActivity<V extends ViewBinding, P extends BasePrese
         }
     }
 
+    @Override
+    public void initData() {
+        super.initData();
+    }
+
     protected abstract P createPresenter();
 
     @Override

二進制
BaseLibrary/src/main/res/drawable-xhdpi/bg_video_placeholder.png


二進制
BaseLibrary/src/main/res/drawable-xxhdpi/bg_video_placeholder.png


+ 4 - 5
teacher/src/main/java/com/cooleshow/teacher/adapter/LiveCourseListAdapter.java

@@ -11,8 +11,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.bean.LiveCourseListBean;
-import com.cooleshow.teacher.bean.SparringCourseListBean;
-import com.cooleshow.teacher.constants.CourseFilterConstants;
+import com.cooleshow.teacher.constants.CourseConstants;
 
 import androidx.annotation.NonNull;
 
@@ -41,19 +40,19 @@ public class LiveCourseListAdapter extends BaseQuickAdapter<LiveCourseListBean.R
 
         TextView tvCourseStatusBt = holder.getView(R.id.tv_course_status);
 
-        if (TextUtils.equals(CourseFilterConstants.COURSE_STATUS_NOT_START, data.status)) {
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_NOT_START, data.status)) {
             //未开始
             holder.setText(R.id.tv_course_status, "未开始");
             tvCourseStatusBt.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
         }
 
-        if (TextUtils.equals(CourseFilterConstants.COURSE_STATUS_ING, data.status)) {
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_ING, data.status)) {
             //进行中
             holder.setText(R.id.tv_course_status, "进行中");
             tvCourseStatusBt.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
         }
 
-        if (TextUtils.equals(CourseFilterConstants.COURSE_STATUS_COMPLETE, data.status)) {
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, data.status)) {
             //已结束
             holder.setText(R.id.tv_course_status, "已结束");
             tvCourseStatusBt.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_999999));

+ 4 - 4
teacher/src/main/java/com/cooleshow/teacher/adapter/SparringCourseListAdapter.java

@@ -11,7 +11,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
-import com.cooleshow.teacher.constants.CourseFilterConstants;
+import com.cooleshow.teacher.constants.CourseConstants;
 
 import androidx.annotation.NonNull;
 
@@ -39,7 +39,7 @@ public class SparringCourseListAdapter extends BaseQuickAdapter<SparringCourseLi
         TextView tvCourseStatusBt = holder.getView(R.id.tv_course_status_bt);
         TextView tv_course_status = holder.getView(R.id.tv_course_status);
 
-        if (TextUtils.equals(CourseFilterConstants.COURSE_STATUS_NOT_START, data.status)) {
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_NOT_START, data.status)) {
             //未开始
             tv_course_status.setText("未开始");
             tv_course_status.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
@@ -48,7 +48,7 @@ public class SparringCourseListAdapter extends BaseQuickAdapter<SparringCourseLi
             tvCourseStatusBt.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
         }
 
-        if (TextUtils.equals(CourseFilterConstants.COURSE_STATUS_ING, data.status)) {
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_ING, data.status)) {
             //进行中
             tv_course_status.setText("进行中");
             tv_course_status.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
@@ -57,7 +57,7 @@ public class SparringCourseListAdapter extends BaseQuickAdapter<SparringCourseLi
             tvCourseStatusBt.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.white));
         }
 
-        if (TextUtils.equals(CourseFilterConstants.COURSE_STATUS_COMPLETE, data.status)) {
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, data.status)) {
             //已结束
             tv_course_status.setText("已结束");
             tv_course_status.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_999999));

+ 12 - 0
teacher/src/main/java/com/cooleshow/teacher/api/APIService.java

@@ -3,18 +3,21 @@ package com.cooleshow.teacher.api;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.teacher.bean.CourseTableDataBean;
 import com.cooleshow.teacher.bean.LiveCourseListBean;
+import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
 import com.cooleshow.teacher.bean.TeacherUserInfo;
 import com.cooleshow.teacher.bean.VideoCourseListBean;
 import com.cooleshow.usercenter.bean.UserInfo;
 
 import java.util.List;
+import java.util.Objects;
 
 import io.reactivex.rxjava3.core.Observable;
 import okhttp3.RequestBody;
 import retrofit2.http.Body;
 import retrofit2.http.GET;
 import retrofit2.http.POST;
+import retrofit2.http.Path;
 
 import static com.cooleshow.base.common.BaseConstant.AUTH_GROUP;
 import static com.cooleshow.base.common.BaseConstant.TEACHER_GROUP;
@@ -52,6 +55,15 @@ public interface APIService {
 
 
     /**
+     * 查询个人信息
+     *
+     * @param
+     * @return
+     */
+    @GET(TEACHER_GROUP + "homework/detail/{courseId}")
+    Observable<BaseResponse<SparringCourseHomeworkBean>> getSparringCourseHomework(@Path("courseId") String courseId);
+
+    /**
      * 查询直播课
      *
      * @param

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

@@ -0,0 +1,63 @@
+package com.cooleshow.teacher.bean;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+public class SparringCourseHomeworkBean {
+
+    /**
+     * startTime : 2022-04-24 09:30:00
+     * endTime : 2022-04-24 10:00:00
+     * id : 0
+     * content :
+     * decorateTime : null
+     * courseScheduleId : 66
+     * courseGroupId : 23
+     * courseType : PRACTICE
+     * subjectName : 西洋管乐
+     * studentId : 44
+     * teacherId : 15
+     * title :
+     * studentAvatar :
+     * studentName : cy
+     * teacherAvatar : https://daya.ks3-cn-beijing.ksyun.com/202204/T3R3yxq.jpeg
+     * teacherName : 张三
+     * submitHomework : 0
+     * studentHomeworkId : 0
+     * reviewHomework : 0
+     * submitTime : null
+     * attachments :
+     * classDate : 2022-04-24 00:00:00
+     * teacherReplied :
+     * courseStatus : NOT_START
+     * decorateHomework : 0
+     * studentAttachments :
+     */
+
+    public String startTime;
+    public String endTime;
+    public int id;
+    public String content;
+    public Object decorateTime;
+    public int courseScheduleId;
+    public int courseGroupId;
+    public String courseType;
+    public String subjectName;
+    public int studentId;
+    public int teacherId;
+    public String title;
+    public String studentAvatar;
+    public String studentName;
+    public String teacherAvatar;
+    public String teacherName;
+    public int submitHomework;
+    public int studentHomeworkId;
+    public int reviewHomework;
+    public Object submitTime;
+    public String attachments;
+    public String classDate;
+    public String teacherReplied;
+    public String courseStatus;
+    public int decorateHomework;
+    public String studentAttachments;
+}

+ 1 - 1
teacher/src/main/java/com/cooleshow/teacher/bean/SparringCourseListBean.java

@@ -87,7 +87,7 @@ public class SparringCourseListBean {
         public String avatar;
         public String classDate;
         public int courseGoupId;
-        public int courseId;
+        public String courseId;
         public String endTime;
         public int id;
         public String signInTime;

+ 7 - 1
teacher/src/main/java/com/cooleshow/teacher/constants/CourseFilterConstants.java → teacher/src/main/java/com/cooleshow/teacher/constants/CourseConstants.java

@@ -6,7 +6,7 @@ import java.lang.annotation.RetentionPolicy;
 import androidx.annotation.IntDef;
 import androidx.annotation.StringDef;
 
-public class CourseFilterConstants {
+public class CourseConstants {
     public static final String COURSE_FILTER_ALL = "";//全部
     public static final String COURSE_FILTER_HAS_NOT_STARTED = "NOT_START";//未开始
     public static final String COURSE_FILTER_IN_PROGRESS = "ING";//进行中
@@ -15,4 +15,10 @@ public class CourseFilterConstants {
     public static final String COURSE_STATUS_NOT_START = "NOT_START";//课程未开始
     public static final String COURSE_STATUS_ING = "ING";//课程进行中
     public static final String COURSE_STATUS_COMPLETE = "COMPLETE";//课程已结束
+
+    public static final int COURSE_HOMEWORK_SET = 1;//课程已布置课后作业
+    public static final int COURSE_HOMEWORK_NO_SET = 0;//课程未布置课后作业
+
+    public static final int COURSE_HOMEWORK_STU_SUBMIT = 1;//学员已提交课后作业
+    public static final int COURSE_HOMEWORK_STU_NO_SUBMIT = 0;//学员未提交课后作业
 }

+ 4 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/SparringCourseDetailContract.java

@@ -1,6 +1,7 @@
 package com.cooleshow.teacher.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
 
 /**
@@ -9,8 +10,11 @@ import com.cooleshow.teacher.bean.SparringCourseListBean;
 public interface SparringCourseDetailContract {
 
     interface SparringCourseDetailView extends BaseView {
+        void getSparringCourseHomeworkSuccess(SparringCourseHomeworkBean homeworkBean);
+        void getSparringCourseHomeworkError();
     }
 
     interface Presenter {
+        void getSparringCourseHomework(String courseId);
     }
 }

+ 30 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/course/SparringCourseDetailPresenter.java

@@ -1,11 +1,41 @@
 package com.cooleshow.teacher.presenter.course;
 
 import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.teacher.api.APIService;
+import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
+import com.cooleshow.teacher.bean.SparringCourseListBean;
 import com.cooleshow.teacher.contract.SparringCourseDetailContract;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 /**
  * Author by pq, Date on 2022/4/27.
  */
 public class SparringCourseDetailPresenter extends BasePresenter<SparringCourseDetailContract.SparringCourseDetailView> implements SparringCourseDetailContract.Presenter {
 
+    @Override
+    public void getSparringCourseHomework(String courseId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        addSubscribe(create(APIService.class).getSparringCourseHomework(courseId), new BaseObserver<SparringCourseHomeworkBean>(getView()) {
+            @Override
+            protected void onSuccess(SparringCourseHomeworkBean data) {
+                if (getView() != null) {
+                    getView().getSparringCourseHomeworkSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+                    getView().getSparringCourseHomeworkError();
+                }
+            }
+        });
+    }
 }

+ 8 - 13
teacher/src/main/java/com/cooleshow/teacher/ui/course/LiveCourseFragment.java

@@ -20,17 +20,12 @@ import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.CourseStatusFilterAdapter;
 import com.cooleshow.teacher.adapter.LiveCourseListAdapter;
-import com.cooleshow.teacher.adapter.SparringCourseListAdapter;
 import com.cooleshow.teacher.bean.CourseFilterStatusBean;
 import com.cooleshow.teacher.bean.LiveCourseListBean;
-import com.cooleshow.teacher.bean.SparringCourseListBean;
-import com.cooleshow.teacher.constants.CourseFilterConstants;
+import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.LiveCourseContract;
-import com.cooleshow.teacher.contract.SparringCourseContract;
 import com.cooleshow.teacher.databinding.FragmentLiveCourseLayoutBinding;
-import com.cooleshow.teacher.databinding.FragmentSparringCourseLayoutBinding;
 import com.cooleshow.teacher.presenter.course.LiveCoursePresenter;
-import com.cooleshow.teacher.presenter.course.SparringCoursePresenter;
 import com.scwang.smart.refresh.layout.api.RefreshLayout;
 import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
 
@@ -46,7 +41,7 @@ import androidx.recyclerview.widget.RecyclerView;
  * Author by pq, Date on 2022/4/25.
  */
 public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayoutBinding, LiveCoursePresenter> implements LiveCourseContract.LiveCourseView, View.OnClickListener {
-    private String currentCourseFilterStatus = CourseFilterConstants.COURSE_FILTER_ALL;
+    private String currentCourseFilterStatus = CourseConstants.COURSE_FILTER_ALL;
     private String currentFilterDate;
     private Date currentSelectDate;
     private int currentSubjectId;
@@ -77,10 +72,10 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
 
     private void buildDefaultCourseStatusFilterList() {
         mCourseFilterStatusBeans = new ArrayList<>();
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_ALL, "全部"));
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_HAS_NOT_STARTED, "未开始"));
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_IN_PROGRESS, "进行中"));
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_COMPLETED, "已结束"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_ALL, "全部"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_HAS_NOT_STARTED, "未开始"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_IN_PROGRESS, "进行中"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_COMPLETED, "已结束"));
     }
 
     private void reBuildFilter(Date date, String status) {
@@ -91,7 +86,7 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
             return;
         }
         currentFilterDate = targetDateTimeStr;
-        currentCourseFilterStatus = !TextUtils.isEmpty(status) ? status : CourseFilterConstants.COURSE_FILTER_ALL;
+        currentCourseFilterStatus = !TextUtils.isEmpty(status) ? status : CourseConstants.COURSE_FILTER_ALL;
         currentPage = 1;
         mViewBinding.tvTime.setText(currentFilterDate);
         queryCourse(true);
@@ -121,7 +116,7 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
         mViewBinding.recyclerView.setAdapter(mAdapter);
 
         buildDefaultCourseStatusFilterList();
-        reBuildFilter(null, CourseFilterConstants.COURSE_FILTER_ALL);
+        reBuildFilter(null, CourseConstants.COURSE_FILTER_ALL);
     }
 
     private void queryCourse(boolean isShowLoading) {

+ 184 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseDetailActivity.java

@@ -1,13 +1,23 @@
 package com.cooleshow.teacher.ui.course;
 
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.LinearLayout;
+
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.cooleshow.base.presenter.BasePresenter;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.SparringCourseHomeworkBean;
+import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.SparringCourseContract;
 import com.cooleshow.teacher.contract.SparringCourseDetailContract;
 import com.cooleshow.teacher.databinding.ActivitySparringCourseDetailLayoutBinding;
 import com.cooleshow.teacher.presenter.course.SparringCourseDetailPresenter;
+import com.cooleshow.teacher.widgets.HomeworkVideoThumbnailView;
 
 import androidx.annotation.NonNull;
 import androidx.viewbinding.ViewBinding;
@@ -16,7 +26,10 @@ import androidx.viewbinding.ViewBinding;
  * Author by pq, Date on 2022/4/27.
  */
 @Route(path = RouterPath.CourseCenter.SPARRING_COURSE_DETAIL)
-public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparringCourseDetailLayoutBinding, SparringCourseDetailPresenter> implements SparringCourseDetailContract.SparringCourseDetailView {
+public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparringCourseDetailLayoutBinding, SparringCourseDetailPresenter> implements SparringCourseDetailContract.SparringCourseDetailView, View.OnClickListener {
+    public static final String COURSE_ID = "course_id";
+    private String mCourseId;
+
     @NonNull
     @Override
     protected ActivitySparringCourseDetailLayoutBinding getLayoutView() {
@@ -25,11 +38,181 @@ public class SparringCourseDetailActivity extends BaseMVPActivity<ActivitySparri
 
     @Override
     protected void initView() {
+        super.initView();
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "课程详情");
+        mCourseId = getIntent().getStringExtra(COURSE_ID);
+        if (TextUtils.isEmpty(mCourseId)) {
+            finish();
+            return;
+        }
+        viewBinding.tvSetHomework.setOnClickListener(this);
+        viewBinding.tvHomeworkSetComment.setOnClickListener(this);
+    }
 
+    @Override
+    public void initData() {
+        super.initData();
+        presenter.getSparringCourseHomework(mCourseId);
     }
 
     @Override
     protected SparringCourseDetailPresenter createPresenter() {
         return new SparringCourseDetailPresenter();
     }
+
+    /**
+     * 获取课程详情成功
+     *
+     * @param infoBean
+     */
+    @Override
+    public void getSparringCourseHomeworkSuccess(SparringCourseHomeworkBean infoBean) {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        if (infoBean == null) {
+            return;
+        }
+        //时间
+        viewBinding.tvCourseTime.setText(infoBean.classDate);
+        //学生头像
+        GlideUtils.INSTANCE.loadImage(this, infoBean.studentAvatar, viewBinding.ivAvatar,R.drawable.icon_teacher_default_head);
+        //title
+        viewBinding.tvTitle.setText(infoBean.studentName);
+        //subjectName
+        viewBinding.tvCourseName.setText(infoBean.subjectName);
+
+
+        String status = infoBean.courseStatus;
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_NOT_START, status)) {
+            //课程未开始
+            viewBinding.tvCourseStatus.setText(getString(R.string.course_not_start_str));
+            viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
+        }
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_ING, status)) {
+            //课程进行中
+            viewBinding.tvCourseStatus.setText(R.string.course_ing_str);
+            viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
+        }
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, status)) {
+            //课程已结束
+            viewBinding.tvCourseStatus.setText(R.string.course_is_completed);
+            viewBinding.tvCourseStatus.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+        }
+        //课后作业
+        handleHomeworkData(infoBean);
+        //作业视频
+        handleHomeworkStudentSubmit(infoBean);
+        //作业点评
+        handleHomeworkComment(infoBean);
+    }
+
+    /**
+     * 作业点评
+     */
+    private void handleHomeworkComment(SparringCourseHomeworkBean bean) {
+        //tv_homework_comment_content
+        if (bean == null) {
+            return;
+        }
+        if (!TextUtils.isEmpty(bean.teacherReplied)) {
+            //老师已点评作业
+            viewBinding.tvHomeworkCommentEmptyText.setVisibility(View.GONE);
+            viewBinding.tvHomeworkSetComment.setVisibility(View.GONE);
+            viewBinding.tvHomeworkCommentContent.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkCommentContent.setText(bean.teacherReplied);
+        } else {
+            viewBinding.tvHomeworkCommentEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkSetComment.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkCommentContent.setVisibility(View.GONE);
+        }
+    }
+
+    /**
+     * 学生提交的作业
+     *
+     * @param bean
+     */
+    private void handleHomeworkStudentSubmit(SparringCourseHomeworkBean bean) {
+        if (bean == null) {
+            return;
+        }
+        //tv_homework_video_empty_text
+        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);
+        }
+    }
+
+    /**
+     * 添加视频缩略图
+     *
+     * @param videoUrls
+     */
+    private void addVideoThumbnailView(String videoUrls) {
+        try {
+            if (!TextUtils.isEmpty(videoUrls)) {
+                String[] results = TextUtils.split(videoUrls, ",");
+                for (int i = 0; i < results.length; i++) {
+                    HomeworkVideoThumbnailView videoThumbnailView = new HomeworkVideoThumbnailView(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);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            viewBinding.llHomeworkVideoContent.removeAllViews();
+        }
+    }
+
+    /**
+     * 课后作业
+     */
+    private void handleHomeworkData(SparringCourseHomeworkBean bean) {
+        if (bean == null) {
+            return;
+        }
+        if (bean.decorateHomework == CourseConstants.COURSE_HOMEWORK_SET) {
+            //已布置课后作业
+            viewBinding.tvHomeworkEmptyText.setVisibility(View.GONE);
+            viewBinding.tvHomeworkContent.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkContent.setText(bean.content);
+            viewBinding.tvSetHomework.setVisibility(View.GONE);
+        } else {
+            //未布置课后作业
+            viewBinding.tvHomeworkEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvHomeworkContent.setVisibility(View.GONE);
+            viewBinding.tvSetHomework.setVisibility(View.VISIBLE);
+        }
+    }
+
+    private void handleTeacherComment() {
+
+    }
+
+    @Override
+    public void getSparringCourseHomeworkError() {
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == R.id.tv_set_homework) {
+            //布置作业
+            return;
+        }
+        if (v.getId() == R.id.tv_homework_set_comment) {
+            //点评作业
+            return;
+        }
+    }
 }

+ 22 - 12
teacher/src/main/java/com/cooleshow/teacher/ui/course/SparringCourseFragment.java

@@ -1,6 +1,5 @@
 package com.cooleshow.teacher.ui.course;
 
-import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -8,13 +7,14 @@ import android.view.ViewGroup;
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
+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;
 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.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.PopupUtil;
@@ -24,7 +24,7 @@ import com.cooleshow.teacher.adapter.CourseStatusFilterAdapter;
 import com.cooleshow.teacher.adapter.SparringCourseListAdapter;
 import com.cooleshow.teacher.bean.CourseFilterStatusBean;
 import com.cooleshow.teacher.bean.SparringCourseListBean;
-import com.cooleshow.teacher.constants.CourseFilterConstants;
+import com.cooleshow.teacher.constants.CourseConstants;
 import com.cooleshow.teacher.contract.SparringCourseContract;
 import com.cooleshow.teacher.databinding.FragmentSparringCourseLayoutBinding;
 import com.cooleshow.teacher.presenter.course.SparringCoursePresenter;
@@ -34,7 +34,6 @@ import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.List;
 
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.LinearLayoutManager;
@@ -44,7 +43,7 @@ import androidx.recyclerview.widget.RecyclerView;
  * Author by pq, Date on 2022/4/25.
  */
 public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCourseLayoutBinding, SparringCoursePresenter> implements SparringCourseContract.SparringCourseView, View.OnClickListener {
-    private String currentCourseFilterStatus = CourseFilterConstants.COURSE_FILTER_ALL;
+    private String currentCourseFilterStatus = CourseConstants.COURSE_FILTER_ALL;
     private String currentFilterDate;
     private Date currentSelectDate;
     private int currentSubjectId;
@@ -75,10 +74,10 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
 
     private void buildDefaultCourseStatusFilterList() {
         mCourseFilterStatusBeans = new ArrayList<>();
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_ALL, "全部"));
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_HAS_NOT_STARTED, "未开始"));
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_IN_PROGRESS, "进行中"));
-        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseFilterConstants.COURSE_FILTER_COMPLETED, "已结束"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_ALL, "全部"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_HAS_NOT_STARTED, "未开始"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_IN_PROGRESS, "进行中"));
+        mCourseFilterStatusBeans.add(new CourseFilterStatusBean(CourseConstants.COURSE_FILTER_COMPLETED, "已结束"));
     }
 
     private void reBuildFilter(Date date, String status) {
@@ -89,7 +88,7 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
             return;
         }
         currentFilterDate = targetDateTimeStr;
-        currentCourseFilterStatus = !TextUtils.isEmpty(status) ? status : CourseFilterConstants.COURSE_FILTER_ALL;
+        currentCourseFilterStatus = !TextUtils.isEmpty(status) ? status : CourseConstants.COURSE_FILTER_ALL;
         currentPage = 1;
         mViewBinding.tvTime.setText(currentFilterDate);
         queryCourse(true);
@@ -115,10 +114,21 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
                 queryCourse(false);
             }
         });
+        mAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (position < mAdapter.getData().size()) {
+                    SparringCourseListBean.RowsBean rowsBean = mAdapter.getData().get(position);
+                    if (rowsBean != null) {
+                        ARouter.getInstance().build(RouterPath.CourseCenter.SPARRING_COURSE_DETAIL).withString(SparringCourseDetailActivity.COURSE_ID, rowsBean.courseId).navigation();
+                    }
+                }
+            }
+        });
         mViewBinding.recyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
         mViewBinding.recyclerView.setAdapter(mAdapter);
         buildDefaultCourseStatusFilterList();
-        reBuildFilter(null, CourseFilterConstants.COURSE_FILTER_ALL);
+        reBuildFilter(null, CourseConstants.COURSE_FILTER_ALL);
     }
 
     private void queryCourse(boolean isShowLoading) {
@@ -127,7 +137,7 @@ public class SparringCourseFragment extends BaseMVPFragment<FragmentSparringCour
         LogUtils.i("pq", "currentCourseFilterStatus:" + currentCourseFilterStatus);
         LogUtils.i("pq", "currentSubjectId:" + currentSubjectId);
         LogUtils.i("pq", "currentPage:" + currentPage);
-        presenter.querySparringCourse(isShowLoading,currentFilterDate, currentCourseFilterStatus, currentSubjectId, currentPage);
+        presenter.querySparringCourse(isShowLoading, currentFilterDate, currentCourseFilterStatus, currentSubjectId, currentPage);
     }
 
     @Override

+ 0 - 15
teacher/src/main/java/com/cooleshow/teacher/ui/course/VideoCourseFragment.java

@@ -1,15 +1,11 @@
 package com.cooleshow.teacher.ui.course;
 
-import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
-import com.bigkoo.pickerview.builder.TimePickerBuilder;
-import com.bigkoo.pickerview.listener.CustomListener;
-import com.bigkoo.pickerview.view.TimePickerView;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.chad.library.adapter.base.listener.OnLoadMoreListener;
@@ -17,29 +13,18 @@ import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.PopupUtil;
 import com.cooleshow.base.utils.SizeUtils;
-import com.cooleshow.base.utils.TimeUtils;
 import com.cooleshow.teacher.R;
 import com.cooleshow.teacher.adapter.CourseStatusFilterAdapter;
-import com.cooleshow.teacher.adapter.SparringCourseListAdapter;
 import com.cooleshow.teacher.adapter.VideoCourseListAdapter;
 import com.cooleshow.teacher.bean.CourseFilterStatusBean;
-import com.cooleshow.teacher.bean.SparringCourseListBean;
 import com.cooleshow.teacher.bean.VideoCourseListBean;
-import com.cooleshow.teacher.constants.CourseFilterConstants;
-import com.cooleshow.teacher.contract.SparringCourseContract;
 import com.cooleshow.teacher.contract.VideoCourseContract;
-import com.cooleshow.teacher.databinding.FragmentSparringCourseLayoutBinding;
 import com.cooleshow.teacher.databinding.FragmentVideoCourseLayoutBinding;
-import com.cooleshow.teacher.presenter.course.SparringCoursePresenter;
 import com.cooleshow.teacher.presenter.course.VideoCoursePresenter;
 import com.cooleshow.teacher.widgets.VideoCourseListItemDecoration;
 import com.scwang.smart.refresh.layout.api.RefreshLayout;
 import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.LinearLayoutManager;

+ 53 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/HomeworkVideoThumbnailView.java

@@ -0,0 +1,53 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.FrameLayout;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.cooleshow.base.widgets.QMUIRadiusImageView;
+import com.cooleshow.teacher.R;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+public class HomeworkVideoThumbnailView extends FrameLayout {
+
+    private QMUIRadiusImageView mIvBg;
+
+    public HomeworkVideoThumbnailView(@NonNull Context context) {
+        this(context, null);
+    }
+
+    public HomeworkVideoThumbnailView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public HomeworkVideoThumbnailView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        LayoutInflater.from(getContext()).inflate(R.layout.view_homework_video_thumbnail_layout, this);
+        mIvBg = findViewById(R.id.iv_bg);
+    }
+
+    public void setData(String videoUrl) {
+        Glide.with(getContext())
+                .setDefaultRequestOptions(
+                        new RequestOptions()
+                                .frame(0)
+                                .centerCrop()
+                                .error(com.cooleshow.base.R.drawable.bg_video_placeholder)
+                                .placeholder(com.cooleshow.base.R.drawable.bg_video_placeholder)
+                )
+                .load(videoUrl)
+                .into(mIvBg);
+    }
+}

二進制
teacher/src/main/res/drawable-xhdpi/icon_set_homework.png


二進制
teacher/src/main/res/drawable-xhdpi/icon_video_play.png


二進制
teacher/src/main/res/drawable-xxhdpi/icon_set_homework.png


二進制
teacher/src/main/res/drawable-xxhdpi/icon_video_play.png


+ 42 - 7
teacher/src/main/res/layout/activity_sparring_course_detail_layout.xml

@@ -23,6 +23,7 @@
         android:layout_height="0dp"
         android:overScrollMode="never"
         android:scrollbars="none"
+        app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/toolbar_include">
 
         <LinearLayout
@@ -30,7 +31,9 @@
             android:layout_height="wrap_content"
             android:orientation="vertical"
             android:paddingStart="14dp"
-            android:paddingEnd="14dp">
+            android:paddingTop="12dp"
+            android:paddingEnd="14dp"
+            android:paddingBottom="12dp">
 
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:layout_width="match_parent"
@@ -62,6 +65,7 @@
                     tools:text="2021/09/17 14:00~14:25" />
 
                 <TextView
+                    android:id="@+id/tv_course_status"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_marginEnd="11dp"
@@ -307,6 +311,22 @@
                     app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework"
                     app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
 
+                <TextView
+                    android:id="@+id/tv_set_homework"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:drawableLeft="@drawable/icon_set_homework"
+                    android:drawablePadding="3dp"
+                    android:includeFontPadding="false"
+                    android:paddingEnd="11dp"
+                    android:text="@string/set_homework_str"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="invisible"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
+
                 <FrameLayout
                     android:id="@+id/view_homework_content_bg"
                     android:layout_width="match_parent"
@@ -397,14 +417,13 @@
                         android:textColor="@color/color_999999"
                         android:textSize="@dimen/sp_13" />
 
-                    <TextView
-                        android:id="@+id/tv_homework_video_content"
+                    <LinearLayout
+                        android:weightSum="3"
+                        android:layout_gravity="center_vertical"
+                        android:orientation="horizontal"
+                        android:id="@+id/ll_homework_video_content"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:includeFontPadding="false"
-                        android:textColor="@color/color_333333"
-                        android:textSize="@dimen/sp_13"
-                        android:visibility="gone"
                         tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
                 </FrameLayout>
             </androidx.constraintlayout.widget.ConstraintLayout>
@@ -440,6 +459,22 @@
                     app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework_comment"
                     app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
 
+                <TextView
+                    android:visibility="invisible"
+                    android:id="@+id/tv_homework_set_comment"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:drawableLeft="@drawable/icon_edit_appraisal"
+                    android:drawablePadding="3dp"
+                    android:includeFontPadding="false"
+                    android:paddingEnd="11dp"
+                    android:text="@string/comment_str"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
+
                 <FrameLayout
                     android:id="@+id/view_homework_comment_content_bg"
                     android:layout_width="match_parent"

+ 18 - 0
teacher/src/main/res/layout/view_homework_video_thumbnail_layout.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <com.cooleshow.base.widgets.QMUIRadiusImageView
+        android:id="@+id/iv_bg"
+        android:layout_width="match_parent"
+        android:layout_height="70dp"
+        app:qmui_corner_radius="6dp" />
+
+    <ImageView
+        android:layout_gravity="center"
+        android:src="@drawable/icon_video_play"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+</merge>

+ 5 - 0
teacher/src/main/res/values/strings.xml

@@ -8,4 +8,9 @@
     <string name="pay_count_str">%1$s人已购买</string>
     <string name="home_mine_course_str">我的课程</string>
     <string name="appraisal_str">评价</string>
+    <string name="course_not_start_str">未开始</string>
+    <string name="course_ing_str">进行中</string>
+    <string name="course_is_completed">已结束</string>
+    <string name="set_homework_str">布置作业</string>
+    <string name="comment_str">点评</string>
 </resources>