增加看板进数据编辑页面

This commit is contained in:
squallzhjch 2023-05-04 14:10:30 +08:00
parent efe5d43555
commit ebbb9b99b2
15 changed files with 121 additions and 52 deletions

View File

@ -5,6 +5,7 @@ plugins {
id 'com.google.dagger.hilt.android'
id 'realm-android'
id 'kotlin-parcelize' //
id 'androidx.navigation.safeargs.kotlin'//Safe Args传递数据
}
android {
namespace 'com.navinfo.omqs'
@ -109,6 +110,8 @@ dependencies {
// spatialite文件
implementation 'com.github.sevar83:android-spatialite:2.0.1'
//fragment
implementation "androidx.navigation:navigation-ui-ktx:2.5.3"
}
//
kapt {

View File

@ -0,0 +1,15 @@
package com.navinfo.omqs.bean
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class SignBean(
//图标ID
val iconId: Int,
val distance: Int = 0,
val iconText: String = "",
val elementId: String = "",
val linkId: String,
val geometry: String,
) : Parcelable

View File

@ -20,7 +20,6 @@ import org.oscim.core.MercatorProjection
import javax.inject.Inject
import kotlin.streams.toList
@RequiresApi(Build.VERSION_CODES.N)
class RealmOperateHelper() {
@Inject
lateinit var niMapController: NIMapController
@ -32,6 +31,7 @@ class RealmOperateHelper() {
* @param bufferType 点位外扩距离的单位 -Meter像素-PIXEL
* @param sort 是否需要排序
* */
@RequiresApi(Build.VERSION_CODES.N)
suspend fun queryLink(
point: Point,
buffer: Double = DEFAULT_BUFFER,
@ -102,6 +102,7 @@ class RealmOperateHelper() {
* @param bufferType 点位外扩距离的单位 -Meter像素-PIXEL
* @param sort 是否需要排序
* */
@RequiresApi(Build.VERSION_CODES.N)
suspend fun queryElement(
point: Point,
buffer: Double = DEFAULT_BUFFER,
@ -154,12 +155,13 @@ class RealmOperateHelper() {
suspend fun queryLinkByLinkPid(linkPid: String): MutableList<RenderEntity> {
val result = mutableListOf<RenderEntity>()
withContext(Dispatchers.IO) {
val realmList = Realm.getDefaultInstance().where(RenderEntity::class.java)
val realm = Realm.getDefaultInstance()
val realmList = realm.where(RenderEntity::class.java)
.notEqualTo("table", "OMDB_RD_LINK")
.and()
.equalTo("properties['${LinkTable.linkPid}']", linkPid)
.findAll()
result.addAll(realmList)
result.addAll(realm.copyFromRealm(realmList))
}
return result
}

View File

@ -1,16 +1,12 @@
package com.navinfo.omqs.ui.activity.map
import android.os.Build
import android.os.Bundle
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
import androidx.core.view.WindowCompat
import androidx.databinding.DataBindingUtil
import androidx.navigation.findNavController
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.databinding.ActivityMainBinding
@ -35,7 +31,25 @@ class MainActivity : BaseActivity() {
@Inject
lateinit var offlineMapDownloadManager: OfflineMapDownloadManager
private val signAdapter by lazy { SignAdapter() }
private val rightController by lazy {
findNavController(R.id.main_activity_right_fragment)
}
private val signAdapter by lazy {
SignAdapter { position, signBean ->
// val directions =
// EmptyFragmentDirections.emptyFragmentToEvaluationResultFragment(
// )
// rightController.navigate(directions)
rightController.currentDestination?.let {
if(it.id == R.id.EvaluationResultFragment){
val bundle = Bundle()
bundle.putParcelable("SignBean", signBean)
rightController.navigate(R.id.EvaluationResultFragment, bundle)
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
@ -113,8 +127,7 @@ class MainActivity : BaseActivity() {
* 点击录音按钮
*/
fun voiceOnclick() {
val naviController = findNavController(R.id.main_activity_right_fragment)
naviController.navigate(R.id.EvaluationResultFragment)
rightController.navigate(R.id.EvaluationResultFragment)
}
// override fun onBackPressed() {

View File

@ -5,27 +5,22 @@ import android.content.DialogInterface
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
import com.navinfo.collect.library.data.entity.NiLocation
import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.map.handler.NiLocationListener
import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener
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.SignBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.ui.dialog.CommonDialog
import com.navinfo.omqs.ui.manager.TakePhotoManager
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ActivityContext
import dagger.hilt.android.qualifiers.ApplicationContext
import io.realm.RealmSet
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -137,6 +132,9 @@ class MainViewModel @Inject constructor(
iconId = R.drawable.icon_speed_limit,
iconText = element.name,
distance = distance.toInt(),
elementId = element.id,
linkId = linkId,
geometry = element.geometry
)
)
}
@ -161,7 +159,7 @@ class MainViewModel @Inject constructor(
override fun onCleared() {
super.onCleared()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mapController.lineHandler.removeLine()
}
}

View File

@ -3,11 +3,13 @@ package com.navinfo.omqs.ui.activity.map
import android.view.LayoutInflater
import android.view.ViewGroup
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.databinding.AdapterSignBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder
class SignAdapter : BaseRecyclerViewAdapter<SignBean>() {
class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null) :
BaseRecyclerViewAdapter<SignBean>() {
override fun getItemViewRes(position: Int): Int {
return R.layout.adapter_sign
}
@ -23,6 +25,8 @@ class SignAdapter : BaseRecyclerViewAdapter<SignBean>() {
val item = data[position]
bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId)
bd.signMainIcon.text = item.iconText
bd.root.setOnClickListener {
itemListener?.invoke(position, item)
}
}
}

View File

@ -1,8 +0,0 @@
package com.navinfo.omqs.ui.activity.map
data class SignBean(
//图标ID
val iconId: Int,
val distance: Int = 0,
val iconText: String = ""
)

View File

@ -8,6 +8,7 @@ import androidx.databinding.DataBindingUtil
import androidx.navigation.NavOptions
import androidx.navigation.findNavController
import com.navinfo.omqs.R
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.databinding.FragmentEvaluationResultBinding
import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.other.shareViewModels
@ -18,6 +19,7 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
private lateinit var binding: FragmentEvaluationResultBinding
private val viewModel by shareViewModels<EvaluationResultViewModel>("QsRecode")
// private val args:EmptyFragmentArgs by navArgs()
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
@ -56,15 +58,21 @@ class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
/**
* 读取元数据
*/
if (arguments != null) {
val id = requireArguments().getString("QsId")
if (id != null) {
viewModel.initData(id)
} else {
viewModel.initNewData()
// val id = args.qsId
var id: String = ""
var signBean: SignBean? = null
arguments?.let {
id = it.getString("QsId", "")
try {
signBean = it.getParcelable("SignBean")
} catch (e: java.lang.Exception) {
}
}
if (id == null || id.isEmpty()) {
viewModel.initNewData(signBean)
} else {
viewModel.initNewData()
viewModel.initData(id)
}
// //监听大分类数据变化

View File

@ -10,6 +10,7 @@ import com.navinfo.collect.library.data.entity.QsRecordBean
import com.navinfo.collect.library.data.entity.RenderEntity.Companion.LinkTable
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.omqs.bean.SignBean
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.db.RoomAppDatabase
import dagger.hilt.android.lifecycle.HiltViewModel
@ -73,7 +74,7 @@ class EvaluationResultViewModel @Inject constructor(
super.onCleared()
Log.e("jingo", "EvaluationResultViewModel 销毁了 ${hashCode()}")
mapController.markerHandle.removeMarker(markerTitle)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
mapController.lineHandler.removeLine()
}
}
@ -82,23 +83,42 @@ class EvaluationResultViewModel @Inject constructor(
/**
* 查询数据库获取问题分类
*/
fun initNewData() {
fun initNewData(bean: SignBean?) {
viewModelScope.launch(Dispatchers.IO) {
getClassTypeList()
getProblemLinkList()
}
val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint()
geoPoint?.let {
liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText()
mapController.markerHandle.addMarker(geoPoint, markerTitle)
viewModelScope.launch {
captureLink(geoPoint.longitude, geoPoint.latitude)
if (bean == null) {
geoPoint?.let {
liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText()
mapController.markerHandle.addMarker(geoPoint, markerTitle)
viewModelScope.launch {
captureLink(geoPoint.longitude, geoPoint.latitude)
}
}
} else {
liveDataQsRecordBean.value?.run {
elementId = bean.elementId
linkId = bean.linkId
if (linkId.isNotEmpty()) {
viewModelScope.launch {
val link = realmOperateHelper.queryLink(linkId)
link?.let { l ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.lineHandler.showLine(l.geometry)
}
}
}
}
}
val point = GeometryTools.createGeoPoint(bean.geometry)
mapController.markerHandle.addMarker(point, markerTitle)
}
}
/**
* 捕捉到路
* 捕捉
*/
private suspend fun captureLink(longitude: Double, latitude: Double) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

View File

@ -1,7 +1,9 @@
package com.navinfo.omqs.ui.fragment.evaluationresult
import android.os.Build
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.TextItemSelectBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
@ -21,6 +23,7 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
return BaseViewHolder(viewBinding)
}
@RequiresApi(Build.VERSION_CODES.M)
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
val bd = holder.viewBinding as TextItemSelectBinding
val title = data[position]

View File

@ -50,7 +50,7 @@ class QsRecordListFragment : BaseFragment(){
binding.qsRecyclerview.addItemDecoration(itemDecoration)
viewModel.getList(requireContext())
// itemClick
adapter!!.setOnKotlinItemClickListener(object : QsRecordListAdapter.IKotlinItemClickListener {
adapter.setOnKotlinItemClickListener(object : QsRecordListAdapter.IKotlinItemClickListener {
override fun onItemClickListener(position: Int) {
viewModel.onItemClickListener(activity as MainActivity,position)
findNavController().popBackStack()

View File

@ -82,7 +82,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/fm_card_map_down_status_bg"
android:onClick="@{fragment.onClick}"
android:onClick="@{fragment::onClick}"
android:text="@{viewModel.liveDataQsRecordBean.phenomenon}" />
<TextView
@ -91,7 +91,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/fm_card_map_down_status_bg"
android:onClick="@{fragment.onClick}"
android:onClick="@{fragment::onClick}"
android:text="@{viewModel.liveDataQsRecordBean.problemLink}" />
<TextView
@ -100,7 +100,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/fm_card_map_down_status_bg"
android:onClick="@{fragment.onClick}"
android:onClick="@{fragment::onClick}"
android:text="@{viewModel.liveDataQsRecordBean.cause}" />
<TextView

View File

@ -9,16 +9,25 @@
android:id="@+id/EmptyFragment"
android:name="com.navinfo.omqs.ui.fragment.empty.EmptyFragment"
android:label="空页面"
tools:layout="@layout/fragment_empty"></fragment>
tools:layout="@layout/fragment_empty">
<!-- <action-->
<!-- android:id="@+id/EmptyFragment_to_EvaluationResultFragment"-->
<!-- app:destination="@id/EvaluationResultFragment" />-->
<!-- <argument-->
<!-- android:name="QsId"-->
<!-- app:argType="string"-->
<!-- app:nullable="true" />-->
<!-- <argument-->
<!-- android:name="SignBean"-->
<!-- app:argType="com.navinfo.omqs.ui.activity.map.SignBean"-->
<!-- />-->
</fragment>
<fragment
android:id="@+id/EvaluationResultFragment"
android:name="com.navinfo.omqs.ui.fragment.evaluationresult.EvaluationResultFragment"
android:label="评测页面"
tools:layout="@layout/fragment_evaluation_result">
<argument
android:name="QsId"
app:argType="string"
app:nullable="true" />
</fragment>
</navigation>

View File

@ -4,6 +4,7 @@
buildscript {
dependencies {
classpath "io.realm:realm-gradle-plugin:10.11.1"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.5.3"
}
}
plugins {
@ -11,4 +12,5 @@ plugins {
id 'com.android.library' version '7.3.1' apply false
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
id 'com.google.dagger.hilt.android' version '2.44' apply false
}

View File

@ -26,7 +26,7 @@ import org.oscim.layers.vector.VectorLayer
import org.oscim.layers.vector.geometries.Style
import org.oscim.map.Map
@RequiresApi(Build.VERSION_CODES.N)
@RequiresApi(Build.VERSION_CODES.M)
class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler(context, mapView),
Map.UpdateListener {