Browse Source

添加老师端首页UI逻辑

Pq 3 years ago
parent
commit
b0ffeddbaa
38 changed files with 684 additions and 40 deletions
  1. 1 1
      BaseLibrary/src/main/java/com/cooleshow/base/data/net/RetrofitFactory.kt
  2. 80 0
      BaseLibrary/src/main/java/com/cooleshow/base/widgets/BadgeIconListView.java
  3. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_live_badge_able.png
  4. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_live_badge_enable.png
  5. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_music_sheet_badge_able.png
  6. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_music_sheet_badge_enable.png
  7. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_style_badge_able.png
  8. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_style_badge_enable.png
  9. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_video_course_badge_able.png
  10. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_video_course_badge_enable.png
  11. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_vip_able.png
  12. BIN
      BaseLibrary/src/main/res/drawable-xhdpi/icon_vip_enable.png
  13. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_live_badge_able.png
  14. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_live_badge_enable.png
  15. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_music_sheet_badge_able.png
  16. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_music_sheet_badge_enable.png
  17. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_style_badge_able.png
  18. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_style_badge_enable.png
  19. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_video_course_badge_able.png
  20. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_video_course_badge_enable.png
  21. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_vip_able.png
  22. BIN
      BaseLibrary/src/main/res/drawable-xxhdpi/icon_vip_enable.png
  23. 46 0
      BaseLibrary/src/main/res/layout/view_badge_list_layout.xml
  24. 34 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/HomeMenuItemAdapter.java
  25. 40 0
      teacher/src/main/java/com/cooleshow/teacher/adapter/HomeMenuPageAdapter.java
  26. 9 0
      teacher/src/main/java/com/cooleshow/teacher/api/APIService.java
  27. 185 0
      teacher/src/main/java/com/cooleshow/teacher/bean/HomeMenuBean.java
  28. 3 0
      teacher/src/main/java/com/cooleshow/teacher/contract/HomeContract.java
  29. 24 0
      teacher/src/main/java/com/cooleshow/teacher/presenter/main/HomePresenter.java
  30. 48 3
      teacher/src/main/java/com/cooleshow/teacher/ui/main/HomeFragment.kt
  31. 81 0
      teacher/src/main/java/com/cooleshow/teacher/ui/main/HomeMenuFragment.java
  32. BIN
      teacher/src/main/res/drawable-xhdpi/icon_arrow_background.png
  33. BIN
      teacher/src/main/res/drawable-xhdpi/icon_home_un_certification.png
  34. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_arrow_background.png
  35. BIN
      teacher/src/main/res/drawable-xxhdpi/icon_home_un_certification.png
  36. 96 36
      teacher/src/main/res/layout/fragment_home_layout.xml
  37. 16 0
      teacher/src/main/res/layout/fragment_home_menu.xml
  38. 21 0
      teacher/src/main/res/layout/layout_home_menu_item.xml

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

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

+ 80 - 0
BaseLibrary/src/main/java/com/cooleshow/base/widgets/BadgeIconListView.java

@@ -0,0 +1,80 @@
+package com.cooleshow.base.widgets;
+
+import android.content.Context;
+import android.media.Image;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+
+import com.cooleshow.base.R;
+
+import androidx.annotation.Nullable;
+
+/**
+ * Author by pq, Date on 2022/7/25.
+ */
+public class BadgeIconListView extends LinearLayout {
+
+    private ImageView mIvVipIcon;
+    private ImageView mIvStyleIcon;
+    private ImageView mIvMusicSheetIcon;
+    private ImageView mIvVideoCourseIcon;
+    private ImageView mIvLiveIcon;
+
+    public BadgeIconListView(Context context) {
+        this(context, null);
+    }
+
+    public BadgeIconListView(Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public BadgeIconListView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        setOrientation(HORIZONTAL);
+        LayoutInflater.from(getContext()).inflate(R.layout.view_badge_list_layout, this);
+        mIvVipIcon = findViewById(R.id.iv_vip_icon);
+        mIvStyleIcon = findViewById(R.id.iv_style_icon);
+        mIvMusicSheetIcon = findViewById(R.id.iv_music_sheet_icon);
+        mIvVideoCourseIcon = findViewById(R.id.iv_video_course_icon);
+        mIvLiveIcon = findViewById(R.id.iv_live_icon);
+    }
+
+    public void setVipIcon(boolean isVip) {
+        if (mIvVipIcon != null) {
+            mIvVipIcon.setImageResource(isVip ? R.drawable.icon_vip_able : R.drawable.icon_vip_enable);
+        }
+    }
+
+    public void setStyleIcon(boolean isStylePass) {
+        if (mIvStyleIcon != null) {
+            mIvStyleIcon.setImageResource(isStylePass ? R.drawable.icon_style_badge_able : R.drawable.icon_style_badge_enable);
+        }
+    }
+
+    public void setMusicSheetIcon(boolean isPass) {
+        if (mIvMusicSheetIcon != null) {
+            mIvMusicSheetIcon.setImageResource(isPass ? R.drawable.icon_music_sheet_badge_able : R.drawable.icon_music_sheet_badge_enable);
+        }
+    }
+
+    public void setLiveIcon(boolean isPass) {
+        if (mIvVideoCourseIcon != null) {
+            mIvVideoCourseIcon.setImageResource(isPass ? R.drawable.icon_video_course_badge_able : R.drawable.icon_video_course_badge_enable);
+        }
+    }
+
+
+    public void setVideoCourseIcon(boolean isPass) {
+        if (mIvLiveIcon != null) {
+            mIvLiveIcon.setImageResource(isPass ? R.drawable.icon_live_badge_able : R.drawable.icon_live_badge_enable);
+        }
+    }
+
+}

BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_live_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_live_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_music_sheet_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_music_sheet_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_style_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_style_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_video_course_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_video_course_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_vip_able.png


BIN
BaseLibrary/src/main/res/drawable-xhdpi/icon_vip_enable.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_live_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_live_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_music_sheet_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_music_sheet_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_style_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_style_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_video_course_badge_able.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_video_course_badge_enable.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_vip_able.png


BIN
BaseLibrary/src/main/res/drawable-xxhdpi/icon_vip_enable.png


+ 46 - 0
BaseLibrary/src/main/res/layout/view_badge_list_layout.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal">
+
+    <ImageView
+        android:layout_gravity="center_vertical"
+        android:id="@+id/iv_vip_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_vip_enable" />
+
+    <ImageView
+        android:layout_gravity="center_vertical"
+        android:layout_marginStart="4dp"
+        android:id="@+id/iv_style_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_style_badge_enable" />
+
+
+    <ImageView
+        android:layout_gravity="center_vertical"
+        android:layout_marginStart="4dp"
+        android:id="@+id/iv_music_sheet_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_music_sheet_badge_enable" />
+
+    <ImageView
+        android:layout_gravity="center_vertical"
+        android:layout_marginStart="4dp"
+        android:id="@+id/iv_video_course_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_video_course_badge_enable" />
+
+    <ImageView
+        android:layout_gravity="center_vertical"
+        android:layout_marginStart="4dp"
+        android:id="@+id/iv_live_icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@drawable/icon_live_badge_enable" />
+</merge>

+ 34 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/HomeMenuItemAdapter.java

@@ -0,0 +1,34 @@
+package com.cooleshow.teacher.adapter;
+
+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.GlideUtils;
+import com.cooleshow.teacher.R;
+import com.cooleshow.teacher.bean.HomeMenuBean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/26 18:00
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class HomeMenuItemAdapter extends BaseQuickAdapter<HomeMenuBean.ItemBean, BaseViewHolder> {
+
+    public HomeMenuItemAdapter() {
+        super(R.layout.layout_home_menu_item);
+    }
+
+
+    @Override
+    protected void convert(BaseViewHolder helper, HomeMenuBean.ItemBean item) {
+        ImageView im_pic = helper.getView(R.id.im_pic);
+        TextView tv_title = helper.getView(R.id.tv_title);
+        GlideUtils.INSTANCE.loadImage(getContext(), item.coverImage, im_pic);
+        tv_title.setText(item.title);
+    }
+}

+ 40 - 0
teacher/src/main/java/com/cooleshow/teacher/adapter/HomeMenuPageAdapter.java

@@ -0,0 +1,40 @@
+package com.cooleshow.teacher.adapter;
+
+import java.util.ArrayList;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentStatePagerAdapter;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+/**
+ * Author by pq, Date on 2022/4/20.
+ */
+public class HomeMenuPageAdapter extends FragmentStatePagerAdapter {
+    private ArrayList<Fragment> mFragments;
+
+    public HomeMenuPageAdapter(@NonNull FragmentManager fm) {
+        super(fm);
+    }
+
+
+    public void setFragments(ArrayList<Fragment> fragments) {
+        this.mFragments = fragments;
+    }
+
+
+
+    @NonNull
+    @Override
+    public Fragment getItem(int position) {
+        Fragment fragment = mFragments.get(position);
+        return fragment;
+    }
+
+    @Override
+    public int getCount() {
+        return mFragments != null ? mFragments.size() : 0;
+    }
+}

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

@@ -3,6 +3,7 @@ package com.cooleshow.teacher.api;
 import com.common.im.bean.ContactRoomListBean;
 import com.cooleshow.base.data.net.BaseResponse;
 import com.cooleshow.teacher.bean.HomeLiveAndVideoBean;
+import com.cooleshow.teacher.bean.HomeMenuBean;
 import com.cooleshow.teacher.bean.LiveListBean;
 import com.cooleshow.teacher.bean.LivePlayBackDataBean;
 import com.cooleshow.teacher.bean.request.AssignHomeWorkEntry;
@@ -710,4 +711,12 @@ public interface APIService {
      */
     @GET(TEACHER_GROUP + "liveRoom/syncLike")
     Observable<BaseResponse<Object>> syncAddLikeNum(@Query("likeNum") String likeNum, @Query("roomUid") String roomUid);
+
+    /**
+     * app首页banner、按钮、资讯
+     *
+     * @return
+     */
+    @POST(CMS_SERVER + "news/app/home")
+    Observable<BaseResponse<HomeMenuBean>> appHome(@Body RequestBody body);
 }

+ 185 - 0
teacher/src/main/java/com/cooleshow/teacher/bean/HomeMenuBean.java

@@ -0,0 +1,185 @@
+package com.cooleshow.teacher.bean;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.List;
+
+/**
+ * Author by pq, Date on 2022/7/25.
+ */
+public class HomeMenuBean {
+    public List<ItemBean> appMenu;
+
+    public static class ItemBean implements Parcelable {
+
+        /**
+         * attribute1 :
+         * attribute2 :
+         * clientType :
+         * content :
+         * coverImage :
+         * createTime :
+         * delFlag : true
+         * hrefTarget :
+         * id : 0
+         * linkType :
+         * linkUrl :
+         * memo :
+         * offlineTime :
+         * onlineTime :
+         * order : 0
+         * showTime : 0
+         * status :
+         * subType : 0
+         * subTypeName :
+         * subjectIdList :
+         * subjectName :
+         * title :
+         * type : 0
+         * typeName :
+         * updateName :
+         * updateTime :
+         * videoCoverImage :
+         */
+
+        public String attribute1;
+        public String attribute2;
+        public String clientType;
+        public String content;
+        public String coverImage;
+        public String createTime;
+        public boolean delFlag;
+        public String hrefTarget;
+        public int id;
+        public String linkType;
+        public String linkUrl;
+        public String memo;
+        public String offlineTime;
+        public String onlineTime;
+        public int order;
+        public int showTime;
+        public String status;
+        public int subType;
+        public String subTypeName;
+        public String subjectIdList;
+        public String subjectName;
+        public String title;
+        public int type;
+        public String typeName;
+        public String updateName;
+        public String updateTime;
+        public String videoCoverImage;
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeString(this.attribute1);
+            dest.writeString(this.attribute2);
+            dest.writeString(this.clientType);
+            dest.writeString(this.content);
+            dest.writeString(this.coverImage);
+            dest.writeString(this.createTime);
+            dest.writeByte(this.delFlag ? (byte) 1 : (byte) 0);
+            dest.writeString(this.hrefTarget);
+            dest.writeInt(this.id);
+            dest.writeString(this.linkType);
+            dest.writeString(this.linkUrl);
+            dest.writeString(this.memo);
+            dest.writeString(this.offlineTime);
+            dest.writeString(this.onlineTime);
+            dest.writeInt(this.order);
+            dest.writeInt(this.showTime);
+            dest.writeString(this.status);
+            dest.writeInt(this.subType);
+            dest.writeString(this.subTypeName);
+            dest.writeString(this.subjectIdList);
+            dest.writeString(this.subjectName);
+            dest.writeString(this.title);
+            dest.writeInt(this.type);
+            dest.writeString(this.typeName);
+            dest.writeString(this.updateName);
+            dest.writeString(this.updateTime);
+            dest.writeString(this.videoCoverImage);
+        }
+
+        public void readFromParcel(Parcel source) {
+            this.attribute1 = source.readString();
+            this.attribute2 = source.readString();
+            this.clientType = source.readString();
+            this.content = source.readString();
+            this.coverImage = source.readString();
+            this.createTime = source.readString();
+            this.delFlag = source.readByte() != 0;
+            this.hrefTarget = source.readString();
+            this.id = source.readInt();
+            this.linkType = source.readString();
+            this.linkUrl = source.readString();
+            this.memo = source.readString();
+            this.offlineTime = source.readString();
+            this.onlineTime = source.readString();
+            this.order = source.readInt();
+            this.showTime = source.readInt();
+            this.status = source.readString();
+            this.subType = source.readInt();
+            this.subTypeName = source.readString();
+            this.subjectIdList = source.readString();
+            this.subjectName = source.readString();
+            this.title = source.readString();
+            this.type = source.readInt();
+            this.typeName = source.readString();
+            this.updateName = source.readString();
+            this.updateTime = source.readString();
+            this.videoCoverImage = source.readString();
+        }
+
+        public ItemBean() {
+        }
+
+        protected ItemBean(Parcel in) {
+            this.attribute1 = in.readString();
+            this.attribute2 = in.readString();
+            this.clientType = in.readString();
+            this.content = in.readString();
+            this.coverImage = in.readString();
+            this.createTime = in.readString();
+            this.delFlag = in.readByte() != 0;
+            this.hrefTarget = in.readString();
+            this.id = in.readInt();
+            this.linkType = in.readString();
+            this.linkUrl = in.readString();
+            this.memo = in.readString();
+            this.offlineTime = in.readString();
+            this.onlineTime = in.readString();
+            this.order = in.readInt();
+            this.showTime = in.readInt();
+            this.status = in.readString();
+            this.subType = in.readInt();
+            this.subTypeName = in.readString();
+            this.subjectIdList = in.readString();
+            this.subjectName = in.readString();
+            this.title = in.readString();
+            this.type = in.readInt();
+            this.typeName = in.readString();
+            this.updateName = in.readString();
+            this.updateTime = in.readString();
+            this.videoCoverImage = in.readString();
+        }
+
+        public static final Parcelable.Creator<ItemBean> CREATOR = new Parcelable.Creator<ItemBean>() {
+            @Override
+            public ItemBean createFromParcel(Parcel source) {
+                return new ItemBean(source);
+            }
+
+            @Override
+            public ItemBean[] newArray(int size) {
+                return new ItemBean[size];
+            }
+        };
+    }
+}

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

@@ -5,6 +5,7 @@ import com.cooleshow.teacher.bean.CountOfUnreadBean;
 import com.cooleshow.teacher.bean.HelpCenterContentBean;
 import com.cooleshow.teacher.bean.HomeCountBean;
 import com.cooleshow.teacher.bean.HomeLiveAndVideoBean;
+import com.cooleshow.teacher.bean.HomeMenuBean;
 import com.cooleshow.teacher.bean.TeacherUserInfo;
 import com.cooleshow.usercenter.bean.UserInfo;
 
@@ -20,6 +21,8 @@ public interface HomeContract {
         void helpCenterContentListSuccess(HelpCenterContentBean data);
         void queryCountOfUnreadSuccess(List<CountOfUnreadBean> data);
         void queryLiveAndVideoSuccess(HomeLiveAndVideoBean bean);
+
+        void appHomeSuccess(HomeMenuBean homeMenuBean);
     }
 
     interface Presenter {

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

@@ -9,6 +9,7 @@ import com.cooleshow.teacher.bean.CountOfUnreadBean;
 import com.cooleshow.teacher.bean.HelpCenterContentBean;
 import com.cooleshow.teacher.bean.HomeCountBean;
 import com.cooleshow.teacher.bean.HomeLiveAndVideoBean;
+import com.cooleshow.teacher.bean.HomeMenuBean;
 import com.cooleshow.teacher.bean.TeacherUserInfo;
 import com.cooleshow.teacher.contract.HomeContract;
 import com.cooleshow.usercenter.bean.UserInfo;
@@ -149,4 +150,27 @@ public class HomePresenter extends BasePresenter<HomeContract.HomeView> implemen
             }
         });
     }
+
+    /**
+     * 获取App首页入口信息
+     */
+    public void appHome() {
+        getView().showLoading();
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("platform", "android");
+            jsonObject.putOpt("version", "1");
+            jsonObject.putOpt("clientType", "TEACHER");
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).appHome(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<HomeMenuBean>(getView()) {
+            @Override
+            protected void onSuccess(HomeMenuBean data) {
+                if (null != getView()) {
+                    getView().appHomeSuccess(data);
+                }
+            }
+        });
+    }
 }

+ 48 - 3
teacher/src/main/java/com/cooleshow/teacher/ui/main/HomeFragment.kt

@@ -4,6 +4,7 @@ import android.text.SpannableString
 import android.text.TextUtils
 import android.util.Log
 import android.view.View
+import androidx.fragment.app.Fragment
 import com.alibaba.android.arouter.launcher.ARouter
 import com.cooleshow.base.common.WebConstants
 import com.cooleshow.base.ext.setVisible
@@ -14,6 +15,7 @@ import com.cooleshow.base.utils.TimeUtils
 import com.cooleshow.base.utils.UiUtils
 import com.cooleshow.base.utils.Utils
 import com.cooleshow.teacher.R
+import com.cooleshow.teacher.adapter.HomeMenuPageAdapter
 import com.cooleshow.teacher.bean.*
 import com.cooleshow.teacher.constants.CourseConstants
 import com.cooleshow.teacher.constants.TeacherInfoConstants
@@ -31,6 +33,9 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
     HomeContract.HomeView, View.OnClickListener {
 
     private var noticeId: Long = 0
+    private val fragments: ArrayList<Fragment> = ArrayList()
+    private lateinit var menuAdapter: HomeMenuPageAdapter;
+
 
     override fun getLayoutView(): FragmentHomeLayoutBinding {
         return FragmentHomeLayoutBinding.inflate(layoutInflater)
@@ -53,6 +58,15 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
         mViewBinding.bgAnnouncement.setOnClickListener(this)
         mViewBinding.cardKotofusa.setOnClickListener(this)
         mViewBinding.ivScan.setOnClickListener(this)
+        initMenu();
+    }
+
+    private fun initMenu() {
+        if (!this::menuAdapter.isInitialized) {
+            menuAdapter = HomeMenuPageAdapter(childFragmentManager);
+            menuAdapter.setFragments(fragments)
+        }
+        mViewBinding.viewpagerMenu.adapter = menuAdapter;
     }
 
     override fun createPresenter(): HomePresenter {
@@ -103,19 +117,19 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
                 mViewBinding.ivCertificationStatus.visibility = View.VISIBLE
                 mViewBinding.ivUnCertificationTip.visibility = View.GONE
                 mViewBinding.ivTeacherEntryTag.visibility = View.GONE
-                mViewBinding.groupTeacherExtra.visibility = View.GONE
+//                mViewBinding.groupTeacherExtra.visibility = View.GONE
             }
             TeacherInfoConstants.ENTRY_STATUS_PASS -> {
                 //入驻审核通过
                 mViewBinding.ivCertificationStatus.visibility = View.GONE
                 mViewBinding.ivUnCertificationTip.visibility = View.GONE
-                mViewBinding.groupTeacherExtra.visibility = View.VISIBLE
+//                mViewBinding.groupTeacherExtra.visibility = View.VISIBLE
                 mViewBinding.ivTeacherEntryTag.visibility = View.VISIBLE
             }
             else -> {
                 //未通过或者未申请
                 mViewBinding.ivCertificationStatus.setImageResource(R.drawable.icon_home_un_certification)
-                mViewBinding.groupTeacherExtra.visibility = View.GONE
+//                mViewBinding.groupTeacherExtra.visibility = View.GONE
                 mViewBinding.ivCertificationStatus.visibility = View.VISIBLE
                 mViewBinding.ivUnCertificationTip.visibility = View.VISIBLE
                 mViewBinding.ivTeacherEntryTag.visibility = View.GONE
@@ -241,6 +255,7 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
         presenter.queryCountOfUnread()
         presenter.helpCenterContentList()
         presenter.queryLiveAndVideo()
+        presenter.appHome()
     }
 
     override fun getHomeCountSuccess(data: HomeCountBean?) {
@@ -389,6 +404,36 @@ class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>()
         }
     }
 
+    override fun appHomeSuccess(homeMenuBean: HomeMenuBean?) {
+        if (isDetached) {
+            return;
+        }
+        if (homeMenuBean?.appMenu != null && homeMenuBean.appMenu.isNotEmpty()) {
+            mViewBinding.flTopMenu.setVisible(true);
+            fragments.clear()
+            var count: Int = homeMenuBean.appMenu.size / 4
+            if (homeMenuBean.appMenu.size % 4 > 0) {
+                count++
+            }
+            for (i in 0 until count) {
+                val dataList: ArrayList<HomeMenuBean.ItemBean> =
+                    java.util.ArrayList<HomeMenuBean.ItemBean>()
+                var j = i * 4
+                while (j < homeMenuBean.appMenu.size && j < (i + 1) * 4) {
+                    dataList.add(homeMenuBean.appMenu[j])
+                    j++
+                }
+                fragments.add(HomeMenuFragment.newInstance(dataList))
+            }
+            menuAdapter.setFragments(fragments);
+            menuAdapter.notifyDataSetChanged()
+        } else {
+            fragments.clear()
+            menuAdapter.notifyDataSetChanged()
+            mViewBinding.flTopMenu.setVisible(false);
+        }
+    }
+
     /**
      * 跳转直播课详情页面
      *

+ 81 - 0
teacher/src/main/java/com/cooleshow/teacher/ui/main/HomeMenuFragment.java

@@ -0,0 +1,81 @@
+package com.cooleshow.teacher.ui.main;
+
+import android.os.Bundle;
+import android.os.Parcelable;
+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.cooleshow.base.common.WebConstants;
+import com.cooleshow.base.router.RouterPath;
+import com.cooleshow.base.ui.fragment.BaseFragment;
+import com.cooleshow.teacher.adapter.HomeMenuItemAdapter;
+import com.cooleshow.teacher.bean.HomeMenuBean;
+import com.cooleshow.teacher.databinding.FragmentHomeMenuBinding;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * 创建日期:2022/5/26 17:33
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class HomeMenuFragment extends BaseFragment<FragmentHomeMenuBinding> {
+
+    public static HomeMenuFragment newInstance(ArrayList<HomeMenuBean.ItemBean> itemBeanList) {
+        Bundle args = new Bundle();
+        HomeMenuFragment fragment = new HomeMenuFragment();
+        args.putParcelableArrayList("itemBeanList", itemBeanList);
+        fragment.setArguments(args);
+        return fragment;
+    }
+
+    @Override
+    protected FragmentHomeMenuBinding getLayoutView() {
+        return FragmentHomeMenuBinding.inflate(getLayoutInflater());
+    }
+
+
+    private ArrayList<HomeMenuBean.ItemBean> itemBeanList = new ArrayList<>();
+
+    @Override
+    protected void initView(View rootView) {
+        if (getArguments() != null) {
+            itemBeanList = getArguments().getParcelableArrayList("itemBeanList");
+        }
+        RecyclerView rvMenu = mViewBinding.rvMenu;
+        GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 4);
+        rvMenu.setLayoutManager(gridLayoutManager);
+        HomeMenuItemAdapter addPhotoListAdapter = new HomeMenuItemAdapter();
+        rvMenu.setAdapter(addPhotoListAdapter);
+        addPhotoListAdapter.setNewInstance(itemBeanList);
+        addPhotoListAdapter.setOnItemClickListener(new OnItemClickListener() {
+            @Override
+            public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
+                if (position < addPhotoListAdapter.getData().size()) {
+                    HomeMenuBean.ItemBean item = (HomeMenuBean.ItemBean) adapter.getItem(position);
+                    if (!TextUtils.isEmpty(item.linkUrl)) {
+                        ARouter.getInstance()
+                                .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                                .withString(WebConstants.WEB_URL, item.linkUrl)
+                                .navigation();
+                    }
+                }
+            }
+        });
+    }
+
+    @Override
+    protected void initData() {
+
+    }
+}

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


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


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


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


+ 96 - 36
teacher/src/main/res/layout/fragment_home_layout.xml

@@ -117,6 +117,17 @@
             app:layout_constraintVertical_chainStyle="packed"
             tools:text="游客12e32td" />
 
+        <com.cooleshow.base.widgets.BadgeIconListView
+            android:id="@+id/ll_badge"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="5dp"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_nickname"
+            app:layout_constraintLeft_toRightOf="@+id/tv_nickname"
+            app:layout_constraintRight_toLeftOf="@+id/iv_scan"
+            app:layout_constraintTop_toTopOf="@+id/tv_nickname" />
+
         <ImageView
             android:id="@+id/iv_teacher_entry_tag"
             android:layout_width="wrap_content"
@@ -167,83 +178,106 @@
             android:id="@+id/iv_certification_status"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginTop="5dp"
+            android:layout_marginStart="9dp"
             android:src="@drawable/icon_home_un_certification"
-            android:visibility="gone"
-            app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/rating_bar" />
+            android:visibility="visible"
+            app:layout_constraintBottom_toBottomOf="@+id/tv_nickname"
+            app:layout_constraintLeft_toRightOf="@+id/tv_nickname"
+            app:layout_constraintTop_toTopOf="@+id/tv_nickname" />
 
-        <View
-            android:id="@+id/certification_tip_help_view"
-            android:layout_width="1px"
-            android:layout_height="1px"
-            android:layout_marginBottom="15dp"
-            app:layout_constraintBottom_toBottomOf="@+id/iv_certification_status"
-            app:layout_constraintLeft_toLeftOf="@+id/iv_certification_status" />
 
         <ImageView
             android:id="@+id/iv_un_certification_tip"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="6dp"
+            android:layout_marginTop="6dp"
             android:src="@drawable/icon_home_certification_tip"
             android:visibility="gone"
+            app:layout_constraintLeft_toLeftOf="@+id/iv_certification_status"
+            app:layout_constraintRight_toRightOf="@+id/iv_certification_status"
+            app:layout_constraintTop_toBottomOf="@+id/iv_certification_status" />
+
+        <View
+            android:id="@+id/view_bg_teacher_extra"
+            android:layout_width="0dp"
+            android:layout_height="95dp"
+            android:layout_marginStart="14dp"
+            android:layout_marginTop="27dp"
+            android:layout_marginEnd="14dp"
+            android:background="#69B4FE"
             app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/certification_tip_help_view" />
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/iv_avatar" />
 
         <TextView
             android:id="@+id/tv_fans_title"
             android:layout_width="wrap_content"
             android:layout_height="28dp"
-            android:layout_marginTop="16dp"
+            android:layout_marginTop="7dp"
+            android:drawableRight="@drawable/icon_arrow_background"
+            android:drawablePadding="2dp"
             android:gravity="center"
             android:paddingStart="8dp"
             android:paddingEnd="8dp"
             android:text="粉丝"
-            android:textColor="@color/color_333333"
+            android:textColor="@color/white"
             android:textSize="@dimen/sp_12"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bg_teacher_extra"
             app:layout_constraintLeft_toLeftOf="@+id/iv_avatar"
-            app:layout_constraintTop_toBottomOf="@+id/iv_avatar" />
+            app:layout_constraintRight_toLeftOf="@+id/tv_course_num_complete_title"
+            app:layout_constraintTop_toBottomOf="@+id/tv_fans_num" />
 
         <TextView
             android:id="@+id/tv_course_num_complete_title"
             android:layout_width="wrap_content"
             android:layout_height="28dp"
+            android:layout_marginTop="7dp"
+            android:drawableRight="@drawable/icon_arrow_background"
+            android:drawablePadding="2dp"
             android:gravity="center"
             android:paddingStart="8dp"
             android:paddingEnd="8dp"
             android:text="已上课时"
-            android:textColor="@color/color_333333"
+            android:textColor="@color/white"
             android:textSize="@dimen/sp_12"
-            app:layout_constraintBottom_toBottomOf="@+id/tv_fans_title"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bg_teacher_extra"
             app:layout_constraintLeft_toRightOf="@+id/tv_fans_title"
-            app:layout_constraintTop_toTopOf="@+id/tv_fans_title" />
+            app:layout_constraintRight_toLeftOf="@+id/tv_course_num_no_start_title"
+            app:layout_constraintTop_toBottomOf="@+id/tv_course_num_completed" />
 
         <TextView
             android:id="@+id/tv_course_num_no_start_title"
             android:layout_width="wrap_content"
             android:layout_height="28dp"
+            android:layout_marginTop="7dp"
+            android:drawableRight="@drawable/icon_arrow_background"
+            android:drawablePadding="2dp"
             android:gravity="center"
             android:paddingStart="8dp"
             android:paddingEnd="8dp"
             android:text="未上课时"
-            android:textColor="@color/color_333333"
+            android:textColor="@color/white"
             android:textSize="@dimen/sp_12"
-            app:layout_constraintBottom_toBottomOf="@+id/tv_fans_title"
+            app:layout_constraintBottom_toBottomOf="@+id/view_bg_teacher_extra"
             app:layout_constraintLeft_toRightOf="@+id/tv_course_num_complete_title"
-            app:layout_constraintTop_toTopOf="@+id/tv_fans_title" />
-
+            app:layout_constraintRight_toRightOf="@+id/view_bg_teacher_extra"
+            app:layout_constraintTop_toBottomOf="@+id/tv_course_num_not_start" />
 
         <TextView
             android:id="@+id/tv_fans_num"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:includeFontPadding="false"
             android:text="0"
-            android:textColor="@color/black"
-            android:textSize="@dimen/sp_17"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_20"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toTopOf="@+id/tv_fans_title"
             app:layout_constraintLeft_toLeftOf="@+id/tv_fans_title"
             app:layout_constraintRight_toRightOf="@+id/tv_fans_title"
-            app:layout_constraintTop_toBottomOf="@+id/tv_fans_title"
+            app:layout_constraintTop_toTopOf="@+id/view_bg_teacher_extra"
+            app:layout_constraintVertical_chainStyle="packed"
             tools:text="1344" />
 
         <TextView
@@ -251,11 +285,14 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="0"
-            android:textColor="@color/black"
-            android:textSize="@dimen/sp_17"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_20"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toTopOf="@+id/tv_course_num_complete_title"
             app:layout_constraintLeft_toLeftOf="@+id/tv_course_num_complete_title"
             app:layout_constraintRight_toRightOf="@+id/tv_course_num_complete_title"
-            app:layout_constraintTop_toBottomOf="@+id/tv_course_num_complete_title"
+            app:layout_constraintTop_toTopOf="@+id/view_bg_teacher_extra"
+            app:layout_constraintVertical_chainStyle="packed"
             tools:text="34" />
 
         <TextView
@@ -263,34 +300,57 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:text="0"
-            android:textColor="@color/black"
-            android:textSize="@dimen/sp_17"
+            android:textColor="@color/white"
+            android:textSize="@dimen/sp_20"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toTopOf="@+id/tv_course_num_no_start_title"
             app:layout_constraintLeft_toLeftOf="@+id/tv_course_num_no_start_title"
             app:layout_constraintRight_toRightOf="@+id/tv_course_num_no_start_title"
-            app:layout_constraintTop_toBottomOf="@+id/tv_course_num_no_start_title"
+            app:layout_constraintTop_toTopOf="@+id/view_bg_teacher_extra"
+            app:layout_constraintVertical_chainStyle="packed"
             tools:text="34" />
 
         <androidx.constraintlayout.widget.Group
             android:id="@+id/group_teacher_extra"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:visibility="gone"
+            android:visibility="visible"
             app:constraint_referenced_ids="tv_course_num_not_start,tv_course_num_completed,tv_fans_num,tv_fans_title,tv_course_num_complete_title,tv_course_num_no_start_title" />
 
+
+        <FrameLayout
+            android:id="@+id/fl_top_menu"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="14dp"
+            android:layout_marginTop="14dp"
+            android:layout_marginEnd="14dp"
+            android:background="@drawable/bg_white_10dp"
+            android:visibility="gone"
+            app:layout_constraintTop_toBottomOf="@+id/view_bg_teacher_extra">
+
+            <androidx.viewpager.widget.ViewPager
+                android:id="@+id/viewpager_menu"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dp_90"
+                android:overScrollMode="never"
+                android:scrollbars="none" />
+        </FrameLayout>
+
+
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/bg_announcement"
             android:layout_width="match_parent"
             android:layout_height="44dp"
             android:layout_marginStart="14dp"
-            android:layout_marginTop="@dimen/dp_111"
+            android:layout_marginTop="14dp"
             android:layout_marginEnd="14dp"
             android:background="@drawable/bg_white_10dp"
             android:elevation="2dp"
             android:orientation="horizontal"
-            android:visibility="invisible"
+            android:visibility="gone"
             app:layout_constraintLeft_toLeftOf="parent"
-            app:layout_constraintTop_toBottomOf="@+id/iv_avatar"
-            app:layout_goneMarginTop="@dimen/dp_100">
+            app:layout_constraintTop_toBottomOf="@+id/fl_top_menu">
 
             <ImageView
                 android:id="@+id/iv_bell"

+ 16 - 0
teacher/src/main/res/layout/fragment_home_menu.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal"
+    android:paddingLeft="@dimen/dp_10"
+    android:paddingRight="@dimen/dp_10">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_menu"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:overScrollMode="never"
+        android:scrollbars="none" />
+</FrameLayout>

+ 21 - 0
teacher/src/main/res/layout/layout_home_menu_item.xml

@@ -0,0 +1,21 @@
+<?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="match_parent"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/im_pic"
+        android:layout_width="@dimen/dp_45"
+        android:layout_height="@dimen/dp_45" />
+
+    <TextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="5dp"
+        android:includeFontPadding="false"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_12" />
+</LinearLayout>