Browse Source

修改个人主页样式

Pq 7 months ago
parent
commit
01b3b2ad10
32 changed files with 1087 additions and 30 deletions
  1. 6 0
      BaseLibrary/src/main/res/drawable/shape_2dc7aa_51e1d0_6dp.xml
  2. 6 0
      BaseLibrary/src/main/res/drawable/shape_2dc7aa_to_transparent.xml
  3. 2 0
      BaseLibrary/src/main/res/values/colors.xml
  4. 22 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/HomePageVipCourseAdapter.java
  5. 7 0
      teacher/src/main/java/com/cooleshow/teacher/bean/HomePageVipCourseListBean.java
  6. 26 0
      teacher/src/main/java/com/cooleshow/teacher/contract/InterestCoursePageContract.java
  7. 26 0
      teacher/src/main/java/com/cooleshow/teacher/contract/VIPCustomCoursePageContract.java
  8. 62 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/homePage/InterestCoursePagePresenter.java
  9. 62 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/homePage/VIPCustomCoursePagePresenter.java
  10. 21 6
      teacher/src/main/java/com/cooleshow/teacher/ui/homepage/HomePageActivity.java
  11. 100 0
      teacher/src/main/java/com/cooleshow/teacher/ui/homepage/InterestCorrectCoursePageFragment.java
  12. 114 0
      teacher/src/main/java/com/cooleshow/teacher/ui/homepage/VIPCustomCoursePageFragment.java
  13. 90 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/InterestCoursePageHeaderView.java
  14. 92 0
      teacher/src/main/java/com/cooleshow/teacher/widgets/VIPCustomCoursePageHeaderView.java
  15. BIN
      teacher/src/main/res/drawable-xhdpi/icon_del_course_option.png
  16. BIN
      teacher/src/main/res/drawable-xhdpi/icon_interest_course_set.png
  17. BIN
      teacher/src/main/res/drawable-xhdpi/icon_vip_course_set.png
  18. BIN
      teacher/src/main/res/drawable-xhdpi/icon_vip_custom_course_des_tag.png
  19. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_del_course_option.png
  20. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_interest_course_set.png
  21. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_vip_course_set.png
  22. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_vip_custom_course_des_tag.png
  23. 6 0
      teacher/src/main/res/drawable/shape_f2f2f2_tr_bl_8dp.xml
  24. 32 17
      teacher/src/main/res/layout/activity_home_page_new_layout.xml
  25. 35 0
      teacher/src/main/res/layout/fragment_interest_correct_course_page_layout.xml
  26. 35 0
      teacher/src/main/res/layout/fragment_vip_custom_course_page_layout.xml
  27. 107 0
      teacher/src/main/res/layout/item_hp_interest_course_header_layout.xml
  28. 95 0
      teacher/src/main/res/layout/item_hp_vip_course_list_layout.xml
  29. 107 0
      teacher/src/main/res/layout/item_hp_vip_custom_course_header_layout.xml
  30. 31 6
      teacher/src/main/res/layout/view_homepage_tab_layout.xml
  31. 2 0
      teacher/src/main/res/values/strings.xml
  32. 1 1
      usercenter/src/main/java/com/cooleshow/usercenter/helper/UserHelper.java

+ 6 - 0
BaseLibrary/src/main/res/drawable/shape_2dc7aa_51e1d0_6dp.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <gradient android:startColor="@color/color_2dc7aa"
+        android:endColor="@color/color_51e1d0"/>
+    <corners android:radius="6dp"/>
+</shape>

+ 6 - 0
BaseLibrary/src/main/res/drawable/shape_2dc7aa_to_transparent.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="3dp"/>
+    <gradient android:startColor="@color/color_2dc7aa"
+        android:endColor="@color/transparent"/>
+</shape>

+ 2 - 0
BaseLibrary/src/main/res/values/colors.xml

@@ -222,4 +222,6 @@
     <color name="color_66ffffff">#66ffffff</color>
     <color name="color_33ffffff">#33ffffff</color>
     <color name="color_1affffff">#1affffff</color>
+    <color name="color_51e1d0">#51e1d0</color>
+    <color name="color_ff6827">#FF6827</color>
 </resources>

+ 22 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/HomePageVipCourseAdapter.java

@@ -0,0 +1,22 @@
+package com.cooleshow.teacher.adapter;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.HomePageVipCourseListBean;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2024/11/15.
+ */
+public class HomePageVipCourseAdapter extends BaseQuickAdapter<HomePageVipCourseListBean, com.chad.library.adapter.base.viewholder.BaseViewHolder> {
+    public HomePageVipCourseAdapter() {
+        super(R.layout.item_hp_vip_course_list_layout);
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, HomePageVipCourseListBean homePageVipCourseListBean) {
+
+    }
+}

+ 7 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/HomePageVipCourseListBean.java

@@ -0,0 +1,7 @@
+package com.cooleshow.teacher.bean;
+
+/**
+ * Author by pq, Date on 2024/11/15.
+ */
+public class HomePageVipCourseListBean {
+}

+ 26 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/InterestCoursePageContract.java

@@ -0,0 +1,26 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.VideoCourseListBean;
+import com.cooleshow.usercenter.bean.TeacherUserInfo;
+
+/**
+ * 创建日期:2022/6/7 9:41
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface InterestCoursePageContract {
+
+    interface View extends BaseView {
+        void queryVideoCourseGroupSuccess(int page, VideoCourseListBean data);
+
+        void queryVideoCourseGroupError(int page);
+
+        void getTeacherInfoSuccess(TeacherUserInfo data);
+
+    }
+
+    interface Presenter {
+    }
+}

+ 26 - 0
teacher/src/main/java/com/cooleshow/teacher/contract/VIPCustomCoursePageContract.java

@@ -0,0 +1,26 @@
+package com.cooleshow.teacher.contract;
+
+import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.teacher.bean.VideoCourseListBean;
+import com.cooleshow.usercenter.bean.TeacherUserInfo;
+
+/**
+ * 创建日期:2022/6/7 9:41
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public interface VIPCustomCoursePageContract {
+
+    interface View extends BaseView {
+        void queryVideoCourseGroupSuccess(int page, VideoCourseListBean data);
+
+        void queryVideoCourseGroupError(int page);
+
+        void getTeacherInfoSuccess(TeacherUserInfo data);
+
+    }
+
+    interface Presenter {
+    }
+}

+ 62 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/homePage/InterestCoursePagePresenter.java

@@ -0,0 +1,62 @@
+package com.cooleshow.teacher.presenter.homePage;
+
+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.VideoCourseListBean;
+import com.cooleshow.teacher.contract.InterestCoursePageContract;
+import com.cooleshow.teacher.contract.VIPCustomCoursePageContract;
+import com.cooleshow.usercenter.bean.TeacherUserInfo;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * 创建日期:2022/6/7 9:40
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class InterestCoursePagePresenter extends BasePresenter<InterestCoursePageContract.View> implements InterestCoursePageContract.Presenter {
+    public void queryVideoCourseGroup(boolean isLoading) {
+        if (isLoading && getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("auditStatus","PASS");
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).getVideoCourses(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<VideoCourseListBean>(getView()) {
+            @Override
+            protected void onSuccess(VideoCourseListBean data) {
+                if (getView() != null) {
+//                    getView().queryVideoCourseGroupSuccess(page, data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+//                    getView().queryVideoCourseGroupError(page);
+                }
+            }
+        });
+    }
+
+    public void getTeacherUserInfo() {
+        addSubscribe(create(APIService.class).getTeacherUserInfo(), new BaseObserver<TeacherUserInfo>(getView()) {
+            @Override
+            protected void onSuccess(TeacherUserInfo data) {
+                if (getView() != null) {
+                    getView().getTeacherInfoSuccess(data);
+                }
+            }
+        });
+    }
+}

+ 62 - 0
teacher/src/main/java/com/cooleshow/teacher/presenter/homePage/VIPCustomCoursePagePresenter.java

@@ -0,0 +1,62 @@
+package com.cooleshow.teacher.presenter.homePage;
+
+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.VideoCourseListBean;
+import com.cooleshow.teacher.contract.VIPCustomCoursePageContract;
+import com.cooleshow.teacher.contract.VideoCoursePageContract;
+import com.cooleshow.usercenter.bean.TeacherUserInfo;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/**
+ * 创建日期:2022/6/7 9:40
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class VIPCustomCoursePagePresenter extends BasePresenter<VIPCustomCoursePageContract.View> implements VIPCustomCoursePageContract.Presenter {
+    public void queryVideoCourseGroup(boolean isLoading) {
+        if (isLoading && getView() != null) {
+            getView().showLoading();
+        }
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("auditStatus","PASS");
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).getVideoCourses(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<VideoCourseListBean>(getView()) {
+            @Override
+            protected void onSuccess(VideoCourseListBean data) {
+                if (getView() != null) {
+//                    getView().queryVideoCourseGroupSuccess(page, data);
+                }
+            }
+
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+                if (getView() != null) {
+//                    getView().queryVideoCourseGroupError(page);
+                }
+            }
+        });
+    }
+
+    public void getTeacherUserInfo() {
+        addSubscribe(create(APIService.class).getTeacherUserInfo(), new BaseObserver<TeacherUserInfo>(getView()) {
+            @Override
+            protected void onSuccess(TeacherUserInfo data) {
+                if (getView() != null) {
+                    getView().getTeacherInfoSuccess(data);
+                }
+            }
+        });
+    }
+}

+ 21 - 6
teacher/src/main/java/com/cooleshow/teacher/ui/homepage/HomePageActivity.java

@@ -50,7 +50,7 @@ import androidx.fragment.app.Fragment;
  */
 @Route(path = RouterPath.MineCenter.HOME_PAGE)
 public class HomePageActivity extends BaseMVPActivity<ActivityHomePageNewLayoutBinding, HomePagePresenter> implements HomePageContract.HomePageView, View.OnClickListener {
-    public static final String[] titles = new String[]{"个人风采", "陪练课", "直播课", "视频课", "乐谱"};
+    public static final String[] titles = new String[]{"VIP定制课", "趣纠课", "直播课", "视频课", "乐谱"};
     public static final int EXPAND_MODE = 1;
     public static final int COLLAP_MODE = 2;
 
@@ -135,6 +135,8 @@ public class HomePageActivity extends BaseMVPActivity<ActivityHomePageNewLayoutB
                 if (tab != null && tab.getCustomView() != null) {
                     View customView = tab.getCustomView();
                     TextView tv_text = customView.findViewById(R.id.tv_text);
+                    View view_indicator = customView.findViewById(R.id.view_indicator);
+                    view_indicator.setVisibility(View.VISIBLE);
                     tv_text.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_333333));
                     tv_text.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
                     tv_text.setTextSize(17);
@@ -146,6 +148,8 @@ public class HomePageActivity extends BaseMVPActivity<ActivityHomePageNewLayoutB
                 if (tab != null && tab.getCustomView() != null) {
                     View customView = tab.getCustomView();
                     TextView tv_text = customView.findViewById(R.id.tv_text);
+                    View view_indicator = customView.findViewById(R.id.view_indicator);
+                    view_indicator.setVisibility(View.GONE);
                     tv_text.setTextColor(getResources().getColor(com.cooleshow.base.R.color.color_666666));
                     tv_text.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
                     tv_text.setTextSize(15);
@@ -156,13 +160,13 @@ public class HomePageActivity extends BaseMVPActivity<ActivityHomePageNewLayoutB
             public void onTabReselected(TabLayout.Tab tab) {
             }
         });
-        MineStyleFragment mineStyleFragment = new MineStyleFragment();
-        SparringCoursePageFragment sparringCoursePageFragment = new SparringCoursePageFragment();
+        VIPCustomCoursePageFragment vipCustomCoursePageFragment = new VIPCustomCoursePageFragment();
+        InterestCorrectCoursePageFragment  interestCorrectCoursePageFragment = new InterestCorrectCoursePageFragment();
         LiveCoursePageFragment liveCoursePageFragment = new LiveCoursePageFragment();
         VideoCoursePageFragment videoCoursePageFragment = new VideoCoursePageFragment();
         mMusicPageFragment = new SheetMusicPageFragment();
-        fragments.add(mineStyleFragment);
-        fragments.add(sparringCoursePageFragment);
+        fragments.add(vipCustomCoursePageFragment);
+        fragments.add(interestCorrectCoursePageFragment);
         fragments.add(liveCoursePageFragment);
         fragments.add(videoCoursePageFragment);
         fragments.add(mMusicPageFragment);
@@ -239,7 +243,18 @@ public class HomePageActivity extends BaseMVPActivity<ActivityHomePageNewLayoutB
         if (mMusicPageFragment != null) {
             mMusicPageFragment.setMusicPersonCertStatus(info.entryStatus);
         }
-        viewBinding.tvIntroduce.setText(info.getIntroduction());
+        if(TextUtils.isEmpty(info.getIntroduction())){
+            viewBinding.tvIntroduce.setVisibility(View.GONE);
+            viewBinding.selfIntroductionEmpty.setVisibility(View.VISIBLE);
+            viewBinding.selfIntroductionEmpty.setOpeBtnClickListener(v -> {
+                ARouter.getInstance().build(RouterPath.MineCenter.MINE_STYLE_PAGE)
+                        .navigation();
+            });
+        }else{
+            viewBinding.tvIntroduce.setText(info.getIntroduction());
+            viewBinding.tvIntroduce.setVisibility(View.VISIBLE);
+            viewBinding.selfIntroductionEmpty.setVisibility(View.GONE);
+        }
 //        viewBinding.tvTitle.setText(String.format("%s的主页", info.username));
         //星级
         if (info.starGrade > 0) {

+ 100 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/homepage/InterestCorrectCoursePageFragment.java

@@ -0,0 +1,100 @@
+package com.cooleshow.teacher.ui.homepage;
+
+import android.view.View;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.listener.OnItemClickListener;
+import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.base.widgets.EmptyViewLayout;
+import com.cooleshow.teacher.adapter.HomePageVipCourseAdapter;
+import com.cooleshow.teacher.bean.VideoCourseListBean;
+import com.cooleshow.teacher.contract.VideoCoursePageContract;
+import com.cooleshow.teacher.databinding.FragmentInterestCorrectCoursePageLayoutBinding;
+import com.cooleshow.teacher.databinding.FragmentVipCustomCoursePageLayoutBinding;
+import com.cooleshow.teacher.presenter.homePage.InterestCoursePagePresenter;
+import com.cooleshow.teacher.presenter.homePage.VIPCustomCoursePagePresenter;
+import com.cooleshow.usercenter.bean.TeacherUserInfo;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2022/5/9.
+ */
+public class InterestCorrectCoursePageFragment extends BaseMVPFragment<FragmentInterestCorrectCoursePageLayoutBinding, InterestCoursePagePresenter> implements VideoCoursePageContract.VideoCoursePageView, View.OnClickListener {
+    private HomePageVipCourseAdapter mPageVipCourseAdapter;
+
+    @Override
+    protected void initView(View rootView) {
+        RecyclerView rvAddress = mViewBinding.recyclerView;
+        LinearLayoutManager manager = new LinearLayoutManager(getContext());
+        rvAddress.setLayoutManager(manager);
+        mPageVipCourseAdapter = new HomePageVipCourseAdapter();
+        EmptyViewLayout mEmptyView = new EmptyViewLayout(getContext());
+        mEmptyView.setContent(com.cooleshow.base.R.drawable.icon_empty_course, "暂无课程");
+        mPageVipCourseAdapter.setEmptyView(mEmptyView);
+        rvAddress.setAdapter(mPageVipCourseAdapter);
+        mPageVipCourseAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+            }
+        });
+
+    }
+
+
+    @Override
+    protected void initData() {
+        mViewBinding.refreshLayout.setOnRefreshListener(new OnRefreshListener() {
+            @Override
+            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
+                queryCourse(true);
+            }
+        });
+
+    }
+
+    private void queryCourse(boolean isLoading) {
+        presenter.queryVideoCourseGroup(isLoading);
+    }
+
+    @Override
+    protected FragmentInterestCorrectCoursePageLayoutBinding getLayoutView() {
+        return FragmentInterestCorrectCoursePageLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected InterestCoursePagePresenter createPresenter() {
+        return new InterestCoursePagePresenter();
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+        }
+    }
+
+    @Override
+    public void queryVideoCourseGroupSuccess(int page, VideoCourseListBean data) {
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+    }
+
+    @Override
+    public void queryVideoCourseGroupError(int page) {
+        if (isDetached()) {
+            return;
+        }
+    }
+
+    @Override
+    public void getTeacherInfoSuccess(TeacherUserInfo teacherUserInfo) {
+
+    }
+}

+ 114 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/homepage/VIPCustomCoursePageFragment.java

@@ -0,0 +1,114 @@
+package com.cooleshow.teacher.ui.homepage;
+
+import android.text.TextUtils;
+import android.view.View;
+
+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.widgets.EmptyViewLayout;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.adapter.HomePageVipCourseAdapter;
+import com.cooleshow.teacher.adapter.MineVideoCourseAdapter;
+import com.cooleshow.teacher.bean.VideoCourseListBean;
+import com.cooleshow.teacher.constants.TeacherInfoConstants;
+import com.cooleshow.teacher.contract.VIPCustomCoursePageContract;
+import com.cooleshow.teacher.contract.VideoCoursePageContract;
+import com.cooleshow.teacher.databinding.FragmentVideoCoursePageLayoutBinding;
+import com.cooleshow.teacher.databinding.FragmentVipCustomCoursePageLayoutBinding;
+import com.cooleshow.teacher.presenter.homePage.VIPCustomCoursePagePresenter;
+import com.cooleshow.teacher.presenter.homePage.VideoCoursePagePresenter;
+import com.cooleshow.teacher.ui.course.MineVideoCourseActivity;
+import com.cooleshow.teacher.widgets.VIPCustomCoursePageHeaderView;
+import com.cooleshow.usercenter.bean.TeacherUserInfo;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2022/5/9.
+ */
+public class VIPCustomCoursePageFragment extends BaseMVPFragment<FragmentVipCustomCoursePageLayoutBinding, VIPCustomCoursePagePresenter> implements VIPCustomCoursePageContract.View, View.OnClickListener {
+    private HomePageVipCourseAdapter mPageVipCourseAdapter;
+
+    @Override
+    protected void initView(View rootView) {
+        RecyclerView rvAddress = mViewBinding.recyclerView;
+        LinearLayoutManager manager = new LinearLayoutManager(getContext());
+        rvAddress.setLayoutManager(manager);
+        mPageVipCourseAdapter = new HomePageVipCourseAdapter();
+        EmptyViewLayout mEmptyView = new EmptyViewLayout(getContext());
+        mEmptyView.setContent(com.cooleshow.base.R.drawable.icon_empty_course, "暂无课程");
+        mPageVipCourseAdapter.setEmptyView(mEmptyView);
+        rvAddress.setAdapter(mPageVipCourseAdapter);
+
+        mPageVipCourseAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+            }
+        });
+
+    }
+
+
+    @Override
+    protected void initData() {
+        mViewBinding.refreshLayout.setOnRefreshListener(new OnRefreshListener() {
+            @Override
+            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
+                queryCourse(true);
+            }
+        });
+
+    }
+
+    private void queryCourse(boolean isLoading) {
+        presenter.queryVideoCourseGroup(isLoading);
+    }
+
+    @Override
+    protected FragmentVipCustomCoursePageLayoutBinding getLayoutView() {
+        return FragmentVipCustomCoursePageLayoutBinding.inflate(getLayoutInflater());
+    }
+
+    @Override
+    protected VIPCustomCoursePagePresenter createPresenter() {
+        return new VIPCustomCoursePagePresenter();
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+        }
+    }
+
+    @Override
+    public void queryVideoCourseGroupSuccess(int page, VideoCourseListBean data) {
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+    }
+
+    @Override
+    public void queryVideoCourseGroupError(int page) {
+        if (isDetached()) {
+            return;
+        }
+    }
+
+    @Override
+    public void getTeacherInfoSuccess(TeacherUserInfo teacherUserInfo) {
+
+    }
+}

+ 90 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/InterestCoursePageHeaderView.java

@@ -0,0 +1,90 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.cooleshow.teacher.R;
+import com.cooleshow.usercenter.helper.UserHelper;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.widget.NestedScrollView;
+
+/**
+ * Author by pq, Date on 2024/11/15.
+ */
+public class InterestCoursePageHeaderView extends NestedScrollView implements View.OnClickListener {
+    public static final String TIP_CACHE_KEY = "interest_tip_key";
+    private ConstraintLayout mCsDes;
+    private ImageView mIvCloseDes;
+    private TextView mTvNotRemind;
+    private FrameLayout mFlSetting;
+
+    public InterestCoursePageHeaderView(@NonNull Context context) {
+        this(context, null);
+    }
+
+    public InterestCoursePageHeaderView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public InterestCoursePageHeaderView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        LayoutInflater.from(getContext()).inflate(R.layout.item_hp_interest_course_header_layout, this);
+        initView();
+        initData();
+    }
+
+
+    private void initView() {
+        mCsDes = findViewById(R.id.cs_des);
+        mIvCloseDes = findViewById(R.id.iv_close_des);
+        mTvNotRemind = findViewById(R.id.tv_not_remind);
+        mFlSetting = findViewById(R.id.fl_setting);
+    }
+
+    private void initData() {
+        mIvCloseDes.setOnClickListener(this);
+        mTvNotRemind.setOnClickListener(this);
+        mFlSetting.setOnClickListener(this);
+        boolean showTip = isShowTip();
+        mCsDes.setVisibility(showTip ? View.VISIBLE : View.GONE);
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.iv_close_des) {
+            mCsDes.setVisibility(View.GONE);
+            return;
+        }
+        if (id == R.id.tv_not_remind) {
+            mCsDes.setVisibility(View.GONE);
+            updateCache();
+            return;
+        }
+        if (id == R.id.fl_setting) {
+            return;
+        }
+    }
+
+    private void updateCache() {
+        String userId = UserHelper.getUserId();
+        UserHelper.setCustomCache(TIP_CACHE_KEY + "_" + userId, 1);
+    }
+
+    private boolean isShowTip() {
+        String userId = UserHelper.getUserId();
+        return UserHelper.getCustomCacheForInt(TIP_CACHE_KEY + "_" + userId) == 0;
+    }
+}

+ 92 - 0
teacher/src/main/java/com/cooleshow/teacher/widgets/VIPCustomCoursePageHeaderView.java

@@ -0,0 +1,92 @@
+package com.cooleshow.teacher.widgets;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.cooleshow.teacher.R;
+import com.cooleshow.usercenter.helper.UserHelper;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.core.widget.NestedScrollView;
+
+/**
+ * Author by pq, Date on 2024/11/15.
+ */
+public class VIPCustomCoursePageHeaderView extends NestedScrollView implements View.OnClickListener {
+    public static final String TIP_CACHE_KEY = "vip_course_tip_key";
+    private ConstraintLayout mCsDes;
+    private ImageView mIvCloseDes;
+    private TextView mTvNotRemind;
+    private FrameLayout mFlSetting;
+
+
+    public VIPCustomCoursePageHeaderView(@NonNull Context context) {
+        this(context,null);
+    }
+
+    public VIPCustomCoursePageHeaderView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs,-1);
+    }
+
+    public VIPCustomCoursePageHeaderView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init(){
+        LayoutInflater.from(getContext()).inflate(R.layout.item_hp_vip_custom_course_header_layout,this);
+        initView();
+        initData();
+    }
+
+
+    private void initView() {
+        mCsDes = findViewById(R.id.cs_des);
+        mIvCloseDes = findViewById(R.id.iv_close_des);
+        mTvNotRemind = findViewById(R.id.tv_not_remind);
+        mFlSetting = findViewById(R.id.fl_setting);
+    }
+
+    private void initData() {
+        mIvCloseDes.setOnClickListener(this);
+        mTvNotRemind.setOnClickListener(this);
+        mFlSetting.setOnClickListener(this);
+        boolean showTip = isShowTip();
+        mCsDes.setVisibility(showTip ? View.VISIBLE : View.GONE);
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.iv_close_des) {
+            mCsDes.setVisibility(View.GONE);
+            return;
+        }
+        if (id == R.id.tv_not_remind) {
+            mCsDes.setVisibility(View.GONE);
+            updateCache();
+            return;
+        }
+        if (id == R.id.fl_setting) {
+            return;
+        }
+    }
+
+    private void updateCache() {
+        String userId = UserHelper.getUserId();
+        UserHelper.setCustomCache(TIP_CACHE_KEY + "_" + userId, 1);
+    }
+
+    private boolean isShowTip() {
+        String userId = UserHelper.getUserId();
+        return UserHelper.getCustomCacheForInt(TIP_CACHE_KEY + "_" + userId) == 0;
+    }
+}

BIN
teacher/src/main/res/drawable-xhdpi/icon_del_course_option.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_interest_course_set.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_vip_course_set.png


BIN
teacher/src/main/res/drawable-xhdpi/icon_vip_custom_course_des_tag.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_del_course_option.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_interest_course_set.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_vip_course_set.png


BIN
teacher/src/main/res/drawable-xxhdpi/icon_vip_custom_course_des_tag.png


+ 6 - 0
teacher/src/main/res/drawable/shape_f2f2f2_tr_bl_8dp.xml

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

+ 32 - 17
teacher/src/main/res/layout/activity_home_page_new_layout.xml

@@ -345,30 +345,46 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"/>
                 </FrameLayout>
-
-                <TextView
-                    android:padding="12dp"
-                    app:layout_constraintLeft_toLeftOf="parent"
-                    tools:text="毕业于中央音乐学员长笛专业,师从央音长笛系。曾获得2016年锦绣杯长笛大赛冠军。自2018年起研究长笛启蒙、考级到专业考试教育。总结出一套适合各个阶段需要的教学方式。所教学员考级通过率100%,专业院校复试率92%。"
-                    android:background="@drawable/bg_white_6dp"
+                <FrameLayout
+                    android:id="@+id/fl_introduce"
                     android:layout_marginTop="12dp"
                     android:layout_marginEnd="14dp"
                     android:layout_marginStart="14dp"
-                    android:text="暂无介绍"
+                    android:background="@drawable/bg_white_6dp"
                     app:layout_constraintRight_toRightOf="parent"
                     app:layout_constraintTop_toBottomOf="@+id/fl_style"
-                    android:textColor="@color/color_777777"
-                    android:textSize="@dimen/sp_13"
-                    android:id="@+id/tv_introduce"
-                    android:layout_width="0dp"
-                    android:minHeight="98dp"
-                    android:layout_height="wrap_content"/>
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content">
+                    <TextView
+                        android:padding="12dp"
+                        app:layout_constraintLeft_toLeftOf="parent"
+                        tools:text="毕业于中央音乐学员长笛专业,师从央音长笛系。曾获得2016年锦绣杯长笛大赛冠军。自2018年起研究长笛启蒙、考级到专业考试教育。总结出一套适合各个阶段需要的教学方式。所教学员考级通过率100%,专业院校复试率92%。"
+                        android:text="暂无介绍"
+                        android:textColor="@color/color_777777"
+                        android:textSize="@dimen/sp_13"
+                        android:id="@+id/tv_introduce"
+                        android:layout_width="match_parent"
+                        android:minHeight="98dp"
+                        android:layout_height="wrap_content"/>
+
+                    <com.cooleshow.teacher.widgets.StyleEmptyView
+                        android:id="@+id/self_introduction_empty"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:paddingBottom="@dimen/dp_11"
+                        android:visibility="gone"
+                        app:empty_icon="@mipmap/teacher_introduce_empty_icon"
+                        app:empty_text="@string/introduction_empty_text"
+                        app:layout_constraintTop_toBottomOf="@+id/iv_self_introduction"
+                        app:ope_btn="@string/goto_write"
+                        tools:visibility="gone" />
+                </FrameLayout>
 
                 <View
                     android:id="@+id/view_line_bottom"
                     android:layout_marginTop="12dp"
                     app:layout_constraintLeft_toLeftOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/tv_introduce"
+                    app:layout_constraintTop_toBottomOf="@+id/fl_introduce"
                     android:layout_width="1px"
                     android:layout_height="1px"/>
             </androidx.constraintlayout.widget.ConstraintLayout>
@@ -420,10 +436,9 @@
             app:layout_constraintLeft_toLeftOf="parent"
             app:tabBackground="@color/transparent"
             app:tabGravity="fill"
-            app:tabIndicator="@drawable/custom_indicator_drawable"
-            app:tabIndicatorColor="@color/colorAccent"
+            app:tabIndicatorColor="@color/transparent"
             app:tabIndicatorFullWidth="false"
-            app:tabIndicatorHeight="4dp"
+            app:tabIndicatorHeight="0dp"
             app:tabMaxWidth="0dp"
             app:tabMode="scrollable"
             app:tabPaddingEnd="0dp"

+ 35 - 0
teacher/src/main/res/layout/fragment_interest_correct_course_page_layout.xml

@@ -0,0 +1,35 @@
+<?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:orientation="vertical"
+    android:paddingStart="14dp"
+    android:paddingEnd="14dp">
+
+    <com.cooleshow.teacher.widgets.InterestCoursePageHeaderView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:srlEnableLoadMore="false">
+
+
+        <androidx.recyclerview.widget.RecyclerView
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:id="@+id/recyclerView"
+            app:layout_constraintTop_toBottomOf="@+id/fl_setting"
+            app:layout_constraintLeft_toLeftOf="parent"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="12dp"
+            android:overScrollMode="never"
+            android:scrollbars="none" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+</LinearLayout>

+ 35 - 0
teacher/src/main/res/layout/fragment_vip_custom_course_page_layout.xml

@@ -0,0 +1,35 @@
+<?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:orientation="vertical"
+    android:paddingStart="14dp"
+    android:paddingEnd="14dp">
+
+    <com.cooleshow.teacher.widgets.VIPCustomCoursePageHeaderView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:srlEnableLoadMore="false">
+
+
+            <androidx.recyclerview.widget.RecyclerView
+                app:layout_constraintBottom_toBottomOf="parent"
+                android:id="@+id/recyclerView"
+                app:layout_constraintTop_toBottomOf="@+id/fl_setting"
+                app:layout_constraintLeft_toLeftOf="parent"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_marginTop="12dp"
+                android:overScrollMode="never"
+                android:scrollbars="none" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+</LinearLayout>

+ 107 - 0
teacher/src/main/res/layout/item_hp_interest_course_header_layout.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cs_des"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_white_6dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/iv_tag"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="12dp"
+            android:layout_marginTop="12dp"
+            android:src="@drawable/icon_vip_custom_course_des_tag"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_des_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingStart="6dp"
+            android:text="什么是趣纠课?"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_15"
+            app:layout_constraintBottom_toBottomOf="@+id/iv_tag"
+            app:layout_constraintLeft_toRightOf="@+id/iv_tag"
+            app:layout_constraintTop_toTopOf="@+id/iv_tag" />
+
+        <ImageView
+            android:id="@+id/iv_close_des"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="13dp"
+            android:src="@drawable/icon_close_gray"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_des_title"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/tv_des_title" />
+
+        <TextView
+            android:id="@+id/tv_des"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:paddingStart="13dp"
+            android:paddingTop="10dp"
+            android:paddingEnd="13dp"
+            android:text="@string/interest_correct_course_des"
+            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_des_title" />
+
+
+        <View
+            android:id="@+id/view_line"
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginStart="13dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginEnd="13dp"
+            android:background="@color/color_f2f2f2"
+            app:layout_constraintTop_toBottomOf="@+id/tv_des" />
+
+        <TextView
+            android:id="@+id/tv_not_remind"
+            android:layout_width="0dp"
+            android:layout_height="38dp"
+            android:gravity="center"
+            android:text="不再提醒"
+            android:textColor="@color/color_2dc7aa"
+            android:textSize="@dimen/sp_13"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/view_line" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <FrameLayout
+        android:id="@+id/fl_setting"
+        android:layout_width="match_parent"
+        android:layout_height="36dp"
+        android:layout_marginTop="12dp"
+        android:background="@drawable/shape_2dc7aa_51e1d0_6dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/cs_des">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:drawableStart="@drawable/icon_interest_course_set"
+            android:drawablePadding="4dp"
+            android:text="设置趣纠课"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_15" />
+    </FrameLayout>
+
+</LinearLayout>

+ 95 - 0
teacher/src/main/res/layout/item_hp_vip_course_list_layout.xml

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:paddingBottom="12dp"
+    android:background="@drawable/bg_white_6dp"
+    android:layout_height="wrap_content">
+
+    <com.cooleshow.base.widgets.QMUIRadiusImageView
+        android:layout_width="50dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        android:layout_marginTop="12dp"
+        android:layout_marginStart="12dp"
+        android:id="@+id/iv_icon"
+        app:qmui_corner_radius="6dp"
+        android:layout_height="50dp"/>
+
+    <TextView
+        app:layout_constraintRight_toLeftOf="@+id/fl_del"
+        android:includeFontPadding="false"
+        android:layout_marginStart="10dp"
+        android:id="@+id/tv_title"
+        app:layout_constraintLeft_toRightOf="@+id/iv_icon"
+        app:layout_constraintTop_toTopOf="@+id/iv_icon"
+        tools:text="长笛VIP定制课"
+        app:layout_constraintVertical_chainStyle="packed"
+        app:layout_constraintBottom_toTopOf="@+id/tv_price"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_15"
+        android:layout_width="0dp"
+        android:maxLines="1"
+        android:ellipsize="end"
+        android:layout_marginEnd="5dp"
+        android:layout_height="wrap_content"
+        tools:ignore="MissingConstraints" />
+
+
+    <TextView
+        android:id="@+id/tv_price_unit"
+        app:layout_constraintBaseline_toBaselineOf="@+id/tv_price"
+        app:layout_constraintLeft_toLeftOf="@+id/tv_title"
+        tools:text="¥"
+        android:text="¥"
+        android:textColor="@color/color_ff6827"
+        android:textSize="@dimen/sp_12"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        tools:ignore="MissingConstraints" />
+
+    <TextView
+        android:paddingStart="3dp"
+        android:layout_marginTop="6dp"
+        android:id="@+id/tv_price"
+        app:layout_constraintBottom_toBottomOf="@+id/iv_icon"
+        app:layout_constraintTop_toBottomOf="@+id/tv_title"
+        app:layout_constraintLeft_toRightOf="@+id/tv_price_unit"
+        tools:text="280"
+        android:textColor="@color/color_ff6827"
+        android:textSize="@dimen/sp_14"
+        android:includeFontPadding="false"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        tools:ignore="MissingConstraints" />
+
+
+    <TextView
+        android:paddingStart="2dp"
+        android:layout_marginTop="6dp"
+        android:id="@+id/tv_time"
+        app:layout_constraintBaseline_toBaselineOf="@+id/tv_price"
+        app:layout_constraintLeft_toRightOf="@+id/tv_price"
+        tools:text="/25分钟"
+        android:includeFontPadding="false"
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_14"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        tools:ignore="MissingConstraints" />
+
+    <FrameLayout
+        android:id="@+id/fl_del"
+        android:padding="4dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        android:background="@drawable/shape_f2f2f2_tr_bl_8dp"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content">
+        <ImageView
+            android:src="@drawable/icon_del_course_option"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+    </FrameLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 107 - 0
teacher/src/main/res/layout/item_hp_vip_custom_course_header_layout.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cs_des"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bg_white_6dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <ImageView
+            android:id="@+id/iv_tag"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="12dp"
+            android:layout_marginTop="12dp"
+            android:src="@drawable/icon_vip_custom_course_des_tag"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_des_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingStart="6dp"
+            android:text="什么是VIP定制课?"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_15"
+            app:layout_constraintBottom_toBottomOf="@+id/iv_tag"
+            app:layout_constraintLeft_toRightOf="@+id/iv_tag"
+            app:layout_constraintTop_toTopOf="@+id/iv_tag" />
+
+        <ImageView
+            android:id="@+id/iv_close_des"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:padding="13dp"
+            android:src="@drawable/icon_close_gray"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_des_title"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="@+id/tv_des_title" />
+
+        <TextView
+            android:id="@+id/tv_des"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:paddingStart="13dp"
+            android:paddingTop="10dp"
+            android:paddingEnd="13dp"
+            android:text="@string/vip_custom_course_des"
+            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_des_title" />
+
+
+        <View
+            android:id="@+id/view_line"
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginStart="13dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginEnd="13dp"
+            android:background="@color/color_f2f2f2"
+            app:layout_constraintTop_toBottomOf="@+id/tv_des" />
+
+        <TextView
+            android:id="@+id/tv_not_remind"
+            android:layout_width="0dp"
+            android:layout_height="38dp"
+            android:gravity="center"
+            android:text="不再提醒"
+            android:textColor="@color/color_2dc7aa"
+            android:textSize="@dimen/sp_13"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/view_line" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <FrameLayout
+        android:id="@+id/fl_setting"
+        android:layout_width="match_parent"
+        android:layout_height="36dp"
+        android:layout_marginTop="12dp"
+        android:background="@drawable/shape_2dc7aa_51e1d0_6dp"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/cs_des">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:drawableStart="@drawable/icon_vip_course_set"
+            android:drawablePadding="4dp"
+            android:text="设置VIP定制课"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_15" />
+    </FrameLayout>
+
+</LinearLayout>

+ 31 - 6
teacher/src/main/res/layout/view_homepage_tab_layout.xml

@@ -1,15 +1,40 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_height="wrap_content"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+    <View
+        android:visibility="gone"
+        android:id="@+id/view_indicator"
+        android:layout_marginBottom="1dp"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_text"
+        android:background="@drawable/shape_2dc7aa_to_transparent"
+        app:layout_constraintRight_toRightOf="@+id/tv_text"
+        app:layout_constraintLeft_toLeftOf="@+id/tv_text"
+        android:layout_width="0dp"
+        android:layout_height="6dp"/>
+
     <TextView
-        android:minWidth="64dp"
+        tools:text="VIP定制课"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:minWidth="32dp"
         android:gravity="center"
         android:includeFontPadding="false"
         android:textSize="@dimen/sp_15"
         android:textColor="@color/color_666666"
         android:id="@+id/tv_text"
-        android:layout_width="match_parent"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
-</FrameLayout>
+
+    <View
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:layout_width="74dp"
+        android:layout_height="1dp"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -53,5 +53,7 @@
     <string name="withdraw_protocol_tip">结算前需签署《结算协议》和绑定银行卡</string>
     <string name="icp_str">ICP备案号:鄂ICP备2021020787号-5A</string>
     <string name="app_info_record">增值电信业务经营许可证:鄂B2-20231246\n网络安全等级保护备案号:42010043158-24001\nCopyright@2021-2024|酷乐秀 colexiu.com 版权所有</string>
+    <string name="vip_custom_course_des">VIP定制课是专为每位学员量身打造的1v1线上课程。老师将根据您的学习需求和希望达到的成果,定制专属的教学内容。为了确保最佳的上课体验,建议您在约课前与老师充分沟通,达成一致后,根据老师的空闲时间安排上课时间。</string>
+    <string name="interest_correct_course_des">趣纠课是老师在您的练习过程中提供的个性化指导服务,旨在纠正错误并帮助您更好地理解和掌握所学内容。上课形式为1v1线上课程。</string>
 
 </resources>

+ 1 - 1
usercenter/src/main/java/com/cooleshow/usercenter/helper/UserHelper.java

@@ -323,7 +323,7 @@ public class UserHelper {
     }
 
     public static int getCustomCacheForInt(String key) {
-        return SPUtils.getInstance().getInt(key + "_custom", -1);
+        return SPUtils.getInstance().getInt(key + "_custom", 0);
     }
 
     public static int getCustomCacheForInt(String key, int defaultValue) {