feat: 增加图层管理功能

This commit is contained in:
2023-05-05 10:58:16 +08:00
parent 7de2a930db
commit d926a147f3
25 changed files with 348 additions and 50 deletions

View File

@@ -9,17 +9,18 @@ import androidx.activity.viewModels
import androidx.annotation.RequiresApi
import androidx.core.view.WindowCompat
import androidx.databinding.DataBindingUtil
import androidx.navigation.findNavController
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.map.handler.NiLocationListener
import com.navinfo.omqs.Constant
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.databinding.ActivityMainBinding
import com.navinfo.omqs.http.offlinemapdownload.OfflineMapDownloadManager
import com.navinfo.omqs.ui.activity.BaseActivity
import com.navinfo.omqs.util.FlowEventBus
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import javax.inject.Inject
/**
@@ -88,6 +89,23 @@ class MainActivity : BaseActivity() {
viewModel.liveDataSignList.observe(this) {
signAdapter.refreshData(it)
}
lifecycleScope.launch {
// 初始化地图图层控制接收器
FlowEventBus.subscribe<List<ImportConfig>>(lifecycle, Constant.EVENT_LAYER_MANAGER_CHANGE) {
// 根据获取到的配置信息,筛选未勾选的图层名称
val omdbVisibleList = it.filter { importConfig->
importConfig.tableGroupName == "OMDB数据"
}.first().tables.filter { tableInfo ->
!tableInfo.checked
}.map {
tableInfo -> tableInfo.table
}.toList()
com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = omdbVisibleList.toTypedArray()
// 刷新地图
mapController.mMapView.vtmMap.clearMap()
}
}
}
override fun onStart() {

View File

@@ -29,15 +29,18 @@ import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.collect.library.utils.GeometryToolsKt
import com.navinfo.omqs.Constant
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.ImportConfig
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.ui.dialog.CommonDialog
import com.navinfo.omqs.ui.manager.TakePhotoManager
import com.navinfo.omqs.util.DateTimeUtil
import com.navinfo.omqs.util.FlowEventBus
import com.navinfo.omqs.util.SoundMeter
import com.navinfo.omqs.util.SpeakMode
import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.RealmSet
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import org.oscim.core.GeoPoint
@@ -88,7 +91,6 @@ class MainViewModel @Inject constructor(
testPoint = it
}
}
}
private fun initLocation() {

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,12 +1,15 @@
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.util.FlowEventBus
import kotlinx.coroutines.launch
import java.io.File
class LayerManagerViewModel(): ViewModel() {
@@ -16,7 +19,7 @@ class LayerManagerViewModel(): ViewModel() {
fun getLayerConfigList(): List<ImportConfig> {
// 首先读取Shared文件如果存在则直接返回否则读取config文件
val importConfigList = with(SPStaticUtils.getString(Constant.LAYER_MANAGER_CONFIG, null)) {
val importConfigList: List<ImportConfig>? = SPStaticUtils.getString(Constant.LAYER_MANAGER_CONFIG, null).run {
if (this!=null) {
gson.fromJson(this, object : TypeToken<List<ImportConfig>>(){}.type)
} else {
@@ -30,6 +33,14 @@ class LayerManagerViewModel(): ViewModel() {
}
}
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()) {

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() {