Bladeren bron

写陪练课详情
陪练课详情-评价老师
调整消息盒子界面未读消息数
布置作业

Ryan8057 3 jaren geleden
bovenliggende
commit
db77b25dc5
89 gewijzigde bestanden met toevoegingen van 4206 en 325 verwijderingen
  1. 4 0
      BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java
  2. 2 0
      BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt
  3. 43 0
      BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java
  4. 275 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/RatingBar.java
  5. 1 0
      BaseLibrary/src/main/res/layout/common_toolbar_layout.xml
  6. 24 0
      BaseLibrary/src/main/res/values/styles.xml
  7. 28 1
      student/src/main/AndroidManifest.xml
  8. 58 0
      student/src/main/java/com/cooleshow/student/adapter/PracticeVideoWorkAdapter.java
  9. 45 0
      student/src/main/java/com/cooleshow/student/api/APIService.java
  10. 2 2
      student/src/main/java/com/cooleshow/student/bean/CountOfUnreadBean.java
  11. 24 0
      student/src/main/java/com/cooleshow/student/bean/PracticeVideoWorkBean.java
  12. 51 0
      student/src/main/java/com/cooleshow/student/bean/SparringCourseCommentBean.java
  13. 63 0
      student/src/main/java/com/cooleshow/student/bean/SparringCourseHomeworkBean.java
  14. 18 0
      student/src/main/java/com/cooleshow/student/contract/EvaluateTeacherContract.java
  15. 28 0
      student/src/main/java/com/cooleshow/student/contract/PracticeCourseDetailContract.java
  16. 37 0
      student/src/main/java/com/cooleshow/student/contract/SparringCourseDetailContract.java
  17. 53 0
      student/src/main/java/com/cooleshow/student/presenter/course/EvaluateTeacherPresenter.java
  18. 118 0
      student/src/main/java/com/cooleshow/student/presenter/course/PracticeCourseDetailPresenter.java
  19. 168 0
      student/src/main/java/com/cooleshow/student/presenter/course/SparringCourseDetailPresenter.java
  20. 95 0
      student/src/main/java/com/cooleshow/student/ui/course/EvaluateTeacherActivity.java
  21. 13 0
      student/src/main/java/com/cooleshow/student/ui/course/LiveCourseFragment.java
  22. 8 1
      student/src/main/java/com/cooleshow/student/ui/course/MinePracticeCourseFragment.java
  23. 364 0
      student/src/main/java/com/cooleshow/student/ui/course/PracticeCourseDetailActivity.java
  24. 353 0
      student/src/main/java/com/cooleshow/student/ui/course/SparringCourseDetailActivity.java
  25. 14 0
      student/src/main/java/com/cooleshow/student/ui/course/VideoCourseFragment.java
  26. 9 2
      student/src/main/java/com/cooleshow/student/ui/main/CourseTableFragment.kt
  27. 1 1
      student/src/main/java/com/cooleshow/student/ui/main/HomeFragment.java
  28. 9 2
      student/src/main/java/com/cooleshow/student/ui/main/MainActivity.java
  29. 3 2
      student/src/main/java/com/cooleshow/student/ui/main/MineFragment.java
  30. 32 1
      student/src/main/java/com/cooleshow/student/ui/message/MessageBoxActivity.java
  31. 0 35
      student/src/main/java/com/cooleshow/student/ui/mine/EditAddressActivity.java
  32. 14 0
      student/src/main/java/com/cooleshow/student/ui/splash/SplashActivity.kt
  33. 1 1
      student/src/main/java/com/cooleshow/student/ui/work/HomeWorkActivity.java
  34. 118 0
      student/src/main/java/com/cooleshow/student/widgets/CourseSetCommentDialog.java
  35. 17 0
      student/src/main/java/com/cooleshow/student/widgets/DialogUtils.java
  36. 53 0
      student/src/main/java/com/cooleshow/student/widgets/HomeworkVideoThumbnailView.java
  37. BIN
      student/src/main/res/drawable-xhdpi/icon_course_detail_evaluate.png
  38. BIN
      student/src/main/res/drawable-xhdpi/icon_empty_course_table.png
  39. BIN
      student/src/main/res/drawable-xhdpi/icon_evaluate_teacher_input.png
  40. BIN
      student/src/main/res/drawable-xhdpi/icon_homework_comment.png
  41. BIN
      student/src/main/res/drawable-xhdpi/icon_homework_empty.png
  42. BIN
      student/src/main/res/drawable-xhdpi/icon_homework_video_empty.png
  43. BIN
      student/src/main/res/drawable-xhdpi/icon_video_play.png
  44. BIN
      student/src/main/res/drawable-xhdpi/icon_work_upload_tum.png
  45. BIN
      student/src/main/res/drawable-xxhdpi/icon_course_detail_evaluate.png
  46. BIN
      student/src/main/res/drawable-xxhdpi/icon_empty_course_table.png
  47. BIN
      student/src/main/res/drawable-xxhdpi/icon_evaluate_teacher_input.png
  48. BIN
      student/src/main/res/drawable-xxhdpi/icon_homework_comment.png
  49. BIN
      student/src/main/res/drawable-xxhdpi/icon_homework_empty.png
  50. BIN
      student/src/main/res/drawable-xxhdpi/icon_homework_video_empty.png
  51. BIN
      student/src/main/res/drawable-xxhdpi/icon_video_play.png
  52. BIN
      student/src/main/res/drawable-xxhdpi/icon_work_upload_tum.png
  53. 15 0
      student/src/main/res/drawable/bg_dash_border_2dc7aa_radius.xml
  54. 5 0
      student/src/main/res/drawable/shape_e5e5e5_radius.xml
  55. 132 0
      student/src/main/res/layout/activity_evaluate_teacher.xml
  56. 432 0
      student/src/main/res/layout/activity_practice_course_detail_layout.xml
  57. 532 0
      student/src/main/res/layout/activity_sparring_course_detail_layout.xml
  58. 95 0
      student/src/main/res/layout/dialog_set_course_comment_layout.xml
  59. 26 0
      student/src/main/res/layout/item_practice_video_layout.xml
  60. 31 0
      student/src/main/res/layout/item_practice_video_layout_add.xml
  61. 2 0
      student/src/main/res/layout/layout_empty_conent.xml
  62. 46 0
      student/src/main/res/layout/layout_empty_course_table.xml
  63. 18 0
      student/src/main/res/layout/view_homework_video_thumbnail_layout.xml
  64. 6 0
      student/src/main/res/values/strings.xml
  65. 6 0
      student/src/main/res/values/styles.xml
  66. 22 1
      teacher/src/main/AndroidManifest.xml
  67. 3 3
      teacher/src/main/java/com/cooleshow/teacher/adapter/MineScoreAdapter.java
  68. 8 1
      teacher/src/main/java/com/cooleshow/teacher/api/APIService.java
  69. 2 2
      teacher/src/main/java/com/cooleshow/teacher/bean/CountOfUnreadBean.java
  70. 52 0
      teacher/src/main/java/com/cooleshow/teacher/bean/HelpCenterContentBean.java
  71. 17 0
      teacher/src/main/java/com/cooleshow/teacher/constants/AssignHomeworkContract.java
  72. 2 0
      teacher/src/main/java/com/cooleshow/teacher/contract/HomeContract.java
  73. 15 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/homework/AssignHomeworkPresenter.java
  74. 33 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/main/HomePresenter.java
  75. 0 37
      teacher/src/main/java/com/cooleshow/teacher/ui/course/CreateLiveCourseInfoActivity.java
  76. 0 35
      teacher/src/main/java/com/cooleshow/teacher/ui/income/WithdrawalActivity.java
  77. 31 4
      teacher/src/main/java/com/cooleshow/teacher/ui/main/HomeFragment.kt
  78. 32 1
      teacher/src/main/java/com/cooleshow/teacher/ui/message/MessageBoxActivity.java
  79. 0 36
      teacher/src/main/java/com/cooleshow/teacher/ui/mine/BindBankCardActivity.java
  80. 0 36
      teacher/src/main/java/com/cooleshow/teacher/ui/mine/EditAddressActivity.java
  81. 0 36
      teacher/src/main/java/com/cooleshow/teacher/ui/minestyle/MineStylePageActivity.java
  82. 13 0
      teacher/src/main/java/com/cooleshow/teacher/ui/splash/SplashActivity.kt
  83. 39 0
      teacher/src/main/java/com/cooleshow/teacher/ui/work/AssignHomeworkActivity.java
  84. 339 0
      teacher/src/main/res/layout/activity_assign_homework.xml
  85. 2 0
      teacher/src/main/res/layout/empty_mine_live_course.xml
  86. 2 0
      teacher/src/main/res/layout/empty_mine_video_course.xml
  87. 83 72
      teacher/src/main/res/layout/fragment_home_layout.xml
  88. 2 0
      teacher/src/main/res/layout/layout_empty_conent.xml
  89. 17 13
      teacher/src/main/res/layout/layout_mark_item.xml

+ 4 - 0
BaseLibrary/src/main/java/com/cooleshow/base/common/WebConstants.java

@@ -84,5 +84,9 @@ public abstract class WebConstants {
     public static final String TEACHER_MY_FANS = getBaseUrlH5() + "/#/myFans";
     //商城
     public static final String TEACHER_SHOPMALL = getBaseUrlH5() + "/#/shopMall";
+    //单个公告点击
+    public static final String HELP_CENTER_DETAIL = getBaseUrlH5() + "/#/helpCenterDetail?id=";
+    //公告列表
+    public static final String HELP_CENTER_CATALOGTYPE_2 = getBaseUrlH5() + "/#/helpCenter?catalogType=2";
 
 }

+ 2 - 0
BaseLibrary/src/main/java/com/cooleshow/base/router/RouterPath.kt

@@ -54,6 +54,7 @@ object RouterPath {
             const val TEACHER_MINE_CREATE_LIVE_COURSE_INFO = "/teacher/ui/course/CreateLiveCourseInfoActivity"
             const val TEACHER_MINE_CREATE_LIVE_COURSE_ARRANGEMENT = "/teacher/ui/course/CreateLiveCourseArrangementActivity"
             const val TEACHER_MINE_VIDEO_COURSE = "/teacher/ui/course/MineVideoCourseActivity"
+            const val SPARRING_EVALUATE_TEACHER = "/teacher/ui/course/EvaluateTeacherActivity"
 
         }
     }
@@ -82,6 +83,7 @@ object RouterPath {
     class WorkCenter {
         companion object {
             const val TEACHER_WORK_HOMEWORK = "/teacher/ui/work/HomeWorkActivity"
+            const val TEACHER_WORK_ASSIGN_HOMEWORK = "/teacher/ui/work/AssignHomeworkActivity"
         }
     }
 

+ 43 - 0
BaseLibrary/src/main/java/com/cooleshow/base/ui/activity/BaseMVPActivity.java

@@ -1,5 +1,11 @@
 package com.cooleshow.base.ui.activity;
 
+import android.content.Context;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+
 import com.cooleshow.base.presenter.BasePresenter;
 
 import androidx.viewbinding.ViewBinding;
@@ -29,4 +35,41 @@ public abstract class BaseMVPActivity<V extends ViewBinding, P extends BasePrese
         }
     }
 
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+
+            View v = getCurrentFocus();
+            if (isShouldHideInput(v, ev)) {
+                //软键盘
+                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+                if (imm != null) {
+                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
+                }
+            }
+            return super.dispatchTouchEvent(ev);
+        }
+        // 必不可少,否则所有的组件都不会有TouchEvent了
+        if (getWindow().superDispatchTouchEvent(ev)) {
+            return true;
+        }
+        return onTouchEvent(ev);
+    }
+
+    public boolean isShouldHideInput(View v, MotionEvent event) {
+        if (v != null && (v instanceof EditText)) {
+            int[] leftTop = {0, 0};
+            //获取输入框当前的location位置
+            v.getLocationInWindow(leftTop);
+            int left = leftTop[0];
+            int top = leftTop[1];
+            int bottom = top + v.getHeight();
+            int right = left + v.getWidth();
+            return !(event.getX() > left && event.getX() < right
+                    && event.getY() > top && event.getY() < bottom);
+        }
+        return false;
+    }
+
+
 }

+ 275 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/RatingBar.java

@@ -0,0 +1,275 @@
+package com.cooleshow.base.widgets;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import com.cooleshow.base.R;
+
+import java.math.BigDecimal;
+
+/**
+ * 创建日期:2022/5/31 14:03
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class RatingBar extends LinearLayout {
+    /**
+     * 是否可点击
+     */
+    private boolean mClickable;
+    /**
+     * 星星总数
+     */
+    private int starCount;
+    /**
+     * 星星的点击事件
+     */
+    private OnRatingChangeListener onRatingChangeListener;
+    /**
+     * 每个星星的大小
+     */
+    private float starImageSize;
+    /**
+     * 每个星星的间距
+     */
+    private float starPadding;
+    /**
+     * 星星的显示数量,支持小数点
+     */
+    private float starStep;
+    /**
+     * 空白的默认星星图片
+     */
+    private Drawable starEmptyDrawable;
+    /**
+     * 选中后的星星填充图片
+     */
+    private Drawable starFillDrawable;
+    /**
+     * 半颗星的图片
+     */
+    private Drawable starHalfDrawable;
+    /**
+     * 每次点击星星所增加的量是整个还是半个
+     */
+    private StepSize stepSize;
+
+    /**
+     * 设置半星的图片资源文件
+     *
+     * @param starHalfDrawable
+     */
+    public void setStarHalfDrawable(Drawable starHalfDrawable) {
+        this.starHalfDrawable = starHalfDrawable;
+    }
+
+    /**
+     * 设置满星的图片资源文件
+     *
+     * @param starFillDrawable
+     */
+    public void setStarFillDrawable(Drawable starFillDrawable) {
+        this.starFillDrawable = starFillDrawable;
+    }
+
+    /**
+     * 设置空白和默认的图片资源文件
+     *
+     * @param starEmptyDrawable
+     */
+    public void setStarEmptyDrawable(Drawable starEmptyDrawable) {
+        this.starEmptyDrawable = starEmptyDrawable;
+    }
+
+    /**
+     * 设置星星是否可以点击操作
+     *
+     * @param clickable
+     */
+    public void setClickable(boolean clickable) {
+        this.mClickable = clickable;
+    }
+
+    /**
+     * 设置星星点击事件
+     *
+     * @param onRatingChangeListener
+     */
+    public void setOnRatingChangeListener(OnRatingChangeListener onRatingChangeListener) {
+        this.onRatingChangeListener = onRatingChangeListener;
+    }
+
+    /**
+     * 设置星星的大小
+     *
+     * @param starImageSize
+     */
+    public void setStarImageSize(float starImageSize) {
+        this.starImageSize = starImageSize;
+    }
+
+    public void setStepSize(StepSize stepSize) {
+        this.stepSize = stepSize;
+    }
+
+    /**
+     * 构造函数
+     * 获取xml中设置的资源文件
+     *
+     * @param context
+     * @param attrs
+     */
+    public RatingBar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setOrientation(LinearLayout.HORIZONTAL);
+        TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.RatingBar);
+        starImageSize = mTypedArray.getDimension(R.styleable.RatingBar_starImageSize, 20);
+        starPadding = mTypedArray.getDimension(R.styleable.RatingBar_starPadding, 10);
+        starStep = mTypedArray.getFloat(R.styleable.RatingBar_starStep, 1.0f);
+        stepSize = StepSize.fromStep(mTypedArray.getInt(R.styleable.RatingBar_stepSize, 1));
+        starCount = mTypedArray.getInteger(R.styleable.RatingBar_starCount, 5);
+        starEmptyDrawable = mTypedArray.getDrawable(R.styleable.RatingBar_starEmpty);
+        starFillDrawable = mTypedArray.getDrawable(R.styleable.RatingBar_starFill);
+        starHalfDrawable = mTypedArray.getDrawable(R.styleable.RatingBar_starHalf);
+        mClickable = mTypedArray.getBoolean(R.styleable.RatingBar_clickable, true);
+        mTypedArray.recycle();
+        for (int i = 0; i < starCount; ++i) {
+            final ImageView imageView = getStarImageView();
+            imageView.setImageDrawable(starEmptyDrawable);
+            imageView.setOnClickListener(
+                    new OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            if (mClickable) {
+                                //浮点数的整数部分
+                                int fint = (int) starStep;
+                                BigDecimal b1 = new BigDecimal(Float.toString(starStep));
+                                BigDecimal b2 = new BigDecimal(Integer.toString(fint));
+                                //浮点数的小数部分
+                                float fPoint = b1.subtract(b2).floatValue();
+                                if (fPoint == 0) {
+                                    fint -= 1;
+                                }
+
+                                if (indexOfChild(v) > fint) {
+                                    setStar(indexOfChild(v) + 1);
+                                } else if (indexOfChild(v) == fint) {
+                                    if (stepSize == StepSize.Full) {//如果是满星 就不考虑半颗星了
+                                        return;
+                                    }
+                                    //点击之后默认每次先增加一颗星,再次点击变为半颗星
+                                    if (imageView.getDrawable().getCurrent().getConstantState().equals(starHalfDrawable.getConstantState())) {
+                                        setStar(indexOfChild(v) + 1);
+                                    } else {
+                                        setStar(indexOfChild(v) + 0.5f);
+                                    }
+                                } else {
+                                    setStar(indexOfChild(v) + 1f);
+                                }
+
+                            }
+
+                        }
+                    }
+            );
+            addView(imageView);
+        }
+        setStar(starStep);
+    }
+
+    /**
+     * 设置每颗星星的参数
+     *
+     * @return
+     */
+    private ImageView getStarImageView() {
+        ImageView imageView = new ImageView(getContext());
+
+        LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(
+                Math.round(starImageSize), Math.round(starImageSize));//设置每颗星星在线性布局的大小
+        layout.setMargins(0, 0, Math.round(starPadding), 0);//设置每颗星星在线性布局的间距
+        imageView.setLayoutParams(layout);
+        imageView.setAdjustViewBounds(true);
+        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+        imageView.setImageDrawable(starEmptyDrawable);
+        imageView.setMinimumWidth(10);
+        imageView.setMaxHeight(10);
+        return imageView;
+
+    }
+
+
+    /**
+     * 设置星星的个数
+     *
+     * @param rating
+     */
+
+    public void setStar(float rating) {
+
+        if (onRatingChangeListener != null) {
+            onRatingChangeListener.onRatingChange(rating);
+        }
+        this.starStep = rating;
+        //浮点数的整数部分
+        int fint = (int) rating;
+        BigDecimal b1 = new BigDecimal(Float.toString(rating));
+        BigDecimal b2 = new BigDecimal(Integer.toString(fint));
+        //浮点数的小数部分
+        float fPoint = b1.subtract(b2).floatValue();
+
+        //设置选中的星星
+        for (int i = 0; i < fint; ++i) {
+            ((ImageView) getChildAt(i)).setImageDrawable(starFillDrawable);
+        }
+        //设置没有选中的星星
+        for (int i = fint; i < starCount; i++) {
+            ((ImageView) getChildAt(i)).setImageDrawable(starEmptyDrawable);
+        }
+        //小数点默认增加半颗星
+        if (fPoint > 0) {
+            ((ImageView) getChildAt(fint)).setImageDrawable(starHalfDrawable);
+        }
+    }
+
+    /**
+     * 操作星星的点击事件
+     */
+    public interface OnRatingChangeListener {
+        /**
+         * 选中的星星的个数
+         *
+         * @param ratingCount
+         */
+        void onRatingChange(float ratingCount);
+
+    }
+
+    /**
+     * 星星每次增加的方式整星还是半星,枚举类型
+     * 类似于View.GONE
+     */
+    public enum StepSize {
+        Half(0), Full(1);
+        int step;
+
+        StepSize(int step) {
+            this.step = step;
+        }
+
+        public static StepSize fromStep(int step) {
+            for (StepSize f : values()) {
+                if (f.step == step) {
+                    return f;
+                }
+            }
+            throw new IllegalArgumentException();
+        }
+    }
+}

+ 1 - 0
BaseLibrary/src/main/res/layout/common_toolbar_layout.xml

@@ -8,6 +8,7 @@
     android:background="@color/transparent"
     android:fitsSystemWindows="true"
     android:paddingTop="25dp"
+    android:paddingBottom="@dimen/dp_9"
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
     android:visibility="visible"
     app:popupTheme="@style/AppBarTheme">

+ 24 - 0
BaseLibrary/src/main/res/values/styles.xml

@@ -338,4 +338,28 @@
         <item name="android:textColor">@color/color_1a1a1a</item>
         <item name="android:textSize">@dimen/sp_15</item>
     </style>
+
+    <declare-styleable name="RatingBar">
+        <!--尺寸值-->
+        <attr name="starImageSize" format="dimension" />
+        <!--星星间距-->
+        <attr name="starPadding" format="dimension" />
+        <!--星星总数-->
+        <attr name="starCount" format="integer" />
+        <!--空白的星星资源文件值-->
+        <attr name="starEmpty" format="reference" />
+        <!--满星资源文件值-->
+        <attr name="starFill" format="reference" />
+        <!--半星资源文件值-->
+        <attr name="starHalf" format="reference" />
+        <!--是否可点击boolean值-->
+        <attr name="clickable" format="boolean" />
+        <!--当前进度float值-->
+        <attr name="starStep" format="float" />
+        <!--每次进度方式的值,整星还是半星-->
+        <attr name="stepSize">
+            <enum name="Half" value="0" />
+            <enum name="Full" value="1" />
+        </attr>
+    </declare-styleable>
 </resources>

+ 28 - 1
student/src/main/AndroidManifest.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     package="com.cooleshow.student">
 
     <application
@@ -20,6 +21,19 @@
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
+
+
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+
+                <data
+                    android:host="html:8888/SplashActivity"
+                    android:scheme="ColexiuStudent"
+                    tools:ignore="AppLinkUrlError" />
             </intent-filter>
         </activity>
         <activity
@@ -29,7 +43,7 @@
 
         <activity
             android:name=".ui.main.MainActivity"
-            android:exported="false"/>
+            android:exported="false" />
         <activity
             android:name=".ui.web.WebActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
@@ -102,6 +116,19 @@
             android:name=".ui.message.MessageBoxActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.course.SparringCourseDetailActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.course.PracticeCourseDetailActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+        <activity
+            android:name=".ui.course.EvaluateTeacherActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+
     </application>
 
 </manifest>

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

@@ -0,0 +1,58 @@
+package com.cooleshow.student.adapter;
+
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+
+import com.chad.library.adapter.base.BaseMultiItemQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.student.R;
+import com.cooleshow.student.bean.PracticeVideoWorkBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/31 14:39
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class PracticeVideoWorkAdapter extends BaseMultiItemQuickAdapter<PracticeVideoWorkBean, BaseViewHolder> {
+    public PracticeVideoWorkAdapter(List<PracticeVideoWorkBean> data) {
+        super(data);
+        addItemType(0, R.layout.item_practice_video_layout);
+        addItemType(1, R.layout.item_practice_video_layout_add);
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, PracticeVideoWorkBean styleVideoBean) {
+        switch (styleVideoBean.getItemType()) {
+            case 0:
+                //加载视频缩略图
+                ImageView iv_video_bg = holder.getView(R.id.iv_video_bg);
+                GlideUtils.INSTANCE.loadVideoThumbnail(getContext(), styleVideoBean.videoUrl, iv_video_bg);
+                break;
+            case 1:
+                ImageView 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();
+    }
+}

+ 45 - 0
student/src/main/java/com/cooleshow/student/api/APIService.java

@@ -19,6 +19,8 @@ import com.cooleshow.student.bean.LiveCourseListBean;
 import com.cooleshow.student.bean.PayTestBean;
 import com.cooleshow.student.bean.PracticeCourseListBean;
 import com.cooleshow.student.bean.QuerySubjectBean;
+import com.cooleshow.student.bean.SparringCourseCommentBean;
+import com.cooleshow.student.bean.SparringCourseHomeworkBean;
 import com.cooleshow.student.bean.StudentUserInfo;
 import com.cooleshow.student.bean.SystemMessageBean;
 import com.cooleshow.student.bean.VideoCourseListBean;
@@ -290,4 +292,47 @@ public interface APIService {
     @POST(STUDENT_GROUP + "courseSchedule/queryCourseTeacher")
     Observable<BaseResponse<CourseTableDataBean>> getCourseSchedulesWithDate(@Body RequestBody body);
 
+    /**
+     * 查询个人信息
+     *
+     * @param
+     * @return
+     */
+    @GET(STUDENT_GROUP + "homework/detail/{courseId}")
+    Observable<BaseResponse<SparringCourseHomeworkBean>> getSparringCourseHomework(@Path("courseId") String courseId);
+
+    /**
+     * 查询课程评价信息
+     *
+     * @param
+     * @return
+     */
+    @POST(STUDENT_GROUP + "courseSchedule/selectReplied")
+    Observable<BaseResponse<SparringCourseCommentBean>> getSparringCourseComment(@Body RequestBody body);
+
+    /**
+     * 提交陪练课评价
+     *
+     * @param
+     * @return
+     */
+    @POST(STUDENT_GROUP + "courseSchedule/replied")
+    Observable<BaseResponse<Object>> submitSparringCourseComment(@Body RequestBody body);
+
+    /**
+     * 陪练课-作业提交
+     * @param body
+     * @return
+     */
+    @POST(STUDENT_GROUP + "homework/submit")
+    Observable<BaseResponse<Object>> submitSparringCourseHomework(@Body RequestBody body);
+
+    /**
+     * 提交陪练课老师作业点评
+     *
+     * @param
+     * @return
+     */
+    @POST(TEACHER_GROUP + "homework/review")
+    Observable<BaseResponse<Object>> submitSparringCourseHomeworkComment(@Body RequestBody body);
 }

+ 2 - 2
student/src/main/java/com/cooleshow/student/bean/CountOfUnreadBean.java

@@ -7,6 +7,6 @@ package com.cooleshow.student.bean;
  * 类说明:
  */
 public class CountOfUnreadBean {
-    public Object key;
-    public Object value;
+    public String key;
+    public int value;
 }

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

@@ -0,0 +1,24 @@
+package com.cooleshow.student.bean;
+
+import com.chad.library.adapter.base.entity.MultiItemEntity;
+
+/**
+ * 创建日期:2022/5/31 14:40
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class PracticeVideoWorkBean implements MultiItemEntity {
+    public PracticeVideoWorkBean(String videoUrl, int type) {
+        this.videoUrl = videoUrl;
+        this.type = type;
+    }
+
+    public String videoUrl;
+    //默认为0 为视频展示 为1时添加视频
+    public int type;
+    @Override
+    public int getItemType() {
+        return type;
+    }
+}

+ 51 - 0
student/src/main/java/com/cooleshow/student/bean/SparringCourseCommentBean.java

@@ -0,0 +1,51 @@
+package com.cooleshow.student.bean;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+public class SparringCourseCommentBean {
+
+    /**
+     * status : COMPLETE
+     * userName : cy
+     * startTime : 2022-03-26 11:24:53
+     * endTime : 2022-03-26 12:24:57
+     * avatar : https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png
+     * subjectId : 1
+     * subjectName : 西洋管乐
+     * classDate : 2022-03-26
+     * updateTime : 2022-04-20 16:49:58
+     * studentId : 44
+     * courseGroupId : 1
+     * courseGroupType : PRACTICE
+     * courseScheduleId : 1
+     * score : 4
+     * teacherReplied : Gaggagagagagagagagagagagagagagagagagagagaga
+     * createTime : 2022-04-14 11:40:25
+     * studentReplied : Gagagagagagagag
+     * id : 19
+     */
+    /*
+    	"courseGroupId": "",
+		"courseGroupType": "",
+		"courseScheduleId": 0,
+		"createTime": "",
+		"id": 0,
+		"score": 0,
+		"studentId": 0,
+		"studentReplied": "",
+		"teacherReplied": "",
+		"updateTime": ""
+     */
+    public String courseGroupId;
+    public String courseGroupType;
+    public int courseScheduleId;
+    public String createTime;
+    public int id;
+    public int score;
+    public int studentId;
+    public String studentReplied;
+    public String teacherReplied;
+    public String updateTime;
+
+}

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

@@ -0,0 +1,63 @@
+package com.cooleshow.student.bean;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+public class SparringCourseHomeworkBean {
+
+    /**
+     "attachments": "",
+     "classDate": "",
+     "content": "",
+     "courseGroupId": 0,
+     "courseScheduleId": 0,
+     "courseStatus": "",
+     "courseType": "",
+     "decorateHomework": "",
+     "decorateTime": "",
+     "endTime": "",
+     "id": 0,
+     "reviewHomework": "",
+     "startTime": "",
+     "studentAttachments": "",
+     "studentAvatar": "",
+     "studentHomeworkId": 0,
+     "studentId": 0,
+     "studentName": "",
+     "subjectName": "",
+     "submitHomework": "",
+     "submitTime": "",
+     "teacherAvatar": "",
+     "teacherId": 0,
+     "teacherName": "",
+     "teacherReplied": "",
+     "title": ""
+     */
+    public String attachments;
+    public String classDate;
+    public String content;
+    public int courseGroupId;
+    public int courseScheduleId;
+    public String courseStatus;
+    public String courseType;
+    public int decorateHomework;
+    public Object decorateTime;
+    public String endTime;
+    public int id;
+    public int reviewHomework;
+    public String startTime;
+    public String studentAttachments;
+    public String studentAvatar;
+    public int studentHomeworkId;
+    public int studentId;
+    public String studentName;
+    public String subjectName;
+    public int submitHomework;
+    public Object submitTime;
+    public String teacherAvatar;
+    public int teacherId;
+    public String teacherName;
+    public String teacherReplied;
+    public String title;
+
+}

+ 18 - 0
student/src/main/java/com/cooleshow/student/contract/EvaluateTeacherContract.java

@@ -0,0 +1,18 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/31 11:26
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface EvaluateTeacherContract {
+    interface EvaluateTeacherView extends BaseView {
+        void submitSparringCourseTeacherCommentSuccess();
+    }
+
+    interface Presenter {
+    }
+}

+ 28 - 0
student/src/main/java/com/cooleshow/student/contract/PracticeCourseDetailContract.java

@@ -0,0 +1,28 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.student.bean.SparringCourseCommentBean;
+import com.cooleshow.student.bean.SparringCourseHomeworkBean;
+
+/**
+ * 创建日期:2022/5/31 9:53
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface PracticeCourseDetailContract {
+    interface PracticeCourseDetailView extends BaseView {
+        void getSparringCourseHomeworkSuccess(SparringCourseHomeworkBean homeworkBean);
+
+        void getSparringCourseCommentSuccess(SparringCourseCommentBean data);
+
+        void upLoadVideoSuccess(String url);
+
+        void submitSparringCourseHomeworkSuccess();
+
+    }
+
+    interface Presenter {
+
+    }
+}

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

@@ -0,0 +1,37 @@
+package com.cooleshow.student.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.student.bean.SparringCourseCommentBean;
+import com.cooleshow.student.bean.SparringCourseHomeworkBean;
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+public interface SparringCourseDetailContract {
+
+    interface SparringCourseDetailView extends BaseView {
+        void getSparringCourseHomeworkSuccess(SparringCourseHomeworkBean homeworkBean);
+
+        void getSparringCourseHomeworkError();
+
+        void getSparringCourseCommentSuccess(SparringCourseCommentBean commentBean);
+
+        void getSparringCourseCommentError();
+
+        void submitSparringCourseTeacherCommentSuccess();
+        void submitSparringCourseHomeworkSuccess();
+        void submitSparringCourseHomeworkCommentSuccess();
+    }
+
+    interface Presenter {
+        void getSparringCourseHomework(String courseId);
+
+        void getSparringCourseComment(String courseScheduleId, String courseGroupId, String studentId);
+
+        void submitSparringCourseComment(String commentContent, String courseScheduleId, String courseGroupId, String studentId);
+
+        void submitSparringCourseHomework(String commentContent, String courseScheduleId);
+
+        void submitSparringCourseHomeworkComment(String commentContent, String courseScheduleId);
+    }
+}

+ 53 - 0
student/src/main/java/com/cooleshow/student/presenter/course/EvaluateTeacherPresenter.java

@@ -0,0 +1,53 @@
+package com.cooleshow.student.presenter.course;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.student.api.APIService;
+import com.cooleshow.student.contract.EvaluateTeacherContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * 创建日期:2022/5/31 11:26
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class EvaluateTeacherPresenter extends BasePresenter<EvaluateTeacherContract.EvaluateTeacherView> implements EvaluateTeacherContract.Presenter {
+    /**
+     * 提交陪练课老师评价
+     *
+     * @param commentContent
+     * @param courseScheduleId
+     * @param courseGroupId
+     */
+    public void submitSparringCourseComment(String commentContent, String courseScheduleId, String courseGroupId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("studentReplied", commentContent);
+            jsonObject.putOpt("courseGroupId", courseGroupId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).submitSparringCourseComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object o) {
+                if (getView() != null) {
+                    getView().submitSparringCourseTeacherCommentSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
+}

+ 118 - 0
student/src/main/java/com/cooleshow/student/presenter/course/PracticeCourseDetailPresenter.java

@@ -0,0 +1,118 @@
+package com.cooleshow.student.presenter.course;
+
+import android.app.Activity;
+
+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;
+import com.cooleshow.student.contract.PracticeCourseDetailContract;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.File;
+
+/**
+ * 创建日期:2022/5/31 9:52
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class PracticeCourseDetailPresenter extends BasePresenter<PracticeCourseDetailContract.PracticeCourseDetailView> implements PracticeCourseDetailContract.Presenter {
+    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);
+
+            }
+        });
+    }
+
+    public void getSparringCourseComment(String courseScheduleId, String courseGroupId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("courseGroupId", courseGroupId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).getSparringCourseComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<SparringCourseCommentBean>(getView()) {
+            @Override
+            protected void onSuccess(SparringCourseCommentBean data) {
+                if (getView() != null) {
+                    getView().getSparringCourseCommentSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+
+            }
+        });
+    }
+
+    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() {
+
+            }
+        });
+    }
+
+    public void submitSparringCourseHomework(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().submitSparringCourseHomeworkSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
+}

+ 168 - 0
student/src/main/java/com/cooleshow/student/presenter/course/SparringCourseDetailPresenter.java

@@ -0,0 +1,168 @@
+package com.cooleshow.student.presenter.course;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.base.rx.BaseObserver;
+import com.cooleshow.base.utils.RequestBodyUtil;
+import com.cooleshow.student.api.APIService;
+import com.cooleshow.student.bean.SparringCourseCommentBean;
+import com.cooleshow.student.bean.SparringCourseHomeworkBean;
+import com.cooleshow.student.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();
+                }
+            }
+        });
+    }
+
+    @Override
+    public void getSparringCourseComment(String courseScheduleId, String courseGroupId, String studentId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("courseGroupId", courseGroupId);
+            jsonObject.putOpt("studentId", studentId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).getSparringCourseComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<SparringCourseCommentBean>(getView()) {
+            @Override
+            protected void onSuccess(SparringCourseCommentBean data) {
+                if (getView() != null) {
+                    getView().getSparringCourseCommentSuccess(data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+                    getView().getSparringCourseCommentError();
+                }
+            }
+        });
+    }
+
+    /**
+     * 提交陪练课老师评价
+     *
+     * @param commentContent
+     * @param courseScheduleId
+     * @param courseGroupId
+     * @param studentId
+     */
+    @Override
+    public void submitSparringCourseComment(String commentContent, String courseScheduleId, String courseGroupId, String studentId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("teacherReplied", commentContent);
+            jsonObject.putOpt("courseGroupId", courseGroupId);
+            jsonObject.putOpt("studentId", studentId);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).submitSparringCourseComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object o) {
+                if (getView() != null) {
+                    getView().submitSparringCourseTeacherCommentSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
+
+    @Override
+    public void submitSparringCourseHomework(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().submitSparringCourseHomeworkSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
+
+    @Override
+    public void submitSparringCourseHomeworkComment(String commentContent, String courseScheduleId) {
+        if (getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("courseScheduleId", courseScheduleId);
+            jsonObject.putOpt("review", commentContent);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+
+        addSubscribe(create(APIService.class).submitSparringCourseHomeworkComment(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<Object>(getView()) {
+            @Override
+            protected void onSuccess(Object o) {
+                if (getView() != null) {
+                    getView().submitSparringCourseHomeworkCommentSuccess();
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+        });
+    }
+}

+ 95 - 0
student/src/main/java/com/cooleshow/student/ui/course/EvaluateTeacherActivity.java

@@ -0,0 +1,95 @@
+package com.cooleshow.student.ui.course;
+
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.View;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.ToastUtils;
+import com.cooleshow.base.widgets.RatingBar;
+import com.cooleshow.student.R;
+import com.cooleshow.student.contract.EvaluateTeacherContract;
+import com.cooleshow.student.databinding.ActivityEvaluateTeacherBinding;
+import com.cooleshow.student.presenter.course.EvaluateTeacherPresenter;
+
+/**
+ * 创建日期:2022/5/31 11:20
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.CourseCenter.SPARRING_EVALUATE_TEACHER)
+public class EvaluateTeacherActivity extends BaseMVPActivity<ActivityEvaluateTeacherBinding, EvaluateTeacherPresenter> implements EvaluateTeacherContract.EvaluateTeacherView, View.OnClickListener {
+    private String mCourseId;
+    private String mCourseGroupId;
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.tv_confirm:
+                String inputContent = viewBinding.etInput.getText().toString().trim();
+                if (TextUtils.isEmpty(inputContent)) {
+                    ToastUtils.showShort("请输入您对本次课程老师的评价");
+                    break;
+                }
+                presenter.submitSparringCourseComment(inputContent,mCourseId,mCourseGroupId);
+                break;
+        }
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "评价老师");
+        mCourseId = getIntent().getStringExtra("course_id");
+        mCourseGroupId = getIntent().getStringExtra("course_group_id");
+        if (TextUtils.isEmpty(mCourseId)
+                || TextUtils.isEmpty(mCourseGroupId)) {
+            finish();
+            return;
+        }
+
+
+        viewBinding.tvConfirm.setOnClickListener(this);
+        viewBinding.ratingBar.setOnRatingChangeListener(new RatingBar.OnRatingChangeListener() {
+            @Override
+            public void onRatingChange(float ratingCount) {
+
+            }
+        });
+        viewBinding.etInput.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+                viewBinding.tvNumber.setText(charSequence.toString().length() + "/200");
+            }
+
+            @Override
+            public void afterTextChanged(Editable editable) {
+
+            }
+        });
+    }
+
+    @Override
+    protected ActivityEvaluateTeacherBinding getLayoutView() {
+        return ActivityEvaluateTeacherBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected EvaluateTeacherPresenter createPresenter() {
+        return new EvaluateTeacherPresenter();
+    }
+
+    @Override
+    public void submitSparringCourseTeacherCommentSuccess() {
+        finish();
+    }
+}

+ 13 - 0
student/src/main/java/com/cooleshow/student/ui/course/LiveCourseFragment.java

@@ -12,6 +12,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.OptionsPickerBuilder;
 import com.bigkoo.pickerview.builder.TimePickerBuilder;
 import com.bigkoo.pickerview.listener.CustomListener;
@@ -21,7 +22,9 @@ 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.cooleshow.base.common.WebConstants;
 import com.cooleshow.base.constanst.Constants;
+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;
@@ -138,6 +141,16 @@ public class LiveCourseFragment extends BaseMVPFragment<FragmentLiveCourseLayout
         buildDefaultCourseStatusFilterList();
         reBuildFilter(null, CourseConstants.COURSE_FILTER_ALL);
         presenter.querySubjectItem();
+        mAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                LiveCourseListBean.RowsBean item = (LiveCourseListBean.RowsBean) adapter.getItem(position);
+                ARouter.getInstance()
+                        .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                        .withString(WebConstants.WEB_URL, WebConstants.TEACHER_LIVE_DETAIL + "?groupId=" + item.courseGroupId)
+                        .navigation();
+            }
+        });
     }
 
     private void queryCourse(boolean isShowLoading) {

+ 8 - 1
student/src/main/java/com/cooleshow/student/ui/course/MinePracticeCourseFragment.java

@@ -13,6 +13,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.OptionsPickerBuilder;
 import com.bigkoo.pickerview.builder.TimePickerBuilder;
 import com.bigkoo.pickerview.listener.CustomListener;
@@ -23,6 +24,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.LogUtils;
 import com.cooleshow.base.utils.PopupUtil;
@@ -159,7 +161,12 @@ public class MinePracticeCourseFragment extends BaseMVPFragment<FragmentPractice
                 if (position < mAdapter.getData().size()) {
                     PracticeCourseListBean.RowsBean rowsBean = mAdapter.getData().get(position);
                     if (rowsBean != null) {
-
+                        ARouter.getInstance()
+                                .build(RouterPath.CourseCenter.SPARRING_COURSE_DETAIL)
+                                .withString(SparringCourseDetailActivity.COURSE_ID, rowsBean.courseId)
+                                .withString(SparringCourseDetailActivity.COURSE_GROUP_ID, rowsBean.courseGoupId)
+                                .withString(SparringCourseDetailActivity.STUDENT_ID, rowsBean.userId)
+                                .navigation();
                     }
                 }
             }

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

@@ -0,0 +1,364 @@
+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.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.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.tbruyelle.rxpermissions3.RxPermissions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/31 9:40
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.CourseCenter.SPARRING_COURSE_DETAIL)
+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 = "";
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+            case R.id.tv_do:
+                switch (courseStatus) {
+                    case CourseConstants.COURSE_STATUS_NOT_START:
+                        //课程未开始
+                        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:
+                //评价老师
+                ARouter.getInstance()
+                        .build(RouterPath.CourseCenter.SPARRING_EVALUATE_TEACHER)
+                        .withString("course_id", mCourseId)
+                        .withString("course_group_id", mCourseGroupId)
+                        .navigation();
+                break;
+        }
+    }
+
+    private RecyclerView rvVideo;
+    private PracticeVideoWorkAdapter practiceVideoWorkAdapter;
+
+    @Override
+    protected void initView() {
+        mCourseId = getIntent().getStringExtra(COURSE_ID);
+        mCourseGroupId = getIntent().getStringExtra(COURSE_GROUP_ID);
+        viewBinding.tvDo.setOnClickListener(this);
+        viewBinding.tvEvaluate.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
+    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) {
+        //时间
+        viewBinding.tvCourseTime.setText(infoBean.classDate);
+        //老师头像
+        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:
+                //课程已结束
+                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();
+                }
+
+                break;
+        }
+    }
+
+    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);
+
+    }
+
+    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();
+    }
+
+
+}

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

@@ -0,0 +1,353 @@
+package com.cooleshow.student.ui.course;
+
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+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.student.R;
+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.widgets.CourseSetCommentDialog;
+import com.cooleshow.student.widgets.HomeworkVideoThumbnailView;
+import com.cooleshow.usercenter.helper.UserHelper;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+
+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";
+    public static final String STUDENT_ID = "studentId";
+    private String mCourseId;
+    private String mCourseGroupId;
+    private String studentId;
+    private CourseSetCommentDialog mSetCommentDialog;
+
+    @NonNull
+    @Override
+    protected ActivitySparringCourseDetailLayoutBinding getLayoutView() {
+        return ActivitySparringCourseDetailLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected void initView() {
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "课程详情");
+        mCourseId = getIntent().getStringExtra(COURSE_ID);
+        mCourseGroupId = getIntent().getStringExtra(COURSE_GROUP_ID);
+        studentId = getIntent().getStringExtra(STUDENT_ID);
+        if (TextUtils.isEmpty(mCourseId)
+                || TextUtils.isEmpty(mCourseGroupId)
+                || TextUtils.isEmpty(studentId)) {
+            finish();
+            return;
+        }
+        viewBinding.tvSetHomework.setOnClickListener(this);
+        viewBinding.tvHomeworkSetComment.setOnClickListener(this);
+        viewBinding.tvSetTeacherComment.setOnClickListener(this);
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        refresh();
+    }
+
+    private void refresh() {
+        if (presenter != null) {
+            presenter.getSparringCourseHomework(mCourseId);
+            presenter.getSparringCourseComment(mCourseId, mCourseGroupId, studentId);
+        }
+    }
+
+    @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.teacherName);
+        //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 getSparringCourseCommentSuccess(SparringCourseCommentBean commentBean) {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        if (commentBean != null && !TextUtils.isEmpty(commentBean.teacherReplied)) {
+            //老师已评价 tv_set_teacher_comment
+            viewBinding.tvSetTeacherComment.setVisibility(View.GONE);
+            viewBinding.tvTeacherAppraisalEmptyText.setVisibility(View.GONE);
+            viewBinding.tvTeacherAppraisalContent.setVisibility(View.VISIBLE);
+            viewBinding.tvTeacherAppraisalContent.setText(commentBean.teacherReplied);
+        } else {
+            //老师未评价
+            viewBinding.tvSetTeacherComment.setVisibility(View.VISIBLE);
+            viewBinding.tvTeacherAppraisalEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvTeacherAppraisalContent.setVisibility(View.GONE);
+        }
+
+        if (commentBean != null && !TextUtils.isEmpty(commentBean.studentReplied)) {
+            //学生已评价 tv_stu_comment_content
+            //评分星级
+            viewBinding.ratingBarForStudent.setVisibility(View.VISIBLE);
+            viewBinding.ratingBarForStudent.setRating(commentBean.score);
+
+            viewBinding.tvStuCommentEmptyText.setVisibility(View.GONE);
+            viewBinding.tvStuCommentContent.setVisibility(View.VISIBLE);
+            viewBinding.tvStuCommentContent.setText(commentBean.studentReplied);
+        } else {
+            //学员未评价
+            viewBinding.ratingBarForStudent.setVisibility(View.GONE);
+            viewBinding.tvStuCommentEmptyText.setVisibility(View.VISIBLE);
+            viewBinding.tvStuCommentContent.setVisibility(View.GONE);
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == R.id.tv_set_homework) {
+            //布置作业
+            showSetCommentDialog(CourseSetCommentDialog.TYPE_SET_HOMEWORK);
+            return;
+        }
+        if (v.getId() == R.id.tv_homework_set_comment) {
+            //点评作业
+            showSetCommentDialog(CourseSetCommentDialog.TYPE_SET_HOMEWORK_COMMENT);
+            return;
+        }
+
+        if (v.getId() == R.id.tv_set_teacher_comment) {
+            //提交老师评价
+            showSetCommentDialog(CourseSetCommentDialog.TYPE_SET_TEACHER_COMMENT);
+            return;
+        }
+    }
+
+    private void showSetCommentDialog(int typeSetTeacherComment) {
+        if (mSetCommentDialog == null) {
+            mSetCommentDialog = new CourseSetCommentDialog(this);
+            mSetCommentDialog.setOnSubmitClickListener(new CourseSetCommentDialog.OnSubmitClickListener() {
+                @Override
+                public void onSubmit(String content,int type) {
+                    //提交
+                    if (type == CourseSetCommentDialog.TYPE_SET_TEACHER_COMMENT) {
+                        //提交老师点评
+                        presenter.submitSparringCourseComment(content,mCourseId,mCourseGroupId,studentId);
+                    }
+                    if (type == CourseSetCommentDialog.TYPE_SET_HOMEWORK) {
+                        //提交布置作业
+                        presenter.submitSparringCourseHomework(content,mCourseId);
+                    }
+                    if (type == CourseSetCommentDialog.TYPE_SET_HOMEWORK_COMMENT) {
+                        //提交作业点评
+                        presenter.submitSparringCourseHomeworkComment(content,mCourseId);
+                    }
+                }
+            });
+        }
+        if (!mSetCommentDialog.isShowing()) {
+            mSetCommentDialog.show();
+        }
+        mSetCommentDialog.showMethod(typeSetTeacherComment);
+    }
+
+    @Override
+    public void getSparringCourseCommentError() {
+        //获取课程详情评价信息失败
+    }
+
+    /**
+     * 提交老师评价成功
+     */
+    @Override
+    public void submitSparringCourseTeacherCommentSuccess() {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        refresh();
+    }
+
+    /**
+     * 提交布置作业成功
+     */
+    @Override
+    public void submitSparringCourseHomeworkSuccess() {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        refresh();
+    }
+
+    /**
+     * 提交作业评价成功
+     */
+    @Override
+    public void submitSparringCourseHomeworkCommentSuccess() {
+        if (isFinishing() || isDestroyed()) {
+            return;
+        }
+        refresh();
+    }
+
+
+    @Override
+    public void getSparringCourseHomeworkError() {
+        //获取课程详情作业信息失败
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        if (mSetCommentDialog != null) {
+            mSetCommentDialog.unbind();
+        }
+    }
+}

+ 14 - 0
student/src/main/java/com/cooleshow/student/ui/course/VideoCourseFragment.java

@@ -8,9 +8,13 @@ import android.widget.TextView;
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.GridLayoutManager;
 
+import com.alibaba.android.arouter.launcher.ARouter;
 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.common.WebConstants;
 import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.LogUtils;
 import com.cooleshow.base.utils.SizeUtils;
@@ -113,6 +117,16 @@ public class VideoCourseFragment extends BaseMVPFragment<FragmentVideoCourseLayo
         mViewBinding.recyclerView.setAdapter(mAdapter);
         buildDefaultCourseStatusFilterList();
         reBuildFilter();
+        mAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                VideoCourseListBean.RowsBean item = (VideoCourseListBean.RowsBean) adapter.getItem(position);
+                ARouter.getInstance()
+                        .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                        .withString(WebConstants.WEB_URL, WebConstants.TEACHER_VIDEO_DETAIL + "?groupId=" + item.id)
+                        .navigation();
+            }
+        });
     }
 
 

+ 9 - 2
student/src/main/java/com/cooleshow/student/ui/main/CourseTableFragment.kt

@@ -1,5 +1,6 @@
 package com.cooleshow.student.ui.main
 
+import android.view.LayoutInflater
 import android.view.MotionEvent
 import android.view.View
 import android.widget.ImageView
@@ -67,7 +68,13 @@ class CourseTableFragment :
         mViewBinding.recyclerView.layoutManager = layoutManager
         mViewBinding.recyclerView.addItemDecoration(calendarShrinkDecoration, 0)
         adapter = CourseTableListAdapter(R.layout.item_course_table_layout);
-
+        val inflater = LayoutInflater.from(context)
+        val emptyLayout: View = inflater.inflate(R.layout.layout_empty_course_table, null)
+        val tv_find_course = emptyLayout.findViewById<TextView>(R.id.tv_find_course)
+        tv_find_course.setOnClickListener(View.OnClickListener {
+            (activity as MainActivity?)!!.setPositionItem(0)
+        })
+        adapter.setEmptyView(emptyLayout)
         mViewBinding.recyclerView.adapter = adapter
         mViewBinding.recyclerView.addOnItemTouchListener(object :
             RecyclerView.SimpleOnItemTouchListener() {
@@ -212,7 +219,7 @@ class CourseTableFragment :
         } else {
             //show空视图
             adapter?.notifyDataSetChanged()
-            showEmptyView()
+//            showEmptyView()
         }
     }
 

+ 1 - 1
student/src/main/java/com/cooleshow/student/ui/main/HomeFragment.java

@@ -176,7 +176,7 @@ public class HomeFragment extends BaseMVPFragment<FragmentHomeLayoutBinding, Hom
                     public void onBindView(BannerImageHolder holder, AppHomeBean.ItemBean data, int position, int size) {
                         Glide.with(holder.imageView)
                                 .load(data.coverImage)
-//                                .thumbnail(Glide.with(holder.itemView).load(R.drawable.loading))//加载成功前显示一个loading的加载
+                                .thumbnail(Glide.with(holder.itemView).load(com.cooleshow.base.R.drawable.bg_video_placeholder))//加载成功前显示一个loading的加载
                                 //.apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))  //设置图片圆角
                                 .into(holder.imageView);
 

+ 9 - 2
student/src/main/java/com/cooleshow/student/ui/main/MainActivity.java

@@ -65,6 +65,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
         getViewBinding().viewPager.setAdapter(homePageAdapter);
         getViewBinding().viewPager.setOffscreenPageLimit(mFragments.size());
         getViewBinding().viewPager.setUserInputEnabled(false);
+        getViewBinding().navigation.setItemIconTintList(null);
         getViewBinding().navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
             @Override
             public boolean onNavigationItemSelected(@NonNull MenuItem item) {
@@ -78,7 +79,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
         int currentItem = getViewBinding().viewPager.getCurrentItem();
         if (currentItem == 3) {
             //商城
-            if (null!=shopMallFragment){
+            if (null != shopMallFragment) {
                 shopMallFragment.clickBack();
             }
         } else {
@@ -86,7 +87,12 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
         }
     }
 
-    public void clickBackPressed(){
+    public void setPositionItem(int position) {
+        getViewBinding().navigation.setSelectedItemId(getViewBinding().navigation.getMenu().getItem(position).getItemId());
+
+    }
+
+    public void clickBackPressed() {
         super.onBackPressed();
     }
 
@@ -144,6 +150,7 @@ public class MainActivity extends BaseMVPActivity<ActivityMainBinding, MainPrese
         }
         return true;
     }
+
     @Override
     protected void onResume() {
         super.onResume();

+ 3 - 2
student/src/main/java/com/cooleshow/student/ui/main/MineFragment.java

@@ -17,6 +17,7 @@ import com.cooleshow.student.bean.StudentUserInfo;
 import com.cooleshow.student.contract.MineContract;
 import com.cooleshow.student.databinding.FragmentMineLayoutBinding;
 import com.cooleshow.student.presenter.main.MinePresenter;
+import com.cooleshow.student.ui.course.SparringCourseDetailActivity;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -110,6 +111,7 @@ public class MineFragment extends BaseMVPFragment<FragmentMineLayoutBinding, Min
                 break;
             case R.id.ll_residue_class:
                 //剩余课时
+
                 break;
         }
     }
@@ -149,7 +151,6 @@ public class MineFragment extends BaseMVPFragment<FragmentMineLayoutBinding, Min
 
     @Override
     protected void initData() {
-
     }
 
     @Override
@@ -163,7 +164,7 @@ public class MineFragment extends BaseMVPFragment<FragmentMineLayoutBinding, Min
         if (null == data) {
             return;
         }
-        GlideUtils.INSTANCE.loadImage(getContext(), data.heardUrl, mViewBinding.ivAvatar,R.drawable.icon_student_default_head);
+        GlideUtils.INSTANCE.loadImage(getContext(), data.heardUrl, mViewBinding.ivAvatar, R.drawable.icon_student_default_head);
         mViewBinding.tvNickname.setText(data.username);
         mViewBinding.tvCardId.setText("学好;" + data.idCardNo);
         mViewBinding.tvValidity.setText(data.membershipDays + "");

+ 32 - 1
student/src/main/java/com/cooleshow/student/ui/message/MessageBoxActivity.java

@@ -234,6 +234,37 @@ public class MessageBoxActivity extends BaseMVPActivity<ActivityMessageBoxBindin
 
     @Override
     public void queryCountOfUnreadSuccess(List<CountOfUnreadBean> data) {
-        Log.e("asdfasdfsdsfafd", "queryCountOfUnreadSuccess: "+data.size() );
+        if (null==data||data.size()==0){
+            return;
+        }
+        int totalCount=0;
+        int courseCount=0;
+        int systemCount=0;
+        for (CountOfUnreadBean datum : data) {
+            if (datum.key.equals("COURSE")){
+                courseCount=datum.value;
+            }else if (datum.key.equals("SYSTEM")){
+                systemCount=datum.value;
+            }
+        }
+        totalCount=courseCount+systemCount;
+        if (totalCount>0){
+            viewBinding.tvAllUnread.setVisibility(View.VISIBLE);
+            viewBinding.tvAllUnread.setText(totalCount+"");
+        }else {
+            viewBinding.tvAllUnread.setVisibility(View.GONE);
+        }
+        if (courseCount>0){
+            viewBinding.tvCourseUnread.setVisibility(View.VISIBLE);
+            viewBinding.tvCourseUnread.setText(courseCount+"");
+        }else {
+            viewBinding.tvCourseUnread.setVisibility(View.GONE);
+        }
+        if (systemCount>0){
+            viewBinding.tvSystemUnread.setVisibility(View.VISIBLE);
+            viewBinding.tvSystemUnread.setText(systemCount+"");
+        }else {
+            viewBinding.tvSystemUnread.setVisibility(View.GONE);
+        }
     }
 }

+ 0 - 35
student/src/main/java/com/cooleshow/student/ui/mine/EditAddressActivity.java

@@ -355,40 +355,5 @@ public class EditAddressActivity extends BaseMVPActivity<ActivityEditAddressBind
         }
     };
 
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-
-            View v = getCurrentFocus();
-            if (isShouldHideInput(v, ev)) {
-
-                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-                if (imm != null) {
-                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
-                }
-            }
-            return super.dispatchTouchEvent(ev);
-        }
-        // 必不可少,否则所有的组件都不会有TouchEvent了
-        if (getWindow().superDispatchTouchEvent(ev)) {
-            return true;
-        }
-        return onTouchEvent(ev);
-    }
-
-    public boolean isShouldHideInput(View v, MotionEvent event) {
-        if (v != null && (v instanceof EditText)) {
-            int[] leftTop = {0, 0};
-            //获取输入框当前的location位置
-            v.getLocationInWindow(leftTop);
-            int left = leftTop[0];
-            int top = leftTop[1];
-            int bottom = top + v.getHeight();
-            int right = left + v.getWidth();
-            return !(event.getX() > left && event.getX() < right
-                    && event.getY() > top && event.getY() < bottom);
-        }
-        return false;
-    }
 
 }

+ 14 - 0
student/src/main/java/com/cooleshow/student/ui/splash/SplashActivity.kt

@@ -1,7 +1,9 @@
 package com.cooleshow.student.ui.splash
 
+import android.net.Uri
 import com.alibaba.android.arouter.launcher.ARouter
 import com.cooleshow.base.common.ConstantKey
+import com.cooleshow.base.common.WebConstants
 import com.cooleshow.base.router.RouterPath
 import com.cooleshow.base.ui.activity.BaseActivity
 import com.cooleshow.base.utils.SPUtils
@@ -26,6 +28,18 @@ class SplashActivity : BaseActivity<ActivitySplashLayoutBinding>() {
         val isFirstLaunch = SPUtils.getInstance().getBoolean(ConstantKey.IS_FIRST_LAUNCH, false)
         if (isFirstLaunch){
             if (UserHelper.isLogin()) {
+                //接收h5跳转意图
+                val uri: Uri? = intent.data
+                if (uri != null) {
+                    val url: String = uri.getQueryParameter("url").toString()
+                    //接收值做具体操作
+                    ARouter.getInstance()
+                        .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                        .withString(WebConstants.WEB_URL, url)
+                        .navigation()
+                    return
+                }
+
                 jumpMain()
             } else {
                 jumpLogin()

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

@@ -69,7 +69,7 @@ public class HomeWorkActivity extends BaseMVPActivity<ActivityHomeworkBinding, H
         initTabLayoutAndViewPager();
     }
 
-    private List<String> titles = new ArrayList<String>(Arrays.asList("未布置", "已布置"));
+    private List<String> titles = new ArrayList<String>(Arrays.asList("未提交", "已提交"));
     private List<String> auditStatusList = new ArrayList<String>(Arrays.asList("NO", "YES"));
     private List<Fragment> fragments = new ArrayList<>();
 

+ 118 - 0
student/src/main/java/com/cooleshow/student/widgets/CourseSetCommentDialog.java

@@ -0,0 +1,118 @@
+package com.cooleshow.student.widgets;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.WindowManager;
+
+import androidx.annotation.NonNull;
+
+import com.cooleshow.base.utils.KeyboardUtils;
+import com.cooleshow.base.utils.ToastUtils;
+import com.cooleshow.student.R;
+import com.cooleshow.student.databinding.DialogSetCourseCommentLayoutBinding;
+
+/**
+ * Author by pq, Date on 2022/4/27.
+ */
+public class CourseSetCommentDialog extends Dialog implements View.OnClickListener {
+    public static final int TYPE_SET_TEACHER_COMMENT = 0;//老师评价
+    public static final int TYPE_SET_HOMEWORK = 1;//布置作业
+    public static final int TYPE_SET_HOMEWORK_COMMENT = 2;//作业点评
+
+    private OnSubmitClickListener mListener;
+    private int showType = TYPE_SET_TEACHER_COMMENT;
+
+    private DialogSetCourseCommentLayoutBinding mViewBinding;
+
+    public CourseSetCommentDialog(@NonNull Context context) {
+        super(context, com.cooleshow.base.R.style.DialogStyle);
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mViewBinding = DialogSetCourseCommentLayoutBinding.inflate(getLayoutInflater());
+        setContentView(mViewBinding.getRoot());
+        getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
+        mViewBinding.ivClose.setOnClickListener(this);
+        mViewBinding.tvSubmit.setOnClickListener(this);
+        mViewBinding.flContent.setOnClickListener(this);
+        setOnDismissListener(new OnDismissListener() {
+            @Override
+            public void onDismiss(DialogInterface dialog) {
+                if (mViewBinding != null) {
+                    if (mViewBinding.etContent != null) {
+                        mViewBinding.etContent.clearFocus();
+                        KeyboardUtils.hideSoftInput(mViewBinding.etContent);
+                    }
+                }
+            }
+        });
+    }
+
+
+    public void unbind() {
+        if (mViewBinding != null) {
+            mViewBinding = null;
+        }
+    }
+
+    public void showMethod(int method) {
+        showType = method;
+        mViewBinding.etContent.setText("");
+        if (method == TYPE_SET_TEACHER_COMMENT) {
+            //老师提交评价
+            mViewBinding.tvTitle.setText("评价学员");
+            mViewBinding.etContent.setHint("请输入您对本次课程学员表现的评价");
+        }
+        if (method == TYPE_SET_HOMEWORK) {
+            //老师布置作业
+            mViewBinding.tvTitle.setText("布置作业");
+            mViewBinding.etContent.setHint("请输入您输入本次课程需要布置的作业内容");
+        }
+        if (method == TYPE_SET_HOMEWORK_COMMENT) {
+            //老师提交作业评价
+            mViewBinding.tvTitle.setText("作业点评");
+            mViewBinding.etContent.setHint("请输入您对本次课程学员的作业点评");
+        }
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v.getId() == R.id.iv_close) {
+            dismiss();
+            return;
+        }
+
+        if (v.getId() == R.id.fl_content) {
+            KeyboardUtils.showSoftInput(mViewBinding.etContent);
+            return;
+        }
+
+        if (v.getId() == R.id.tv_submit) {
+            //提交
+            String content = mViewBinding.etContent.getText().toString();
+            if (TextUtils.isEmpty(content)) {
+                ToastUtils.showShort("请输入需要提交的内容");
+                return;
+            }
+            if (mListener != null) {
+                mListener.onSubmit(content, showType);
+            }
+            dismiss();
+            return;
+        }
+    }
+
+    public void setOnSubmitClickListener(OnSubmitClickListener submitClickListener) {
+        this.mListener = submitClickListener;
+    }
+
+    public interface OnSubmitClickListener {
+        void onSubmit(String content, int type);
+    }
+}

+ 17 - 0
student/src/main/java/com/cooleshow/student/widgets/DialogUtils.java

@@ -5,6 +5,7 @@ import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Matrix;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.WindowManager;
@@ -17,7 +18,10 @@ import androidx.constraintlayout.widget.ConstraintLayout;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.alibaba.android.arouter.launcher.ARouter;
 import com.cooleshow.base.common.BaseApplication;
+import com.cooleshow.base.common.WebConstants;
+import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.utils.GlideUtils;
 import com.cooleshow.student.R;
 import com.cooleshow.student.bean.AppHomeBean;
@@ -67,5 +71,18 @@ public class DialogUtils {
                 mAlertDialog.dismiss();
             }
         });
+        im_pic.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                if (!TextUtils.isEmpty(data.linkUrl)){
+                    ARouter.getInstance()
+                            .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                            .withString(WebConstants.WEB_URL, data.linkUrl)
+                            .navigation();
+                }
+
+                mAlertDialog.dismiss();
+            }
+        });
     }
 }

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

@@ -0,0 +1,53 @@
+package com.cooleshow.student.widgets;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.widget.FrameLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.request.RequestOptions;
+import com.cooleshow.base.widgets.QMUIRadiusImageView;
+import com.cooleshow.student.R;
+
+/**
+ * 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);
+    }
+}

BIN
student/src/main/res/drawable-xhdpi/icon_course_detail_evaluate.png


BIN
student/src/main/res/drawable-xhdpi/icon_empty_course_table.png


BIN
student/src/main/res/drawable-xhdpi/icon_evaluate_teacher_input.png


BIN
student/src/main/res/drawable-xhdpi/icon_homework_comment.png


BIN
student/src/main/res/drawable-xhdpi/icon_homework_empty.png


BIN
student/src/main/res/drawable-xhdpi/icon_homework_video_empty.png


BIN
student/src/main/res/drawable-xhdpi/icon_video_play.png


BIN
student/src/main/res/drawable-xhdpi/icon_work_upload_tum.png


BIN
student/src/main/res/drawable-xxhdpi/icon_course_detail_evaluate.png


BIN
student/src/main/res/drawable-xxhdpi/icon_empty_course_table.png


BIN
student/src/main/res/drawable-xxhdpi/icon_evaluate_teacher_input.png


BIN
student/src/main/res/drawable-xxhdpi/icon_homework_comment.png


BIN
student/src/main/res/drawable-xxhdpi/icon_homework_empty.png


BIN
student/src/main/res/drawable-xxhdpi/icon_homework_video_empty.png


BIN
student/src/main/res/drawable-xxhdpi/icon_video_play.png


BIN
student/src/main/res/drawable-xxhdpi/icon_work_upload_tum.png


+ 15 - 0
student/src/main/res/drawable/bg_dash_border_2dc7aa_radius.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/color_f7f8f9" />
+
+    <corners
+        android:radius="10dp" />
+
+    <stroke
+        android:width="1dp"
+        android:color="@color/color_2dc7aa"
+        android:dashWidth="5dp"
+        android:dashGap="2dp" />
+
+</shape>

+ 5 - 0
student/src/main/res/drawable/shape_e5e5e5_radius.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_e5e5e5" />
+    <corners android:radius="22dp"/>
+</shape>

+ 132 - 0
student/src/main/res/layout/activity_evaluate_teacher.xml

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/color_f7f8f9">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="14dp"
+        android:layout_marginTop="40dp"
+        android:layout_marginEnd="14dp"
+        android:background="@drawable/bg_white_10dp"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/dp_16"
+            android:text="评价老师"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_16"
+            android:textStyle="bold"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.cooleshow.base.widgets.RatingBar
+            android:id="@+id/rating_bar"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_28"
+            android:gravity="center"
+            android:layout_marginTop="@dimen/dp_54"
+            app:starCount="5"
+            app:starEmpty="@drawable/icon_star_default"
+            app:starFill="@drawable/icon_star_select"
+            app:starImageSize="@dimen/dp_28"
+            app:starPadding="@dimen/dp_7"
+            app:starStep="0"
+            app:stepSize="Full"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_title_hint"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/dp_17"
+            android:text="如果满意请给五星好评喔~"
+            android:textColor="@color/color_999999"
+            android:textSize="@dimen/sp_12"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/rating_bar" />
+
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_input"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_122"
+            android:layout_marginLeft="@dimen/dp_10"
+            android:layout_marginTop="@dimen/dp_18"
+            android:layout_marginRight="@dimen/dp_10"
+            android:background="@drawable/shape_bg_f7f8f9_4dp"
+            app:layout_constraintTop_toBottomOf="@+id/tv_title_hint">
+
+            <ImageView
+                android:layout_width="@dimen/dp_16"
+                android:layout_height="@dimen/dp_16"
+                android:layout_marginLeft="@dimen/dp_12"
+                android:layout_marginTop="@dimen/dp_13"
+                android:background="@drawable/icon_evaluate_teacher_input"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <EditText
+                android:id="@+id/et_input"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@null"
+                android:inputType="text"
+                android:maxLength="200"
+                android:gravity="left"
+                android:hint="请输入您对本次课程老师的评价"
+                android:paddingLeft="@dimen/dp_36"
+                android:paddingTop="@dimen/dp_12"
+                android:paddingRight="@dimen/dp_12"
+                android:paddingBottom="@dimen/dp_12"
+                android:textColor="@color/color_333333"
+                android:textColorHint="@color/color_999999"
+                android:textSize="@dimen/sp_13" />
+
+            <TextView
+                android:id="@+id/tv_number"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="@dimen/sp_13"
+                android:text="0/200"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:layout_marginRight="@dimen/dp_10"
+                android:textColor="@color/color_999999"/>
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <TextView
+            android:id="@+id/tv_confirm"
+            android:layout_width="@dimen/dp_186"
+            android:layout_height="@dimen/dp_44"
+            android:layout_marginTop="@dimen/dp_16"
+            android:layout_marginBottom="@dimen/dp_18"
+            android:background="@drawable/shape_course_status_ing"
+            android:gravity="center"
+            android:text="确认"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/cl_input"
+
+            />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 432 - 0
student/src/main/res/layout/activity_practice_course_detail_layout.xml

@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/color_f7f8f9">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout_white" />
+
+    <androidx.core.widget.NestedScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:overScrollMode="never"
+        android:scrollbars="none"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:paddingStart="14dp"
+            android:paddingTop="12dp"
+            android:paddingEnd="14dp"
+            android:paddingBottom="12dp">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="20dp">
+
+                <ImageView
+                    android:id="@+id/iv_time_icon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="12dp"
+                    android:src="@drawable/icon_clock"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_course_time"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="7dp"
+                    android:textColor="@color/color_666666"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_time_icon"
+                    app:layout_constraintLeft_toRightOf="@+id/iv_time_icon"
+                    app:layout_constraintTop_toTopOf="@+id/iv_time_icon"
+                    tools:text="2021/09/17 14:00~14:25" />
+
+                <TextView
+                    android:id="@+id/tv_course_status"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginEnd="11dp"
+                    android:text="已结束"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_time_icon"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/iv_time_icon" />
+
+                <View
+                    android:id="@+id/view_line"
+                    android:layout_width="match_parent"
+                    android:layout_height="1px"
+                    android:layout_marginTop="10dp"
+                    android:background="@color/color_f2f2f2"
+                    app:layout_constraintTop_toBottomOf="@+id/iv_time_icon" />
+
+                <com.cooleshow.base.widgets.QMUIRadiusImageView
+                    android:id="@+id/iv_avatar"
+                    android:layout_width="47dp"
+                    android:layout_height="51dp"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="17dp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/view_line" />
+
+                <TextView
+                    android:id="@+id/tv_title"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="10dp"
+                    android:layout_marginEnd="10dp"
+                    android:ellipsize="end"
+                    android:includeFontPadding="false"
+                    android:maxLines="2"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_16"
+                    android:textStyle="bold"
+                    app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+                    app:layout_constraintVertical_chainStyle="packed"
+                    tools:text="张豆豆张豆豆张豆豆张豆" />
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/rv_course_name"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dp"
+                    android:layout_marginBottom="@dimen/dp_5"
+                    android:background="@drawable/shape_couse_type_text_bg"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+                    app:layout_constraintLeft_toLeftOf="@+id/tv_title"
+                    app:layout_constraintTop_toBottomOf="@+id/tv_title" />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dp_136"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_appraisal_line"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_teacher_appraisal_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="老师点评"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_appraisal_line"
+                    app:layout_constraintLeft_toRightOf="@+id/view_appraisal_line"
+                    app:layout_constraintTop_toTopOf="@+id/view_appraisal_line" />
+
+                <TextView
+                    android:id="@+id/tv_teacher_appraisal"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/dp_88"
+                    android:layout_marginLeft="@dimen/dp_10"
+                    android:layout_marginTop="@dimen/dp_38"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:gravity="center"
+                    android:lineSpacingExtra="@dimen/dp_4"
+                    android:paddingLeft="@dimen/dp_8"
+                    android:paddingTop="@dimen/dp_10"
+                    android:paddingRight="@dimen/dp_8"
+                    android:paddingBottom="@dimen/dp_6"
+                    android:text="课程结束之后老师会对您的学习进行点评喔~"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintTop_toTopOf="parent" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_stu_comment"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_stu_comment_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="评价老师"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_stu_comment"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_stu_comment"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_stu_comment" />
+
+                <RatingBar
+                    android:id="@+id/rating_bar_for_student"
+                    style="@style/HomeRatingBar"
+                    android:layout_width="wrap_content"
+                    android:layout_height="19dp"
+                    android:layout_marginStart="6dp"
+                    android:numStars="5"
+                    android:rating="3"
+                    android:stepSize="1"
+                    android:visibility="gone"
+                    app:layout_constraintBottom_toBottomOf="@+id/tv_stu_comment_title"
+                    app:layout_constraintLeft_toRightOf="@+id/tv_stu_comment_title"
+                    app:layout_constraintTop_toTopOf="@+id/tv_stu_comment_title" />
+
+                <TextView
+                    android:id="@+id/tv_evaluate"
+                    android:layout_width="wrap_content"
+                    android:layout_height="@dimen/dp_40"
+                    android:layout_marginRight="@dimen/dp_12"
+                    android:drawableLeft="@drawable/icon_course_detail_evaluate"
+                    android:drawablePadding="@dimen/dp_2"
+                    android:gravity="center"
+                    android:text="评价"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="visible"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+
+                <TextView
+                    android:id="@+id/tv_stu_comment"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/dp_88"
+                    android:layout_marginLeft="@dimen/dp_10"
+                    android:layout_marginTop="@dimen/dp_38"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:gravity="center"
+                    android:lineSpacingExtra="@dimen/dp_4"
+                    android:paddingLeft="@dimen/dp_8"
+                    android:paddingTop="@dimen/dp_10"
+                    android:paddingRight="@dimen/dp_8"
+                    android:paddingBottom="@dimen/dp_6"
+                    android:text="课程结束之后记得对老师的教学进行评价哦!"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintTop_toTopOf="parent" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dp_136"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_homework_line"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_homework_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="课后作业"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_homework_line"
+                    app:layout_constraintLeft_toRightOf="@+id/view_homework_line"
+                    app:layout_constraintTop_toTopOf="@+id/view_homework_line" />
+
+                <TextView
+                    android:id="@+id/tv_homework"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/dp_88"
+                    android:layout_marginLeft="@dimen/dp_10"
+                    android:layout_marginTop="@dimen/dp_38"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:gravity="center"
+                    android:lineSpacingExtra="@dimen/dp_4"
+                    android:paddingLeft="@dimen/dp_8"
+                    android:paddingTop="@dimen/dp_10"
+                    android:paddingRight="@dimen/dp_8"
+                    android:paddingBottom="@dimen/dp_6"
+                    android:text="课程结束后老师会布置作业喔~"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintTop_toTopOf="parent" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_video_work_line"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_video_work_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="视频作业"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_video_work_line"
+                    app:layout_constraintLeft_toRightOf="@+id/view_video_work_line"
+                    app:layout_constraintTop_toTopOf="@+id/view_video_work_line" />
+
+                <TextView
+                    android:id="@+id/tv_video_work"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/dp_88"
+                    android:layout_marginLeft="@dimen/dp_10"
+                    android:layout_marginTop="@dimen/dp_38"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:gravity="center"
+                    android:paddingLeft="@dimen/dp_8"
+                    android:paddingTop="@dimen/dp_10"
+                    android:paddingRight="@dimen/dp_8"
+                    android:paddingBottom="@dimen/dp_6"
+                    android:text="课程结束之后可上传视频作业!"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <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="@dimen/dp_38"
+                    android:layout_marginRight="@dimen/dp_5"
+                    android:layout_marginBottom="@dimen/dp_8"
+                    android:visibility="gone"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dp_136"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_work_review_line"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_work_review_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="作业点评"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_work_review_line"
+                    app:layout_constraintLeft_toRightOf="@+id/view_work_review_line"
+                    app:layout_constraintTop_toTopOf="@+id/view_work_review_line" />
+
+                <TextView
+                    android:id="@+id/tv_work_review"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/dp_88"
+                    android:layout_marginLeft="@dimen/dp_10"
+                    android:layout_marginTop="@dimen/dp_38"
+                    android:layout_marginRight="@dimen/dp_10"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:gravity="center"
+                    android:paddingLeft="@dimen/dp_8"
+                    android:paddingTop="@dimen/dp_10"
+                    android:paddingRight="@dimen/dp_8"
+                    android:paddingBottom="@dimen/dp_6"
+                    android:text="课程结束后上传作业视频会得倒老师点评喔~"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintTop_toTopOf="parent" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <TextView
+                android:id="@+id/tv_do"
+                android:layout_width="@dimen/dp_187"
+                android:layout_height="@dimen/dp_44"
+                android:layout_gravity="center_horizontal"
+                android:layout_marginTop="@dimen/dp_26"
+                android:layout_marginBottom="@dimen/dp_61"
+                android:background="@drawable/shape_course_status_ing"
+                android:gravity="center"
+                android:text="进入教室"
+                android:textColor="@color/white"
+                android:textSize="@dimen/sp_16" />
+        </LinearLayout>
+    </androidx.core.widget.NestedScrollView>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 532 - 0
student/src/main/res/layout/activity_sparring_course_detail_layout.xml

@@ -0,0 +1,532 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:adjustViewBounds="true"
+        android:scaleType="fitXY"
+        android:src="@drawable/bg_sparring_course_header"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout_white" />
+
+    <androidx.core.widget.NestedScrollView
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:overScrollMode="never"
+        android:scrollbars="none"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:paddingStart="14dp"
+            android:paddingTop="12dp"
+            android:paddingEnd="14dp"
+            android:paddingBottom="12dp">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="20dp">
+
+                <ImageView
+                    android:id="@+id/iv_time_icon"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="12dp"
+                    android:src="@drawable/icon_clock"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_course_time"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="7dp"
+                    android:textColor="@color/color_666666"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_time_icon"
+                    app:layout_constraintLeft_toRightOf="@+id/iv_time_icon"
+                    app:layout_constraintTop_toTopOf="@+id/iv_time_icon"
+                    tools:text="2021/09/17 14:00~14:25" />
+
+                <TextView
+                    android:id="@+id/tv_course_status"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginEnd="11dp"
+                    android:text="已结束"
+                    android:textColor="@color/color_999999"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_time_icon"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/iv_time_icon" />
+
+                <View
+                    android:id="@+id/view_line"
+                    android:layout_width="match_parent"
+                    android:layout_height="1px"
+                    android:layout_marginTop="10dp"
+                    android:background="@color/color_f2f2f2"
+                    app:layout_constraintTop_toBottomOf="@+id/iv_time_icon" />
+
+                <com.cooleshow.base.widgets.QMUIRadiusImageView
+                    android:id="@+id/iv_avatar"
+                    android:layout_width="47dp"
+                    android:layout_height="51dp"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="17dp"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/view_line" />
+
+                <TextView
+                    android:id="@+id/tv_title"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="10dp"
+                    android:layout_marginEnd="10dp"
+                    android:ellipsize="end"
+                    android:includeFontPadding="false"
+                    android:maxLines="2"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_16"
+                    android:textStyle="bold"
+                    app:layout_constraintBottom_toTopOf="@+id/tv_course_name"
+                    app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+                    app:layout_constraintVertical_chainStyle="packed"
+                    tools:text="张豆豆张豆豆张豆豆张豆" />
+
+                <TextView
+                    android:id="@+id/tv_course_name"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="8dp"
+                    android:background="@drawable/shape_couse_type_text_bg"
+                    android:gravity="center"
+                    android:includeFontPadding="false"
+                    android:paddingStart="4dp"
+                    android:paddingTop="2dp"
+                    android:paddingEnd="4dp"
+                    android:paddingBottom="2dp"
+                    android:textColor="@color/color_ff8c00"
+                    android:textSize="@dimen/sp_11"
+                    app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+                    app:layout_constraintLeft_toLeftOf="@+id/tv_title"
+                    app:layout_constraintTop_toBottomOf="@+id/tv_title"
+                    tools:text="单簧管" />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_teacher_appraisal_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="老师评价"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line" />
+
+                <TextView
+                    android:id="@+id/tv_set_teacher_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/appraisal_str"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="invisible"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line" />
+
+                <FrameLayout
+                    android:id="@+id/view_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line">
+
+                    <TextView
+                        android:id="@+id/tv_teacher_appraisal_empty_text"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_teacher_appraisal_empty"
+                        android:drawablePadding="8dp"
+                        android:gravity="center_vertical"
+                        android:text="课程结束之后记得对学员的\n表现进行评价哦!"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+
+                    <TextView
+                        android:id="@+id/tv_teacher_appraisal_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:includeFontPadding="false"
+                        android:textColor="@color/color_333333"
+                        android:textSize="@dimen/sp_13"
+                        android:visibility="gone"
+                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+                </FrameLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_stu_comment"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_stu_comment_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="学员评价"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_stu_comment"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_stu_comment"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_stu_comment" />
+
+                <RatingBar
+                    android:visibility="gone"
+                    android:id="@+id/rating_bar_for_student"
+                    style="@style/HomeRatingBar"
+                    android:layout_width="wrap_content"
+                    android:layout_height="19dp"
+                    android:layout_marginStart="6dp"
+                    android:numStars="5"
+                    android:rating="3"
+                    android:stepSize="1"
+                    app:layout_constraintBottom_toBottomOf="@+id/tv_stu_comment_title"
+                    app:layout_constraintLeft_toRightOf="@+id/tv_stu_comment_title"
+                    app:layout_constraintTop_toTopOf="@+id/tv_stu_comment_title" />
+
+                <FrameLayout
+                    android:id="@+id/view_stu_comment_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_stu_comment">
+
+                    <TextView
+                        android:id="@+id/tv_stu_comment_empty_text"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_stu_comment_empty"
+                        android:drawablePadding="8dp"
+                        android:gravity="center_vertical"
+                        android:text="学员尚未对您进行评价"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+
+                    <TextView
+                        android:id="@+id/tv_stu_comment_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:includeFontPadding="false"
+                        android:textColor="@color/color_333333"
+                        android:textSize="@dimen/sp_13"
+                        android:visibility="gone"
+                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+                </FrameLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_homework"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_homework_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="课后作业"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
+
+                <TextView
+                    android:id="@+id/tv_set_homework"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:drawableLeft="@drawable/icon_set_homework"
+                    android:drawablePadding="3dp"
+                    android:includeFontPadding="false"
+                    android:paddingEnd="11dp"
+                    android:text="@string/set_homework_str"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="invisible"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
+
+                <FrameLayout
+                    android:id="@+id/view_homework_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework">
+
+                    <TextView
+                        android:id="@+id/tv_homework_empty_text"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_homework_empty"
+                        android:drawablePadding="8dp"
+                        android:gravity="center_vertical"
+                        android:text="课程结束之后记得布置作业哦!"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+
+                    <TextView
+                        android:id="@+id/tv_homework_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:includeFontPadding="false"
+                        android:textColor="@color/color_333333"
+                        android:textSize="@dimen/sp_13"
+                        android:visibility="gone"
+                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+                </FrameLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_homework_video"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_homework_video_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="作业视频"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_video"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework_video"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_video" />
+
+                <FrameLayout
+                    android:id="@+id/view_homework_video_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_video">
+
+                    <TextView
+                        android:id="@+id/tv_homework_video_empty_text"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_homework_video_empty"
+                        android:drawablePadding="8dp"
+                        android:gravity="center_vertical"
+                        android:text="学员尚未上传作业视频"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+
+                    <LinearLayout
+                        android:id="@+id/ll_homework_video_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center_vertical"
+                        android:orientation="horizontal"
+                        android:weightSum="3"
+                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+                </FrameLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="12dp"
+                android:background="@drawable/bg_white_10dp"
+                android:paddingBottom="10dp">
+
+                <View
+                    android:id="@+id/view_title_line_homework_comment"
+                    android:layout_width="4dp"
+                    android:layout_height="14dp"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginTop="13dp"
+                    android:background="@drawable/shape_course_title_tag_bg"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/tv_homework_comment_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:includeFontPadding="false"
+                    android:paddingStart="5dp"
+                    android:text="作业点评"
+                    android:textColor="@color/color_1a1a1a"
+                    android:textSize="@dimen/sp_13"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
+                    app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework_comment"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
+
+                <TextView
+                    android:id="@+id/tv_homework_set_comment"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:drawableLeft="@drawable/icon_edit_appraisal"
+                    android:drawablePadding="3dp"
+                    android:includeFontPadding="false"
+                    android:paddingEnd="11dp"
+                    android:text="@string/comment_str"
+                    android:textColor="@color/color_2dc7aa"
+                    android:textSize="@dimen/sp_14"
+                    android:visibility="invisible"
+                    app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
+
+                <FrameLayout
+                    android:id="@+id/view_homework_comment_content_bg"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="11dp"
+                    android:layout_marginTop="11dp"
+                    android:layout_marginEnd="11dp"
+                    android:background="@drawable/shape_bg_f7f8f9_4dp"
+                    android:minHeight="88dp"
+                    android:padding="11dp"
+                    app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_comment">
+
+                    <TextView
+                        android:id="@+id/tv_homework_comment_empty_text"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="center"
+                        android:drawableLeft="@drawable/icon_homework_comment"
+                        android:drawablePadding="8dp"
+                        android:gravity="center_vertical"
+                        android:text="您尚未点评作业"
+                        android:textColor="@color/color_999999"
+                        android:textSize="@dimen/sp_13" />
+
+                    <TextView
+                        android:id="@+id/tv_homework_comment_content"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:includeFontPadding="false"
+                        android:textColor="@color/color_333333"
+                        android:textSize="@dimen/sp_13"
+                        android:visibility="gone"
+                        tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+                </FrameLayout>
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </LinearLayout>
+    </androidx.core.widget.NestedScrollView>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 95 - 0
student/src/main/res/layout/dialog_set_course_comment_layout.xml

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="32dp"
+        android:layout_marginEnd="32dp"
+        android:background="@drawable/bg_white_10dp">
+
+        <ImageView
+            android:id="@+id/iv_close"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="13dp"
+            android:src="@drawable/icon_close_dialog"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <View
+            android:id="@+id/view_title_tag"
+            android:layout_width="4dp"
+            android:layout_height="17dp"
+            android:layout_marginStart="19dp"
+            android:layout_marginTop="27dp"
+            android:background="@drawable/shape_course_title_tag_bg"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="4dp"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_18"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="@+id/view_title_tag"
+            app:layout_constraintLeft_toRightOf="@+id/view_title_tag"
+            app:layout_constraintTop_toTopOf="@+id/view_title_tag"
+            tools:text="评价学员" />
+
+        <FrameLayout
+            android:id="@+id/fl_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="18dp"
+            android:layout_marginTop="22dp"
+            android:layout_marginEnd="18dp"
+            android:background="@drawable/shape_bg_f7f8f9_4dp"
+            android:minHeight="112dp"
+            android:padding="11dp"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/view_title_tag">
+
+            <androidx.appcompat.widget.AppCompatEditText
+                android:id="@+id/et_content"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@null"
+                android:hint="请输入您对本次课程学员表现的评价"
+                android:maxHeight="200dp"
+                android:textColor="@color/color_333333"
+                android:textColorHint="@color/color_999999"
+                android:textSize="@dimen/sp_14" />
+
+        </FrameLayout>
+
+        <TextView
+            android:id="@+id/tv_submit"
+            android:layout_width="0dp"
+            android:layout_height="44dp"
+            android:layout_marginStart="26dp"
+            android:layout_marginTop="15dp"
+            android:layout_marginEnd="26dp"
+            android:layout_marginBottom="15dp"
+            android:background="@drawable/shape_login_bt_bg"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:text="@string/submit_action_str"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/fl_content" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</FrameLayout>

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

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="5dp"
+        android:layout_marginRight="5dp">
+
+        <com.cooleshow.base.widgets.QMUIRadiusImageView
+            android:id="@+id/iv_video_bg"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/dp_72"
+            app:qmui_corner_radius="10dp" />
+
+        <ImageView
+            android:layout_width="@dimen/dp_24"
+            android:layout_height="@dimen/dp_24"
+            android:layout_gravity="center"
+            android:src="@drawable/icon_play_video" />
+    </FrameLayout>
+
+</RelativeLayout>

+ 31 - 0
student/src/main/res/layout/item_practice_video_layout_add.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/dp_72">
+
+    <ImageView
+        android:id="@+id/iv_video_add"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_marginRight="5dp"
+        android:layout_marginLeft="5dp"
+        android:background="@drawable/bg_dash_border_2dc7aa_radius"
+        app:qmui_corner_radius="10dp" />
+
+    <ImageView
+        android:layout_width="31dp"
+        android:layout_height="25dp"
+        android:layout_marginTop="13dp"
+        android:background="@drawable/icon_work_upload_tum"
+        android:layout_centerHorizontal="true" />
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="上传视频"
+        android:textColor="@color/color_2dc7aa"
+        android:textSize="@dimen/sp_10"
+        android:layout_alignParentBottom="true"
+        android:layout_marginBottom="13dp"
+        android:layout_centerHorizontal="true"/>
+</RelativeLayout>

+ 2 - 0
student/src/main/res/layout/layout_empty_conent.xml

@@ -22,6 +22,8 @@
         android:layout_marginTop="14dp"
         android:gravity="center"
         android:lineSpacingExtra="4dp"
+        android:textSize="@dimen/sp_16"
+        android:textColor="@color/color_999999"
         android:text="暂无内容~"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"

+ 46 - 0
student/src/main/res/layout/layout_empty_course_table.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+
+    <ImageView
+        android:id="@+id/im_empty_logo"
+        android:layout_width="@dimen/dp_260"
+        android:layout_height="@dimen/dp_230"
+        android:layout_marginTop="8dp"
+        android:background="@drawable/icon_empty_course_table"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/tv_empty_hint"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="14dp"
+        android:gravity="center"
+        android:lineSpacingExtra="4dp"
+        android:text="暂无预约课程"
+        android:textSize="@dimen/sp_16"
+        android:textColor="@color/color_999999"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/im_empty_logo" />
+
+
+    <TextView
+        android:id="@+id/tv_find_course"
+        android:layout_width="@dimen/dp_129"
+        android:layout_height="@dimen/dp_45"
+        android:layout_marginTop="@dimen/dp_8"
+        android:background="@drawable/shape_course_status_ing"
+        android:gravity="center"
+        android:text="发现课程"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_18"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/tv_empty_hint" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 18 - 0
student/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>

+ 6 - 0
student/src/main/res/values/strings.xml

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

+ 6 - 0
student/src/main/res/values/styles.xml

@@ -22,6 +22,7 @@
         <item name="android:windowIsFloating">true</item>
         <item name="android:windowAnimationStyle">@style/DialogAnimStyle</item>
     </style>
+
     <style name="DialogAnimStyle" parent="@android:style/Animation.Activity">
         <item name="android:windowEnterAnimation">@anim/modal_in</item>
         <item name="android:windowExitAnimation">@anim/modal_out</item>
@@ -30,7 +31,12 @@
         <item name="android:activityCloseEnterAnimation">@anim/modal_in</item>
         <item name="android:activityCloseExitAnimation">@anim/modal_out</item>
     </style>
+
     <style name="HomeRatingBar" parent="@android:style/Widget.RatingBar">
         <item name="android:progressDrawable">@drawable/home_rating_bar</item>
     </style>
+
+    <style name="HomeRatingBar1" parent="@android:style/Widget.RatingBar">
+        <item name="android:progressDrawable">@drawable/home_rating_bar</item>
+    </style>
 </resources>

+ 22 - 1
teacher/src/main/AndroidManifest.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     package="com.cooleshow.teacher">
 
     <application
@@ -21,10 +22,22 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+
+                <data
+                    android:host="html:8888/SplashActivity"
+                    android:scheme="ColexiuTeacher"
+                    tools:ignore="AppLinkUrlError" />
+            </intent-filter>
         </activity>
         <activity
             android:name=".ui.main.MainActivity"
-            android:exported="false"/>
+            android:exported="false" />
+
         <activity
             android:name=".ui.splash.GuideActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
@@ -102,6 +115,7 @@
             android:name=".ui.mine.AddressListActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
             android:screenOrientation="portrait" />
+
         <provider
             android:name="androidx.core.content.FileProvider"
             android:authorities="com.cooleshow.teacher.fileprovider"
@@ -111,6 +125,7 @@
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/file_paths" />
         </provider>
+
         <activity
             android:name=".ui.mine.EditAddressActivity"
             android:configChanges="orientation|screenSize|keyboardHidden"
@@ -204,6 +219,12 @@
 
         </activity>
 
+        <activity
+            android:name=".ui.work.AssignHomeworkActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:screenOrientation="portrait" />
+
+
     </application>
 
 </manifest>

+ 3 - 3
teacher/src/main/java/com/cooleshow/teacher/adapter/MineScoreAdapter.java

@@ -1,6 +1,7 @@
 package com.cooleshow.teacher.adapter;
 
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.ImageView;
@@ -59,11 +60,10 @@ public class MineScoreAdapter extends BaseQuickAdapter<MusicSheetListBean.RowsBe
         tv_author_name.setText(item.composer);
         GlideUtils.INSTANCE.loadImage(getContext(), item.addUserAvatar, im_header, R.drawable.icon_teacher_default_head);
         tv_teacher_name.setText(item.addName);
-
-        if (!TextUtils.isEmpty(item.musicSubject)) {
+        if (!TextUtils.isEmpty(item.musicSheetName)) {
             rv_mark.setVisibility(View.VISIBLE);
             List<String> markList = new ArrayList<>();
-            if (item.musicSubject.contains(",")) {
+            if (item.musicSheetName.contains(",")) {
                 String[] split = item.musicSheetName.split(",");
                 for (String s : split) {
                     markList.add(s);

+ 8 - 1
teacher/src/main/java/com/cooleshow/teacher/api/APIService.java

@@ -6,6 +6,7 @@ import com.cooleshow.teacher.bean.AddressBean;
 import com.cooleshow.teacher.bean.CountOfUnreadBean;
 import com.cooleshow.teacher.bean.CourseCommentListBean;
 import com.cooleshow.teacher.bean.CourseTableDataBean;
+import com.cooleshow.teacher.bean.HelpCenterContentBean;
 import com.cooleshow.teacher.bean.HomeCountBean;
 import com.cooleshow.teacher.bean.HomePageSheetMusicListBean;
 import com.cooleshow.teacher.bean.HomeworkListBean;
@@ -45,6 +46,7 @@ import retrofit2.http.Path;
 import retrofit2.http.Query;
 
 import static com.cooleshow.base.common.BaseConstant.AUTH_GROUP;
+import static com.cooleshow.base.common.BaseConstant.CMS_SERVER;
 import static com.cooleshow.base.common.BaseConstant.MALL_ADMIN_SERVER;
 import static com.cooleshow.base.common.BaseConstant.MALL_PORTAL_SERVER;
 import static com.cooleshow.base.common.BaseConstant.STUDENT_GROUP;
@@ -490,5 +492,10 @@ public interface APIService {
      */
     @POST(STUDENT_GROUP + "userOrder/orderPay")
     Observable<BaseResponse<PayTestBean>> orderPay(@Body RequestBody body);
-
+    /**
+     * 首页统计数据
+     * @return
+     */
+    @POST(CMS_SERVER + "helpCenterContent/list")
+    Observable<BaseResponse<HelpCenterContentBean>> helpCenterContentList(@Body RequestBody body);
 }

+ 2 - 2
teacher/src/main/java/com/cooleshow/teacher/bean/CountOfUnreadBean.java

@@ -7,6 +7,6 @@ package com.cooleshow.teacher.bean;
  * 类说明:
  */
 public class CountOfUnreadBean {
-    public Object key;
-    public Object value;
+    public String key;
+    public int value;
 }

+ 52 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/HelpCenterContentBean.java

@@ -0,0 +1,52 @@
+package com.cooleshow.teacher.bean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/31 17:14
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class HelpCenterContentBean {
+    public int limit;
+    public int nextPage;
+    public int offset;
+    public int pageNo;
+    public int prePage;
+    public int total;
+    public int totalPage;
+    public List<RowsBean> rows;
+    public static class RowsBean{
+        /*
+        "status": 0,
+			"order": 0,
+			"title": "测试老师公告",
+			"catalogId": 2,
+			"releaseTime": "2022-05-17 16:20:54",
+			"releaseStatus": 1,
+			"catalogType": "TEACHER",
+			"createOn": "2022-05-17 16:21:04",
+			"modifyOn": "2022-05-17 16:28:31",
+			"createBy": 56,
+			"updateName": "刘俊驰",
+			"updateBy": 56,
+			"id": 24,
+			"content": "\u003Cp\u003E测试老师公告内容\u003C/p\u003E"
+         */
+        public int status;
+        public int order;
+        public String title;
+        public String releaseTime;
+        public int releaseStatus;
+        public String catalogType;
+        public String createOn;
+        public String modifyOn;
+        public long createBy;
+        public String updateName;
+        public long updateBy;
+        public long id;
+        public String content;
+
+    }
+}

+ 17 - 0
teacher/src/main/java/com/cooleshow/teacher/constants/AssignHomeworkContract.java

@@ -0,0 +1,17 @@
+package com.cooleshow.teacher.constants;
+
+import com.cooleshow.base.presenter.view.BaseView;
+
+/**
+ * 创建日期:2022/5/31 15:48
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface AssignHomeworkContract {
+    interface AssignHomeworkView extends BaseView {
+
+    }
+    interface Presenter {
+    }
+}

+ 2 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/HomeContract.java

@@ -1,6 +1,7 @@
 package com.cooleshow.teacher.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.HelpCenterContentBean;
 import com.cooleshow.teacher.bean.HomeCountBean;
 import com.cooleshow.teacher.bean.TeacherUserInfo;
 import com.cooleshow.usercenter.bean.UserInfo;
@@ -12,6 +13,7 @@ public interface HomeContract {
 
     interface HomeView extends BaseView {
         void getHomeCountSuccess(HomeCountBean data);
+        void helpCenterContentListSuccess(HelpCenterContentBean data);
     }
 
     interface Presenter {

+ 15 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/homework/AssignHomeworkPresenter.java

@@ -0,0 +1,15 @@
+package com.cooleshow.teacher.presenter.homework;
+
+import com.cooleshow.base.presenter.BasePresenter;
+import com.cooleshow.teacher.constants.AssignHomeworkContract;
+import com.cooleshow.teacher.contract.AboutContract;
+
+/**
+ * 创建日期:2022/5/31 15:48
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class AssignHomeworkPresenter extends BasePresenter<AssignHomeworkContract.AssignHomeworkView> implements AssignHomeworkContract.Presenter {
+
+}

+ 33 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/main/HomePresenter.java

@@ -1,10 +1,12 @@
 package com.cooleshow.teacher.presenter.main;
 
+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.teacher.api.APIService;
 import com.cooleshow.teacher.bean.CountOfUnreadBean;
+import com.cooleshow.teacher.bean.HelpCenterContentBean;
 import com.cooleshow.teacher.bean.HomeCountBean;
 import com.cooleshow.teacher.bean.TeacherUserInfo;
 import com.cooleshow.teacher.contract.HomeContract;
@@ -69,4 +71,35 @@ public class HomePresenter extends BasePresenter<HomeContract.HomeView> implemen
             }
         });
     }
+
+    public void helpCenterContentList() {
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("catalogIds", "2");
+            jsonObject.putOpt("catalogType", "TEACHER");
+            jsonObject.putOpt("page", 1);
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).helpCenterContentList(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<HelpCenterContentBean>(getView()) {
+            @Override
+            protected void onSuccess(HelpCenterContentBean data) {
+                if (getView() != null) {
+                    getView().helpCenterContentListSuccess(data);
+                }
+            }
+
+            @Override
+            public void onComplete() {
+                super.onComplete();
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+
+            }
+        });
+    }
 }

+ 0 - 37
teacher/src/main/java/com/cooleshow/teacher/ui/course/CreateLiveCourseInfoActivity.java

@@ -48,41 +48,4 @@ public class CreateLiveCourseInfoActivity extends BaseMVPActivity<ActivityCreate
     protected CreateLiveCourseInfoPresenter createPresenter() {
         return new CreateLiveCourseInfoPresenter();
     }
-
-
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-
-            View v = getCurrentFocus();
-            if (isShouldHideInput(v, ev)) {
-
-                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-                if (imm != null) {
-                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
-                }
-            }
-            return super.dispatchTouchEvent(ev);
-        }
-        // 必不可少,否则所有的组件都不会有TouchEvent了
-        if (getWindow().superDispatchTouchEvent(ev)) {
-            return true;
-        }
-        return onTouchEvent(ev);
-    }
-
-    public boolean isShouldHideInput(View v, MotionEvent event) {
-        if (v != null && (v instanceof EditText)) {
-            int[] leftTop = {0, 0};
-            //获取输入框当前的location位置
-            v.getLocationInWindow(leftTop);
-            int left = leftTop[0];
-            int top = leftTop[1];
-            int bottom = top + v.getHeight();
-            int right = left + v.getWidth();
-            return !(event.getX() > left && event.getX() < right
-                    && event.getY() > top && event.getY() < bottom);
-        }
-        return false;
-    }
 }

+ 0 - 35
teacher/src/main/java/com/cooleshow/teacher/ui/income/WithdrawalActivity.java

@@ -72,41 +72,6 @@ public class WithdrawalActivity extends BaseMVPActivity<ActivityWithdrawalBindin
         return new WithdrawalPresenter();
     }
 
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-
-            View v = getCurrentFocus();
-            if (isShouldHideInput(v, ev)) {
-                //软键盘
-                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-                if (imm != null) {
-                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
-                }
-            }
-            return super.dispatchTouchEvent(ev);
-        }
-        // 必不可少,否则所有的组件都不会有TouchEvent了
-        if (getWindow().superDispatchTouchEvent(ev)) {
-            return true;
-        }
-        return onTouchEvent(ev);
-    }
-
-    public boolean isShouldHideInput(View v, MotionEvent event) {
-        if (v != null && (v instanceof EditText)) {
-            int[] leftTop = {0, 0};
-            //获取输入框当前的location位置
-            v.getLocationInWindow(leftTop);
-            int left = leftTop[0];
-            int top = leftTop[1];
-            int bottom = top + v.getHeight();
-            int right = left + v.getWidth();
-            return !(event.getX() > left && event.getX() < right
-                    && event.getY() > top && event.getY() < bottom);
-        }
-        return false;
-    }
 
     @Override
     public void initData() {

+ 31 - 4
teacher/src/main/java/com/cooleshow/teacher/ui/main/HomeFragment.kt

@@ -1,7 +1,5 @@
 package com.cooleshow.teacher.ui.main
 
-import android.text.TextUtils
-import android.util.Log
 import android.view.View
 import com.alibaba.android.arouter.launcher.ARouter
 import com.cooleshow.base.common.WebConstants
@@ -11,13 +9,13 @@ import com.cooleshow.base.ui.fragment.BaseMVPFragment
 import com.cooleshow.base.utils.GlideUtils
 import com.cooleshow.base.utils.Utils
 import com.cooleshow.teacher.R
+import com.cooleshow.teacher.bean.HelpCenterContentBean
 import com.cooleshow.teacher.bean.HomeCountBean
 import com.cooleshow.teacher.bean.TeacherUserInfo
 import com.cooleshow.teacher.constants.TeacherInfoConstants
 import com.cooleshow.teacher.contract.HomeContract
 import com.cooleshow.teacher.databinding.FragmentHomeLayoutBinding
 import com.cooleshow.teacher.presenter.main.HomePresenter
-import com.cooleshow.usercenter.bean.UserInfo
 import com.cooleshow.usercenter.helper.UserHelper
 
 
@@ -44,6 +42,9 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
         mViewBinding.cardAfterClassHomework.setOnClickListener(this)
         mViewBinding.cardMineIncome.setOnClickListener(this)
         mViewBinding.ivChat.setOnClickListener(this)
+        mViewBinding.tvNoticeContent.setOnClickListener(this)
+        mViewBinding.imNoticeList.setOnClickListener(this)
+        presenter.helpCenterContentList()
     }
 
     override fun createPresenter(): HomePresenter {
@@ -154,7 +155,22 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
                 ARouter.getInstance().build(RouterPath.MessageCenter.TEACHER_MESSAGE_MESSAGEBOX)
                     .navigation()
             }
+            R.id.tv_notice_content -> {
+                //点击单条公告
+                ARouter.getInstance()
+                    .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                    .withString(WebConstants.WEB_URL, WebConstants.HELP_CENTER_DETAIL+noticeId)
+                    .navigation()
+            }
+            R.id.im_notice_list -> {
+                //公告列表
+                ARouter.getInstance()
+                    .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                    .withString(WebConstants.WEB_URL, WebConstants.HELP_CENTER_CATALOGTYPE_2)
+                    .navigation()
+            }
         }
+
     }
 
     override fun onResume() {
@@ -166,11 +182,22 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
         if (data != null) {
             mViewBinding.tvMineCourseCount.text = "本周剩余\n" + data.courseSchedule + "课时"
             mViewBinding.tvAfterClassHomeworkCount.text = "本周共" + data.courseHomework + "节课\n未布置作业"
-            mViewBinding.tvAfterClassAssessCount.text = "剩余" + data.courseScheduleReplied + "节\n尚未评价"
+            mViewBinding.tvAfterClassAssessCount.text =
+                "剩余" + data.courseScheduleReplied + "节\n尚未评价"
             mViewBinding.tvMineMusicSheetCount.text = "共" + data.musicSheet + "支\n乐谱"
             mViewBinding.tvMineAssessCount.text = "本周收到\n" + data.studentReplied + "个评价"
             mViewBinding.tvMineIncomeCount.text = "本月收入\n" + data.decimal + "元"
         }
     }
 
+    private var noticeId: Long = 0
+    override fun helpCenterContentListSuccess(data: HelpCenterContentBean?) {
+
+        if (data?.rows != null && data.rows.size > 0) {
+            mViewBinding.tvNoticeContent.text = data.rows[0].title
+            noticeId = data.rows[0].id
+        }
+
+    }
+
 }

+ 32 - 1
teacher/src/main/java/com/cooleshow/teacher/ui/message/MessageBoxActivity.java

@@ -235,6 +235,37 @@ public class MessageBoxActivity extends BaseMVPActivity<ActivityMessageBoxBindin
 
     @Override
     public void queryCountOfUnreadSuccess(List<CountOfUnreadBean> data) {
-        Log.e("asdfasdfsdsfafd", "queryCountOfUnreadSuccess: "+data.size() );
+        if (null==data||data.size()==0){
+            return;
+        }
+        int totalCount=0;
+        int courseCount=0;
+        int systemCount=0;
+        for (CountOfUnreadBean datum : data) {
+            if (datum.key.equals("COURSE")){
+                courseCount=datum.value;
+            }else if (datum.key.equals("SYSTEM")){
+                systemCount=datum.value;
+            }
+        }
+        totalCount=courseCount+systemCount;
+        if (totalCount>0){
+            viewBinding.tvAllUnread.setVisibility(View.VISIBLE);
+            viewBinding.tvAllUnread.setText(totalCount+"");
+        }else {
+            viewBinding.tvAllUnread.setVisibility(View.GONE);
+        }
+        if (courseCount>0){
+            viewBinding.tvCourseUnread.setVisibility(View.VISIBLE);
+            viewBinding.tvCourseUnread.setText(courseCount+"");
+        }else {
+            viewBinding.tvCourseUnread.setVisibility(View.GONE);
+        }
+        if (systemCount>0){
+            viewBinding.tvSystemUnread.setVisibility(View.VISIBLE);
+            viewBinding.tvSystemUnread.setText(systemCount+"");
+        }else {
+            viewBinding.tvSystemUnread.setVisibility(View.GONE);
+        }
     }
 }

+ 0 - 36
teacher/src/main/java/com/cooleshow/teacher/ui/mine/BindBankCardActivity.java

@@ -176,40 +176,4 @@ public class BindBankCardActivity extends BaseMVPActivity<ActivityBindBankcardBi
         pvOptions.show();
 
     }
-
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-
-            View v = getCurrentFocus();
-            if (isShouldHideInput(v, ev)) {
-
-                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-                if (imm != null) {
-                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
-                }
-            }
-            return super.dispatchTouchEvent(ev);
-        }
-        // 必不可少,否则所有的组件都不会有TouchEvent了
-        if (getWindow().superDispatchTouchEvent(ev)) {
-            return true;
-        }
-        return onTouchEvent(ev);
-    }
-
-    public boolean isShouldHideInput(View v, MotionEvent event) {
-        if (v != null && (v instanceof EditText)) {
-            int[] leftTop = {0, 0};
-            //获取输入框当前的location位置
-            v.getLocationInWindow(leftTop);
-            int left = leftTop[0];
-            int top = leftTop[1];
-            int bottom = top + v.getHeight();
-            int right = left + v.getWidth();
-            return !(event.getX() > left && event.getX() < right
-                    && event.getY() > top && event.getY() < bottom);
-        }
-        return false;
-    }
 }

+ 0 - 36
teacher/src/main/java/com/cooleshow/teacher/ui/mine/EditAddressActivity.java

@@ -356,40 +356,4 @@ public class EditAddressActivity extends BaseMVPActivity<ActivityEditAddressBind
         }
     };
 
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-
-            View v = getCurrentFocus();
-            if (isShouldHideInput(v, ev)) {
-
-                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-                if (imm != null) {
-                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
-                }
-            }
-            return super.dispatchTouchEvent(ev);
-        }
-        // 必不可少,否则所有的组件都不会有TouchEvent了
-        if (getWindow().superDispatchTouchEvent(ev)) {
-            return true;
-        }
-        return onTouchEvent(ev);
-    }
-
-    public boolean isShouldHideInput(View v, MotionEvent event) {
-        if (v != null && (v instanceof EditText)) {
-            int[] leftTop = {0, 0};
-            //获取输入框当前的location位置
-            v.getLocationInWindow(leftTop);
-            int left = leftTop[0];
-            int top = leftTop[1];
-            int bottom = top + v.getHeight();
-            int right = left + v.getWidth();
-            return !(event.getX() > left && event.getX() < right
-                    && event.getY() > top && event.getY() < bottom);
-        }
-        return false;
-    }
-
 }

+ 0 - 36
teacher/src/main/java/com/cooleshow/teacher/ui/minestyle/MineStylePageActivity.java

@@ -317,40 +317,4 @@ public class MineStylePageActivity extends BaseMVPActivity<ActivityMineStylePage
         ActivityUtils.startActivityForResult(this, intent, CHOOSE_VIDEO);
 
     }
-
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-
-            View v = getCurrentFocus();
-            if (isShouldHideInput(v, ev)) {
-
-                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
-                if (imm != null) {
-                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
-                }
-            }
-            return super.dispatchTouchEvent(ev);
-        }
-        // 必不可少,否则所有的组件都不会有TouchEvent了
-        if (getWindow().superDispatchTouchEvent(ev)) {
-            return true;
-        }
-        return onTouchEvent(ev);
-    }
-
-    public boolean isShouldHideInput(View v, MotionEvent event) {
-        if (v != null && (v instanceof EditText)) {
-            int[] leftTop = {0, 0};
-            //获取输入框当前的location位置
-            v.getLocationInWindow(leftTop);
-            int left = leftTop[0];
-            int top = leftTop[1];
-            int bottom = top + v.getHeight();
-            int right = left + v.getWidth();
-            return !(event.getX() > left && event.getX() < right
-                    && event.getY() > top && event.getY() < bottom);
-        }
-        return false;
-    }
 }

+ 13 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/splash/SplashActivity.kt

@@ -1,7 +1,9 @@
 package com.cooleshow.teacher.ui.splash
 
+import android.net.Uri
 import com.alibaba.android.arouter.launcher.ARouter
 import com.cooleshow.base.common.ConstantKey
+import com.cooleshow.base.common.WebConstants
 import com.cooleshow.base.router.RouterPath
 import com.cooleshow.base.ui.activity.BaseActivity
 import com.cooleshow.base.utils.SPUtils
@@ -26,6 +28,17 @@ class SplashActivity : BaseActivity<ActivitySplashLayoutBinding>() {
         val isFirstLaunch = SPUtils.getInstance().getBoolean(ConstantKey.IS_FIRST_LAUNCH, false)
         if (isFirstLaunch){
             if (UserHelper.isLogin()) {
+                //接收h5跳转意图
+                val uri: Uri? = intent.data
+                if (uri != null) {
+                    val url: String = uri.getQueryParameter("url").toString()
+                    //接收值做具体操作
+                    ARouter.getInstance()
+                        .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                        .withString(WebConstants.WEB_URL, url)
+                        .navigation()
+                    return
+                }
                 jumpMain()
             } else {
                 jumpLogin()

+ 39 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/work/AssignHomeworkActivity.java

@@ -0,0 +1,39 @@
+package com.cooleshow.teacher.ui.work;
+
+import android.view.View;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.teacher.constants.AssignHomeworkContract;
+import com.cooleshow.teacher.databinding.ActivityAssignHomeworkBinding;
+import com.cooleshow.teacher.presenter.homework.AssignHomeworkPresenter;
+
+/**
+ * 创建日期:2022/5/31 15:26
+ *
+ * @author Ryan
+ * 类说明:
+ */
+@Route(path = RouterPath.WorkCenter.TEACHER_WORK_ASSIGN_HOMEWORK)
+public class AssignHomeworkActivity extends BaseMVPActivity<ActivityAssignHomeworkBinding, AssignHomeworkPresenter> implements AssignHomeworkContract.AssignHomeworkView, View.OnClickListener {
+    @Override
+    public void onClick(View view) {
+
+    }
+
+    @Override
+    protected void initView() {
+
+    }
+
+    @Override
+    protected ActivityAssignHomeworkBinding getLayoutView() {
+        return ActivityAssignHomeworkBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected AssignHomeworkPresenter createPresenter() {
+        return new AssignHomeworkPresenter();
+    }
+}

+ 339 - 0
teacher/src/main/res/layout/activity_assign_homework.xml

@@ -0,0 +1,339 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/color_f7f8f9"
+    android:orientation="vertical"
+    tools:ignore="MissingDefaultResource">
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="14dp"
+        android:layout_marginTop="12dp"
+        android:layout_marginRight="14dp"
+        android:background="@drawable/bg_white_10dp">
+
+        <ImageView
+            android:id="@+id/im_clock"
+            android:layout_width="@dimen/dp_16"
+            android:layout_height="@dimen/dp_16"
+            android:layout_marginLeft="11dp"
+            android:background="@drawable/icon_clock"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_date"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="7dp"
+            android:text="2021/09/17 14:00~15:00"
+            android:textColor="@color/color_666666"
+            android:textSize="@dimen/sp_13"
+            app:layout_constraintBottom_toBottomOf="@+id/im_clock"
+            app:layout_constraintLeft_toRightOf="@+id/im_clock"
+            app:layout_constraintTop_toTopOf="@+id/im_clock" />
+
+        <TextView
+            android:id="@+id/tv_state"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="11dp"
+            android:text="已结束"
+            android:textColor="@color/color_999999"
+            android:textSize="@dimen/sp_14"
+            app:layout_constraintBottom_toBottomOf="@+id/im_clock"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/im_clock" />
+
+        <View
+            android:id="@+id/view_line"
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginLeft="10dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="9dp"
+            android:background="@color/color_f2f2f2"
+            app:layout_constraintTop_toBottomOf="@+id/im_clock" />
+
+        <com.cooleshow.base.widgets.QMUIRadiusImageView
+            android:id="@+id/im_header"
+            android:layout_width="@dimen/dp_47"
+            android:layout_height="@dimen/dp_51"
+            android:layout_marginLeft="11dp"
+            android:layout_marginTop="17dp"
+            android:layout_marginBottom="20dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/view_line"
+            app:qmui_corner_radius="5dp" />
+
+        <TextView
+            android:id="@+id/tv_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:text="张豆豆"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_16"
+            app:layout_constraintLeft_toRightOf="@+id/im_header"
+            app:layout_constraintTop_toTopOf="@+id/im_header" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rv_mark"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="@+id/im_header"
+            app:layout_constraintLeft_toRightOf="@+id/im_header" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="14dp"
+        android:layout_marginTop="12dp"
+        android:layout_marginRight="14dp"
+        android:background="@drawable/bg_white_10dp"
+        android:paddingBottom="10dp">
+
+        <View
+            android:id="@+id/view_title_line_homework"
+            android:layout_width="4dp"
+            android:layout_height="14dp"
+            android:layout_marginStart="12dp"
+            android:layout_marginTop="13dp"
+            android:background="@drawable/shape_course_title_tag_bg"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_homework_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:includeFontPadding="false"
+            android:paddingStart="5dp"
+            android:text="课后作业"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_13"
+            app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework"
+            app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework"
+            app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
+
+        <TextView
+            android:id="@+id/tv_set_homework"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:drawableLeft="@drawable/icon_set_homework"
+            android:drawablePadding="3dp"
+            android:includeFontPadding="false"
+            android:paddingEnd="11dp"
+            android:text="@string/set_homework_str"
+            android:textColor="@color/color_2dc7aa"
+            android:textSize="@dimen/sp_14"
+            android:visibility="visible"
+            app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/view_title_line_homework" />
+
+        <FrameLayout
+            android:id="@+id/view_homework_content_bg"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="11dp"
+            android:layout_marginTop="11dp"
+            android:layout_marginEnd="11dp"
+            android:background="@drawable/shape_bg_f7f8f9_4dp"
+            android:minHeight="88dp"
+            android:padding="11dp"
+            app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework">
+
+            <TextView
+                android:id="@+id/tv_homework_empty_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:drawableLeft="@drawable/icon_homework_empty"
+                android:drawablePadding="8dp"
+                android:gravity="center_vertical"
+                android:text="课程结束之后记得布置作业哦!"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_13" />
+
+            <TextView
+                android:id="@+id/tv_homework_content"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:includeFontPadding="false"
+                android:textColor="@color/color_333333"
+                android:textSize="@dimen/sp_13"
+                android:visibility="gone"
+                tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+        </FrameLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="14dp"
+        android:layout_marginTop="12dp"
+        android:layout_marginRight="14dp"
+        android:background="@drawable/bg_white_10dp"
+        android:paddingBottom="10dp">
+
+        <View
+            android:id="@+id/view_video_work_line"
+            android:layout_width="4dp"
+            android:layout_height="14dp"
+            android:layout_marginStart="12dp"
+            android:layout_marginTop="13dp"
+            android:background="@drawable/shape_course_title_tag_bg"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_video_work_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:includeFontPadding="false"
+            android:paddingStart="5dp"
+            android:text="视频作业"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_13"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="@+id/view_video_work_line"
+            app:layout_constraintLeft_toRightOf="@+id/view_video_work_line"
+            app:layout_constraintTop_toTopOf="@+id/view_video_work_line" />
+
+        <FrameLayout
+            android:id="@+id/view_homework_video_content_bg"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="11dp"
+            android:layout_marginTop="11dp"
+            android:layout_marginEnd="11dp"
+            android:background="@drawable/shape_bg_f7f8f9_4dp"
+            android:minHeight="88dp"
+            android:padding="11dp"
+            app:layout_constraintTop_toBottomOf="@+id/view_video_work_line">
+
+            <TextView
+                android:id="@+id/tv_homework_video_empty_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:drawableLeft="@drawable/icon_homework_video_empty"
+                android:drawablePadding="8dp"
+                android:gravity="center_vertical"
+                android:text="学员尚未上传作业视频"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_13" />
+        </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="@dimen/dp_38"
+            android:layout_marginRight="@dimen/dp_5"
+            android:layout_marginBottom="@dimen/dp_8"
+            android:visibility="visible"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="12dp"
+        android:background="@drawable/bg_white_10dp"
+        android:paddingBottom="10dp">
+
+        <View
+            android:id="@+id/view_title_line_homework_comment"
+            android:layout_width="4dp"
+            android:layout_height="14dp"
+            android:layout_marginStart="12dp"
+            android:layout_marginTop="13dp"
+            android:background="@drawable/shape_course_title_tag_bg"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_homework_comment_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:includeFontPadding="false"
+            android:paddingStart="5dp"
+            android:text="作业点评"
+            android:textColor="@color/color_1a1a1a"
+            android:textSize="@dimen/sp_13"
+            app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
+            app:layout_constraintLeft_toRightOf="@+id/view_title_line_homework_comment"
+            app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
+
+        <TextView
+            android:id="@+id/tv_homework_set_comment"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:drawableLeft="@drawable/icon_edit_appraisal"
+            android:drawablePadding="3dp"
+            android:includeFontPadding="false"
+            android:paddingEnd="11dp"
+            android:text="@string/comment_str"
+            android:textColor="@color/color_2dc7aa"
+            android:textSize="@dimen/sp_14"
+            android:visibility="visible"
+            app:layout_constraintBottom_toBottomOf="@+id/view_title_line_homework_comment"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/view_title_line_homework_comment" />
+
+        <FrameLayout
+            android:id="@+id/view_homework_comment_content_bg"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="11dp"
+            android:layout_marginTop="11dp"
+            android:layout_marginEnd="11dp"
+            android:background="@drawable/shape_bg_f7f8f9_4dp"
+            android:minHeight="88dp"
+            android:padding="11dp"
+            app:layout_constraintTop_toBottomOf="@+id/view_title_line_homework_comment">
+
+            <TextView
+                android:id="@+id/tv_homework_comment_empty_text"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:drawableLeft="@drawable/icon_homework_comment"
+                android:drawablePadding="8dp"
+                android:gravity="center_vertical"
+                android:text="您尚未点评作业"
+                android:textColor="@color/color_999999"
+                android:textSize="@dimen/sp_13" />
+
+            <TextView
+                android:id="@+id/tv_homework_comment_content"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:includeFontPadding="false"
+                android:textColor="@color/color_333333"
+                android:textSize="@dimen/sp_13"
+                android:visibility="gone"
+                tools:text="每个音的指法比较熟练,但是遇到指法变换比较频繁的小节熟练度不足,建议平时可以选择指法变换较大的曲目多加练习!" />
+        </FrameLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</LinearLayout>

+ 2 - 0
teacher/src/main/res/layout/empty_mine_live_course.xml

@@ -23,6 +23,8 @@
         android:gravity="center"
         android:lineSpacingExtra="4dp"
         android:text="您尚未创建直播课程"
+        android:textSize="@dimen/sp_16"
+        android:textColor="@color/color_999999"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/im_empty_logo" />

+ 2 - 0
teacher/src/main/res/layout/empty_mine_video_course.xml

@@ -22,6 +22,8 @@
         android:layout_marginTop="14dp"
         android:gravity="center"
         android:lineSpacingExtra="4dp"
+        android:textSize="@dimen/sp_16"
+        android:textColor="@color/color_999999"
         android:text="您尚未创建视频课"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintRight_toRightOf="parent"

+ 83 - 72
teacher/src/main/res/layout/fragment_home_layout.xml

@@ -59,11 +59,11 @@
         app:layout_constraintTop_toTopOf="@+id/iv_chat" />
 
     <de.hdodenhof.circleimageview.CircleImageView
-        android:src="@drawable/icon_teacher_default_head"
         android:id="@+id/iv_avatar"
         android:layout_width="52dp"
         android:layout_height="52dp"
         android:layout_marginTop="37dp"
+        android:src="@drawable/icon_teacher_default_head"
         app:layout_constraintLeft_toLeftOf="@+id/iv_app_name"
         app:layout_constraintTop_toBottomOf="@+id/iv_app_name" />
 
@@ -74,36 +74,36 @@
         android:layout_marginStart="10dp"
         android:layout_marginBottom="10dp"
         android:includeFontPadding="false"
+        android:text="游客12e32td"
         android:textColor="@color/color_1a1a1a"
         android:textSize="@dimen/sp_18"
         app:layout_constraintBottom_toTopOf="@+id/rating_bar"
         app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
         app:layout_constraintTop_toTopOf="@+id/iv_avatar"
         app:layout_constraintVertical_chainStyle="packed"
-        android:text="游客12e32td"
         tools:text="游客12e32td" />
 
     <ImageView
-        android:visibility="gone"
         android:id="@+id/iv_teacher_entry_tag"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_marginStart="6dp"
-        app:layout_constraintLeft_toRightOf="@+id/tv_nickname"
-        app:layout_constraintBottom_toBottomOf="@+id/tv_nickname"
-        app:layout_constraintTop_toTopOf="@+id/tv_nickname"
         android:src="@drawable/icon_teahcer_entry_tag"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_nickname"
+        app:layout_constraintLeft_toRightOf="@+id/tv_nickname"
+        app:layout_constraintTop_toTopOf="@+id/tv_nickname" />
 
     <ImageView
-        android:visibility="gone"
         android:id="@+id/iv_teacher_music_person_tag"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_marginStart="3dp"
-        app:layout_constraintLeft_toRightOf="@+id/iv_teacher_entry_tag"
-        app:layout_constraintBottom_toBottomOf="@+id/iv_teacher_entry_tag"
-        app:layout_constraintTop_toTopOf="@+id/iv_teacher_entry_tag"
         android:src="@drawable/icon_teacher_music_person_tag"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_teacher_entry_tag"
+        app:layout_constraintLeft_toRightOf="@+id/iv_teacher_entry_tag"
+        app:layout_constraintTop_toTopOf="@+id/iv_teacher_entry_tag" />
 
     <RatingBar
         android:id="@+id/rating_bar"
@@ -118,12 +118,12 @@
         app:layout_constraintTop_toBottomOf="@+id/tv_nickname" />
 
     <ImageView
-        android:visibility="gone"
         android:id="@+id/iv_certification_status"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="5dp"
         android:src="@drawable/icon_home_un_certification"
+        android:visibility="gone"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/rating_bar" />
 
@@ -136,102 +136,102 @@
         app:layout_constraintLeft_toLeftOf="@+id/iv_certification_status" />
 
     <ImageView
-        android:visibility="gone"
         android:id="@+id/iv_un_certification_tip"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="6dp"
         android:src="@drawable/icon_home_certification_tip"
+        android:visibility="gone"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/certification_tip_help_view" />
 
     <TextView
         android:id="@+id/tv_fans_title"
-        android:paddingEnd="8dp"
-        android:paddingStart="8dp"
-        android:gravity="center"
+        android:layout_width="wrap_content"
+        android:layout_height="28dp"
         android:layout_marginTop="16dp"
-        app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
-        app:layout_constraintTop_toBottomOf="@+id/iv_avatar"
+        android:gravity="center"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"
+        android:text="粉丝"
         android:textColor="@color/color_333333"
         android:textSize="@dimen/sp_12"
-        android:text="粉丝"
-        android:layout_width="wrap_content"
-        android:layout_height="28dp"/>
+        app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
+        app:layout_constraintTop_toBottomOf="@+id/iv_avatar" />
 
     <TextView
         android:id="@+id/tv_course_num_complete_title"
-        android:paddingEnd="8dp"
-        android:paddingStart="8dp"
+        android:layout_width="wrap_content"
+        android:layout_height="28dp"
         android:gravity="center"
-        app:layout_constraintBottom_toBottomOf="@+id/tv_fans_title"
-        app:layout_constraintLeft_toRightOf="@+id/tv_fans_title"
-        app:layout_constraintTop_toTopOf="@+id/tv_fans_title"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"
+        android:text="已上课时"
         android:textColor="@color/color_333333"
         android:textSize="@dimen/sp_12"
-        android:text="已上课时"
-        android:layout_width="wrap_content"
-        android:layout_height="28dp"/>
+        app:layout_constraintBottom_toBottomOf="@+id/tv_fans_title"
+        app:layout_constraintLeft_toRightOf="@+id/tv_fans_title"
+        app:layout_constraintTop_toTopOf="@+id/tv_fans_title" />
 
     <TextView
         android:id="@+id/tv_course_num_no_start_title"
-        android:paddingEnd="8dp"
-        android:paddingStart="8dp"
+        android:layout_width="wrap_content"
+        android:layout_height="28dp"
         android:gravity="center"
-        app:layout_constraintBottom_toBottomOf="@+id/tv_fans_title"
-        app:layout_constraintLeft_toRightOf="@+id/tv_course_num_complete_title"
-        app:layout_constraintTop_toTopOf="@+id/tv_fans_title"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"
+        android:text="未上课时"
         android:textColor="@color/color_333333"
         android:textSize="@dimen/sp_12"
-        android:text="未上课时"
-        android:layout_width="wrap_content"
-        android:layout_height="28dp"/>
+        app:layout_constraintBottom_toBottomOf="@+id/tv_fans_title"
+        app:layout_constraintLeft_toRightOf="@+id/tv_course_num_complete_title"
+        app:layout_constraintTop_toTopOf="@+id/tv_fans_title" />
 
 
     <TextView
         android:id="@+id/tv_fans_num"
-        app:layout_constraintRight_toRightOf="@+id/tv_fans_title"
-        app:layout_constraintLeft_toLeftOf="@+id/tv_fans_title"
-        app:layout_constraintTop_toBottomOf="@+id/tv_fans_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:text="0"
-        tools:text="1344"
         android:textColor="@color/black"
         android:textSize="@dimen/sp_17"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        app:layout_constraintLeft_toLeftOf="@+id/tv_fans_title"
+        app:layout_constraintRight_toRightOf="@+id/tv_fans_title"
+        app:layout_constraintTop_toBottomOf="@+id/tv_fans_title"
+        tools:text="1344" />
 
     <TextView
         android:id="@+id/tv_course_num_completed"
-        app:layout_constraintRight_toRightOf="@+id/tv_course_num_complete_title"
-        app:layout_constraintLeft_toLeftOf="@+id/tv_course_num_complete_title"
-        app:layout_constraintTop_toBottomOf="@+id/tv_course_num_complete_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:text="0"
-        tools:text="34"
         android:textColor="@color/black"
         android:textSize="@dimen/sp_17"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        app:layout_constraintLeft_toLeftOf="@+id/tv_course_num_complete_title"
+        app:layout_constraintRight_toRightOf="@+id/tv_course_num_complete_title"
+        app:layout_constraintTop_toBottomOf="@+id/tv_course_num_complete_title"
+        tools:text="34" />
 
     <TextView
         android:id="@+id/tv_course_num_not_start"
-        app:layout_constraintRight_toRightOf="@+id/tv_course_num_no_start_title"
-        app:layout_constraintLeft_toLeftOf="@+id/tv_course_num_no_start_title"
-        app:layout_constraintTop_toBottomOf="@+id/tv_course_num_no_start_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:text="0"
         android:textColor="@color/black"
         android:textSize="@dimen/sp_17"
-        android:layout_width="wrap_content"
-        tools:text="34"
-        android:layout_height="wrap_content"/>
+        app:layout_constraintLeft_toLeftOf="@+id/tv_course_num_no_start_title"
+        app:layout_constraintRight_toRightOf="@+id/tv_course_num_no_start_title"
+        app:layout_constraintTop_toBottomOf="@+id/tv_course_num_no_start_title"
+        tools:text="34" />
 
     <androidx.constraintlayout.widget.Group
-        android:visibility="gone"
         android:id="@+id/group_teacher_extra"
-        app:constraint_referenced_ids="tv_course_num_not_start,tv_course_num_completed,tv_fans_num,tv_fans_title,tv_course_num_complete_title,tv_course_num_no_start_title"
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"/>
+        android:layout_height="wrap_content"
+        android:visibility="gone"
+        app:constraint_referenced_ids="tv_course_num_not_start,tv_course_num_completed,tv_fans_num,tv_fans_title,tv_course_num_complete_title,tv_course_num_no_start_title" />
 
-    <LinearLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/bg_announcement"
         android:layout_width="match_parent"
         android:layout_height="44dp"
@@ -240,7 +240,6 @@
         android:layout_marginEnd="14dp"
         android:background="@drawable/bg_white_10dp"
         android:elevation="2dp"
-        android:gravity="center_vertical"
         android:orientation="horizontal"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/iv_avatar">
@@ -249,25 +248,37 @@
             android:id="@+id/iv_bell"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginStart="10dp"
+            android:layout_marginLeft="10dp"
             android:src="@drawable/icon_home_bell"
-            app:layout_constraintBottom_toBottomOf="@+id/bg_announcement"
-            app:layout_constraintLeft_toLeftOf="@+id/bg_announcement"
-            app:layout_constraintTop_toTopOf="@+id/bg_announcement" />
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
         <TextView
+            android:id="@+id/tv_notice_content"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
+            android:layout_height="match_parent"
             android:layout_marginStart="2dp"
+            android:gravity="center"
             android:includeFontPadding="false"
-            android:text="网络教室升级公告"
+            tools:text="网络教室升级公告"
             android:textColor="@color/color_1a1a1a"
             android:textSize="@dimen/sp_14"
-            app:layout_constraintBottom_toBottomOf="@+id/iv_bell"
             app:layout_constraintLeft_toRightOf="@+id/iv_bell"
-            app:layout_constraintTop_toTopOf="@+id/iv_bell" />
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
 
-    </LinearLayout>
+        <ImageView
+            android:id="@+id/im_notice_list"
+            android:layout_width="@dimen/dp_38"
+            android:layout_height="@dimen/dp_38"
+            android:padding="@dimen/dp_10"
+            android:layout_marginRight="@dimen/dp_1"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            android:src="@drawable/icon_calendar_next_month" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
     <androidx.cardview.widget.CardView
         android:id="@+id/card_mine_course"

+ 2 - 0
teacher/src/main/res/layout/layout_empty_conent.xml

@@ -20,6 +20,8 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="14dp"
+        android:textSize="@dimen/sp_16"
+        android:textColor="@color/color_999999"
         android:gravity="center"
         android:lineSpacingExtra="4dp"
         android:text="暂无内容~"

+ 17 - 13
teacher/src/main/res/layout/layout_mark_item.xml

@@ -3,20 +3,24 @@
     android:layout_width="wrap_content"
     android:layout_height="wrap_content">
 
-    <TextView
-        android:id="@+id/tv_content"
+    <RelativeLayout
         android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:background="@drawable/shape_couse_type_text_bg"
-        android:paddingLeft="4dp"
-        android:paddingTop="2dp"
-        android:paddingRight="4dp"
-        android:layout_marginRight="6dp"
-        android:paddingBottom="2dp"
-        android:text="--"
-        android:textColor="@color/color_ff8c00"
-        android:textSize="@dimen/sp_11"
+        android:layout_height="wrap_content">
+
+        <TextView
+            android:id="@+id/tv_content"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="6dp"
+            android:background="@drawable/shape_couse_type_text_bg"
+            android:paddingLeft="4dp"
+            android:paddingTop="2dp"
+            android:paddingRight="4dp"
+            android:paddingBottom="2dp"
+            android:text="--"
+            android:textColor="@color/color_ff8c00"
+            android:textSize="@dimen/sp_11" />
+    </RelativeLayout>
 
-        />
 
 </RelativeLayout>