Browse Source

增加学生端琴房课课程组详情

Pq 3 months ago
parent
commit
0c467a6e4d

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

@@ -262,7 +262,11 @@
             android:screenOrientation="portrait"
             android:screenOrientation="portrait"
             android:windowSoftInputMode="adjustPan" />
             android:windowSoftInputMode="adjustPan" />
 
 
-
+        <activity
+            android:name=".ui.course.PianoCourseGroupDetailActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden|fontScale|smallestScreenSize|screenLayout|uiMode"
+            android:screenOrientation="portrait"
+            android:windowSoftInputMode="adjustPan" />
         <!--        分享开始-->
         <!--        分享开始-->
         <activity
         <activity
             android:name=".wxapi.WXEntryActivity"
             android:name=".wxapi.WXEntryActivity"

+ 90 - 0
student/src/main/java/com/cooleshow/student/adapter/PianoCourseGroupCourseListAdapter.java

@@ -0,0 +1,90 @@
+package com.cooleshow.student.adapter;
+
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.student.R;
+import com.cooleshow.student.bean.VIPCourseGroupDetailListBean;
+import com.cooleshow.student.constants.CourseConstants;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2024/11/25.
+ */
+public class PianoCourseGroupCourseListAdapter extends BaseQuickAdapter<VIPCourseGroupDetailListBean, BaseViewHolder> {
+    public PianoCourseGroupCourseListAdapter() {
+        super(R.layout.item_piano_course_group_course_layout);
+        addChildClickViewIds(R.id.tv_go_start);
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, VIPCourseGroupDetailListBean data) {
+        //时间
+        holder.setText(R.id.tv_time, UiUtils.getCourseTimeString(data.getStartTime(), data.getEndTime()));
+
+        TextView tv_course_status = holder.getView(R.id.tv_course_status);
+
+        holder.setText(R.id.tv_title, data.getCourseGroupName());
+
+        ImageView iv_attendance_status = holder.getView(R.id.iv_attendance_status);
+
+        holder.setText(R.id.tv_name, getStudentNames(data.getCourseStudentVos()));
+
+        holder.setText(R.id.tv_course_name, data.getSubjectName());
+
+        TextView tv_go_start = holder.getView(R.id.tv_go_start);
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_NOT_START, data.getStatus())) {
+            //未开始
+            iv_attendance_status.setVisibility(View.GONE);
+            tv_go_start.setVisibility(View.GONE);
+            tv_course_status.setVisibility(View.VISIBLE);
+            tv_course_status.setText("未开始");
+            tv_course_status.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
+        }
+
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_ING, data.getStatus())) {
+            //进行中
+            iv_attendance_status.setVisibility(View.GONE);
+            tv_go_start.setVisibility(View.VISIBLE);
+            tv_course_status.setVisibility(View.GONE);
+            tv_course_status.setText("进行中");
+            tv_course_status.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
+        }
+
+        if (TextUtils.equals(CourseConstants.COURSE_STATUS_COMPLETE, data.getStatus())) {
+            //已结束
+            iv_attendance_status.setVisibility(View.VISIBLE);
+            tv_go_start.setVisibility(View.GONE);
+            tv_course_status.setVisibility(View.VISIBLE);
+            iv_attendance_status.setImageResource(data.isAttendanceStatus() ? R.drawable.icon_course_attendance_arrive : R.drawable.icon_course_attendance_truancy);
+            tv_course_status.setText("已结束");
+            tv_course_status.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_999999));
+        }
+    }
+
+    private String getStudentNames(ArrayList<VIPCourseGroupDetailListBean.CourseStudentVosBean> list) {
+        if (list == null || list.size() == 0) {
+            return "";
+        }
+        StringBuilder stringBuilder = new StringBuilder();
+        if (list.size() > 1) {
+            stringBuilder.append(list.get(0).getUserName())
+                    .append("、")
+                    .append(list.get(1).getUserName())
+                    .append("等")
+                    .append(list.size())
+                    .append("人");
+        } else {
+            stringBuilder.append(list.get(0).getUserName());
+        }
+        return stringBuilder.toString();
+    }
+}

+ 460 - 0
student/src/main/java/com/cooleshow/student/ui/course/PianoCourseGroupDetailActivity.java

@@ -0,0 +1,460 @@
+package com.cooleshow.student.ui.course;
+
+import android.content.DialogInterface;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import com.alibaba.android.arouter.facade.annotation.Route;
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.bigkoo.pickerview.builder.TimePickerBuilder;
+import com.bigkoo.pickerview.listener.CustomListener;
+import com.bigkoo.pickerview.listener.OnDismissListener;
+import com.bigkoo.pickerview.view.TimePickerView;
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemChildClickListener;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.cooleshow.base.bean.CommonCourseConfigBean;
+import com.cooleshow.base.constanst.Constants;
+import com.cooleshow.base.constanst.CourseAttendanceStatusType;
+import com.cooleshow.base.constanst.CourseGroupStatusType;
+import com.cooleshow.base.interfaces.IFilterViewData;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.activity.BaseMVPActivity;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.base.utils.TimeUtils;
+import com.cooleshow.base.utils.ToastUtil;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
+import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.base.widgets.dialog.CommonFilterDialog;
+import com.cooleshow.student.R;
+import com.cooleshow.student.adapter.PianoCourseGroupCourseListAdapter;
+import com.cooleshow.student.adapter.VIPCourseGroupDetailAdapter;
+import com.cooleshow.student.bean.VIPCourseGroupDetailBean;
+import com.cooleshow.student.bean.VIPCourseGroupDetailListBean;
+import com.cooleshow.student.constants.CourseConstants;
+import com.cooleshow.student.contract.VIPCourseGroupDetailContract;
+import com.cooleshow.student.databinding.AcPianoCourseGroupDetailLayoutBinding;
+import com.cooleshow.student.databinding.AcVipOrInterestCourseGroupDetailLayoutBinding;
+import com.cooleshow.student.presenter.course.VIPOrInterestCourseGroupDetailPresenter;
+import com.cooleshow.student.widgets.AppBarLayoutStateChangeListener;
+import com.dayayuemeng.classroom.helper.OpenClassRoomHelper;
+import com.google.android.material.appbar.AppBarLayout;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+/**
+ * Author by pq, Date on 2024/11/22.
+ */
+@Route(path = RouterPath.CourseCenter.PIANO_COURSE_GROUP_DETAIL)
+public class PianoCourseGroupDetailActivity extends BaseMVPActivity<AcPianoCourseGroupDetailLayoutBinding, VIPOrInterestCourseGroupDetailPresenter> implements VIPCourseGroupDetailContract.View, View.OnClickListener {
+    private int titleStyleMode = 1;//根据折叠展开状态控制title样式
+    public static final int EXPAND_MODE = 1;
+    public static final int COLLAP_MODE = 2;
+    private AppBarLayoutStateChangeListener.State lastState = AppBarLayoutStateChangeListener.State.EXPANDED;
+    private String title = "";
+    private String courseGroupId;
+    private String courseType = Constants.VIP_COURSE_TAG;
+    private String classMonth;
+    private Date currentSelectDate;
+    private String courseStatus = CourseGroupStatusType.ALL.getId();
+    private String currentAttendanceStatus;
+    private PianoCourseGroupCourseListAdapter mAdapter;
+    private CommonCourseConfigBean mConfigBean;
+    private VIPCourseGroupDetailBean mDetailBean;
+    private TimePickerView pvTime;
+    private List<IFilterViewData> statusList;//状态筛选
+    private List<IFilterViewData> attendanceStatusList;//考勤状态筛选
+    private int currentSelectStatusPosition = 0;
+    private int currentSelectAttendancePosition = 0;
+    private CommonFilterDialog mAttendanceStatusFilterDialog;
+    private CommonFilterDialog mStatusFilterDialog;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        QMUIStatusBarHelper.setStatusBarLightMode(PianoCourseGroupDetailActivity.this);
+    }
+
+    @Override
+    protected void initView() {
+        String courseTypeValue = getIntent().getStringExtra(Constants.COMMON_EXTRA_KEY);
+        if (!TextUtils.isEmpty(courseTypeValue)) {
+            courseType = courseTypeValue;
+        }
+        initMidTitleToolBar(viewBinding.toolbarInclude.toolbar, "琴房课详情");
+        viewBinding.toolbarInclude.toolbar.setBackgroundColor(Color.TRANSPARENT);
+        viewBinding.appBarLayout.addOnOffsetChangedListener(new AppBarLayoutStateChangeListener() {
+
+            @Override
+            public void onStateChanged(AppBarLayout appBarLayout, State state) {
+                switch (state) {
+                    case EXPANDED:    //展开
+                        switchTitleStyle(EXPAND_MODE);
+                        break;
+                    case COLLAPSED:    //折叠
+                        switchTitleStyle(COLLAP_MODE);
+                        break;
+                    case INTERMEDIATE: //中间状态
+                        if (lastState == State.COLLAPSED) {
+                            switchTitleStyle(EXPAND_MODE);
+                        }
+                        break;
+                }
+                lastState = state;
+            }
+        });
+    }
+
+    @Override
+    public void initData() {
+        super.initData();
+        courseGroupId = getIntent().getStringExtra(CourseConstants.COURSE_GROUP_ID);
+        if (TextUtils.isEmpty(courseGroupId)) {
+            finish();
+            return;
+        }
+
+        initFilterData();
+
+        EmptyViewLayout emptyViewLayout = new EmptyViewLayout(this);
+        emptyViewLayout.setContent(com.cooleshow.base.R.drawable.icon_empty_course, "暂无课程");
+        mAdapter = new PianoCourseGroupCourseListAdapter();
+        mAdapter.setEmptyView(emptyViewLayout);
+        viewBinding.recyclerView.setLayoutManager(new LinearLayoutManager(this));
+        viewBinding.recyclerView.setAdapter(mAdapter);
+        initListener();
+    }
+
+    private void initFilterData() {
+        CourseGroupStatusType[] values = CourseGroupStatusType.values();
+        List<CourseGroupStatusType> courseGroupStatusTypes = Arrays.asList(values);
+        statusList = new ArrayList<IFilterViewData>(courseGroupStatusTypes);
+
+        CourseAttendanceStatusType[] attendanceStatuValues = CourseAttendanceStatusType.values();
+        List<CourseAttendanceStatusType> attendanceStatus = Arrays.asList(attendanceStatuValues);
+        attendanceStatusList = new ArrayList<>(attendanceStatus);
+    }
+
+    private void initListener() {
+        viewBinding.tvTime.setOnClickListener(this);
+        viewBinding.tvCourseStatus.setOnClickListener(this);
+        viewBinding.tvAgency.setOnClickListener(this);
+        mAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (position < mAdapter.getData().size()) {
+                    VIPCourseGroupDetailListBean bean = mAdapter.getData().get(position);
+                    ARouter.getInstance().build(RouterPath.CourseCenter.PIANO_ROOM_COURSE_DETAIL)
+                            .withString(CourseConstants.COURSE_ID, bean.getCourseId())
+                            .navigation();
+                }
+            }
+        });
+
+        mAdapter.setOnItemChildClickListener(new OnItemChildClickListener() {
+            @Override
+            public void onItemChildClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                //去上课
+                if (UiUtils.isFastClick()) {
+                    return;
+                }
+                if (view.getId() == R.id.tv_go_start) {
+                    if (position < mAdapter.getData().size()) {
+                        VIPCourseGroupDetailListBean bean = mAdapter.getData().get(position);
+                        goCourse(bean.getId(), bean.getStartTime(), bean.getSubjectName());
+                    }
+                }
+            }
+        });
+    }
+
+    private void reBuildFilter(Date date, String status, String attendanceStatus) {
+        currentSelectDate = date != null ? date : TimeUtils.getNowDate();
+        String targetDateTimeStr = TimeUtils.date2String(currentSelectDate, TimeUtils.getSafeDateFormat("yyyy-MM"));
+        classMonth = targetDateTimeStr;
+        courseStatus = !TextUtils.isEmpty(status) ? status : CourseGroupStatusType.ALL.getId();
+        currentAttendanceStatus = !TextUtils.isEmpty(attendanceStatus) ? attendanceStatus : CourseAttendanceStatusType.ALL.getId();
+        if (viewBinding != null) {
+            viewBinding.tvTime.setText(classMonth);
+        }
+        refreshCourseList(true);
+    }
+
+    private void goCourse(String courseScheduleId, String courseStartTime, String subjectName) {
+        if (!TextUtils.isEmpty(courseScheduleId) && !TextUtils.isEmpty(courseStartTime)) {
+            if (mConfigBean != null) {
+                boolean lessThanTargetTime = TimeUtils.isLessThanTargetTime(mConfigBean.getPianoStartTime(), courseStartTime);
+                if (!lessThanTargetTime) {
+                    ToastUtil.getInstance().showShort("课程还未开始,请在上课前" + mConfigBean.getPracticeStartTime() + "分钟进入");
+                    return;
+                }
+                OpenClassRoomHelper.start(this, courseScheduleId, subjectName);
+            }
+        }
+    }
+
+    private void switchTitleStyle(int mode) {
+        if (titleStyleMode == mode) {
+            return;
+        }
+        titleStyleMode = mode;
+        if (mode == 1) {
+            viewBinding.collapsingToolbarLayout.setContentScrimColor(Color.TRANSPARENT);
+            viewBinding.collapsingToolbarLayout.setStatusBarScrimColor(Color.TRANSPARENT);
+            viewBinding.toolbarInclude.toolbar.setBackgroundColor(Color.TRANSPARENT);
+            viewBinding.csFilter.setBackgroundColor(Color.TRANSPARENT);
+        } else {
+            viewBinding.collapsingToolbarLayout.setContentScrimColor(Color.WHITE);
+            viewBinding.collapsingToolbarLayout.setStatusBarScrimColor(Color.WHITE);
+            viewBinding.toolbarInclude.toolbar.setBackgroundColor(Color.WHITE);
+            viewBinding.csFilter.setBackgroundColor(Color.WHITE);
+        }
+    }
+
+    @Override
+    protected AcPianoCourseGroupDetailLayoutBinding getLayoutView() {
+        return AcPianoCourseGroupDetailLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected VIPOrInterestCourseGroupDetailPresenter createPresenter() {
+        return new VIPOrInterestCourseGroupDetailPresenter();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        refresh();
+    }
+
+    private void refresh() {
+        presenter.getCourseConfig();
+        presenter.queryDetail(true, courseGroupId);
+        reBuildFilter(currentSelectDate, courseStatus, currentAttendanceStatus);
+    }
+
+    private void refreshCourseList(boolean isShowLoading) {
+        presenter.queryCourseList(isShowLoading, courseGroupId, classMonth, courseStatus, currentAttendanceStatus);
+    }
+
+
+    @Override
+    public void getDetailSuccess(VIPCourseGroupDetailBean bean) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        this.mDetailBean = bean;
+
+        viewBinding.tvCourseGroupTitle.setText(bean.getCourseGroupName());
+        viewBinding.tvName.setText(bean.getTeacherName());
+        viewBinding.tvCourseCompletedValue.setText(bean.getCompleteCourseNum());
+        viewBinding.tvCourseTotalValue.setText(bean.getCourseNum());
+        viewBinding.tvCourseName.setText(bean.getSubjectName());
+
+        TextView tv_status = viewBinding.tvStatus;
+        String status = bean.getStatus();
+        if (TextUtils.equals(status, CourseGroupStatusType.ING.getId())) {
+            //进行中
+            tv_status.setText(CourseGroupStatusType.ING.getValue());
+            tv_status.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
+        } else if (TextUtils.equals(status, CourseGroupStatusType.NOT_START.getId())) {
+            //未开始
+            tv_status.setText(CourseGroupStatusType.NOT_START.getValue());
+            tv_status.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_ff802c));
+        } else if (TextUtils.equals(status, CourseGroupStatusType.COMPLETE.getId())) {
+            //已结课
+            tv_status.setText(CourseGroupStatusType.COMPLETE.getValue());
+            tv_status.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+        } else if (TextUtils.equals(status, CourseGroupStatusType.CANCEL.getId())) {
+            //已取消
+            tv_status.setText(CourseGroupStatusType.CANCEL.getValue());
+            tv_status.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_999999));
+        }
+
+        String coursePlan = bean.getCoursePlan();
+        boolean hasPlan = !TextUtils.isEmpty(coursePlan);
+        viewBinding.tvPlanContent.setText(coursePlan);
+        viewBinding.csCoursePlan.setVisibility(hasPlan ? View.VISIBLE : View.GONE);
+    }
+
+    @Override
+    public void getCourseListSuccess(ArrayList<VIPCourseGroupDetailListBean> data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        if (mAdapter != null) {
+            mAdapter.setList(data);
+        }
+    }
+
+    @Override
+    public void getCourseConfigSuccess(CommonCourseConfigBean data) {
+        if (!checkActivityExist()) {
+            return;
+        }
+        this.mConfigBean = data;
+    }
+
+    @Override
+    public void updateCoursePlanSuccess() {
+        if (!checkActivityExist()) {
+            return;
+        }
+        refresh();
+    }
+
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.tv_time) {
+            showTimeSelectPicker();
+            return;
+        }
+        if (id == R.id.tv_course_status) {
+            selectCourseStatus();
+            return;
+        }
+
+        if (id == R.id.tv_agency) {
+            selectAttendanceStatus();
+            return;
+        }
+    }
+
+
+    private void showTimeSelectPicker() {
+        if (pvTime == null) {
+            pvTime = new TimePickerBuilder(this, (date, v) -> {//选中事件回调
+                reBuildFilter(date, courseStatus, currentAttendanceStatus);
+            }).setLayoutRes(com.cooleshow.base.R.layout.pickerview_default_layout, new CustomListener() {
+                        @Override
+                        public void customLayout(View v) {
+                            //自定义布局中的控件初始化及事件处理
+                            final TextView tvSubmit = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_finish);
+                            TextView ivCancel = (TextView) v.findViewById(com.cooleshow.base.R.id.tv_cancel);
+                            tvSubmit.setOnClickListener(new View.OnClickListener() {
+                                @Override
+                                public void onClick(View v) {
+                                    pvTime.returnData();
+                                    pvTime.dismiss();
+                                }
+                            });
+                            ivCancel.setOnClickListener(new View.OnClickListener() {
+                                @Override
+                                public void onClick(View v) {
+                                    pvTime.dismiss();
+                                }
+                            });
+
+                        }
+                    })
+                    .setTextColorOut(getResources().getColor(com.cooleshow.base.R.color.color_aaaaaa))
+                    .setDividerColor(Color.TRANSPARENT)
+                    .setBgColor(Color.TRANSPARENT)
+                    .setLineSpacingMultiplier(2.5f)
+                    .setType(new boolean[]{true, true, false, false, false, false})// 默认全部显示
+                    .setTextColorCenter(getResources().getColor(com.cooleshow.base.R.color.color_1a1a1a))//设置选中项的颜色
+                    .isDialog(false)//是否显示为对话框样式
+                    .setLabel("年", "月", "", "", "", "")
+                    .build();
+
+            pvTime.setOnDismissListener(new OnDismissListener() {
+                @Override
+                public void onDismiss(Object o) {
+                    UiUtils.refreshFilterTextStyle2(false, viewBinding.tvTime);
+                }
+
+                @Override
+                public void onShow() {
+                    UiUtils.refreshFilterTextStyle2(true, viewBinding.tvTime);
+                }
+            });
+        }
+        Calendar calendar = Calendar.getInstance();
+        if (currentSelectDate == null) {
+            currentSelectDate = TimeUtils.getNowDate();
+        }
+        calendar.setTime(currentSelectDate);
+        pvTime.setDate(calendar);
+        if (!pvTime.isShowing()) {
+            pvTime.show();
+        }
+    }
+
+    private void selectCourseStatus() {
+        if (mStatusFilterDialog == null) {
+            mStatusFilterDialog = new CommonFilterDialog<IFilterViewData>(this);
+            mStatusFilterDialog.setOnEventListener(new CommonFilterDialog.OnEventListener() {
+                @Override
+                public void onItemClickListener(BaseQuickAdapter baseQuickAdapter, int pos) {
+                    if (statusList != null && pos < statusList.size()) {
+                        PianoCourseGroupDetailActivity.this.currentSelectStatusPosition = pos;
+                        IFilterViewData iFilterViewData = statusList.get(pos);
+                        courseStatus = iFilterViewData.getDataId();
+                        viewBinding.tvCourseStatus.setText(!TextUtils.isEmpty(courseStatus) ? iFilterViewData.getShowName() : "全部状态");
+                        reBuildFilter(currentSelectDate, courseStatus, currentAttendanceStatus);
+                    }
+                }
+            });
+
+            mStatusFilterDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
+                @Override
+                public void onDismiss(DialogInterface dialog) {
+                    UiUtils.refreshFilterTextStyle(false, viewBinding.tvCourseStatus);
+                }
+            });
+        }
+        if (!mStatusFilterDialog.isShowing()) {
+            mStatusFilterDialog.show();
+            UiUtils.refreshFilterTextStyle(true, viewBinding.tvCourseStatus);
+        }
+        mStatusFilterDialog.setSelectPos(currentSelectStatusPosition);
+        mStatusFilterDialog.setData(statusList);
+
+    }
+
+
+    private void selectAttendanceStatus() {
+        if (mAttendanceStatusFilterDialog == null) {
+            mAttendanceStatusFilterDialog = new CommonFilterDialog<IFilterViewData>(this);
+            mAttendanceStatusFilterDialog.setOnEventListener(new CommonFilterDialog.OnEventListener() {
+                @Override
+                public void onItemClickListener(BaseQuickAdapter baseQuickAdapter, int pos) {
+                    if (attendanceStatusList != null && pos < attendanceStatusList.size()) {
+                        PianoCourseGroupDetailActivity.this.currentSelectAttendancePosition = pos;
+                        IFilterViewData iFilterViewData = attendanceStatusList.get(pos);
+                        currentAttendanceStatus = iFilterViewData.getDataId();
+                        viewBinding.tvAgency.setText(iFilterViewData.getShowName());
+                        reBuildFilter(currentSelectDate, courseStatus, currentAttendanceStatus);
+                    }
+                }
+            });
+
+            mAttendanceStatusFilterDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
+                @Override
+                public void onDismiss(DialogInterface dialog) {
+                    UiUtils.refreshFilterTextStyle(false, viewBinding.tvAgency);
+                }
+            });
+        }
+        if (!mAttendanceStatusFilterDialog.isShowing()) {
+            mAttendanceStatusFilterDialog.show();
+            UiUtils.refreshFilterTextStyle(true, viewBinding.tvAgency);
+        }
+        mAttendanceStatusFilterDialog.setSelectPos(currentSelectAttendancePosition);
+        mAttendanceStatusFilterDialog.setData(attendanceStatusList);
+    }
+}

+ 9 - 0
student/src/main/java/com/cooleshow/student/ui/course/PianoCourseGroupFragment.java

@@ -4,11 +4,13 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
 import android.widget.PopupWindow;
 import android.widget.PopupWindow;
 
 
+import com.alibaba.android.arouter.launcher.ARouter;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.BaseQuickAdapter;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.chad.library.adapter.base.listener.OnItemClickListener;
 import com.cooleshow.base.constanst.Constants;
 import com.cooleshow.base.constanst.Constants;
 import com.cooleshow.base.constanst.CourseGroupStatusType;
 import com.cooleshow.base.constanst.CourseGroupStatusType;
 import com.cooleshow.base.interfaces.IFilterViewData;
 import com.cooleshow.base.interfaces.IFilterViewData;
+import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
 import com.cooleshow.base.utils.LOG;
 import com.cooleshow.base.utils.LOG;
 import com.cooleshow.base.utils.PopupUtil;
 import com.cooleshow.base.utils.PopupUtil;
@@ -19,6 +21,7 @@ import com.cooleshow.student.R;
 import com.cooleshow.student.adapter.PianoCourseGroupAdapter;
 import com.cooleshow.student.adapter.PianoCourseGroupAdapter;
 import com.cooleshow.student.bean.QuerySubjectBean;
 import com.cooleshow.student.bean.QuerySubjectBean;
 import com.cooleshow.student.bean.VIPCourseGroupListBean;
 import com.cooleshow.student.bean.VIPCourseGroupListBean;
+import com.cooleshow.student.constants.CourseConstants;
 import com.cooleshow.student.contract.PianoCourseGroupContract;
 import com.cooleshow.student.contract.PianoCourseGroupContract;
 import com.cooleshow.student.databinding.FgPianoCourseGroupLayoutBinding;
 import com.cooleshow.student.databinding.FgPianoCourseGroupLayoutBinding;
 import com.cooleshow.student.presenter.course.PianoCourseGroupPresenter;
 import com.cooleshow.student.presenter.course.PianoCourseGroupPresenter;
@@ -101,6 +104,12 @@ public class PianoCourseGroupFragment extends BaseMVPFragment<FgPianoCourseGroup
             @Override
             @Override
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
             public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
                 //课程详情页
                 //课程详情页
+                if (position < mAdapter.getData().size()) {
+                    VIPCourseGroupListBean.RowsBean rowsBean = mAdapter.getData().get(position);
+                    ARouter.getInstance().build(RouterPath.CourseCenter.PIANO_COURSE_GROUP_DETAIL)
+                            .withString(CourseConstants.COURSE_GROUP_ID, rowsBean.getCourseGroupId())
+                            .navigation();
+                }
             }
             }
         });
         });
     }
     }

+ 356 - 0
student/src/main/res/layout/ac_piano_course_group_detail_layout.xml

@@ -0,0 +1,356 @@
+<?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:id="@+id/iv_top_bg"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:adjustViewBounds="true"
+        android:src="@drawable/bg_course_group_detail_top"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <include
+        android:id="@+id/toolbar_include"
+        layout="@layout/common_toolbar_layout" />
+
+    <androidx.coordinatorlayout.widget.CoordinatorLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dp"
+        android:fitsSystemWindows="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/toolbar_include">
+
+        <com.google.android.material.appbar.AppBarLayout
+            android:id="@+id/app_bar_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/transparent"
+            android:fitsSystemWindows="true"
+            android:theme="@style/AppTheme.AppBarOverlay">
+
+            <com.google.android.material.appbar.CollapsingToolbarLayout
+                android:id="@+id/collapsing_toolbar_layout"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:fitsSystemWindows="true"
+                android:paddingBottom="0dp"
+                app:contentScrim="@color/transparent"
+                app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
+                app:scrimAnimationDuration="10"
+                app:statusBarScrim="@color/transparent"
+                app:titleEnabled="false">
+
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_marginTop="12dp"
+                    android:paddingStart="14dp"
+                    android:paddingEnd="14dp"
+                    app:layout_collapseMode="none">
+
+                    <androidx.constraintlayout.widget.ConstraintLayout
+                        android:id="@+id/cs_header"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:background="@drawable/bg_white_10dp"
+                        android:padding="12dp"
+                        app:layout_constraintLeft_toLeftOf="parent"
+                        app:layout_constraintTop_toTopOf="parent">
+
+                        <TextView
+                            android:id="@+id/tv_course_group_title"
+                            android:layout_width="0dp"
+                            android:layout_height="wrap_content"
+                            android:ellipsize="end"
+                            android:maxLines="1"
+                            android:textColor="@color/color_131415"
+                            android:textSize="@dimen/sp_16"
+                            android:textStyle="bold"
+                            app:layout_constraintLeft_toLeftOf="parent"
+                            app:layout_constraintRight_toLeftOf="@+id/tv_status"
+                            app:layout_constraintTop_toTopOf="parent"
+                            tools:text="VIP定制课-张涵宇" />
+
+                        <TextView
+                            android:id="@+id/tv_status"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:includeFontPadding="false"
+                            android:textColor="@color/color_999999"
+                            android:textSize="@dimen/sp_14"
+                            app:layout_constraintBottom_toBottomOf="@+id/tv_course_group_title"
+                            app:layout_constraintRight_toRightOf="parent"
+                            app:layout_constraintTop_toTopOf="@+id/tv_course_group_title"
+                            tools:text="已结课" />
+
+                        <ImageView
+                            android:id="@+id/iv_avatar"
+                            android:layout_width="40dp"
+                            android:layout_height="40dp"
+                            android:layout_marginTop="8dp"
+                            android:src="@drawable/icon_piano_room_course"
+                            app:layout_constraintLeft_toLeftOf="parent"
+                            app:layout_constraintTop_toBottomOf="@+id/tv_course_group_title" />
+
+                        <TextView
+                            android:id="@+id/tv_name"
+                            android:layout_width="0dp"
+                            android:layout_height="wrap_content"
+                            android:layout_marginStart="10dp"
+                            android:layout_marginEnd="5dp"
+                            android:ellipsize="end"
+                            android:includeFontPadding="false"
+                            android:maxLines="1"
+                            android:textColor="@color/color_333333"
+                            android:textSize="@dimen/sp_13"
+                            app:layout_constraintBottom_toTopOf="@+id/tv_course_completed_title"
+                            app:layout_constraintHorizontal_bias="0"
+                            app:layout_constraintHorizontal_chainStyle="packed"
+                            app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+                            app:layout_constraintRight_toLeftOf="@+id/tv_course_name"
+                            app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+                            app:layout_constraintVertical_chainStyle="packed"
+                            app:layout_constraintWidth_default="wrap"
+                            tools:text="张涵宇" />
+
+
+                        <TextView
+                            android:id="@+id/tv_course_name"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginStart="5dp"
+                            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_10"
+                            app:layout_constraintBottom_toBottomOf="@+id/tv_name"
+                            app:layout_constraintLeft_toRightOf="@+id/tv_name"
+                            app:layout_constraintRight_toRightOf="parent"
+                            app:layout_constraintTop_toTopOf="@+id/tv_name"
+                            tools:text="单簧管" />
+
+                        <ImageView
+                            android:id="@+id/iv_course_tag"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:src="@drawable/icon_course_completed_tag"
+                            app:layout_constraintBottom_toBottomOf="@+id/tv_course_completed_title"
+                            app:layout_constraintLeft_toLeftOf="@+id/tv_name"
+                            app:layout_constraintTop_toTopOf="@+id/tv_course_completed_title" />
+
+                        <TextView
+                            android:id="@+id/tv_course_completed_title"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginStart="4dp"
+                            android:layout_marginTop="6dp"
+                            android:includeFontPadding="false"
+                            android:text="已上课时"
+                            android:textColor="@color/color_999999"
+                            android:textSize="@dimen/sp_12"
+                            app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+                            app:layout_constraintLeft_toRightOf="@+id/iv_course_tag"
+                            app:layout_constraintTop_toBottomOf="@+id/tv_name" />
+
+
+                        <TextView
+                            android:id="@+id/tv_course_completed_value"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:includeFontPadding="false"
+                            android:paddingStart="3dp"
+                            android:paddingEnd="3dp"
+                            android:text="0"
+                            android:textColor="@color/color_2dc7aa"
+                            android:textSize="@dimen/sp_12"
+                            android:textStyle="bold"
+                            app:layout_constraintBaseline_toBaselineOf="@+id/tv_course_completed_title"
+                            app:layout_constraintLeft_toRightOf="@+id/tv_course_completed_title" />
+
+                        <TextView
+                            android:id="@+id/tv_course_total_title"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:includeFontPadding="false"
+                            android:text="/总课时"
+                            android:textColor="@color/color_999999"
+                            android:textSize="@dimen/sp_12"
+                            app:layout_constraintBaseline_toBaselineOf="@+id/tv_course_completed_value"
+                            app:layout_constraintLeft_toRightOf="@+id/tv_course_completed_value" />
+
+
+                        <TextView
+                            android:id="@+id/tv_course_total_value"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:includeFontPadding="false"
+                            android:paddingStart="3dp"
+                            android:paddingEnd="3dp"
+                            android:text="0"
+                            android:textColor="@color/color_333333"
+                            android:textSize="@dimen/sp_12"
+                            android:textStyle="bold"
+                            app:layout_constraintBaseline_toBaselineOf="@+id/tv_course_total_title"
+                            app:layout_constraintLeft_toRightOf="@+id/tv_course_total_title" />
+
+                    </androidx.constraintlayout.widget.ConstraintLayout>
+
+                    <androidx.constraintlayout.widget.ConstraintLayout
+                        android:visibility="gone"
+                        android:layout_width="match_parent"
+                        android:id="@+id/cs_course_plan"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="12dp"
+                        android:background="@drawable/bg_white_10dp"
+                        android:padding="12dp"
+                        app:layout_constraintLeft_toLeftOf="parent"
+                        app:layout_constraintTop_toBottomOf="@+id/cs_header">
+
+                        <TextView
+                            android:id="@+id/tv_plan_title"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:drawableStart="@drawable/icon_course_group_plan_tag"
+                            android:drawablePadding="6dp"
+                            android:gravity="center"
+                            android:includeFontPadding="false"
+                            android:text="课程规划"
+                            android:textColor="@color/color_333333"
+                            android:textSize="@dimen/sp_15"
+                            app:layout_constraintLeft_toLeftOf="parent"
+                            app:layout_constraintTop_toTopOf="parent" />
+
+                        <TextView
+                            android:id="@+id/tv_plan_content"
+                            android:layout_width="0dp"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="12dp"
+                            android:ellipsize="end"
+                            android:includeFontPadding="false"
+                            android:maxLines="4"
+                            android:textColor="@color/color_777777"
+                            android:textSize="@dimen/sp_13"
+                            app:layout_constraintLeft_toLeftOf="parent"
+                            app:layout_constraintRight_toRightOf="parent"
+                            app:layout_constraintTop_toBottomOf="@+id/tv_plan_title"
+                            tools:text="中国院长笛四级考级曲目教学中国院长笛四级考级曲目" />
+
+                    </androidx.constraintlayout.widget.ConstraintLayout>
+                </androidx.constraintlayout.widget.ConstraintLayout>
+            </com.google.android.material.appbar.CollapsingToolbarLayout>
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/cs_filter"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingStart="14dp"
+                android:paddingEnd="14dp">
+
+                <androidx.constraintlayout.widget.Guideline
+                    android:id="@+id/guide_line1"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    app:layout_constraintGuide_percent="0.33" />
+
+                <androidx.constraintlayout.widget.Guideline
+                    android:id="@+id/guide_line2"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    app:layout_constraintGuide_percent="0.66" />
+
+                <TextView
+                    android:id="@+id/tv_time"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:drawableRight="@drawable/icon_arrow_down"
+                    android:drawablePadding="6dp"
+                    android:ellipsize="end"
+                    android:gravity="center"
+                    android:includeFontPadding="false"
+                    android:maxLines="1"
+                    android:paddingStart="10dp"
+                    android:paddingTop="12dp"
+                    android:paddingEnd="10dp"
+                    android:paddingBottom="12dp"
+                    android:textColor="@color/color_131415"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintHorizontal_chainStyle="spread_inside"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintRight_toLeftOf="@+id/guide_line1"
+                    app:layout_constraintTop_toTopOf="parent"
+                    app:layout_constraintWidth_default="wrap"
+                    tools:text="2021年9月" />
+
+                <TextView
+                    android:id="@+id/tv_course_status"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:drawableRight="@drawable/icon_arrow_down"
+                    android:drawablePadding="6dp"
+                    android:ellipsize="end"
+                    android:gravity="center"
+                    android:includeFontPadding="false"
+                    android:maxLines="1"
+                    android:paddingStart="10dp"
+                    android:paddingTop="12dp"
+                    android:paddingEnd="10dp"
+                    android:paddingBottom="12dp"
+                    android:text="全部状态"
+                    android:textColor="@color/color_131415"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintBottom_toBottomOf="@+id/tv_time"
+                    app:layout_constraintLeft_toRightOf="@+id/guide_line1"
+                    app:layout_constraintRight_toLeftOf="@+id/guide_line2"
+                    app:layout_constraintTop_toTopOf="@+id/tv_time"
+                    app:layout_constraintWidth_default="wrap"
+                    tools:text="课程状态" />
+
+                <TextView
+                    android:id="@+id/tv_agency"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:drawableRight="@drawable/icon_arrow_down"
+                    android:drawablePadding="6dp"
+                    android:ellipsize="end"
+                    android:gravity="center"
+                    android:includeFontPadding="false"
+                    android:maxLines="1"
+                    android:paddingStart="10dp"
+                    android:paddingTop="12dp"
+                    android:paddingEnd="10dp"
+                    android:paddingBottom="12dp"
+                    android:text="全部考勤"
+                    android:textColor="@color/color_131415"
+                    android:textSize="@dimen/sp_14"
+                    app:layout_constraintBottom_toBottomOf="@+id/tv_time"
+                    app:layout_constraintLeft_toRightOf="@+id/guide_line2"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="@+id/tv_time"
+                    app:layout_constraintWidth_default="wrap"
+                    tools:text="全部考勤" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </com.google.android.material.appbar.AppBarLayout>
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:overScrollMode="never"
+            android:scrollbars="none"
+            app:layout_behavior="@string/appbar_scrolling_view_behavior"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tab_layout" />
+    </androidx.coordinatorlayout.widget.CoordinatorLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 2
student/src/main/res/layout/activity_piano_room_course_detail_layout.xml

@@ -78,8 +78,8 @@
 
 
                 <com.cooleshow.base.widgets.QMUIRadiusImageView
                 <com.cooleshow.base.widgets.QMUIRadiusImageView
                     android:id="@+id/iv_avatar"
                     android:id="@+id/iv_avatar"
-                    android:layout_width="47dp"
-                    android:layout_height="51dp"
+                    android:layout_width="54dp"
+                    android:layout_height="54dp"
                     android:src="@drawable/icon_piano_room_course"
                     android:src="@drawable/icon_piano_room_course"
                     android:layout_marginStart="11dp"
                     android:layout_marginStart="11dp"
                     android:layout_marginTop="17dp"
                     android:layout_marginTop="17dp"

+ 178 - 0
student/src/main/res/layout/item_piano_course_group_course_layout.xml

@@ -0,0 +1,178 @@
+<?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="wrap_content"
+    android:layout_marginStart="14dp"
+    android:layout_marginEnd="14dp"
+    android:layout_marginBottom="12dp"
+    android:background="@drawable/bg_white_10dp"
+    android:paddingStart="12dp"
+    android:paddingEnd="12dp"
+    android:paddingBottom="12dp">
+
+    <ImageView
+        android:id="@+id/iv_clock_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="15dp"
+        android:src="@drawable/icon_clock"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/tv_time"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="6dp"
+        android:includeFontPadding="false"
+        android:textColor="@color/color_666666"
+        android:textSize="@dimen/sp_13"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_clock_icon"
+        app:layout_constraintLeft_toRightOf="@+id/iv_clock_icon"
+        app:layout_constraintTop_toTopOf="@+id/iv_clock_icon"
+        tools:text="2021/09/17 14:00~14:25" />
+
+    <View
+        android:id="@+id/view_line"
+        android:layout_width="0dp"
+        android:layout_height="1dp"
+        android:layout_marginTop="15dp"
+        android:background="@color/color_f2f2f2"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/iv_clock_icon" />
+
+    <ImageView
+        android:id="@+id/iv_avatar"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        android:layout_marginTop="12dp"
+        android:src="@drawable/icon_piano_room_course"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/view_line"
+        app:qmui_corner_radius="5dp" />
+
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        android:ellipsize="end"
+        android:includeFontPadding="false"
+        android:maxLines="1"
+        android:textColor="@color/color_1a1a1a"
+        android:textSize="@dimen/sp_15"
+        app:layout_constraintBottom_toTopOf="@+id/tv_name"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintHorizontal_chainStyle="packed"
+        app:layout_constraintLeft_toRightOf="@+id/iv_avatar"
+        app:layout_constraintRight_toLeftOf="@+id/iv_attendance_status"
+        app:layout_constraintTop_toTopOf="@+id/iv_avatar"
+        app:layout_constraintVertical_chainStyle="packed"
+        app:layout_constraintWidth_default="wrap"
+        tools:text="VIP定制课-张豆豆VIP定制课-张豆豆" />
+
+    <ImageView
+        android:id="@+id/iv_attendance_status"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
+        android:src="@drawable/icon_course_attendance_truancy"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_title"
+        app:layout_constraintLeft_toRightOf="@+id/tv_title"
+        app:layout_constraintRight_toLeftOf="@+id/iv_arrow"
+        app:layout_constraintTop_toTopOf="@+id/tv_title" />
+
+    <TextView
+        android:id="@+id/tv_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="4dp"
+        android:ellipsize="middle"
+        android:includeFontPadding="false"
+        android:singleLine="true"
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_13"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintHorizontal_chainStyle="packed"
+        app:layout_constraintLeft_toLeftOf="@+id/tv_title"
+        app:layout_constraintRight_toLeftOf="@+id/tv_course_name"
+        app:layout_constraintTop_toBottomOf="@+id/tv_title"
+        app:layout_constraintWidth_default="wrap"
+        tools:text="张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆张豆豆" />
+
+    <ImageView
+        android:id="@+id/iv_go_chat"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="5dp"
+        android:src="@drawable/icon_chat_small"
+        android:visibility="gone"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_title"
+        app:layout_constraintLeft_toRightOf="@+id/tv_title"
+        app:layout_constraintTop_toTopOf="@+id/tv_title" />
+
+    <TextView
+        android:id="@+id/tv_course_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="5dp"
+        android:layout_marginEnd="5dp"
+        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/tv_name"
+        app:layout_constraintLeft_toRightOf="@+id/tv_name"
+        app:layout_constraintRight_toLeftOf="@+id/iv_arrow"
+        app:layout_constraintTop_toTopOf="@+id/tv_name"
+        tools:text="单簧管" />
+
+
+    <TextView
+        android:id="@+id/tv_course_status"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_14"
+        app:layout_constraintBottom_toTopOf="@+id/view_line"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="未开始" />
+
+    <TextView
+        android:id="@+id/tv_go_start"
+        android:layout_width="wrap_content"
+        android:layout_height="22dp"
+        android:background="@drawable/shape_2dc7aa_11dp"
+        android:gravity="center"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"
+        android:text="开始上课"
+        android:textColor="@color/white"
+        android:textSize="@dimen/sp_12"
+        android:visibility="gone"
+        app:layout_constraintBottom_toTopOf="@+id/view_line"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="开始上课" />
+
+    <ImageView
+        android:id="@+id/iv_arrow"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_arrow_right"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_avatar"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="@+id/iv_avatar" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 4 - 5
teacher/src/main/res/layout/activity_piano_room_detail_layout.xml

@@ -75,15 +75,14 @@
                     android:background="@color/color_f2f2f2"
                     android:background="@color/color_f2f2f2"
                     app:layout_constraintTop_toBottomOf="@+id/iv_time_icon" />
                     app:layout_constraintTop_toBottomOf="@+id/iv_time_icon" />
 
 
-                <TextView
+                <ImageView
+                    android:src="@drawable/icon_piano_room_course"
                     android:id="@+id/iv_avatar"
                     android:id="@+id/iv_avatar"
-                    android:layout_width="42dp"
-                    android:layout_height="42dp"
+                    android:layout_width="54dp"
+                    android:layout_height="54dp"
                     android:layout_marginStart="11dp"
                     android:layout_marginStart="11dp"
                     android:layout_marginTop="20dp"
                     android:layout_marginTop="20dp"
-                    android:background="@drawable/shape_piano_room_course_icon"
                     android:gravity="center"
                     android:gravity="center"
-                    android:text="琴房"
                     android:textColor="@color/white"
                     android:textColor="@color/white"
                     android:textSize="@dimen/sp_14"
                     android:textSize="@dimen/sp_14"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintBottom_toBottomOf="parent"