diff --git a/app/src/main/java/com/navinfo/omqs/Constant.kt b/app/src/main/java/com/navinfo/omqs/Constant.kt index 43bad93b..b3bd4539 100644 --- a/app/src/main/java/com/navinfo/omqs/Constant.kt +++ b/app/src/main/java/com/navinfo/omqs/Constant.kt @@ -84,6 +84,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 } diff --git a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt index 9d26031d..c3273281 100644 --- a/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt +++ b/app/src/main/java/com/navinfo/omqs/bean/ImportConfig.kt @@ -3,10 +3,13 @@ package com.navinfo.omqs.bean class ImportConfig { var tables: MutableList = 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 } \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt index 71d8611a..27861fda 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultFragment.kt @@ -50,7 +50,6 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { adapter.refreshData(it) } - viewModel.getChatMsgEntityList() return binding.root } @@ -117,7 +116,6 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener { } else { viewModel.initData(id) } - // //监听大分类数据变化 // viewModel.liveDataClassTypeList.observe(viewLifecycleOwner) { // if (it == null || it.isEmpty()) { diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt index 4e972981..da6ba0e6 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/EvaluationResultViewModel.kt @@ -357,6 +357,8 @@ class EvaluationResultViewModel @Inject constructor( } } } + // 显示语音数据到界面 + getChatMsgEntityList() } } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerExpandableListAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerExpandableListAdapter.kt new file mode 100644 index 00000000..aeacc1b4 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerExpandableListAdapter.kt @@ -0,0 +1,110 @@ +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) : + BaseExpandableListAdapter() { + + override fun getGroupCount(): Int { + return parentItems.size + } + + override fun getChildrenCount(groupPosition: Int): Int { + return parentItems[groupPosition].tables.size + } + + + override fun getGroup(groupPosition: Int): Any { + return parentItems[groupPosition] + } + + override fun getChild(groupPosition: Int, childPosition: Int): Any { + return 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 = false + + 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) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt new file mode 100644 index 00000000..c73ccc2e --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayerManagerViewModel.kt @@ -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 { + // 首先读取Shared文件,如果存在则直接返回,否则读取config文件 + val importConfigList = with(SPStaticUtils.getString(Constant.LAYER_MANAGER_CONFIG, null)) { + if (this!=null) { + gson.fromJson(this, object : TypeToken>(){}.type) + } else { + null + } + } + if (importConfigList==null) { + return getLayerConfigListFromAssetsFile() + } else { + return importConfigList as List + } + } + + private fun getLayerConfigListFromAssetsFile(): List { + val resultList = mutableListOf() + if (omdbConfigFile.exists()) { + val omdbConfiStr = FileIOUtils.readFile2String(omdbConfigFile) + val omdbConfig = gson.fromJson(omdbConfiStr, ImportConfig::class.java) + resultList.add(omdbConfig) + } + if (otherConfigFile.exists()) { + val otherConfiStr = FileIOUtils.readFile2String(otherConfigFile) + val otherConfig = gson.fromJson(otherConfiStr, ImportConfig::class.java) + resultList.add(otherConfig) + } + return resultList + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt new file mode 100644 index 00000000..b49e1b39 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/layermanager/LayermanagerFragment.kt @@ -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() +// private val viewModel by lazy { viewModels().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 + } +} \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt index 07b279d2..9a4ea8f6 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/personalcenter/PersonalCenterFragment.kt @@ -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 } diff --git a/app/src/main/res/drawable/login_inputlayout_bg.xml b/app/src/main/res/drawable/login_inputlayout_bg.xml new file mode 100644 index 00000000..e6f0650a --- /dev/null +++ b/app/src/main/res/drawable/login_inputlayout_bg.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ripple_btn_normal.xml b/app/src/main/res/drawable/ripple_btn_normal.xml new file mode 100644 index 00000000..3fe0aef4 --- /dev/null +++ b/app/src/main/res/drawable/ripple_btn_normal.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ripple_btn_press.xml b/app/src/main/res/drawable/ripple_btn_press.xml new file mode 100644 index 00000000..fd842135 --- /dev/null +++ b/app/src/main/res/drawable/ripple_btn_press.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_bg_default_button.xml b/app/src/main/res/drawable/selector_bg_default_button.xml new file mode 100644 index 00000000..027ac1f8 --- /dev/null +++ b/app/src/main/res/drawable/selector_bg_default_button.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/shape_btn_normal.xml b/app/src/main/res/drawable/shape_btn_normal.xml new file mode 100644 index 00000000..f5bc245f --- /dev/null +++ b/app/src/main/res/drawable/shape_btn_normal.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_btn_press.xml b/app/src/main/res/drawable/shape_btn_press.xml new file mode 100644 index 00000000..90a1dc98 --- /dev/null +++ b/app/src/main/res/drawable/shape_btn_press.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index fba45e93..1cde83f9 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -17,60 +17,127 @@ + android:layout_height="match_parent" + android:background="@mipmap/login_bg"> - - - - - - - - + + + - - + - + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:cardCornerRadius="8dp" + app:cardElevation="2dp" + app:layout_constraintWidth_percent="0.7" + app:cardUseCompatPadding="true"> + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_layer_manager.xml b/app/src/main/res/layout/fragment_layer_manager.xml new file mode 100644 index 00000000..cd8f3149 --- /dev/null +++ b/app/src/main/res/layout/fragment_layer_manager.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layer_manager_checked_child.xml b/app/src/main/res/layout/layer_manager_checked_child.xml new file mode 100644 index 00000000..99cd89f9 --- /dev/null +++ b/app/src/main/res/layout/layer_manager_checked_child.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layer_manager_checked_parent.xml b/app/src/main/res/layout/layer_manager_checked_parent.xml new file mode 100644 index 00000000..66756e88 --- /dev/null +++ b/app/src/main/res/layout/layer_manager_checked_parent.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/personal_center_menu.xml b/app/src/main/res/menu/personal_center_menu.xml index 86f38968..3bd6f840 100644 --- a/app/src/main/res/menu/personal_center_menu.xml +++ b/app/src/main/res/menu/personal_center_menu.xml @@ -41,9 +41,9 @@ android:icon="@drawable/baseline_person_24" android:title="我的数据" /> + android:title="图层管理" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0c83ad36..7f540798 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,9 +2,16 @@ #00000000 #dadade - #3F51B5 + #6c14c4 + #4c54ec + #c42cd4 + #FFFFFF + #4263EB + #aa342c4c + #FFFFFF + #e74c3c + #342c4c #303F9F - #FF4081 #FFFFFF #FFFFF0 #FFFFE0 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 857f9501..d74b2586 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -75,6 +75,15 @@ 1dp + +