Browse Source

增加首页接口数据

Pq 1 year ago
parent
commit
e45bb47637
23 changed files with 1069 additions and 7 deletions
  1. 0 0
      institution/src/main/assets/lottieHome/empty_anim.json
  2. 32 0
      institution/src/main/java/com/cooleshow/institution/stu/adapter/HomeHotAlbumAdapter.java
  3. 51 0
      institution/src/main/java/com/cooleshow/institution/stu/adapter/HomeHotMusicSheetAdapter.java
  4. 44 0
      institution/src/main/java/com/cooleshow/institution/stu/api/APIService.java
  5. 76 0
      institution/src/main/java/com/cooleshow/institution/stu/bean/AppHomeBean.java
  6. 121 0
      institution/src/main/java/com/cooleshow/institution/stu/bean/HomeHotMusicSheetBean.java
  7. 10 0
      institution/src/main/java/com/cooleshow/institution/stu/bean/HomeHotMusicSheetItemBean.java
  8. 63 0
      institution/src/main/java/com/cooleshow/institution/stu/bean/HotAlbumBean.java
  9. 2 0
      institution/src/main/java/com/cooleshow/institution/stu/constants/Constants.java
  10. 8 0
      institution/src/main/java/com/cooleshow/institution/stu/contract/HomeMusicContract.java
  11. 69 0
      institution/src/main/java/com/cooleshow/institution/stu/presenter/HomeMusicPresenter.java
  12. 225 2
      institution/src/main/java/com/cooleshow/institution/stu/ui/main/HomeMusicFragment.java
  13. 6 0
      institution/src/main/java/com/cooleshow/institution/stu/ui/main/MainActivity.java
  14. 34 0
      institution/src/main/java/com/cooleshow/institution/stu/widget/HomeHotMusicSheetItemDecoration.java
  15. 129 0
      institution/src/main/java/com/cooleshow/institution/stu/widget/HomeHotMusicSheetItemView.java
  16. BIN
      institution/src/main/res/drawable-xhdpi/icon_institution_img2.png
  17. BIN
      institution/src/main/res/drawable-xhdpi/jg_album_bg.png
  18. BIN
      institution/src/main/res/drawable-xxhdpi/icon_institution_img2.png
  19. BIN
      institution/src/main/res/drawable-xxhdpi/jg_album_bg.png
  20. 9 5
      institution/src/main/res/layout/fg_home_music_layout.xml
  21. 9 0
      institution/src/main/res/layout/jg_item_home_hot_music_sheet_layout.xml
  22. 40 0
      institution/src/main/res/layout/jg_layout_home_hot_album_item.xml
  23. 141 0
      institution/src/main/res/layout/jg_view_hot_music_sheet_child_layout.xml

File diff suppressed because it is too large
+ 0 - 0
institution/src/main/assets/lottieHome/empty_anim.json


+ 32 - 0
institution/src/main/java/com/cooleshow/institution/stu/adapter/HomeHotAlbumAdapter.java

@@ -0,0 +1,32 @@
+package com.cooleshow.institution.stu.adapter;
+
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.GlideUtils;
+import com.cooleshow.institution.stu.R;
+import com.cooleshow.institution.stu.bean.HotAlbumBean;
+
+/**
+ * 创建日期:2022/5/27 11:51
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class HomeHotAlbumAdapter extends BaseQuickAdapter<HotAlbumBean.RowsBean, BaseViewHolder> {
+
+    public HomeHotAlbumAdapter() {
+        super(R.layout.jg_layout_home_hot_album_item);
+    }
+
+    @Override
+    protected void convert(BaseViewHolder helper, HotAlbumBean.RowsBean item) {
+        ImageView im_pic = helper.getView(R.id.im_pic);
+        GlideUtils.INSTANCE.loadImage(getContext(), item.albumCoverUrl, im_pic,com.cooleshow.base.R.drawable.bg_video_placeholder);
+        helper.setText(R.id.album_name, item.albumName);
+    }
+}

+ 51 - 0
institution/src/main/java/com/cooleshow/institution/stu/adapter/HomeHotMusicSheetAdapter.java

@@ -0,0 +1,51 @@
+package com.cooleshow.institution.stu.adapter;
+
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.viewholder.BaseViewHolder;
+import com.cooleshow.base.utils.ScreenUtils;
+import com.cooleshow.institution.stu.R;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetBean;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetItemBean;
+import com.cooleshow.institution.stu.constants.Constants;
+import com.cooleshow.institution.stu.widget.HomeHotMusicSheetItemView;
+
+import androidx.annotation.NonNull;
+
+/**
+ * Author by pq, Date on 2022/8/8.
+ */
+public class HomeHotMusicSheetAdapter extends BaseQuickAdapter<HomeHotMusicSheetItemBean, BaseViewHolder> {
+    private int maxWidth = 0;
+
+    public HomeHotMusicSheetAdapter() {
+        super(R.layout.jg_item_home_hot_music_sheet_layout);
+        int screenWidth = ScreenUtils.getScreenWidth();
+        maxWidth = (int) (screenWidth * 0.83);
+    }
+
+    @Override
+    protected void convert(@NonNull BaseViewHolder holder, HomeHotMusicSheetItemBean homeHotMusicSheetItemBean) {
+        LinearLayout ll_container = holder.getView(R.id.ll_container);
+        ViewGroup.LayoutParams layoutParams = ll_container.getLayoutParams();
+        layoutParams.width = maxWidth;
+        ll_container.setLayoutParams(layoutParams);
+        ll_container.removeAllViews();
+        if (homeHotMusicSheetItemBean.sheetBeans != null && homeHotMusicSheetItemBean.sheetBeans.size() > 0) {
+            for (int i = 0; i < homeHotMusicSheetItemBean.sheetBeans.size(); i++) {
+                HomeHotMusicSheetBean.MusicSheetBean homeHotMusicSheetBean = homeHotMusicSheetItemBean.sheetBeans.get(i);
+                HomeHotMusicSheetItemView hotMusicSheetItemView = new HomeHotMusicSheetItemView(getContext());
+                hotMusicSheetItemView.setData(homeHotMusicSheetBean);
+                int result = i % (Constants.MAX_HOT_MUSIC_LIST_PAGE - 1);
+                if (i != 0 && i == homeHotMusicSheetItemBean.sheetBeans.size() - 1 && result == 0) {
+                    hotMusicSheetItemView.setDividingLineIsShow(false);
+                } else {
+                    hotMusicSheetItemView.setDividingLineIsShow(true);
+                }
+                ll_container.addView(hotMusicSheetItemView);
+            }
+        }
+    }
+}

+ 44 - 0
institution/src/main/java/com/cooleshow/institution/stu/api/APIService.java

@@ -0,0 +1,44 @@
+package com.cooleshow.institution.stu.api;
+
+import com.cooleshow.base.data.net.BaseResponse;
+import com.cooleshow.institution.stu.bean.AppHomeBean;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetBean;
+import com.cooleshow.institution.stu.bean.HotAlbumBean;
+
+import io.reactivex.rxjava3.core.Observable;
+import okhttp3.RequestBody;
+import retrofit2.http.Body;
+import retrofit2.http.POST;
+
+import static com.cooleshow.base.common.BaseConstant.CMS_SERVER;
+import static com.cooleshow.base.common.BaseConstant.STUDENT_GROUP;
+
+/**
+ * Author by pq, Date on 2023/9/12.
+ */
+public interface APIService {
+    /**
+     * 首页热门专辑
+     *
+     * @param body
+     * @return
+     */
+    @POST(STUDENT_GROUP + "music/album/list")
+    Observable<BaseResponse<HotAlbumBean>> hotAlbumList(@Body RequestBody body);
+
+    /**
+     * app首页热门专辑
+     *
+     * @return
+     */
+    @POST(STUDENT_GROUP + "music/sheet/appMusicSheet")
+    Observable<BaseResponse<HomeHotMusicSheetBean>> getHotMusicSheetList(@Body RequestBody body);
+
+    /**
+     * app首页banner、按钮、资讯
+     *
+     * @return
+     */
+    @POST(CMS_SERVER + "news/app/home")
+    Observable<BaseResponse<AppHomeBean>> appHome(@Body RequestBody body);
+}

+ 76 - 0
institution/src/main/java/com/cooleshow/institution/stu/bean/AppHomeBean.java

@@ -0,0 +1,76 @@
+package com.cooleshow.institution.stu.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/26 16:58
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class AppHomeBean {
+    public List<ItemBean> appMenu;
+    public List<ItemBean> banner;
+    public List<ItemBean> flashPage;//dialog
+    public List<ItemBean> information;//资讯
+    public List<ItemBean> suspension;//悬浮按钮
+
+    public static class ItemBean implements Serializable {
+        /*
+        		"attribute1": "",
+				"attribute2": "",
+				"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 content;
+        public String coverImage;
+        public String createTime;
+        public boolean delFlag;
+        public String hrefTarget;
+        public long 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;
+
+    }
+}

+ 121 - 0
institution/src/main/java/com/cooleshow/institution/stu/bean/HomeHotMusicSheetBean.java

@@ -0,0 +1,121 @@
+package com.cooleshow.institution.stu.bean;
+
+import java.util.List;
+
+/**
+ * Author by pq, Date on 2022/8/8.
+ */
+public class HomeHotMusicSheetBean {
+
+    public List<MusicSheetBean> hotMusicSheet;
+    public List<MusicSheetBean> newMusicSheet;
+    public List<MusicSheetBean> topMusicSheet;
+
+    public static class MusicSheetBean {
+        /**
+         * accompanimentType :
+         * addName :
+         * addUserAvatar :
+         * albumNums : 0
+         * albumSortNumber : 0
+         * audioFileUrl :
+         * audioType :
+         * auditStatus :
+         * auditVersion :
+         * canEvaluate :
+         * chargeType :
+         * composer :
+         * createBy : 0
+         * createTime :
+         * delFlag : true
+         * exquisiteFlag :
+         * extConfigJson :
+         * favorite :
+         * favoriteCount : 0
+         * firstPassAuditTime :
+         * hasBeat :
+         * hotFlag :
+         * id : 0
+         * metronomeUrl :
+         * midiUrl :
+         * mp3Type :
+         * musicImg :
+         * musicPrice : 0
+         * musicSheetName :
+         * musicSubject :
+         * musicTag :
+         * musicTagNames :
+         * notation :
+         * paymentType :
+         * play :
+         * playSpeed : 0
+         * reason :
+         * remark :
+         * showFingering :
+         * sortNumber : 0
+         * sourceType :
+         * state :
+         * subjectNames :
+         * submitAuditTime :
+         * titleImg :
+         * topFlag :
+         * updateBy : 0
+         * updateTime :
+         * url :
+         * userId : 0
+         * xmlFileUrl :
+         */
+
+        public String accompanimentType;
+        public String addName;
+        public String addUserAvatar;
+        public int albumNums;
+        public int albumSortNumber;
+        public String audioFileUrl;
+        public String audioType;
+        public String auditStatus;
+        public String auditVersion;
+        public String canEvaluate;
+        public String chargeType;
+        public String composer;
+        public int createBy;
+        public String createTime;
+        public boolean delFlag;
+        public String exquisiteFlag;
+        public String extConfigJson;
+        public String favorite;
+        public int favoriteCount;
+        public String firstPassAuditTime;
+        public String hasBeat;
+        public String hotFlag;
+        public int id;
+        public String metronomeUrl;
+        public String midiUrl;
+        public String mp3Type;
+        public String musicImg;
+        public String musicPrice;
+        public String musicSheetName;
+        public String musicSubject;
+        public String musicTag;
+        public String musicTagNames;
+        public String notation;
+        public String paymentType;
+        public String play;
+        public int playSpeed;
+        public String reason;
+        public String remark;
+        public String showFingering;
+        public int sortNumber;
+        public String sourceType;
+        public String state;
+        public String subjectNames;
+        public String submitAuditTime;
+        public String titleImg;
+        public String topFlag;
+        public int updateBy;
+        public String updateTime;
+        public String url;
+        public int userId;
+        public String xmlFileUrl;
+    }
+}

+ 10 - 0
institution/src/main/java/com/cooleshow/institution/stu/bean/HomeHotMusicSheetItemBean.java

@@ -0,0 +1,10 @@
+package com.cooleshow.institution.stu.bean;
+
+import java.util.ArrayList;
+
+/**
+ * Author by pq, Date on 2022/8/8.
+ */
+public class HomeHotMusicSheetItemBean {
+    public ArrayList<HomeHotMusicSheetBean.MusicSheetBean> sheetBeans =new ArrayList<>();
+}

+ 63 - 0
institution/src/main/java/com/cooleshow/institution/stu/bean/HotAlbumBean.java

@@ -0,0 +1,63 @@
+package com.cooleshow.institution.stu.bean;
+
+import java.util.List;
+
+/**
+ * 创建日期:2022/5/27 11:31
+ *
+ * @author Ryan
+ * 类说明:
+ */
+public class HotAlbumBean {
+    public int limit;
+    public int nextPage;
+    public int offset;
+    public int pageNo;
+    public int prePage;
+    public int total;
+    public int totalPage;
+    public List<RowsBean> rows;
+
+    public static class RowsBean {
+        /*
+        	"albumCoverUrl": "",
+				"albumDesc": "",
+				"albumFavoriteCount": 0,
+				"albumName": "",
+				"albumStatus": "",
+				"albumTag": "",
+				"auditVersion": "",
+				"createBy": 0,
+				"createTime": "",
+				"delFlag": true,
+				"hotFlag": "",
+				"id": 0,
+				"musicSheetCount": 0,
+				"musicTagNames": "",
+				"sortNumber": 0,
+				"topFlag": "",
+				"updateBy": 0,
+				"updateTime": ""
+         */
+        public String albumCoverUrl;
+        public String albumDesc;
+        public int albumFavoriteCount;
+        public String albumName;
+        public String albumStatus;
+        public String albumTag;
+        public String auditVersion;
+        public long createBy;
+        public String createTime;
+        public boolean delFlag;
+        public String hotFlag;
+        public long id;
+        public int musicSheetCount;
+        public String musicTagNames;
+        public int sortNumber;
+        public int favorite;
+        public String topFlag;
+        public long updateBy;
+        public String updateTime;
+        public String paymentType;//FREE免费 CHARGE付费
+    }
+}

+ 2 - 0
institution/src/main/java/com/cooleshow/institution/stu/constants/Constants.java

@@ -6,4 +6,6 @@ package com.cooleshow.institution.stu.constants;
 public class Constants {
     public static final int PRACTICE_TUTORIALS = 0;//练习教程
     public static final int MORE_MUSIC_TRACK = 1;//更多曲目
+
+    public static final int MAX_HOT_MUSIC_LIST_PAGE = 3;//热门曲目一页最大条数
 }

+ 8 - 0
institution/src/main/java/com/cooleshow/institution/stu/contract/HomeMusicContract.java

@@ -1,6 +1,9 @@
 package com.cooleshow.institution.stu.contract;
 
 import com.cooleshow.base.presenter.view.BaseView;
+import com.cooleshow.institution.stu.bean.AppHomeBean;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetBean;
+import com.cooleshow.institution.stu.bean.HotAlbumBean;
 
 /**
  * Author by pq, Date on 2023/9/11.
@@ -8,5 +11,10 @@ import com.cooleshow.base.presenter.view.BaseView;
 public interface HomeMusicContract {
     public interface HomeMusicContractView extends BaseView{
 
+        void getHotMusicSheetListSuccess(HomeHotMusicSheetBean data);
+
+        void hotAlbumListSuccess(HotAlbumBean data);
+
+        void appHomeSuccess(AppHomeBean data);
     }
 }

+ 69 - 0
institution/src/main/java/com/cooleshow/institution/stu/presenter/HomeMusicPresenter.java

@@ -1,11 +1,80 @@
 package com.cooleshow.institution.stu.presenter;
 
+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.institution.stu.api.APIService;
+import com.cooleshow.institution.stu.bean.AppHomeBean;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetBean;
+import com.cooleshow.institution.stu.bean.HotAlbumBean;
 import com.cooleshow.institution.stu.contract.HomeContract;
 import com.cooleshow.institution.stu.contract.HomeMusicContract;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 /**
  * Author by pq, Date on 2023/9/11.
  */
 public class HomeMusicPresenter extends BasePresenter<HomeMusicContract.HomeMusicContractView> {
+    public void userAccountPage() {
+
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("platform", "android");
+            jsonObject.putOpt("version", "1");
+            jsonObject.putOpt("page", 1);
+            jsonObject.putOpt("rows", Constants.DEFAULT_DATA_SIZE);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).hotAlbumList(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<HotAlbumBean>(getView()) {
+            @Override
+            protected void onSuccess(HotAlbumBean data) {
+                if (getView() != null) {
+                    getView().hotAlbumListSuccess(data);
+                }
+            }
+        });
+    }
+
+    /**
+     * 获取热门曲目
+     */
+    public void getHotMusicSheetList() {
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("myself", false);
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).getHotMusicSheetList(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<HomeHotMusicSheetBean>(getView()) {
+            @Override
+            protected void onSuccess(HomeHotMusicSheetBean data) {
+                if (null != getView()) {
+                    getView().getHotMusicSheetListSuccess(data);
+                }
+            }
+        });
+    }
+
+    public void appHome() {
+        JSONObject jsonObject = new JSONObject();
+        try {
+            jsonObject.putOpt("platform", "android");
+            jsonObject.putOpt("version", "1");
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        addSubscribe(create(APIService.class).appHome(RequestBodyUtil.convertToRequestBodyJson(jsonObject.toString())), new BaseObserver<AppHomeBean>(getView()) {
+            @Override
+            protected void onSuccess(AppHomeBean data) {
+                if (null != getView()) {
+                    getView().appHomeSuccess(data);
+                }
+            }
+
+        });
+    }
 }

+ 225 - 2
institution/src/main/java/com/cooleshow/institution/stu/ui/main/HomeMusicFragment.java

@@ -1,25 +1,58 @@
 package com.cooleshow.institution.stu.ui.main;
 
+import android.text.TextUtils;
 import android.view.View;
 
+import com.alibaba.android.arouter.launcher.ARouter;
+import com.bumptech.glide.Glide;
+import com.cooleshow.base.common.WebConstants;
+import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseMVPActivity;
 import com.cooleshow.base.ui.fragment.BaseMVPFragment;
+import com.cooleshow.base.utils.SizeUtils;
 import com.cooleshow.base.utils.Utils;
 import com.cooleshow.institution.stu.R;
+import com.cooleshow.institution.stu.adapter.HomeHotAlbumAdapter;
+import com.cooleshow.institution.stu.adapter.HomeHotMusicSheetAdapter;
+import com.cooleshow.institution.stu.bean.AppHomeBean;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetBean;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetItemBean;
 import com.cooleshow.institution.stu.bean.HomePageMode;
+import com.cooleshow.institution.stu.bean.HotAlbumBean;
 import com.cooleshow.institution.stu.constants.Constants;
+import com.cooleshow.institution.stu.contract.HomeMusicContract;
 import com.cooleshow.institution.stu.databinding.FgHomeMusicLayoutBinding;
 import com.cooleshow.institution.stu.presenter.HomeMusicPresenter;
 import com.cooleshow.institution.stu.viewmodel.HomeViewModel;
+import com.cooleshow.institution.stu.widget.HomeHotMusicSheetItemDecoration;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnRefreshListener;
+import com.youth.banner.adapter.BannerImageAdapter;
+import com.youth.banner.config.IndicatorConfig;
+import com.youth.banner.holder.BannerImageHolder;
+import com.youth.banner.indicator.RectangleIndicator;
+import com.youth.banner.listener.OnBannerListener;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import androidx.annotation.NonNull;
 import androidx.lifecycle.ViewModelProviders;
+import androidx.recyclerview.widget.LinearLayoutManager;
 
 /**
  * Author by pq, Date on 2023/9/12.
  */
-public class HomeMusicFragment extends BaseMVPFragment<FgHomeMusicLayoutBinding, HomeMusicPresenter> implements View.OnClickListener {
+public class HomeMusicFragment extends BaseMVPFragment<FgHomeMusicLayoutBinding, HomeMusicPresenter> implements View.OnClickListener, HomeMusicContract.HomeMusicContractView {
 
     private HomeViewModel mHomeViewModel;
+    private HomeHotAlbumAdapter mAlbumAdapter;
+    private HomeHotMusicSheetAdapter mRecommendAdapter;
+    private HomeHotMusicSheetAdapter mLatestAdapter;
+    private HomeHotMusicSheetAdapter mHomeHotMusicSheetAdapter;
+    private BannerImageAdapter mBannerImageAdapter;
+
+    private ArrayList<AppHomeBean.ItemBean> itemBeans = new ArrayList<>();
 
     @Override
     protected void initView(View rootView) {
@@ -30,10 +63,78 @@ public class HomeMusicFragment extends BaseMVPFragment<FgHomeMusicLayoutBinding,
     protected void initData() {
         initViewModel();
         initListener();
+        mBannerImageAdapter = new BannerImageAdapter<AppHomeBean.ItemBean>(itemBeans) {
+            @Override
+            public void onBindView(BannerImageHolder holder, AppHomeBean.ItemBean data, int position, int size) {
+                Glide.with(holder.imageView)
+                        .load(data.coverImage)
+                        .thumbnail(Glide.with(holder.itemView).load(com.cooleshow.base.R.drawable.bg_video_placeholder))//加载成功前显示一个loading的加载
+//                        .apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))  //设置图片圆角
+                        .into(holder.imageView);
+
+            }
+        };
+        mViewBinding.banner.setAdapter(mBannerImageAdapter, true).addBannerLifecycleObserver(this)//添加生命周期观察者
+                .isAutoLoop(true)
+                .setIndicatorGravity(IndicatorConfig.Direction.RIGHT)
+//                .removeIndicator()
+                .setIndicator(new RectangleIndicator(getContext())) //圆形指示器 还支持条形指示器等
+                .setOnBannerListener(new OnBannerListener() {
+                    @Override
+                    public void OnBannerClick(Object data, int position) {
+                        AppHomeBean.ItemBean item = (AppHomeBean.ItemBean) data;
+                        if (!TextUtils.isEmpty(item.linkUrl)) {
+                            ARouter.getInstance()
+                                    .build(RouterPath.WebCenter.ACTIVITY_HTML)
+                                    .withString(WebConstants.WEB_URL, item.linkUrl)
+                                    .navigation();
+                        }
+                    }
+                });
+
+        //热门专辑
+        LinearLayoutManager manager = new LinearLayoutManager(getContext());
+        manager.setOrientation(LinearLayoutManager.HORIZONTAL);
+        mViewBinding.rvHotAlbum.setLayoutManager(manager);
+        mAlbumAdapter = new HomeHotAlbumAdapter();
+        mViewBinding.rvHotAlbum.setAdapter(mAlbumAdapter);
+
+        LinearLayoutManager recommendMusicSheetManager = new LinearLayoutManager(getContext());
+        recommendMusicSheetManager.setOrientation(LinearLayoutManager.HORIZONTAL);
+        mRecommendAdapter = new HomeHotMusicSheetAdapter();
+        HomeHotMusicSheetItemDecoration itemDecoration1 = new HomeHotMusicSheetItemDecoration(0, SizeUtils.dp2px(12), 0, SizeUtils.dp2px(12), 0);
+        mViewBinding.rvRecommendTrack.addItemDecoration(itemDecoration1);
+        mViewBinding.rvRecommendTrack.setLayoutManager(recommendMusicSheetManager);
+        mViewBinding.rvRecommendTrack.setAdapter(mRecommendAdapter);
+        mViewBinding.rvRecommendTrack.setNestedScrollingEnabled(false);
+
+        LinearLayoutManager latestMusicSheetManager = new LinearLayoutManager(getContext());
+        latestMusicSheetManager.setOrientation(LinearLayoutManager.HORIZONTAL);
+        mLatestAdapter = new HomeHotMusicSheetAdapter();
+        HomeHotMusicSheetItemDecoration itemDecoration2 = new HomeHotMusicSheetItemDecoration(0, SizeUtils.dp2px(12), 0, SizeUtils.dp2px(12), 0);
+        mViewBinding.rvLatestTrack.addItemDecoration(itemDecoration2);
+        mViewBinding.rvLatestTrack.setLayoutManager(latestMusicSheetManager);
+        mViewBinding.rvLatestTrack.setAdapter(mLatestAdapter);
+        mViewBinding.rvLatestTrack.setNestedScrollingEnabled(false);
+
+        //热门曲目
+        LinearLayoutManager musicSheetManager = new LinearLayoutManager(getContext());
+        musicSheetManager.setOrientation(LinearLayoutManager.HORIZONTAL);
+        mHomeHotMusicSheetAdapter = new HomeHotMusicSheetAdapter();
+        HomeHotMusicSheetItemDecoration itemDecoration = new HomeHotMusicSheetItemDecoration(0, 0, 0, SizeUtils.dp2px(12), 0);
+        mViewBinding.rvHotTrack.addItemDecoration(itemDecoration);
+        mViewBinding.rvHotTrack.setLayoutManager(musicSheetManager);
+        mViewBinding.rvHotTrack.setAdapter(mHomeHotMusicSheetAdapter);
     }
 
     private void initListener() {
         mViewBinding.ivPractice.setOnClickListener(this);
+        mViewBinding.refreshLayout.setOnRefreshListener(new OnRefreshListener() {
+            @Override
+            public void onRefresh(@NonNull RefreshLayout refreshLayout) {
+                getData();
+            }
+        });
     }
 
     private void initViewModel() {
@@ -41,6 +142,21 @@ public class HomeMusicFragment extends BaseMVPFragment<FgHomeMusicLayoutBinding,
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        getData();
+    }
+
+    private void getData() {
+        //banner
+//        presenter.appHome();
+        //热门专辑
+        presenter.userAccountPage();
+        //曲目列表
+        presenter.getHotMusicSheetList();
+    }
+
+    @Override
     protected FgHomeMusicLayoutBinding getLayoutView() {
         return FgHomeMusicLayoutBinding.inflate(getLayoutInflater());
     }
@@ -53,9 +169,116 @@ public class HomeMusicFragment extends BaseMVPFragment<FgHomeMusicLayoutBinding,
     @Override
     public void onClick(View v) {
         int id = v.getId();
-        if(id == R.id.iv_practice){
+        if (id == R.id.iv_practice) {
             mHomeViewModel.getHomePageModeEvent().postValue(new HomePageMode(Constants.PRACTICE_TUTORIALS));
             return;
         }
     }
+
+    @Override
+    public void getHotMusicSheetListSuccess(HomeHotMusicSheetBean homeHotMusicSheetBean) {
+        if (isDetached() || homeHotMusicSheetBean == null) {
+            return;
+        }
+        mViewBinding.refreshLayout.finishRefresh();
+        //推荐曲目
+        if (homeHotMusicSheetBean.topMusicSheet != null && homeHotMusicSheetBean.topMusicSheet.size() > 0) {
+            mViewBinding.clRecommendTrack.setVisibility(View.VISIBLE);
+            ArrayList<HomeHotMusicSheetItemBean> itemBeans = formatMusicSheetData(homeHotMusicSheetBean.topMusicSheet);
+            if (mRecommendAdapter != null) {
+                mRecommendAdapter.setNewInstance(itemBeans);
+            }
+        } else {
+            mViewBinding.clRecommendTrack.setVisibility(View.GONE);
+        }
+
+        //最新曲目
+        if (homeHotMusicSheetBean.newMusicSheet != null && homeHotMusicSheetBean.newMusicSheet.size() > 0) {
+            mViewBinding.clLatestTrack.setVisibility(View.VISIBLE);
+            ArrayList<HomeHotMusicSheetItemBean> itemBeans = formatMusicSheetData(homeHotMusicSheetBean.newMusicSheet);
+            if (mLatestAdapter != null) {
+                mLatestAdapter.setNewInstance(itemBeans);
+            }
+        } else {
+            mViewBinding.clLatestTrack.setVisibility(View.GONE);
+        }
+
+        //最热曲目
+        if (homeHotMusicSheetBean.hotMusicSheet != null && homeHotMusicSheetBean.hotMusicSheet.size() > 0) {
+            mViewBinding.clHotTrack.setVisibility(View.VISIBLE);
+            ArrayList<HomeHotMusicSheetItemBean> itemBeans = formatMusicSheetData(homeHotMusicSheetBean.hotMusicSheet);
+            if (mHomeHotMusicSheetAdapter != null) {
+                mHomeHotMusicSheetAdapter.setNewInstance(itemBeans);
+            }
+        } else {
+            mViewBinding.clHotTrack.setVisibility(View.GONE);
+        }
+    }
+
+    private ArrayList<HomeHotMusicSheetItemBean> formatMusicSheetData(List<HomeHotMusicSheetBean.MusicSheetBean> rows) {
+        ArrayList<HomeHotMusicSheetItemBean> itemBeans = new ArrayList<>();
+        if (rows != null && rows.size() > 0) {
+            mViewBinding.clHotTrack.setVisibility(View.VISIBLE);
+            int pageCount = 0;
+            int pageResult = rows.size() % Constants.MAX_HOT_MUSIC_LIST_PAGE;
+            if (pageResult == 0) {
+                pageCount = rows.size() / Constants.MAX_HOT_MUSIC_LIST_PAGE;
+            } else {
+                pageCount = (rows.size() / Constants.MAX_HOT_MUSIC_LIST_PAGE) + 1;
+            }
+            for (int i = 0; i < pageCount; i++) {
+                HomeHotMusicSheetItemBean hotMusicSheetItemBean = new HomeHotMusicSheetItemBean();
+                for (int k = i * Constants.MAX_HOT_MUSIC_LIST_PAGE; k < rows.size() && k < (i + 1) * Constants.MAX_HOT_MUSIC_LIST_PAGE; k++) {
+                    hotMusicSheetItemBean.sheetBeans.add(rows.get(k));
+                }
+                itemBeans.add(hotMusicSheetItemBean);
+            }
+        }
+        return itemBeans;
+    }
+
+    @Override
+    public void hotAlbumListSuccess(HotAlbumBean homeHotAlbumListBean) {
+        if (isDetached() || homeHotAlbumListBean == null) {
+            return;
+        }
+        if (mAlbumAdapter != null) {
+            if (homeHotAlbumListBean.rows != null && homeHotAlbumListBean.rows.size() > 0) {
+                mViewBinding.clHotAlbum.setVisibility(View.VISIBLE);
+                mAlbumAdapter.setNewInstance(homeHotAlbumListBean.rows);
+            } else {
+                mViewBinding.clHotAlbum.setVisibility(View.GONE);
+            }
+        }
+    }
+
+    @Override
+    public void appHomeSuccess(AppHomeBean appHomeBean) {
+        if (isDetached()) {
+            return;
+        }
+        mViewBinding.refreshLayout.finishRefresh();
+        //banner
+        bindBanner(appHomeBean.banner);
+    }
+
+    /**
+     * 处理banner数据
+     *
+     * @param bannerList
+     */
+    private void bindBanner(List<AppHomeBean.ItemBean> bannerList) {
+        if (mBannerImageAdapter == null) {
+            return;
+        }
+        if (bannerList != null && bannerList.size() > 0) {
+            mViewBinding.flBanner.setVisibility(View.VISIBLE);
+            itemBeans.clear();
+            itemBeans.addAll(bannerList);
+            mBannerImageAdapter.notifyDataSetChanged();
+        } else {
+            itemBeans.clear();
+            mViewBinding.flBanner.setVisibility(View.GONE);
+        }
+    }
 }

+ 6 - 0
institution/src/main/java/com/cooleshow/institution/stu/ui/main/MainActivity.java

@@ -6,6 +6,7 @@ import android.widget.TextView;
 import com.alibaba.android.arouter.facade.annotation.Route;
 import com.cooleshow.base.router.RouterPath;
 import com.cooleshow.base.ui.activity.BaseActivity;
+import com.cooleshow.base.utils.helper.QMUIStatusBarHelper;
 import com.cooleshow.chatmodule.ui.ChatFragment;
 import com.cooleshow.institution.stu.R;
 import com.cooleshow.institution.stu.adapter.HomePageAdapter;
@@ -73,6 +74,11 @@ public class MainActivity extends BaseActivity<ActivityInstitutionMainLayoutBind
     }
 
     public void updateBottomTabStyle(boolean isBlack) {
+        if(isBlack){
+            QMUIStatusBarHelper.setStatusBarDarkMode(this);
+        }else{
+            QMUIStatusBarHelper.setStatusBarLightMode(this);
+        }
         viewBinding.csBottom.setBackgroundColor(getResources().getColor(isBlack ? R.color.color_121b2e : com.cooleshow.base.R.color.white));
     }
 

+ 34 - 0
institution/src/main/java/com/cooleshow/institution/stu/widget/HomeHotMusicSheetItemDecoration.java

@@ -0,0 +1,34 @@
+package com.cooleshow.institution.stu.widget;
+
+import android.graphics.Rect;
+import android.view.View;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+/**
+ * Author by pq, Date on 2021/3/18 0018.
+ */
+public class HomeHotMusicSheetItemDecoration extends RecyclerView.ItemDecoration {
+
+    private int top;
+    private int left;
+    private int bottom;
+    private int right;
+    private int center;
+
+    public HomeHotMusicSheetItemDecoration(int top, int left, int bottom, int right, int center) {
+        this.top = top;
+        this.left = left;
+        this.bottom = bottom;
+        this.right = right;
+        this.center = center;
+    }
+
+    @Override
+    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
+        //每行都只有2个
+        outRect.top = top;
+        outRect.bottom = bottom;
+        outRect.right = right;
+    }
+}

+ 129 - 0
institution/src/main/java/com/cooleshow/institution/stu/widget/HomeHotMusicSheetItemView.java

@@ -0,0 +1,129 @@
+package com.cooleshow.institution.stu.widget;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.cooleshow.base.utils.MusicSheetUtils;
+import com.cooleshow.base.utils.SizeUtils;
+import com.cooleshow.base.utils.UiUtils;
+import com.cooleshow.base.utils.helper.WebStartHelper;
+import com.cooleshow.institution.stu.R;
+import com.cooleshow.institution.stu.bean.HomeHotMusicSheetBean;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * Author by pq, Date on 2022/8/8.
+ */
+public class HomeHotMusicSheetItemView extends FrameLayout {
+    public static final String CHARGE_TYPE_FREE = "FREE";
+    public static final String CHARGE_TYPE_VIP = "VIP";
+    public static final String CHARGE_TYPE_CHARGE = "CHARGE";
+    private TextView mTvTag;
+    private TextView mTvName;
+    private TextView mTvAuthor;
+    private TextView mTvUploadAuthor;
+    private LinearLayout mLlMusicSubject;
+    private View mViewLine;
+    private HomeHotMusicSheetBean.MusicSheetBean mBean;
+    private ImageView mIvGoodTag;
+    private LinearLayout mTagContainer;
+    private View mIvAlbumTag;
+
+    public HomeHotMusicSheetItemView(@NonNull Context context) {
+        this(context, null);
+    }
+
+    public HomeHotMusicSheetItemView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        this(context, attrs, -1);
+    }
+
+    public HomeHotMusicSheetItemView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    private void init() {
+        LayoutInflater.from(getContext()).inflate(R.layout.jg_view_hot_music_sheet_child_layout, this);
+        mTagContainer = findViewById(R.id.ll_tag_container);
+        mIvGoodTag = findViewById(R.id.iv_good_tag);
+        mTvName = findViewById(R.id.tv_name);
+        mTvAuthor = findViewById(R.id.tv_author);
+        mTvUploadAuthor = findViewById(R.id.tv_upload_author);
+        mLlMusicSubject = findViewById(R.id.ll_music_subject);
+        mViewLine = findViewById(R.id.view_line);
+        mIvAlbumTag = findViewById(R.id.iv_album_tag);
+        setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mBean != null) {
+                    if (UiUtils.isFastClick()) {
+                        return;
+                    }
+                    WebStartHelper.startMusicSheetDetail(String.valueOf(mBean.id));
+                }
+            }
+        });
+
+    }
+
+    public void setData(HomeHotMusicSheetBean.MusicSheetBean data) {
+        this.mBean = data;
+        //曲谱名称
+        if (mTvName != null) {
+            mTvName.setText(data.musicSheetName);
+        }
+        //作者
+        if (mTvAuthor != null) {
+            mTvAuthor.setText(String.format("-%s", data.composer));
+        }
+        //上传人
+        if (mTvUploadAuthor != null) {
+            mTvUploadAuthor.setText(String.format("上传者:%s", data.addName));
+        }
+
+
+        mLlMusicSubject.removeAllViews();
+        if (!TextUtils.isEmpty(data.subjectNames)) {
+            String[] split = data.subjectNames.split(",");
+            if (split != null && split.length > 0) {
+                for (int i = 0; i < split.length; i++) {
+                    createSubjectView(split[i]);
+                }
+            }
+        }
+
+        //精品曲目标记
+        mIvGoodTag.setVisibility(TextUtils.equals(data.exquisiteFlag, "1") ? View.VISIBLE : View.GONE);
+
+        //专辑曲目标记
+        MusicSheetUtils.addAlbumTag(data.albumNums,mIvAlbumTag);
+    }
+
+    private void createSubjectView(String text) {
+        TextView textView = (TextView) LayoutInflater.from(getContext()).inflate(com.cooleshow.base.R.layout.view_subject_item_layout, mLlMusicSubject, false);
+        textView.setText(text);
+        textView.setTextColor(getContext().getResources().getColor(com.cooleshow.base.R.color.color_2dc7aa));
+        textView.setBackgroundResource(com.cooleshow.base.R.drawable.shape_effbf9_9dp);
+        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+        if (mLlMusicSubject.getChildCount() >= 1) {
+            params.setMargins(SizeUtils.dp2px(4), 0, 0, 0);
+        }
+        mLlMusicSubject.addView(textView, params);
+    }
+
+    public void setDividingLineIsShow(boolean isShow) {
+        if (mViewLine != null) {
+            mViewLine.setVisibility(isShow ? View.VISIBLE : View.INVISIBLE);
+        }
+    }
+}

BIN
institution/src/main/res/drawable-xhdpi/icon_institution_img2.png


BIN
institution/src/main/res/drawable-xhdpi/jg_album_bg.png


BIN
institution/src/main/res/drawable-xxhdpi/icon_institution_img2.png


BIN
institution/src/main/res/drawable-xxhdpi/jg_album_bg.png


+ 9 - 5
institution/src/main/res/layout/fg_home_music_layout.xml

@@ -37,7 +37,7 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="15dp"
         android:layout_marginTop="13dp"
-        android:src="@drawable/icon_institution_img"
+        android:src="@drawable/icon_institution_img2"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintTop_toBottomOf="@+id/view_status_bar" />
 
@@ -145,18 +145,21 @@
         app:srlEnableLoadMore="false">
 
         <androidx.core.widget.NestedScrollView
+            android:scrollbars="none"
+            android:overScrollMode="never"
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:layout_width="match_parent"
+                android:paddingBottom="12dp"
                 android:layout_height="wrap_content">
 
                 <FrameLayout
+                    android:visibility="gone"
                     android:id="@+id/fl_banner"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:clipChildren="false"
                     app:layout_constraintLeft_toLeftOf="parent"
                     app:layout_constraintRight_toRightOf="parent"
                     app:layout_constraintTop_toTopOf="parent">
@@ -164,9 +167,9 @@
                     <com.youth.banner.Banner
                         android:id="@+id/banner"
                         android:layout_width="match_parent"
-                        android:layout_height="@dimen/dp_156"
-                        android:layout_marginLeft="@dimen/dp_25"
-                        android:layout_marginRight="@dimen/dp_25"
+                        android:layout_height="@dimen/dp_133"
+                        android:layout_marginLeft="@dimen/dp_14"
+                        android:layout_marginRight="@dimen/dp_14"
                         android:descendantFocusability="blocksDescendants"
                         app:banner_indicator_gravity="right"
                         app:banner_indicator_height="5dp"
@@ -186,6 +189,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="@dimen/dp_10"
+                    app:layout_goneMarginTop="0dp"
                     android:visibility="visible"
                     app:layout_constraintTop_toBottomOf="@+id/fl_banner">
 

+ 9 - 0
institution/src/main/res/layout/jg_item_home_hot_music_sheet_layout.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/ll_container"
+    android:layout_width="312dp"
+    android:layout_height="match_parent"
+    android:background="@drawable/shape_8dp_white"
+    android:orientation="vertical">
+
+</LinearLayout>

+ 40 - 0
institution/src/main/res/layout/jg_layout_home_hot_album_item.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_marginEnd="10dp"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <ImageView
+        android:layout_marginStart="13dp"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintLeft_toLeftOf="parent"
+        android:src="@drawable/jg_album_bg"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <com.cooleshow.base.widgets.QMUIRadiusImageView
+        android:id="@+id/im_pic"
+        android:layout_width="@dimen/dp_98"
+        android:layout_height="@dimen/dp_98"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:qmui_corner_radius="10dp" />
+
+    <TextView
+        android:id="@+id/album_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/dp_6"
+        android:ellipsize="end"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:maxLines="2"
+        android:textColor="@color/black_333"
+        android:textSize="@dimen/sp_14"
+        tools:text="宫崎骏合集 | 一起感受宫崎骏的夏…"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/im_pic" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 141 - 0
institution/src/main/res/layout/jg_view_hot_music_sheet_child_layout.xml

@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="79dp"
+    android:paddingStart="11dp"
+    android:paddingEnd="11dp">
+
+
+    <LinearLayout
+        android:id="@+id/ll_tag_container"
+        android:layout_width="wrap_content"
+        android:layout_height="17dp"
+        android:orientation="horizontal"
+        app:layout_constraintVertical_chainStyle="packed"
+        app:layout_constraintBottom_toTopOf="@+id/tv_upload_author"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+<!--    <TextView-->
+<!--       -->
+<!--        android:id="@+id/tv_tag"-->
+<!--        android:layout_width="30dp"-->
+<!--        android:layout_height="17dp"-->
+<!--        android:background="@drawable/shape_01b84f_border"-->
+<!--        android:gravity="center"-->
+<!--        android:text="免费"-->
+<!--        android:textSize="@dimen/sp_10"-->
+<!--        app:layout_constraintLeft_toLeftOf="parent"-->
+<!--        app:layout_constraintTop_toTopOf="parent" />-->
+
+    <ImageView
+        android:visibility="gone"
+        android:id="@+id/iv_good_tag"
+        android:layout_marginStart="5dp"
+        app:layout_constraintLeft_toRightOf="@+id/ll_tag_container"
+        app:layout_constraintBottom_toBottomOf="@+id/ll_tag_container"
+        app:layout_constraintTop_toTopOf="@+id/ll_tag_container"
+        android:src="@drawable/icon_home_good_music_sheet_tag"
+        android:layout_width="14dp"
+        android:layout_height="17dp"/>
+
+    <ImageView
+        android:visibility="gone"
+        android:id="@+id/iv_album_tag"
+        android:layout_marginStart="5dp"
+        app:layout_constraintBottom_toBottomOf="@+id/ll_tag_container"
+        app:layout_constraintTop_toTopOf="@+id/ll_tag_container"
+        app:layout_constraintLeft_toRightOf="@+id/iv_good_tag"
+        android:src="@drawable/icon_music_is_album_tag"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
+    <TextView
+        android:id="@+id/tv_name"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:ellipsize="end"
+        android:includeFontPadding="false"
+        android:lines="1"
+        android:layout_marginStart="6dp"
+        app:layout_goneMarginStart="0dp"
+        android:textColor="@color/color_1a1a1a"
+        android:textSize="@dimen/sp_16"
+        app:layout_constraintWidth_default="wrap"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintHorizontal_chainStyle="packed"
+        app:layout_constraintBottom_toBottomOf="@+id/ll_tag_container"
+        app:layout_constraintLeft_toRightOf="@+id/iv_album_tag"
+        app:layout_constraintRight_toLeftOf="@+id/tv_author"
+        app:layout_constraintTop_toTopOf="@+id/ll_tag_container"
+        tools:text="维瓦尔第 E第一维瓦尔第维瓦尔第维瓦尔第" />
+
+    <TextView
+        android:maxLines="1"
+        android:id="@+id/tv_author"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="5dp"
+        android:ellipsize="end"
+        android:includeFontPadding="false"
+        android:paddingStart="6dp"
+        android:maxLength="6"
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_12"
+        app:layout_constraintRight_toLeftOf="@+id/iv_play"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_name"
+        app:layout_constraintLeft_toRightOf="@+id/tv_name"
+        app:layout_constraintTop_toTopOf="@+id/tv_name"
+        tools:text="-维瓦尔第…维瓦尔第维瓦尔第" />
+
+    <ImageView
+        android:id="@+id/iv_play"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="14dp"
+        android:src="@drawable/icon_music_sheet_play"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <TextView
+        android:id="@+id/tv_upload_author"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="12dp"
+        android:ellipsize="end"
+        android:includeFontPadding="false"
+        android:maxLines="1"
+        android:textColor="@color/color_999999"
+        android:textSize="@dimen/sp_12"
+        app:layout_constraintWidth_default="wrap"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintHorizontal_chainStyle="packed"
+        app:layout_constraintRight_toLeftOf="@+id/ll_music_subject"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintLeft_toLeftOf="@+id/ll_tag_container"
+        app:layout_constraintTop_toBottomOf="@+id/ll_tag_container"
+        tools:text="上传者:一把剑走天涯一把剑走天涯一把剑走天涯一把剑走天涯一把剑走天涯" />
+
+    <LinearLayout
+        android:layout_marginEnd="5dp"
+        android:layout_marginStart="12dp"
+        android:id="@+id/ll_music_subject"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        app:layout_constraintBottom_toBottomOf="@+id/tv_upload_author"
+        app:layout_constraintLeft_toRightOf="@+id/tv_upload_author"
+        app:layout_constraintRight_toLeftOf="@+id/iv_play"
+        app:layout_constraintTop_toTopOf="@+id/tv_upload_author" />
+
+    <View
+        android:id="@+id/view_line"
+        android:layout_width="match_parent"
+        android:layout_height="0.5dp"
+        android:background="@color/color_f2f2f2"
+        app:layout_constraintBottom_toBottomOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

Some files were not shown because too many files changed in this diff