Quellcode durchsuchen

refactor(更新)
- 快捷入口配置

周文健 vor 10 Monaten
Ursprung
Commit
fed77c84a3

+ 108 - 1
app/src/main/java/com/grkj/iscs/features/main/dialog/QuickEntranceConfigDialog.kt

@@ -1,22 +1,129 @@
 package com.grkj.iscs.features.main.dialog
 
+import android.content.Context
 import android.graphics.Color
 import android.view.View
+import android.widget.LinearLayout
+import androidx.core.view.isVisible
+import androidx.recyclerview.widget.ItemTouchHelper
+import com.drake.brv.BindingAdapter
+import com.drake.brv.annotaion.ItemOrientation
+import com.drake.brv.listener.DefaultItemTouchCallback
+import com.drake.brv.utils.linear
+import com.drake.brv.utils.models
+import com.drake.brv.utils.setup
+import com.google.android.flexbox.FlexboxLayoutManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.grkj.data.data.MMKVConstants
+import com.grkj.data.enums.RoleFunctionalPermissionsEnum
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.DialogQuickEntranceConfigBinding
+import com.grkj.iscs.databinding.ItemQuickEntranceConfigBinding
+import com.grkj.iscs.features.main.entity.MenuItemEntity
+import com.grkj.iscs.features.main.entity.QuickEntranceMenuItemEntity
 import com.kongzue.dialogx.dialogs.FullScreenDialog
 import com.kongzue.dialogx.interfaces.OnBindView
 import com.kongzue.dialogx.util.views.ActivityScreenShotImageView
+import com.sik.sikcore.extension.getMMKVData
+import com.sik.sikcore.extension.setDebouncedClickListener
 
 /**
  * 快捷入口配置弹窗
  */
-class QuickEntranceConfigDialog :
+class QuickEntranceConfigDialog(private val context: Context, private val saved: () -> Unit) :
     OnBindView<FullScreenDialog>(R.layout.dialog_quick_entrance_config) {
+    private val selectedQuickEntranceConfig = mutableListOf<QuickEntranceMenuItemEntity>()
+    private val quickEntranceList: MutableList<QuickEntranceMenuItemEntity>
+        get() {
+            val quickEntryConfigJson = MMKVConstants.KEY_QUICK_ENTRY_CONFIG.getMMKVData("")
+            return if (quickEntryConfigJson.isEmpty()) {
+                mutableListOf<QuickEntranceMenuItemEntity>(
+                    QuickEntranceMenuItemEntity(
+                        0,
+                        R.mipmap.icon_job_manage_create_job,
+                        RoleFunctionalPermissionsEnum.CREATE_JOB.description,
+                        RoleFunctionalPermissionsEnum.CREATE_JOB.functionalPermission
+                    )
+                )
+            } else {
+                Gson().fromJson<MutableList<QuickEntranceMenuItemEntity>>(
+                    quickEntryConfigJson, object : TypeToken<MutableList<QuickEntranceMenuItemEntity>>() {}.type
+                )
+            }
+        }
     private lateinit var binding: DialogQuickEntranceConfigBinding
     override fun onBind(dialog: FullScreenDialog, contentView: View) {
         dialog.setMaskColor(Color.parseColor("#4D000000"))
         binding = DialogQuickEntranceConfigBinding.bind(contentView)
         ActivityScreenShotImageView.hideContentView = true
+        binding.selectedRvList.apply {
+            linear(orientation = LinearLayout.HORIZONTAL)
+        }.setup {
+            addType<MenuItemEntity>(R.layout.item_quick_entrance_config)
+            itemTouchHelper = ItemTouchHelper(object : DefaultItemTouchCallback() {
+                /**
+                 * 当拖拽动作完成且松开手指时触发
+                 */
+                override fun onDrag(
+                    source: BindingAdapter.BindingViewHolder,
+                    target: BindingAdapter.BindingViewHolder
+                ) {
+
+                }
+            })
+            onBind {
+                onQuickEntranceBinding(this, false)
+            }
+        }
+        binding.allRvList.apply {
+            layoutManager = FlexboxLayoutManager(context)
+        }.setup {
+            addType<MenuItemEntity>(R.layout.item_quick_entrance_config)
+            onBind {
+                onQuickEntranceBinding(this, true)
+            }
+        }
+        binding.save.setDebouncedClickListener {
+            saved()
+            dialog.dismiss()
+        }
+        binding.cancel.setDebouncedClickListener {
+            dialog.dismiss()
+        }
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onQuickEntranceBinding(
+        holder: BindingAdapter.BindingViewHolder, showAdd: Boolean = false
+    ) {
+        val itemBinding = holder.getBinding<ItemQuickEntranceConfigBinding>()
+        val item = holder.getModel<QuickEntranceMenuItemEntity>()
+        itemBinding.homeMenuIv.setImageResource(item.menuIconId)
+        itemBinding.homeMenuTv.text = item.menuText
+        itemBinding.add.isVisible =
+            showAdd && !selectedQuickEntranceConfig.map { it.type }.contains(item.type)
+        itemBinding.remove.isVisible = !showAdd
+        itemBinding.root.setDebouncedClickListener {
+            if (showAdd) {
+                item.itemOrientationDrag = ItemOrientation.HORIZONTAL
+                selectedQuickEntranceConfig.add(item)
+            } else {
+                item.itemOrientationDrag = ItemOrientation.NONE
+                selectedQuickEntranceConfig.removeIf { it.type == item.type }
+            }
+            binding.selectedRvList.adapter?.notifyDataSetChanged()
+            binding.allRvList.adapter?.notifyDataSetChanged()
+        }
+    }
+
+
+    companion object {
+        /**
+         * 显示
+         */
+        @JvmStatic
+        fun show(context: Context, saved: () -> Unit) {
+            FullScreenDialog.build().setCustomView(QuickEntranceConfigDialog(context, saved)).show()
+        }
     }
 }

+ 3 - 1
app/src/main/java/com/grkj/iscs/features/main/entity/MenuItemEntity.kt

@@ -1,5 +1,7 @@
 package com.grkj.iscs.features.main.entity
 
+import com.drake.brv.annotaion.ItemOrientation
+import com.drake.brv.item.ItemDrag
 import com.google.android.material.badge.BadgeDrawable
 
 /**
@@ -11,5 +13,5 @@ data class MenuItemEntity(
     val menuIconId: Int,
     val menuText: String,
     val permission: String,
-    var badgeNum: Int = 0
+    var badgeNum: Int = 0,
 )

+ 18 - 0
app/src/main/java/com/grkj/iscs/features/main/entity/QuickEntranceMenuItemEntity.kt

@@ -0,0 +1,18 @@
+package com.grkj.iscs.features.main.entity
+
+import com.drake.brv.annotaion.ItemOrientation
+import com.drake.brv.item.ItemDrag
+import com.google.android.material.badge.BadgeDrawable
+
+/**
+ * 快捷入口菜单实体
+ * type 菜单类型 0-用户管理 1-角色管理 2-区域管理 3-点位管理
+ */
+data class QuickEntranceMenuItemEntity(
+    val type: Int,
+    val menuIconId: Int,
+    val menuText: String,
+    val permission: String,
+    var badgeNum: Int = 0,
+    override var itemOrientationDrag: Int = ItemOrientation.NONE
+) : ItemDrag

+ 82 - 63
app/src/main/java/com/grkj/iscs/features/main/fragment/home/HomeFragment.kt

@@ -7,12 +7,17 @@ import com.drake.brv.BindingAdapter
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.grkj.data.data.MMKVConstants
 import com.grkj.data.enums.RoleFunctionalPermissionsEnum
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.FragmentHomeBinding
 import com.grkj.iscs.databinding.ItemHomeQuickEntranceBinding
+import com.grkj.iscs.features.main.dialog.QuickEntranceConfigDialog
 import com.grkj.iscs.features.main.dialog.TextDropDownDialog
 import com.grkj.iscs.features.main.entity.MenuItemEntity
+import com.grkj.iscs.features.main.entity.QuickEntranceMenuItemEntity
 import com.grkj.iscs.features.main.viewmodel.home.HomeViewModel
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.utils.CommonUtils
@@ -22,6 +27,7 @@ import com.grkj.ui_base.utils.extension.tip
 import com.kongzue.dialogx.dialogs.PopTip
 import com.loper7.date_time_picker.dialog.CardDatePickerDialog
 import com.sik.sikcore.date.TimeUtils
+import com.sik.sikcore.extension.getMMKVData
 import com.sik.sikcore.extension.setDebouncedClickListener
 import dagger.hilt.android.AndroidEntryPoint
 import java.util.Date
@@ -33,14 +39,25 @@ import kotlin.getValue
 @AndroidEntryPoint
 class HomeFragment : BaseFragment<FragmentHomeBinding>() {
     private val viewModel: HomeViewModel by viewModels()
-    private val quickEntranceList = mutableListOf<MenuItemEntity>(
-        MenuItemEntity(
-            0,
-            R.mipmap.icon_job_manage_create_job,
-            RoleFunctionalPermissionsEnum.CREATE_JOB.description,
-            RoleFunctionalPermissionsEnum.CREATE_JOB.functionalPermission
-        )
-    )
+    private val quickEntranceList: MutableList<QuickEntranceMenuItemEntity>
+        get() {
+            val quickEntryConfigJson = MMKVConstants.KEY_QUICK_ENTRY_CONFIG.getMMKVData("")
+            return if (quickEntryConfigJson.isEmpty()) {
+                mutableListOf<QuickEntranceMenuItemEntity>(
+                    QuickEntranceMenuItemEntity(
+                        0,
+                        R.mipmap.icon_job_manage_create_job,
+                        RoleFunctionalPermissionsEnum.CREATE_JOB.description,
+                        RoleFunctionalPermissionsEnum.CREATE_JOB.functionalPermission
+                    )
+                )
+            } else {
+                Gson().fromJson<MutableList<QuickEntranceMenuItemEntity>>(
+                    quickEntryConfigJson,
+                    object : TypeToken<MutableList<QuickEntranceMenuItemEntity>>() {}.type
+                )
+            }
+        }
 
     override fun getLayoutId(): Int {
         return R.layout.fragment_home
@@ -50,11 +67,14 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
         binding.quickEntranceRv.apply {
             linear(orientation = LinearLayout.HORIZONTAL)
         }.setup {
-            addType<MenuItemEntity>(R.layout.item_home_quick_entrance)
+            addType<QuickEntranceMenuItemEntity>(R.layout.item_home_quick_entrance)
             onBind {
                 onQuickEntranceBinding(this)
             }
         }
+        binding.quickEntranceConfig.setDebouncedClickListener {
+            quickEntranceConfig()
+        }
         binding.realTimeDataZone.text = getString(R.string.all)
         binding.overviewDataZone.text = getString(R.string.all)
         binding.lockMode.text = getString(R.string.all)
@@ -89,8 +109,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
         binding.allJobNum.setDebouncedClickListener {
             BottomNavVisibilityEvent.sendBottomNavVisibilityEvent(false)
             JumpViewEvent.sendJumpViewEvent(
-                R.navigation.nav_job_manage,
-                R.id.action_jobManageHomeFragment_to_jobManageFragment
+                R.navigation.nav_job_manage, R.id.action_jobManageHomeFragment_to_jobManageFragment
             )
         }
         binding.startTime.setDebouncedClickListener {
@@ -105,51 +124,56 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
         }
     }
 
+    /**
+     * 快捷入口配置
+     */
+    private fun quickEntranceConfig() {
+        QuickEntranceConfigDialog.show(requireContext()) {
+            binding.quickEntranceRv.models = quickEntranceList
+        }
+    }
+
     private fun pickDateTime(startTime: Boolean = true, timeView: TextView) {
-        CardDatePickerDialog.builder(requireContext())
-            .setTitle(
-                if (startTime) CommonUtils.getStr(com.grkj.ui_base.R.string.start_time)
-                    .toString() else CommonUtils.getStr(com.grkj.ui_base.R.string.end_time)
-                    .toString()
+        CardDatePickerDialog.builder(requireContext()).setTitle(
+            if (startTime) CommonUtils.getStr(com.grkj.ui_base.R.string.start_time)
+                .toString() else CommonUtils.getStr(com.grkj.ui_base.R.string.end_time)
+                .toString()
+        ).setOnChoose { millisecond ->
+            val chooseTime = TimeUtils.formatDate(
+                Date(millisecond), TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
             )
-            .setOnChoose { millisecond ->
-                val chooseTime = TimeUtils.formatDate(
-                    Date(millisecond),
-                    TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
-                )
-                if (startTime && binding.endTime.text.isNotEmpty()) {
-                    if (TimeUtils.isTimeBefore(
-                            binding.endTime.text.toString(),
-                            chooseTime,
-                            TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
-                        )
-                    ) {
-                        PopTip.build().tip(R.string.start_time_must_large_then_end_time)
-                        return@setOnChoose
-                    }
-                } else {
-                    if (TimeUtils.isTimeBefore(
-                            chooseTime,
-                            binding.startTime.text.toString(),
-                            TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
-                        )
-                    ) {
-                        PopTip.build().tip(R.string.start_time_must_large_then_end_time)
-                        return@setOnChoose
-                    }
+            if (startTime && binding.endTime.text.isNotEmpty()) {
+                if (TimeUtils.isTimeBefore(
+                        binding.endTime.text.toString(),
+                        chooseTime,
+                        TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
+                    )
+                ) {
+                    PopTip.build().tip(R.string.start_time_must_large_then_end_time)
+                    return@setOnChoose
                 }
-                val timeStr = TimeUtils.formatDate(
-                    Date(millisecond),
-                    TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
-                )
-                timeView.text = timeStr
-                if (startTime) {
-                    viewModel.startTime = timeStr
-                } else {
-                    viewModel.endTime = timeStr
+            } else {
+                if (TimeUtils.isTimeBefore(
+                        chooseTime,
+                        binding.startTime.text.toString(),
+                        TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
+                    )
+                ) {
+                    PopTip.build().tip(R.string.start_time_must_large_then_end_time)
+                    return@setOnChoose
                 }
-                getHomeData()
-            }.build().show()
+            }
+            val timeStr = TimeUtils.formatDate(
+                Date(millisecond), TimeUtils.DEFAULT_DATE_HOUR_MIN_FORMAT
+            )
+            timeView.text = timeStr
+            if (startTime) {
+                viewModel.startTime = timeStr
+            } else {
+                viewModel.endTime = timeStr
+            }
+            getHomeData()
+        }.build().show()
     }
 
     override fun initData() {
@@ -170,21 +194,18 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
     }
 
     private fun setWorkstationData(
-        workstationTv: TextView,
-        onSelected: (TextDropDownDialog.TextDropDownEntity) -> Unit
+        workstationTv: TextView, onSelected: (TextDropDownDialog.TextDropDownEntity) -> Unit
     ) {
         viewModel.getWorkstationData().observe(this) {
             TextDropDownDialog.showSingle(
                 viewModel.workstationData.map {
                     TextDropDownDialog.SimpleTextDropDownEntity(
-                        dataId = it.workstationId,
-                        dataText = it.workstationName
+                        dataId = it.workstationId, dataText = it.workstationName
                     )
                 }.toMutableList().apply {
                     add(
                         0, TextDropDownDialog.SimpleTextDropDownEntity(
-                            dataId = 0,
-                            dataText = getString(R.string.all)
+                            dataId = 0, dataText = getString(R.string.all)
                         )
                     )
                 }, workstationTv
@@ -201,14 +222,12 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
             TextDropDownDialog.showSingle(
                 workflowModes.map {
                     TextDropDownDialog.SimpleTextDropDownEntity(
-                        dataId = it.modeId,
-                        dataText = it.modeTitle.toString()
+                        dataId = it.modeId, dataText = it.modeTitle.toString()
                     )
                 }.toMutableList().apply {
                     add(
                         0, TextDropDownDialog.SimpleTextDropDownEntity(
-                            dataId = 0,
-                            dataText = getString(R.string.all)
+                            dataId = 0, dataText = getString(R.string.all)
                         )
                     )
                 }, binding.lockMode
@@ -226,7 +245,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
 
     private fun BindingAdapter.BindingViewHolder.onQuickEntranceBinding(holder: BindingAdapter.BindingViewHolder) {
         val itemBinding = holder.getBinding<ItemHomeQuickEntranceBinding>()
-        val item = holder.getModel<MenuItemEntity>()
+        val item = holder.getModel<QuickEntranceMenuItemEntity>()
         itemBinding.homeMenuIv.setImageResource(item.menuIconId)
         itemBinding.homeMenuTv.text = item.menuText
         itemBinding.root.setOnClickListener {

+ 12 - 0
app/src/main/res/drawable/icon_add.xml

@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="200dp"
+    android:height="200dp"
+    android:autoMirrored="true"
+    android:viewportWidth="1024"
+    android:viewportHeight="1024">
+
+    <path
+        android:fillColor="#0078E8"
+        android:pathData="M512,51.2c-254,0 -460.8,206.8 -460.8,460.8s206.8,460.8 460.8,460.8S972.8,766 972.8,512s-206.8,-460.8 -460.8,-460.8zM747.5,532.5h-204.8v204.8c0,12.3 -8.2,20.5 -20.5,20.5s-20.5,-8.2 -20.5,-20.5v-204.8h-204.8c-12.3,0 -20.5,-8.2 -20.5,-20.5s8.2,-20.5 20.5,-20.5h204.8v-204.8c0,-12.3 8.2,-20.5 20.5,-20.5s20.5,8.2 20.5,20.5v204.8h204.8c12.3,0 20.5,8.2 20.5,20.5s-8.2,20.5 -20.5,20.5z" />
+
+</vector>

+ 18 - 0
app/src/main/res/drawable/icon_remove.xml

@@ -0,0 +1,18 @@
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+    android:insetLeft="16dp"
+    android:insetTop="16dp"
+    android:insetRight="16dp"
+    android:insetBottom="16dp">
+    <vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="200dp"
+        android:height="200dp"
+        android:autoMirrored="true"
+        android:viewportWidth="1024"
+        android:viewportHeight="1024">
+
+        <path
+            android:fillColor="#8a8a8a"
+            android:pathData="M512,1024C229.2,1024 0,794.8 0,512S229.2,0 512,0s512,229.2 512,512 -229.2,512 -512,512zM825.1,546.6a34.6,34.6 0,0 0,0 -69.1L198.8,477.4a34.6,34.6 0,0 0,0 69.1h626.3z" />
+
+    </vector>
+</inset>

+ 21 - 6
app/src/main/res/layout-land/fragment_home.xml

@@ -18,21 +18,36 @@
             android:textSize="50sp"
             android:textStyle="bold" />
 
-        <FrameLayout
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="180dp"
             android:layout_marginHorizontal="@dimen/common_spacing_2x"
             android:layout_marginTop="@dimen/common_spacing"
-            android:background="@drawable/home_card_bg">
+            android:background="@drawable/home_card_bg"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
 
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/quick_entrance_rv"
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:layout_gravity="center_vertical"
                 android:layout_margin="@dimen/common_spacing"
+                android:layout_weight="1"
                 tools:listitem="@layout/item_home_quick_entrance" />
-        </FrameLayout>
+
+            <TextView
+                android:id="@+id/quick_entrance_config"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="@dimen/common_spacing"
+                android:background="@drawable/common_btn_blue_bg"
+                android:paddingHorizontal="@dimen/common_spacing_2x"
+                android:paddingVertical="@dimen/common_spacing"
+                android:text="@string/edit"
+                android:textColor="@color/white"
+                android:textSize="@dimen/common_btn_text_size" />
+        </LinearLayout>
 
         <LinearLayout
             android:layout_width="match_parent"
@@ -125,8 +140,8 @@
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="80dp"
-                    android:layout_marginBottom="@dimen/common_spacing"
                     android:layout_marginTop="@dimen/common_spacing_2x"
+                    android:layout_marginBottom="@dimen/common_spacing"
                     android:divider="@drawable/common_divider_normal_space_horizontal"
                     android:orientation="horizontal"
                     android:paddingHorizontal="@dimen/common_spacing"
@@ -334,8 +349,8 @@
                     android:layout_width="match_parent"
                     android:layout_height="80dp"
                     android:layout_below="@+id/overview_data_filter_layout"
-                    android:layout_marginBottom="@dimen/common_spacing"
                     android:layout_marginTop="@dimen/common_spacing_2x"
+                    android:layout_marginBottom="@dimen/common_spacing"
                     android:divider="@drawable/common_divider_normal_space_horizontal"
                     android:orientation="horizontal"
                     android:paddingHorizontal="@dimen/common_spacing"

+ 49 - 0
app/src/main/res/layout-land/item_quick_entrance_config.xml

@@ -0,0 +1,49 @@
+<?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">
+
+    <LinearLayout
+        android:layout_width="@dimen/home_item_quick_entrance_layout"
+        android:layout_height="@dimen/home_item_quick_entrance_layout"
+        android:gravity="center_horizontal"
+        android:orientation="vertical">
+
+        <FrameLayout
+            android:layout_width="@dimen/home_item_quick_entrance_iv_layout"
+            android:layout_height="@dimen/home_item_quick_entrance_iv_layout"
+            android:background="@drawable/bg_home_menu_item">
+
+            <ImageView
+                android:id="@+id/home_menu_iv"
+                android:layout_width="@dimen/home_item_quick_entrance_iv"
+                android:layout_height="@dimen/home_item_quick_entrance_iv"
+                android:layout_gravity="center" />
+
+            <ImageView
+                android:id="@+id/add"
+                android:layout_width="@dimen/common_badge_icon_size"
+                android:layout_height="@dimen/common_badge_icon_size"
+                android:layout_gravity="right|top"
+                android:src="@drawable/icon_add"
+                android:visibility="gone" />
+
+            <ImageView
+                android:id="@+id/remove"
+                android:layout_width="@dimen/common_badge_icon_size"
+                android:layout_height="@dimen/common_badge_icon_size"
+                android:layout_gravity="right|top"
+                android:src="@drawable/icon_remove"
+                android:visibility="gone" />
+        </FrameLayout>
+
+        <TextView
+            android:id="@+id/home_menu_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/common_spacing_small"
+            android:textColor="@color/black"
+            android:textSize="@dimen/home_item_quick_entrace_text_size"
+            tools:text="创建作业" />
+    </LinearLayout>
+</layout>

+ 24 - 4
app/src/main/res/layout/dialog_quick_entrance_config.xml

@@ -45,23 +45,43 @@
                 android:textColor="@color/white"
                 android:textSize="@dimen/common_btn_text_size" />
         </RelativeLayout>
+
         <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
+            android:layout_height="match_parent"
             android:layout_marginTop="@dimen/common_spacing"
+            android:divider="@drawable/common_divider_normal_space_vertical"
+            android:orientation="vertical"
             android:paddingHorizontal="@dimen/common_spacing"
-            android:orientation="vertical">
+            android:showDividers="middle">
+
             <TextView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_centerHorizontal="true"
                 android:paddingVertical="@dimen/common_spacing"
-                android:text="@string/quick_entrance_title"
+                android:text="@string/selected_quick_entrance"
+                android:textColor="@color/black"
+                android:textSize="@dimen/common_btn_text_size" />
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/selected_rv_list"
+                android:layout_width="match_parent"
+                android:layout_height="180dp" />
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_centerHorizontal="true"
+                android:paddingVertical="@dimen/common_spacing"
+                android:text="@string/all_quick_entrance"
                 android:textColor="@color/black"
                 android:textSize="@dimen/common_btn_text_size" />
+
             <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/all_rv_list"
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"/>
+                android:layout_height="match_parent" />
         </LinearLayout>
     </LinearLayout>
 </layout>

+ 21 - 6
app/src/main/res/layout/fragment_home.xml

@@ -18,21 +18,36 @@
             android:textSize="50sp"
             android:textStyle="bold" />
 
-        <FrameLayout
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="180dp"
             android:layout_marginHorizontal="@dimen/common_spacing_2x"
             android:layout_marginTop="@dimen/common_spacing"
-            android:background="@drawable/home_card_bg">
+            android:background="@drawable/home_card_bg"
+            android:gravity="center_vertical"
+            android:orientation="horizontal">
 
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/quick_entrance_rv"
-                android:layout_width="wrap_content"
+                android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:layout_gravity="center_vertical"
                 android:layout_margin="@dimen/common_spacing"
+                android:layout_weight="1"
                 tools:listitem="@layout/item_home_quick_entrance" />
-        </FrameLayout>
+
+            <TextView
+                android:id="@+id/quick_entrance_config"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="@dimen/common_spacing"
+                android:background="@drawable/common_btn_blue_bg"
+                android:paddingHorizontal="@dimen/common_spacing_2x"
+                android:paddingVertical="@dimen/common_spacing"
+                android:text="@string/edit"
+                android:textColor="@color/white"
+                android:textSize="@dimen/common_btn_text_size" />
+        </LinearLayout>
 
         <LinearLayout
             android:layout_width="match_parent"
@@ -125,8 +140,8 @@
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="80dp"
-                    android:layout_marginBottom="@dimen/common_spacing"
                     android:layout_marginTop="@dimen/common_spacing_2x"
+                    android:layout_marginBottom="@dimen/common_spacing"
                     android:divider="@drawable/common_divider_normal_space_horizontal"
                     android:orientation="horizontal"
                     android:paddingHorizontal="@dimen/common_spacing"
@@ -334,8 +349,8 @@
                     android:layout_width="match_parent"
                     android:layout_height="80dp"
                     android:layout_below="@+id/overview_data_filter_layout"
-                    android:layout_marginBottom="@dimen/common_spacing"
                     android:layout_marginTop="@dimen/common_spacing_2x"
+                    android:layout_marginBottom="@dimen/common_spacing"
                     android:divider="@drawable/common_divider_normal_space_horizontal"
                     android:orientation="horizontal"
                     android:paddingHorizontal="@dimen/common_spacing"

+ 49 - 0
app/src/main/res/layout/item_quick_entrance_config.xml

@@ -0,0 +1,49 @@
+<?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">
+
+    <LinearLayout
+        android:layout_width="@dimen/home_item_quick_entrance_layout"
+        android:layout_height="@dimen/home_item_quick_entrance_layout"
+        android:gravity="center_horizontal"
+        android:orientation="vertical">
+
+        <FrameLayout
+            android:layout_width="@dimen/home_item_quick_entrance_iv_layout"
+            android:layout_height="@dimen/home_item_quick_entrance_iv_layout"
+            android:background="@drawable/bg_home_menu_item">
+
+            <ImageView
+                android:id="@+id/home_menu_iv"
+                android:layout_width="@dimen/home_item_quick_entrance_iv"
+                android:layout_height="@dimen/home_item_quick_entrance_iv"
+                android:layout_gravity="center" />
+
+            <ImageView
+                android:id="@+id/add"
+                android:layout_width="@dimen/common_badge_icon_size"
+                android:layout_height="@dimen/common_badge_icon_size"
+                android:layout_gravity="right|top"
+                android:src="@drawable/icon_add"
+                android:visibility="gone" />
+
+            <ImageView
+                android:id="@+id/remove"
+                android:layout_width="@dimen/common_badge_icon_size"
+                android:layout_height="@dimen/common_badge_icon_size"
+                android:layout_gravity="right|top"
+                android:src="@drawable/icon_remove"
+                android:visibility="gone" />
+        </FrameLayout>
+
+        <TextView
+            android:id="@+id/home_menu_tv"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/common_spacing_small"
+            android:textColor="@color/black"
+            android:textSize="@dimen/home_item_quick_entrace_text_size"
+            tools:text="创建作业" />
+    </LinearLayout>
+</layout>

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

@@ -477,5 +477,7 @@
     <string name="select_group_tip">Click on the blank area of the group to select</string>
     <string name="quick_entrance_title">Quick access configuration</string>
     <string name="check_new_key_need_register">Detected a new key, is it registered</string>
+    <string name="selected_quick_entrance">The configured shortcut entrance</string>
+    <string name="all_quick_entrance">All Quick Entrances</string>
 
 </resources>

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

@@ -106,4 +106,5 @@
     <dimen name="common_rv_min_height">200dp</dimen>
     <dimen name="item_locker_group_min_width">100dp</dimen>
     <dimen name="locker_item_min_height">50dp</dimen>
+    <dimen name="common_badge_icon_size">30dp</dimen>
 </resources>

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

@@ -477,5 +477,7 @@
     <string name="select_group_tip">点击分组空白区域进行选中</string>
     <string name="quick_entrance_title">快捷入口配置</string>
     <string name="check_new_key_need_register">检测到新钥匙,是否注册</string>
+    <string name="selected_quick_entrance">已配置的快捷入口</string>
+    <string name="all_quick_entrance">所有快捷入口</string>
 
 </resources>

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

@@ -106,4 +106,5 @@
     <dimen name="common_rv_min_height">200dp</dimen>
     <dimen name="item_locker_group_min_width">100dp</dimen>
     <dimen name="locker_item_min_height">50dp</dimen>
+    <dimen name="common_badge_icon_size">30dp</dimen>
 </resources>

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

@@ -480,5 +480,7 @@
     <string name="select_group_tip">点击分组空白区域选中</string>
     <string name="quick_entrance_title">快捷入口配置</string>
     <string name="check_new_key_need_register">检测到新钥匙,是否注册</string>
+    <string name="selected_quick_entrance">已配置的快捷入口</string>
+    <string name="all_quick_entrance">所有快捷入口</string>
 
 </resources>