Просмотр исходного кода

refactor(更新)
- 新增点位分组

周文健 4 месяцев назад
Родитель
Сommit
9537b5b92f

+ 41 - 12
app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectPointFragment.kt

@@ -1,14 +1,19 @@
 package com.grkj.iscs.features.main.fragment.common
 
+import android.widget.LinearLayout
+import androidx.core.view.isVisible
 import androidx.fragment.app.viewModels
+import androidx.recyclerview.widget.RecyclerView
 import com.drake.brv.BindingAdapter
 import com.drake.brv.utils.grid
+import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
 import com.grkj.data.model.vo.PointManageVo
 import com.grkj.iscs.R
 import com.grkj.iscs.common.DataTransferConstants
 import com.grkj.iscs.databinding.FragmentSelectPointBinding
+import com.grkj.iscs.databinding.ItemPointGroupBinding
 import com.grkj.iscs.databinding.ItemSelectPointBinding
 import com.grkj.iscs.features.main.viewmodel.common.SelectPointViewModel
 import com.grkj.ui_base.base.BaseFragment
@@ -23,7 +28,7 @@ import kotlin.math.log
 @AndroidEntryPoint
 class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
     private val viewModel: SelectPointViewModel by viewModels()
-    private var selectedPointData: MutableList<PointManageVo> = mutableListOf()
+    private var selectedPointData: MutableList<Pair<String, List<PointManageVo>>> = mutableListOf()
     override fun getLayoutId(): Int {
         return R.layout.fragment_select_point
     }
@@ -46,12 +51,41 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
                 onAllPointRVBinding(this)
             }
         }
-        binding.selectedPointRv.grid(6).setup {
+        binding.pointGroupRv.apply {
+            if (isLandscape()) {
+                linear()
+            } else {
+                linear(LinearLayout.HORIZONTAL)
+            }
+        }.setup {
+            addType<Pair<String, List<PointManageVo>>>(R.layout.item_point_group)
+            onBind {
+                onPointGroupRVBinding(this)
+            }
+        }
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onPointGroupRVBinding(holder: BindingAdapter.BindingViewHolder) {
+        val itemBinding = holder.getBinding<ItemPointGroupBinding>()
+        val item = holder.getModel<Pair<String, List<PointManageVo>>>()
+        itemBinding.groupName.setText(item.first)
+        itemBinding.deleteGroup.isVisible = selectedPointData.size > 1
+        itemBinding.deleteGroup.setDebouncedClickListener {
+            item.second.forEach { selectedPoint ->
+                viewModel.pointManageData.find { it.pointId == selectedPoint.pointId }?.isSelected =
+                    false
+            }
+            selectedPointData.removeIf { it.first == item.first }
+            adapter.notifyDataSetChanged()
+            binding.unselectedPointRv.models =
+                viewModel.pointManageData.filter { it.isSelected == false }
+        }
+        itemBinding.groupPointRv.grid(6).setup {
             addType<PointManageVo>(R.layout.item_select_point)
             onBind {
                 onSelectedPointRVBinding(this)
             }
-        }
+        }.models = item.second
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {
@@ -62,11 +96,11 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
         itemBinding.root.setOnClickListener {
             if (item.isSelected) {
                 item.isSelected = false
-                selectedPointData.removeIf { it.pointId == item.pointId }
                 viewModel.pointManageData.find { it.pointId == item.pointId }?.isSelected = false
+                binding.unselectedPointRv.models =
+                    viewModel.pointManageData.filter { it.isSelected == false }
             }
             adapter.notifyDataSetChanged()
-            binding.selectedPointRv.adapter?.notifyDataSetChanged()
         }
     }
 
@@ -76,13 +110,8 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
         itemBinding.pointName.text = item.pointName
         itemBinding.pointIcon.isSelected = item.isSelected
         itemBinding.root.setOnClickListener {
-            if (item.isSelected) {
-                item.isSelected = false
-                selectedPointData.removeIf { it.pointId == item.pointId }
-            } else {
-                item.isSelected = true
-                selectedPointData.add(item)
-            }
+            item.isSelected = true
+            selectedPointData.add(item)
             adapter.notifyDataSetChanged()
             binding.selectedPointRv.adapter?.notifyDataSetChanged()
         }

+ 26 - 28
app/src/main/res/layout-land/fragment_select_point.xml

@@ -29,15 +29,15 @@
                 android:layout_marginLeft="@dimen/common_spacing"
                 android:text="@string/create_sop_title"
                 android:textColor="@color/black"
-                android:textStyle="bold"
-                android:textSize="@dimen/normal_text_size_25" />
+                android:textSize="@dimen/normal_text_size_25"
+                android:textStyle="bold" />
 
             <ImageView
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
-                android:scaleType="fitXY"
                 android:paddingHorizontal="@dimen/common_spacing"
-                android:src="@mipmap/icon_title_arrow_divider"/>
+                android:scaleType="fitXY"
+                android:src="@mipmap/icon_title_arrow_divider" />
 
             <ImageView
                 android:layout_width="@dimen/common_spacing_2x"
@@ -50,8 +50,8 @@
                 android:layout_marginLeft="@dimen/common_spacing"
                 android:text="@string/select_point_title"
                 android:textColor="@color/black"
-                android:textStyle="bold"
-                android:textSize="@dimen/normal_text_size_18" />
+                android:textSize="@dimen/normal_text_size_18"
+                android:textStyle="bold" />
 
             <View
                 android:layout_width="0dp"
@@ -86,13 +86,14 @@
             android:layout_weight="1"
             android:orientation="horizontal">
 
+
             <LinearLayout
-                android:id="@+id/selected_point_info_layout"
+                android:id="@+id/unselected_point_info_layout"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
-                android:layout_marginHorizontal="@dimen/common_spacing_2x"
+                android:layout_marginHorizontal="@dimen/common_spacing"
                 android:layout_marginVertical="@dimen/common_spacing"
-                android:layout_weight="1"
+                android:layout_weight="2"
                 android:background="@drawable/home_card_bg"
                 android:gravity="center_vertical"
                 android:orientation="vertical">
@@ -101,7 +102,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginLeft="@dimen/common_spacing"
-                    android:text="@string/selected_point_info_title"
+                    android:text="@string/point_list_title"
                     android:textColor="@color/black"
                     android:textSize="@dimen/normal_text_size_18" />
 
@@ -111,7 +112,7 @@
                     android:background="@color/black" />
 
                 <androidx.recyclerview.widget.RecyclerView
-                    android:id="@+id/selected_point_rv"
+                    android:id="@+id/unselected_point_rv"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
                     android:paddingBottom="@dimen/common_spacing" />
@@ -119,35 +120,32 @@
             </LinearLayout>
 
             <LinearLayout
-                android:id="@+id/unselected_point_info_layout"
                 android:layout_width="0dp"
                 android:layout_height="match_parent"
-                android:layout_marginHorizontal="@dimen/common_spacing_2x"
+                android:layout_marginHorizontal="@dimen/common_spacing"
                 android:layout_marginVertical="@dimen/common_spacing"
-                android:layout_weight="2"
-                android:background="@drawable/home_card_bg"
-                android:gravity="center_vertical"
+                android:layout_weight="1"
                 android:orientation="vertical">
 
                 <TextView
-                    android:layout_width="match_parent"
+                    android:id="@+id/add_group"
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:layout_marginVertical="5dp"
                     android:layout_marginLeft="@dimen/common_spacing"
-                    android:text="@string/unselected_point_info_title"
+                    android:layout_gravity="right"
+                    android:background="@drawable/common_btn"
+                    android:drawablePadding="@dimen/common_spacing"
+                    android:gravity="center"
+                    android:paddingHorizontal="@dimen/common_spacing_2x"
+                    android:text="@string/add_group"
                     android:textColor="@color/black"
-                    android:textSize="@dimen/normal_text_size_18" />
-
-                <View
-                    android:layout_width="match_parent"
-                    android:layout_height="@dimen/divider_line_space"
-                    android:background="@color/black" />
+                    android:textSize="@dimen/common_btn_text_size" />
 
                 <androidx.recyclerview.widget.RecyclerView
-                    android:id="@+id/unselected_point_rv"
+                    android:id="@+id/point_group_rv"
                     android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:paddingBottom="@dimen/common_spacing" />
-
+                    android:layout_height="match_parent" />
             </LinearLayout>
         </LinearLayout>
 

+ 58 - 0
app/src/main/res/layout-land/item_point_group.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <LinearLayout
+        android:id="@+id/selected_point_info_layout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/home_card_bg"
+        android:gravity="center_vertical"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_vertical"
+            android:paddingVertical="@dimen/common_spacing_small"
+            android:orientation="horizontal">
+
+            <EditText
+                android:id="@+id/group_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/common_spacing"
+                android:layout_weight="1"
+                android:background="none"
+                android:clickable="true"
+                android:focusable="false"
+                android:text="@string/selected_point_info_title"
+                android:textColor="@color/black"
+                android:textSize="@dimen/normal_text_size_18" />
+
+            <TextView
+                android:id="@+id/delete_group"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="right"
+                android:layout_marginRight="@dimen/common_spacing"
+                android:background="@drawable/common_btn"
+                android:drawablePadding="@dimen/common_spacing"
+                android:gravity="center"
+                android:paddingHorizontal="@dimen/common_spacing_2x"
+                android:text="@string/delete_group"
+                android:textColor="@color/black"
+                android:textSize="@dimen/common_btn_text_size" />
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/divider_line_space"
+            android:background="@color/black" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/group_point_rv"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:paddingBottom="@dimen/common_spacing" />
+    </LinearLayout>
+</layout>

+ 21 - 23
app/src/main/res/layout/fragment_select_point.xml

@@ -29,14 +29,14 @@
                 android:layout_marginLeft="@dimen/common_spacing"
                 android:text="@string/create_sop_title"
                 android:textColor="@color/black"
-                android:textStyle="bold"
-                android:textSize="@dimen/normal_text_size_25" />
+                android:textSize="@dimen/normal_text_size_25"
+                android:textStyle="bold" />
 
             <ImageView
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
-                android:scaleType="fitXY"
                 android:paddingHorizontal="@dimen/common_spacing"
+                android:scaleType="fitXY"
                 android:src="@mipmap/icon_title_arrow_divider" />
 
             <ImageView
@@ -50,8 +50,8 @@
                 android:layout_marginLeft="@dimen/common_spacing"
                 android:text="@string/select_point_title"
                 android:textColor="@color/black"
-                android:textStyle="bold"
-                android:textSize="@dimen/normal_text_size_25" />
+                android:textSize="@dimen/normal_text_size_25"
+                android:textStyle="bold" />
 
             <View
                 android:layout_width="0dp"
@@ -79,42 +79,40 @@
             android:layout_width="match_parent"
             android:layout_height="@dimen/divider_line_space"
             android:background="@color/black" />
+
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:orientation="vertical"
-            android:layout_weight="1">
+            android:layout_weight="1"
+            android:orientation="vertical">
 
             <LinearLayout
-                android:id="@+id/selected_point_info_layout"
                 android:layout_width="match_parent"
                 android:layout_height="0dp"
                 android:layout_marginHorizontal="@dimen/common_spacing_2x"
                 android:layout_marginVertical="@dimen/common_spacing"
                 android:layout_weight="1"
-                android:background="@drawable/home_card_bg"
-                android:gravity="center_vertical"
                 android:orientation="vertical">
 
                 <TextView
-                    android:layout_width="match_parent"
+                    android:id="@+id/add_group"
+                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:layout_gravity="right"
+                    android:layout_marginVertical="5dp"
                     android:layout_marginLeft="@dimen/common_spacing"
-                    android:text="@string/selected_point_info_title"
+                    android:background="@drawable/common_btn"
+                    android:drawablePadding="@dimen/common_spacing"
+                    android:gravity="center"
+                    android:paddingHorizontal="@dimen/common_spacing_2x"
+                    android:text="@string/add_group"
                     android:textColor="@color/black"
-                    android:textSize="@dimen/normal_text_size_18" />
-
-                <View
-                    android:layout_width="match_parent"
-                    android:layout_height="@dimen/divider_line_space"
-                    android:background="@color/black" />
+                    android:textSize="@dimen/common_btn_text_size" />
 
                 <androidx.recyclerview.widget.RecyclerView
-                    android:id="@+id/selected_point_rv"
+                    android:id="@+id/point_group_rv"
                     android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:paddingBottom="@dimen/common_spacing"/>
-
+                    android:layout_height="match_parent" />
             </LinearLayout>
 
             <LinearLayout
@@ -132,7 +130,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginLeft="@dimen/common_spacing"
-                    android:text="@string/unselected_point_info_title"
+                    android:text="@string/point_list_title"
                     android:textColor="@color/black"
                     android:textSize="@dimen/normal_text_size_18" />
 

+ 59 - 0
app/src/main/res/layout/item_point_group.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <LinearLayout
+        android:id="@+id/selected_point_info_layout"
+        android:layout_width="@dimen/selected_point_info_layout_width"
+        android:layout_height="wrap_content"
+        android:background="@drawable/home_card_bg"
+        android:gravity="center_vertical"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_vertical"
+            android:paddingVertical="@dimen/common_spacing_small"
+            android:orientation="horizontal">
+
+            <EditText
+                android:id="@+id/group_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/common_spacing"
+                android:layout_weight="1"
+                android:background="none"
+                android:clickable="true"
+                android:focusable="false"
+                android:text="@string/selected_point_info_title"
+                android:textColor="@color/black"
+                android:textSize="@dimen/normal_text_size_18" />
+
+            <TextView
+                android:id="@+id/delete_group"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="right"
+                android:layout_marginRight="@dimen/common_spacing"
+                android:background="@drawable/common_btn"
+                android:drawablePadding="@dimen/common_spacing"
+                android:gravity="center"
+                android:paddingHorizontal="@dimen/common_spacing_2x"
+                android:text="@string/delete_group"
+                android:textColor="@color/black"
+                android:textSize="@dimen/common_btn_text_size" />
+        </LinearLayout>
+
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/divider_line_space"
+            android:background="@color/black" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/group_point_rv"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:paddingBottom="@dimen/common_spacing" />
+    </LinearLayout>
+</layout>

+ 3 - 1
app/src/main/res/values-en/strings.xml

@@ -99,7 +99,7 @@
     <string name="select_colocker_tip">Please select colocker from the following personnel</string>
     <string name="select_point_title">Select Point</string>
     <string name="selected_point_info_title">selected point info</string>
-    <string name="unselected_point_info_title">select/cancel poing</string>
+    <string name="point_list_title">Point list</string>
     <string name="sop_create_succeed">SOP create succeed</string>
     <string name="sop_create_failed">SOP create failed</string>
     <string name="not_save_tip">Data not save,Do you want to lost save and leave?</string>
@@ -453,5 +453,7 @@
     <string name="please_press_the_fingerprint_again">Please press the fingerprint again</string>
     <string name="fingerprint_register_failed">Fingerprint input failed</string>
     <string name="detect_face_tip">Detected face, about to shoot</string>
+    <string name="add_group">Add group</string>
+    <string name="delete_group">Delete group</string>
 
 </resources>

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

@@ -102,4 +102,5 @@
     <dimen name="avatar_size">150dp</dimen>
     <dimen name="dialog_check_face_close_size">80dp</dimen>
     <dimen name="badge_text_size">28sp</dimen>
+    <dimen name="selected_point_info_layout_width">350dp</dimen>
 </resources>

+ 3 - 1
app/src/main/res/values-zh/strings.xml

@@ -99,7 +99,7 @@
     <string name="select_colocker_tip">请在以下人员中选择共锁人</string>
     <string name="select_point_title">选择点位</string>
     <string name="selected_point_info_title">已选择的点位信息</string>
-    <string name="unselected_point_info_title">选择/取消点位</string>
+    <string name="point_list_title">点位清单</string>
     <string name="sop_create_succeed">SOP创建成功</string>
     <string name="sop_create_failed">SOP创建失败</string>
     <string name="not_save_tip">数据还没有保存,您确定要放弃保存,离开当前页面吗?</string>
@@ -453,5 +453,7 @@
     <string name="please_press_the_fingerprint_again">请再次按压指纹</string>
     <string name="fingerprint_register_failed">指纹录入失败</string>
     <string name="detect_face_tip">检测到人脸,即将拍摄</string>
+    <string name="add_group">添加分组</string>
+    <string name="delete_group">删除分组</string>
 
 </resources>

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

@@ -102,4 +102,5 @@
     <dimen name="avatar_size">80dp</dimen>
     <dimen name="dialog_check_face_close_size">60dp</dimen>
     <dimen name="badge_text_size">18sp</dimen>
+    <dimen name="selected_point_info_layout_width">350dp</dimen>
 </resources>

+ 3 - 1
app/src/main/res/values/strings.xml

@@ -98,7 +98,7 @@
     <string name="select_colocker_tip">请在以下人员中选择共锁人</string>
     <string name="select_point_title">选择点位</string>
     <string name="selected_point_info_title">已选择的点位信息</string>
-    <string name="unselected_point_info_title">选择/取消点位</string>
+    <string name="point_list_title">点位清单</string>
     <string name="sop_create_succeed">SOP创建成功</string>
     <string name="sop_create_failed">SOP创建失败</string>
     <string name="not_save_tip">数据还没有保存,您确定要放弃保存,离开当前页面吗?</string>
@@ -456,5 +456,7 @@
     <string name="please_press_the_fingerprint_again">请再次按压指纹</string>
     <string name="fingerprint_register_failed">指纹录入失败</string>
     <string name="detect_face_tip">检测到人脸,即将拍摄</string>
+    <string name="add_group">添加分组</string>
+    <string name="delete_group">删除分组</string>
 
 </resources>