Bladeren bron

1.添加休闲健脑接口和UI

王鹏鹏 2 jaren geleden
bovenliggende
commit
05ada00329

+ 1 - 0
.idea/misc.xml

@@ -80,6 +80,7 @@
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/fragment_train_report.xml" value="0.22826086956521738" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_course_treatment.xml" value="0.1" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_free_training.xml" value="0.8800000000000001" />
+        <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_free_training_list.xml" value="0.8800000000000001" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_free_training_type.xml" value="0.536" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_game_list.xml" value="0.4" />
         <entry key="..\:/workspace/hcp-pad/workbenches/src/main/res/layout/item_task.xml" value="0.8800000000000001" />

+ 1 - 1
push/src/main/java/com/yingyang/push/activity/MessgeListActivity.kt

@@ -38,7 +38,7 @@ class MessgeListActivity : BaseMVVMActivity<ActivityMessgeListBinding, PushViewM
             PushMessageTypeBean(
                 dictLabel = "全部消息",
                 dictValue = "",
-                dictType = "game_type"
+                dictType = "warn_type"
             )
         )
         binding {

+ 13 - 8
push/src/main/res/layout/item_push_type.xml

@@ -10,15 +10,20 @@
             type="com.yingyang.push.entity.PushMessageTypeBean" />
     </data>
 
-    <TextView
-        android:id="@+id/tvType"
+    <LinearLayout
         android:layout_width="@dimen/divider_133px"
         android:layout_height="@dimen/divider_55px"
-        android:layout_marginTop="@dimen/divider_40px"
-        android:gravity="center_vertical"
-        android:paddingStart="@dimen/divider_62px"
-        android:text="@{data.dictLabel}"
-        android:textColor="@android:color/white"
-        android:textSize="@dimen/divider_24px" />
+        android:layout_marginTop="@dimen/divider_40px">
+
+        <TextView
+            android:id="@+id/tvType"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:text="@{data.dictLabel}"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_24px" />
+
+    </LinearLayout>
 
 </layout>

+ 34 - 0
workbenches/src/main/java/com/yingyang/workbenches/adapter/LeisureBrainListAdapter.kt

@@ -0,0 +1,34 @@
+package com.yingyang.workbenches.adapter
+
+import android.annotation.SuppressLint
+import com.yingyang.workbenches.R
+import com.yingyang.workbenches.databinding.ItemLeisureBrainListBinding
+import com.yingyang.workbenches.entity.LeisureBrainBean
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+
+/**
+ * 休闲健脑类型adapter
+ */
+class LeisureBrainListAdapter(override val layoutId: Int = R.layout.item_leisure_brain_list) :
+    BaseDataBindingAdapter<LeisureBrainBean, ItemLeisureBrainListBinding>() {
+
+    var onLeisureBrainTypeClickListener: ((bean: LeisureBrainBean) -> Unit)? = null
+
+    private var currentPosition = 0
+
+    @SuppressLint("NotifyDataSetChanged")
+    override fun onBindViewHolder(
+        binding: ItemLeisureBrainListBinding,
+        item: LeisureBrainBean,
+        position: Int
+    ) {
+        binding.data = item
+
+        binding.leisureBrainListLayout.setOnSingleClickListener {
+            currentPosition = position
+            notifyDataSetChanged()
+            onLeisureBrainTypeClickListener?.invoke(item)
+        }
+    }
+}

+ 42 - 0
workbenches/src/main/java/com/yingyang/workbenches/adapter/LeisureBrainTypeAdapter.kt

@@ -0,0 +1,42 @@
+package com.yingyang.workbenches.adapter
+
+import android.annotation.SuppressLint
+import android.graphics.Typeface
+import com.yingyang.workbenches.R
+import com.yingyang.workbenches.databinding.ItemFreeTrainingTypeBinding
+import com.yingyang.workbenches.entity.TrainTypeBean
+import com.yingyangfly.baselib.adapter.BaseDataBindingAdapter
+import com.yingyangfly.baselib.ext.setOnSingleClickListener
+
+/**
+ * 休闲健脑类型adapter
+ */
+class LeisureBrainTypeAdapter(override val layoutId: Int = R.layout.item_free_training_type) :
+    BaseDataBindingAdapter<TrainTypeBean, ItemFreeTrainingTypeBinding>() {
+
+    var onLeisureBrainTypeClickListener: ((bean: TrainTypeBean) -> Unit)? = null
+
+    private var currentPosition = 0
+
+    @SuppressLint("NotifyDataSetChanged")
+    override fun onBindViewHolder(
+        binding: ItemFreeTrainingTypeBinding,
+        item: TrainTypeBean,
+        position: Int
+    ) {
+        binding.data = item
+        if (currentPosition == position) {
+            binding.tvType.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
+            binding.tvType.setBackgroundResource(R.drawable.selector_train_radio_checked)
+        } else {
+            binding.tvType.typeface = Typeface.defaultFromStyle(Typeface.NORMAL)
+            binding.tvType.setBackgroundResource(R.drawable.selector_train_radio_unchecked)
+
+        }
+        binding.tvType.setOnSingleClickListener {
+            currentPosition = position
+            notifyDataSetChanged()
+            onLeisureBrainTypeClickListener?.invoke(item)
+        }
+    }
+}

+ 2 - 8
workbenches/src/main/java/com/yingyang/workbenches/entity/LeisureBrainListBean.kt

@@ -3,13 +3,6 @@ package com.yingyang.workbenches.entity
 /**
  * 休闲健脑bean
  */
-data class LeisureBrainListBean(
-    val A: List<LeisureBrainBean>,//手指操
-    val B: List<LeisureBrainBean>,//放松
-    val C: List<LeisureBrainBean>,//情绪
-    val D: List<LeisureBrainBean>//训练
-)
-
 data class LeisureBrainBean(
     val createBy: String,
     val createTime: String,
@@ -22,5 +15,6 @@ data class LeisureBrainBean(
     val videoDesn: String,
     val videoName: String,
     val videoType: String,
-    val videoUrl: String
+    val videoUrl: String,
+    val videoCoverImage: String//封面
 )

+ 81 - 10
workbenches/src/main/java/com/yingyang/workbenches/leisurebrain/LeisureBrainActivity.kt

@@ -1,7 +1,12 @@
 package com.yingyang.workbenches.leisurebrain
 
+import androidx.recyclerview.widget.GridLayoutManager
 import com.alibaba.android.arouter.facade.annotation.Route
+import com.yingyang.workbenches.adapter.LeisureBrainListAdapter
+import com.yingyang.workbenches.adapter.LeisureBrainTypeAdapter
 import com.yingyang.workbenches.databinding.ActivityLeisureBrainBinding
+import com.yingyang.workbenches.entity.LeisureBrainBean
+import com.yingyang.workbenches.entity.TrainTypeBean
 import com.yingyangfly.baselib.ext.setOnSingleClickListener
 import com.yingyangfly.baselib.ext.toast
 import com.yingyangfly.baselib.mvvm.BaseMVVMActivity
@@ -15,31 +20,97 @@ import com.yingyangfly.baselib.utils.JumpUtil
 class LeisureBrainActivity :
     BaseMVVMActivity<ActivityLeisureBrainBinding, LeisureBrainViewModel>() {
 
-    private var url = ""
+    /**
+     * 休闲健脑类型adapter
+     */
+    private var videoType = ""
+    private var leisureBrainTypeList = mutableListOf<TrainTypeBean>()
+    private val leisureBrainTrainTypeAdapter by lazy { LeisureBrainTypeAdapter() }
+
+    /**
+     * 休闲健脑列表
+     */
+    private var leisureBrainList = mutableListOf<LeisureBrainBean>()
+    private val leisureBrainListAdapter by lazy { LeisureBrainListAdapter() }
 
     override fun initViews() {
+        leisureBrainTypeList.clear()
+        leisureBrainTypeList.add(
+            TrainTypeBean(
+                dictLabel = "全部",
+                dictValue = "",
+                dictType = "video_type"
+            )
+        )
+        binding {
+            tvTitle.text = "全部"
+            rvLeisureBrainType.adapter = leisureBrainTrainTypeAdapter
+            leisureBrainTrainTypeAdapter.setData(leisureBrainTypeList)
+            leisureBrainTrainTypeAdapter.onLeisureBrainTypeClickListener = { bean ->
+                tvTitle.text = bean.dictLabel
+                videoType = bean.dictValue
+                getLeisureBrainList()
+            }
+
+            //休闲健脑列表
+            rvLeisureBrain.layoutManager = GridLayoutManager(this@LeisureBrainActivity, 4)
+            rvLeisureBrain.adapter = leisureBrainListAdapter
+            leisureBrainListAdapter.onLeisureBrainTypeClickListener = { bean ->
+                JumpUtil.jumpActivityWithUrl(RouterUrlCommon.videoPlayer, bean.videoUrl)
+            }
+        }
     }
 
     override fun initListener() {
-//        binding.btnPlay.setOnClickListener {
-//            if (url.isNotEmpty()) {
-//                JumpUtil.jumpActivityWithUrl(RouterUrlCommon.videoPlayer, url)
-//            }
-//        }
-
         binding.layoutHead.setOnSingleClickListener {
             JumpUtil.jumpActivity(RouterUrlCommon.workbenches)
         }
     }
 
     override fun initData() {
-        viewModel.getSelectAllVideo(fail = {
+        getSelectByDictType()
+    }
+
+    /**
+     * 获取休闲健脑类型列表
+     */
+    private fun getSelectByDictType() {
+        leisureBrainTypeList.clear()
+        leisureBrainTypeList.add(
+            TrainTypeBean(
+                dictLabel = "全部",
+                dictValue = "",
+                dictType = "video_type"
+            )
+        )
+        viewModel.getSelectByDictType(fail = {
             it.toast()
         }, success = {
-            if (it.A.isNullOrEmpty().not()) {
-                url = it.A[0].videoUrl
+            if (it.isNullOrEmpty().not()) {
+                leisureBrainTypeList.addAll(it)
             }
+            leisureBrainTrainTypeAdapter.setData(leisureBrainTypeList)
         })
     }
 
+
+    override fun onResume() {
+        super.onResume()
+        getLeisureBrainList()
+    }
+
+    /**
+     * 获取自由训练列表
+     */
+    private fun getLeisureBrainList() {
+        leisureBrainList.clear()
+        viewModel.getSelectAllVideo(videoType, fail = {
+            it.toast()
+        }, success = {
+            if (it.isNullOrEmpty().not()) {
+                leisureBrainList.addAll(it)
+            }
+            leisureBrainListAdapter.setData(leisureBrainList)
+        })
+    }
 }

+ 18 - 4
workbenches/src/main/java/com/yingyang/workbenches/leisurebrain/LeisureBrainViewModel.kt

@@ -1,23 +1,37 @@
 package com.yingyang.workbenches.leisurebrain
 
-import com.yingyang.workbenches.entity.LeisureBrainListBean
+import com.yingyang.workbenches.entity.LeisureBrainBean
+import com.yingyang.workbenches.entity.TrainTypeBean
 import com.yingyang.workbenches.net.WORKBENCHES_API
 import com.yingyangfly.baselib.mvvm.BaseViewModel
 
 /**
  * @author 王鹏鹏
- * @description 工作台页面ViewModel
  */
 class LeisureBrainViewModel : BaseViewModel() {
 
+    /**
+     * 获取休闲健脑类型列表
+     */
+    fun getSelectByDictType(
+        fail: ((msg: String) -> Unit)? = null,
+        success: ((success: List<TrainTypeBean>) -> Unit)? = null,
+    ) = launchFlow(true) {
+        WORKBENCHES_API.getSelectByDictType("video_type")
+    }.runUI(
+        success,
+        fail
+    )
+
     /**
      * 获取休闲健脑视频列表
      */
     fun getSelectAllVideo(
+        videoType: String,
         fail: ((msg: String) -> Unit)? = null,
-        success: ((success: LeisureBrainListBean) -> Unit)? = null,
+        success: ((success: List<LeisureBrainBean>) -> Unit)? = null,
     ) = launchFlow(false) {
-        WORKBENCHES_API.getSelectAllVideo()
+        WORKBENCHES_API.getVideoList(videoType)
     }.runUI(
         success,
         fail

+ 2 - 2
workbenches/src/main/java/com/yingyang/workbenches/net/WorkbenchesApiService.kt

@@ -28,8 +28,8 @@ interface WorkbenchesApiService {
     /**
      * 获取休闲健脑视频列表
      */
-    @POST("app/video/selectAllVideo")
-    suspend fun getSelectAllVideo(): BaseResp<LeisureBrainListBean>
+    @POST("app/video/list")
+    suspend fun getVideoList(@Query("videoType") videoType: String): BaseResp<List<LeisureBrainBean>>
 
     /**
      * 查询是否有进行中的任务

+ 0 - 2
workbenches/src/main/java/com/yingyang/workbenches/widget/NiceSpinner.java

@@ -2,7 +2,6 @@ package com.yingyang.workbenches.widget;
 
 import android.animation.ObjectAnimator;
 import android.content.Context;
-import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
@@ -18,7 +17,6 @@ import android.widget.AdapterView;
 import android.widget.ListAdapter;
 import android.widget.ListPopupWindow;
 import android.widget.ListView;
-import android.widget.PopupWindow;
 
 import androidx.annotation.ColorRes;
 import androidx.annotation.DrawableRes;

+ 68 - 7
workbenches/src/main/res/layout/activity_leisure_brain.xml

@@ -2,11 +2,7 @@
 <layout 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"
-    tools:ignore="MissingDefaultResource,ResourceName">
-
-    <data>
-
-    </data>
+    tools:ignore="ResourceName">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
@@ -21,14 +17,14 @@
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintTop_toTopOf="parent">
 
-            <ImageView
+            <androidx.appcompat.widget.AppCompatImageView
                 android:layout_width="@dimen/divider_48px"
                 android:layout_height="@dimen/divider_43px"
                 android:layout_marginStart="@dimen/divider_65px"
                 android:layout_marginTop="@dimen/divider_35px"
                 android:background="@mipmap/bg_home" />
 
-            <TextView
+            <androidx.appcompat.widget.AppCompatTextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginStart="@dimen/divider_14px"
@@ -39,7 +35,72 @@
                 android:textStyle="bold" />
         </LinearLayout>
 
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rvLeisureBrainType"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_marginStart="@dimen/divider_37px"
+            android:layout_marginTop="@dimen/divider_110px"
+            android:layout_marginEnd="@dimen/divider_36px"
+            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/layoutHead" />
+
+        <androidx.cardview.widget.CardView
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_marginStart="@dimen/divider_38px"
+            android:layout_marginTop="@dimen/divider_18px"
+            android:layout_marginEnd="@dimen/divider_18px"
+            android:layout_marginBottom="@dimen/divider_18px"
+            android:background="@android:color/white"
+            app:cardCornerRadius="@dimen/divider_38px"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toRightOf="@id/rvLeisureBrainType"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tvTitle"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/divider_31px"
+                    android:text="@string/all_training"
+                    android:textColor="@color/color_FF4A76FF"
+                    android:textSize="@dimen/divider_42px"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <com.scwang.smart.refresh.layout.SmartRefreshLayout
+                    android:id="@+id/layoutTraining"
+                    android:layout_width="match_parent"
+                    android:layout_height="0dp"
+                    android:layout_margin="@dimen/divider_28px"
+                    android:layout_marginTop="@dimen/divider_8px"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintLeft_toLeftOf="parent"
+                    app:layout_constraintRight_toRightOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/tvTitle">
+
+                    <com.scwang.smart.refresh.header.ClassicsHeader
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content" />
+
+                    <androidx.recyclerview.widget.RecyclerView
+                        android:id="@+id/rvLeisureBrain"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent" />
+
+                </com.scwang.smart.refresh.layout.SmartRefreshLayout>
 
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </androidx.cardview.widget.CardView>
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </layout>

+ 1 - 1
workbenches/src/main/res/layout/item_free_training.xml

@@ -14,7 +14,7 @@
     <androidx.cardview.widget.CardView
         android:id="@+id/gameLayout"
         android:layout_width="@dimen/divider_184px"
-        android:layout_height="@dimen/divider_249px"
+        android:layout_height="@dimen/divider_229px"
         android:layout_marginTop="@dimen/divider_32px"
         app:cardCornerRadius="@dimen/divider_20px">
 

+ 13 - 8
workbenches/src/main/res/layout/item_free_training_type.xml

@@ -10,15 +10,20 @@
             type="com.yingyang.workbenches.entity.TrainTypeBean" />
     </data>
 
-    <TextView
-        android:id="@+id/tvType"
+    <LinearLayout
         android:layout_width="@dimen/divider_133px"
         android:layout_height="@dimen/divider_55px"
-        android:layout_marginTop="@dimen/divider_40px"
-        android:gravity="center_vertical"
-        android:paddingStart="@dimen/divider_62px"
-        android:text="@{data.dictLabel}"
-        android:textColor="@android:color/white"
-        android:textSize="@dimen/divider_24px" />
+        android:layout_marginTop="@dimen/divider_40px">
+
+        <TextView
+            android:id="@+id/tvType"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:gravity="center"
+            android:text="@{data.dictLabel}"
+            android:textColor="@android:color/white"
+            android:textSize="@dimen/divider_24px" />
+
+    </LinearLayout>
 
 </layout>

+ 66 - 0
workbenches/src/main/res/layout/item_leisure_brain_list.xml

@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout 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"
+    tools:ignore="ResourceName">
+
+    <data>
+
+        <variable
+            name="data"
+            type="com.yingyang.workbenches.entity.LeisureBrainBean" />
+    </data>
+
+    <androidx.cardview.widget.CardView
+        android:id="@+id/leisureBrainListLayout"
+        android:layout_width="@dimen/divider_184px"
+        android:layout_height="@dimen/divider_229px"
+        android:layout_marginTop="@dimen/divider_32px"
+        app:cardCornerRadius="@dimen/divider_20px">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@mipmap/icon_game"
+                app:isCircle="@{false}"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:loadHeadImg="@{data.videoCoverImage}" />
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:layout_width="@dimen/divider_72px"
+                android:layout_height="@dimen/divider_72px"
+                android:layout_marginTop="@dimen/divider_60px"
+                android:background="@mipmap/icon_video"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tvName"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/divider_45px"
+                android:layout_marginTop="@dimen/divider_9px"
+                android:background="@color/color_FF416AFF"
+                android:gravity="center"
+                android:text="@{data.videoName}"
+                android:textColor="@android:color/white"
+                android:textSize="@dimen/divider_24px"
+                android:textStyle="bold"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintLeft_toLeftOf="parent"
+                app:layout_constraintRight_toRightOf="parent"
+                tools:text="@string/accumulated_training_duration" />
+
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </androidx.cardview.widget.CardView>
+
+</layout>

BIN
workbenches/src/main/res/mipmap-xxhdpi/icon_video.png


+ 1 - 0
workbenches/src/main/res/values/dimens.xml

@@ -31,6 +31,7 @@
     <dimen name="divider_249px" tools:ignore="PxUsage">249px</dimen>
     <dimen name="divider_237px" tools:ignore="PxUsage">237px</dimen>
     <dimen name="divider_230px" tools:ignore="PxUsage">230px</dimen>
+    <dimen name="divider_229px" tools:ignore="PxUsage">229px</dimen>
     <dimen name="divider_195px" tools:ignore="PxUsage">195px</dimen>
     <dimen name="divider_190px" tools:ignore="PxUsage">190px</dimen>
     <dimen name="divider_184px" tools:ignore="PxUsage">184px</dimen>