Merge branch 'master' of gitlab.navinfo.com:CollectVehicle/OneMapQS

 Conflicts:
	app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt
This commit is contained in:
squallzhjch
2023-05-05 14:34:46 +08:00
26 changed files with 408 additions and 74 deletions

View File

@@ -4,13 +4,12 @@ import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseExpandableListAdapter
import android.widget.CheckBox
import android.widget.*
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.bean.TableInfo
class LayerManagerExpandableListAdapter(private val context: Context, private val parentItems: List<ImportConfig>) :
class LayerManagerExpandableListAdapter(private val context: Context, val parentItems: List<ImportConfig>) :
BaseExpandableListAdapter() {
override fun getGroupCount(): Int {
@@ -30,7 +29,6 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
return parentItems[groupPosition].tables[childPosition]
}
override fun getGroupId(groupPosition: Int): Long = groupPosition.toLong()
override fun getChildId(groupPosition: Int, childPosition: Int): Long = childPosition.toLong()
@@ -56,14 +54,18 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
}
val parentItem = getGroup(groupPosition) as ImportConfig
viewHolder.parentCheckBox.text = parentItem.tableGroupName
viewHolder.parentName.text = parentItem.tableGroupName
viewHolder.parentCheckBox.isChecked = parentItem.checked
viewHolder.parentCheckBox.setOnCheckedChangeListener { _, isChecked ->
parentItem.checked = isChecked
parentItem.tables.forEach { it.checked = isChecked }
viewHolder.parentCheckBox.setOnClickListener {
parentItem.checked = !parentItem.checked
parentItem.tables.forEach { it.checked = parentItem.checked }
notifyDataSetChanged()
}
if (isExpanded) {
viewHolder.imgGroupIndicator.setImageResource(R.drawable.ic_baseline_keyboard_arrow_down_24)
} else {
viewHolder.imgGroupIndicator.setImageResource(R.drawable.ic_baseline_keyboard_arrow_right_24)
}
return view!!
}
@@ -87,10 +89,10 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
}
val childItem = getChild(groupPosition, childPosition) as TableInfo
viewHolder.childCheckBox.text = childItem.name
viewHolder.childName.text = childItem.name
viewHolder.childCheckBox.isChecked = childItem.checked
viewHolder.childCheckBox.setOnCheckedChangeListener { _, isChecked ->
childItem.checked = isChecked
viewHolder.childCheckBox.setOnClickListener {
childItem.checked = !childItem.checked
parentItems[groupPosition].checked = parentItems[groupPosition].tables.all { it.checked }
notifyDataSetChanged()
}
@@ -102,9 +104,12 @@ class LayerManagerExpandableListAdapter(private val context: Context, private va
internal class ParentViewHolder(view: View) {
val parentCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_parent)
val parentName: TextView = view.findViewById(R.id.tv_layermanager_parent_name)
val imgGroupIndicator: ImageView = view.findViewById(R.id.img_group_indicator)
}
internal class ChildViewHolder(view: View) {
val childCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_child)
val childName: TextView = view.findViewById(R.id.tv_layermanager_child_name)
}
}

View File

@@ -1,47 +1,32 @@
package com.navinfo.omqs.ui.fragment.layermanager
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.blankj.utilcode.util.FileIOUtils
import com.blankj.utilcode.util.SPStaticUtils
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.navinfo.omqs.Constant
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.tools.LayerConfigUtils
import com.navinfo.omqs.util.FlowEventBus
import kotlinx.coroutines.launch
import java.io.File
class LayerManagerViewModel(): ViewModel() {
private val omdbConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OMDB_CONFIG)
private val otherConfigFile = File("${Constant.USER_DATA_PATH}", Constant.OTHER_CONFIG)
private val gson = Gson()
fun getLayerConfigList(): List<ImportConfig> {
// 首先读取Shared文件如果存在则直接返回否则读取config文件
val importConfigList = with(SPStaticUtils.getString(Constant.LAYER_MANAGER_CONFIG, null)) {
if (this!=null) {
gson.fromJson(this, object : TypeToken<List<ImportConfig>>(){}.type)
} else {
null
}
}
if (importConfigList==null) {
return getLayerConfigListFromAssetsFile()
} else {
return importConfigList as List<ImportConfig>
return LayerConfigUtils.getLayerConfigList()
}
fun saveLayerConfigList(listData: List<ImportConfig>) {
SPStaticUtils.put(Constant.EVENT_LAYER_MANAGER_CHANGE, gson.toJson(listData))
// 发送新的配置数据
viewModelScope.launch {
FlowEventBus.post(Constant.EVENT_LAYER_MANAGER_CHANGE, listData)
}
}
private fun getLayerConfigListFromAssetsFile(): List<ImportConfig> {
val resultList = mutableListOf<ImportConfig>()
if (omdbConfigFile.exists()) {
val omdbConfiStr = FileIOUtils.readFile2String(omdbConfigFile)
val omdbConfig = gson.fromJson<ImportConfig>(omdbConfiStr, ImportConfig::class.java)
resultList.add(omdbConfig)
}
if (otherConfigFile.exists()) {
val otherConfiStr = FileIOUtils.readFile2String(otherConfigFile)
val otherConfig = gson.fromJson<ImportConfig>(otherConfiStr, ImportConfig::class.java)
resultList.add(otherConfig)
}
return resultList
}
}

View File

@@ -6,11 +6,15 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.blankj.utilcode.util.SPStaticUtils
import com.navinfo.omqs.Constant
import com.navinfo.omqs.databinding.FragmentEmptyBinding
import com.navinfo.omqs.databinding.FragmentLayerManagerBinding
import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapCityListViewModel
class LayermanagerFragment :Fragment(){
class LayermanagerFragment : BaseFragment(){
private var _binding: FragmentLayerManagerBinding? = null
private val binding get() = _binding!!
@@ -28,6 +32,26 @@ class LayermanagerFragment :Fragment(){
super.onViewCreated(view, savedInstanceState)
val adapter = LayerManagerExpandableListAdapter(requireContext(), viewModel.getLayerConfigList())
binding.elvLayerManager.setAdapter(adapter)
// 默认显示第一个父项下的子类
binding.elvLayerManager.expandGroup(0)
binding.elvLayerManager.setGroupIndicator(null)
binding.elvLayerManager.setOnGroupClickListener { expandableListView, view, groupPosition, l ->
if (expandableListView.isGroupExpanded(groupPosition)) {
binding.elvLayerManager.collapseGroup(groupPosition)
} else {
binding.elvLayerManager.expandGroup(groupPosition)
}
}
binding.imgBack.setOnClickListener {
findNavController().navigateUp()
}
binding.tvTitle.text = findNavController().currentDestination?.label
binding.imgConfirm.setOnClickListener { // 用户点击确认,重新设置当前的图层显隐控制
viewModel.saveLayerConfigList(adapter.parentItems)
}
}
override fun onDestroyView() {