feat: 登录界面美化,图层控制功能添加

This commit is contained in:
2023-04-28 18:16:24 +08:00
parent 3eed9bad33
commit db9b248d92
29 changed files with 427 additions and 69 deletions

View File

@@ -77,6 +77,8 @@ class Constant {
const val SELECT_TAKEPHOTO_OR_RECORD = "select_takephoto_or_record"
const val OMDB_CONFIG = "omdb.config"
const val OTHER_CONFIG = "other.config"
const val LAYER_MANAGER_CONFIG = "LAYER_MANAGER_CONFIG" // 图层管理界面缓存的key
}

View File

@@ -3,10 +3,13 @@ package com.navinfo.omqs.bean
class ImportConfig {
var tables: MutableList<TableInfo> = mutableListOf()
val tableGroupName: String = "OMDB数据"
var checked : Boolean = true
}
class TableInfo {
val table: String = ""
val code: Int = 0
val name: String = ""
var checked : Boolean = true
}

View File

@@ -0,0 +1,102 @@
package com.navinfo.omqs.ui.fragment.layermanager
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 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>) :
BaseExpandableListAdapter() {
override fun getGroupCount(): Int = parentItems.size
override fun getChildrenCount(groupPosition: Int): Int =
parentItems[groupPosition].tables.size
override fun getGroup(groupPosition: Int): Any = parentItems[groupPosition]
override fun getChild(groupPosition: Int, childPosition: Int): Any =
parentItems[groupPosition].tables[childPosition]
override fun getGroupId(groupPosition: Int): Long = groupPosition.toLong()
override fun getChildId(groupPosition: Int, childPosition: Int): Long = childPosition.toLong()
override fun hasStableIds(): Boolean = true
override fun getGroupView(
groupPosition: Int,
isExpanded: Boolean,
convertView: View?,
parent: ViewGroup?
): View {
var view = convertView
val viewHolder: ParentViewHolder
if (convertView == null) {
view =
LayoutInflater.from(context).inflate(R.layout.layer_manager_checked_parent, parent, false)
viewHolder = ParentViewHolder(view)
view.tag = viewHolder
} else {
viewHolder = convertView.tag as ParentViewHolder
view = convertView
}
val parentItem = getGroup(groupPosition) as ImportConfig
viewHolder.parentCheckBox.text = parentItem.tableGroupName
viewHolder.parentCheckBox.isChecked = parentItem.checked
viewHolder.parentCheckBox.setOnCheckedChangeListener { _, isChecked ->
parentItem.checked = isChecked
parentItem.tables.forEach { it.checked = isChecked }
notifyDataSetChanged()
}
return view!!
}
override fun getChildView(
groupPosition: Int,
childPosition: Int,
isLastChild: Boolean,
convertView: View?,
parent: ViewGroup?
): View {
var view = convertView
val viewHolder: ChildViewHolder
if (convertView == null) {
view =
LayoutInflater.from(context).inflate(R.layout.layer_manager_checked_child, parent, false)
viewHolder = ChildViewHolder(view)
view.tag = viewHolder
} else {
viewHolder = convertView.tag as ChildViewHolder
view = convertView
}
val childItem = getChild(groupPosition, childPosition) as TableInfo
viewHolder.childCheckBox.text = childItem.name
viewHolder.childCheckBox.isChecked = childItem.checked
viewHolder.childCheckBox.setOnCheckedChangeListener { _, isChecked ->
childItem.checked = isChecked
parentItems[groupPosition].checked = parentItems[groupPosition].tables.all { it.checked }
notifyDataSetChanged()
}
return view!!
}
override fun isChildSelectable(groupPosition: Int, childPosition: Int): Boolean = true
internal class ParentViewHolder(view: View) {
val parentCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_parent)
}
internal class ChildViewHolder(view: View) {
val childCheckBox: CheckBox = view.findViewById(R.id.chk_layermanager_child)
}
}

View File

@@ -0,0 +1,47 @@
package com.navinfo.omqs.ui.fragment.layermanager
import androidx.lifecycle.ViewModel
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 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>
}
}
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

@@ -0,0 +1,37 @@
package com.navinfo.omqs.ui.fragment.layermanager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import com.navinfo.omqs.databinding.FragmentEmptyBinding
import com.navinfo.omqs.databinding.FragmentLayerManagerBinding
import com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapCityListViewModel
class LayermanagerFragment :Fragment(){
private var _binding: FragmentLayerManagerBinding? = null
private val binding get() = _binding!!
private val viewModel by viewModels<LayerManagerViewModel>()
// private val viewModel by lazy { viewModels<EvaluationResultViewModel>().value}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentLayerManagerBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val adapter = LayerManagerExpandableListAdapter(requireContext(), viewModel.getLayerConfigList())
binding.elvLayerManager.setAdapter(adapter)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@@ -117,6 +117,9 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
R.id.personal_center_menu_qs_record_list -> {
findNavController().navigate(R.id.QsRecordListFragment)
}
R.id.personal_center_menu_layer_manager -> { // 图层管理
findNavController().navigate(R.id.QsLayerManagerFragment)
}
}
true
}