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

This commit is contained in:
xiaoyan 2023-05-06 15:42:17 +08:00
commit 9f619a2f50
46 changed files with 488 additions and 223 deletions

View File

@ -19,4 +19,6 @@ data class SignBean(
val geometry: String, val geometry: String,
//底部文字 //底部文字
val bottomText: String, val bottomText: String,
//要素code类型
val elementCode: Int
) : Parcelable ) : Parcelable

View File

@ -13,8 +13,6 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.locationtech.jts.geom.* import org.locationtech.jts.geom.*
import org.locationtech.jts.operation.buffer.BufferOp import org.locationtech.jts.operation.buffer.BufferOp
import org.locationtech.spatial4j.context.SpatialContext
import org.locationtech.spatial4j.distance.DistanceUtils
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
import org.oscim.core.MercatorProjection import org.oscim.core.MercatorProjection
import javax.inject.Inject import javax.inject.Inject
@ -33,14 +31,18 @@ class RealmOperateHelper() {
* */ * */
@RequiresApi(Build.VERSION_CODES.N) @RequiresApi(Build.VERSION_CODES.N)
suspend fun queryLink( suspend fun queryLink(
point: Point, point: GeoPoint,
buffer: Double = DEFAULT_BUFFER, buffer: Double = DEFAULT_BUFFER,
bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE, bufferType: BUFFER_TYPE = DEFAULT_BUFFER_TYPE,
sort: Boolean = true sort: Boolean = true
): MutableList<RenderEntity> { ): MutableList<RenderEntity> {
val result = mutableListOf<RenderEntity>() val result = mutableListOf<RenderEntity>()
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
val polygon = getPolygonFromPoint(point, buffer, bufferType) val polygon = getPolygonFromPoint(
GeometryTools.createPoint(point.longitude, point.latitude),
buffer,
bufferType
)
// 根据polygon查询相交的tile号 // 根据polygon查询相交的tile号
val tileXSet = mutableSetOf<Int>() val tileXSet = mutableSetOf<Int>()
tileXSet.toString() tileXSet.toString()
@ -68,7 +70,14 @@ class RealmOperateHelper() {
queryResult?.let { queryResult?.let {
if (sort) { if (sort) {
result.addAll(sortRenderEntity(point, it)) result.addAll(
sortRenderEntity(
GeometryTools.createPoint(
point.longitude,
point.latitude
) , it
)
)
} else { } else {
result.addAll(it) result.addAll(it)
} }
@ -172,6 +181,7 @@ class RealmOperateHelper() {
* @param unSortList 未排序的数据 * @param unSortList 未排序的数据
* @return 排序后的数据 * @return 排序后的数据
* */ * */
@RequiresApi(Build.VERSION_CODES.N)
fun sortRenderEntity(point: Point, unSortList: List<RenderEntity>): List<RenderEntity> { fun sortRenderEntity(point: Point, unSortList: List<RenderEntity>): List<RenderEntity> {
val sortList = unSortList.stream().sorted { renderEntity, renderEntity2 -> val sortList = unSortList.stream().sorted { renderEntity, renderEntity2 ->
val near = point.distance(renderEntity.wkt) - point.distance(renderEntity2.wkt) val near = point.distance(renderEntity.wkt) - point.distance(renderEntity2.wkt)

View File

@ -33,6 +33,9 @@ interface ScProblemTypeDao {
@Query("select DISTINCT CLASS_TYPE from ScProblemType order by CLASS_TYPE") @Query("select DISTINCT CLASS_TYPE from ScProblemType order by CLASS_TYPE")
suspend fun findClassTypeList(): List<String>? suspend fun findClassTypeList(): List<String>?
@Query("select DISTINCT CLASS_TYPE from ScProblemType where ELEMENT_CODE=:code")
suspend fun findClassTypeByCode(code: Int): String?
/** /**
* 获取问题类型并去重 * 获取问题类型并去重
*/ */

View File

@ -46,8 +46,9 @@ class ActivityModule {
fun providesTaskListDownloadManager( fun providesTaskListDownloadManager(
networkServiceAPI: RetrofitNetworkServiceAPI, networkServiceAPI: RetrofitNetworkServiceAPI,
importFactory: ImportOMDBHiltFactory, importFactory: ImportOMDBHiltFactory,
mapController: NIMapController
): TaskDownloadManager = ): TaskDownloadManager =
TaskDownloadManager(importFactory, networkServiceAPI) TaskDownloadManager(importFactory, networkServiceAPI, mapController)
/** /**
* 注入任务下载 * 注入任务下载

View File

@ -67,7 +67,7 @@ class GlobalModule {
}.apply { }.apply {
level = if (Constant.DEBUG) { level = if (Constant.DEBUG) {
//坑 下载文件时打印log 内存不足 //坑 下载文件时打印log 内存不足
HttpLoggingInterceptor.Level.BODY HttpLoggingInterceptor.Level.BASIC
} else { } else {
HttpLoggingInterceptor.Level.NONE HttpLoggingInterceptor.Level.NONE
} }

View File

@ -3,6 +3,7 @@ package com.navinfo.omqs.http.taskdownload
import android.content.Context import android.content.Context
import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.omqs.bean.TaskBean import com.navinfo.omqs.bean.TaskBean
import com.navinfo.omqs.hilt.ImportOMDBHiltFactory import com.navinfo.omqs.hilt.ImportOMDBHiltFactory
import com.navinfo.omqs.hilt.OMDBDataBaseHiltFactory import com.navinfo.omqs.hilt.OMDBDataBaseHiltFactory
@ -19,6 +20,7 @@ import javax.inject.Inject
class TaskDownloadManager constructor( class TaskDownloadManager constructor(
val importFactory: ImportOMDBHiltFactory, val importFactory: ImportOMDBHiltFactory,
val netApi: RetrofitNetworkServiceAPI, val netApi: RetrofitNetworkServiceAPI,
val mapController:NIMapController
) { ) {
lateinit var context: Context lateinit var context: Context

View File

@ -131,6 +131,9 @@ class TaskDownloadScope(
Log.e("jingo", "数据安装 $it") Log.e("jingo", "数据安装 $it")
if (it == "finish") { if (it == "finish") {
change(FileDownloadStatus.DONE) change(FileDownloadStatus.DONE)
withContext(Dispatchers.Main) {
downloadManager.mapController.mMapView.updateMap(true)
}
} else { } else {
change(FileDownloadStatus.IMPORTING, it) change(FileDownloadStatus.IMPORTING, it)
} }
@ -138,6 +141,8 @@ class TaskDownloadScope(
} catch (e: Exception) { } catch (e: Exception) {
Log.e("jingo", "数据安装失败 ${e.toString()}") Log.e("jingo", "数据安装失败 ${e.toString()}")
change(FileDownloadStatus.ERROR) change(FileDownloadStatus.ERROR)
}finally {
} }
Log.e("jingo", "importData EEE") Log.e("jingo", "importData EEE")

View File

@ -115,15 +115,16 @@ class TaskUploadScope(
taskBean.hadLinkDvoList.forEach { hadLinkDvoBean -> taskBean.hadLinkDvoList.forEach { hadLinkDvoBean ->
val objects = realm.where(QsRecordBean::class.java) val objects = realm.where(QsRecordBean::class.java)
.equalTo("linkId", /*"84207223282277331"*/hadLinkDvoBean.linkPid).findAll() .equalTo("linkId", /*"84207223282277331"*/hadLinkDvoBean.linkPid).findAll()
if(objects.size == 0){ if (objects.size == 0) {
// change(FileUploadStatus.NONE) if (taskBean.syncStatus == FileUploadStatus.WAITING)
change(FileUploadStatus.NONE)
return return
} }
val bodyList: MutableList<EvaluationInfo> = ArrayList() val bodyList: MutableList<EvaluationInfo> = ArrayList()
if (objects != null) { if (objects != null) {
val copyList =realm.copyFromRealm(objects) val copyList = realm.copyFromRealm(objects)
copyList.forEach { copyList.forEach {
val evaluationInfo = EvaluationInfo( val evaluationInfo = EvaluationInfo(
taskBean.id.toString(), taskBean.id.toString(),

View File

@ -116,7 +116,7 @@ class LoginViewModel @Inject constructor(
//文件夹初始化 //文件夹初始化
try { try {
loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_INIT) loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_INIT)
createUserFolder(context, "1") createUserFolder(context, "02911")
} catch (e: IOException) { } catch (e: IOException) {
loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_FAILURE) loginStatus.postValue(LoginStatus.LOGIN_STATUS_FOLDER_FAILURE)
} }

View File

@ -114,9 +114,9 @@ class MainActivity : BaseActivity() {
viewModel.liveDataMenuState.observe(this) { viewModel.liveDataMenuState.observe(this) {
binding.mainActivityMenu.isSelected = it binding.mainActivityMenu.isSelected = it
if(it==true){ if (it == true) {
binding.mainActivityMenuLayout.visibility = View.VISIBLE binding.mainActivityMenuLayout.visibility = View.VISIBLE
}else{ } else {
binding.mainActivityMenuLayout.visibility = View.GONE binding.mainActivityMenuLayout.visibility = View.GONE
} }
@ -138,7 +138,10 @@ class MainActivity : BaseActivity() {
lifecycleScope.launch { lifecycleScope.launch {
// 初始化地图图层控制接收器 // 初始化地图图层控制接收器
FlowEventBus.subscribe<List<ImportConfig>>(lifecycle, Constant.EVENT_LAYER_MANAGER_CHANGE) { FlowEventBus.subscribe<List<ImportConfig>>(
lifecycle,
Constant.EVENT_LAYER_MANAGER_CHANGE
) {
viewModel.refreshOMDBLayer(it) viewModel.refreshOMDBLayer(it)
} }
} }
@ -227,8 +230,16 @@ class MainActivity : BaseActivity() {
* 点击录音按钮 * 点击录音按钮
*/ */
fun voiceOnclick() { fun voiceOnclick() {
/* val naviController = findNavController(R.id.main_activity_right_fragment) val naviController = findNavController(R.id.main_activity_right_fragment)
naviController.navigate(R.id.EvaluationResultFragment)*/ naviController.navigate(R.id.EvaluationResultFragment)
}
/**
* 点击线选择
*/
fun selectLineOnclick() {
viewModel.setSelectRoad(!viewModel.isSelectRoad())
binding.mainActivitySelectLine.isSelected = viewModel.isSelectRoad()
} }
fun voiceOnTouchStart() { fun voiceOnTouchStart() {

View File

@ -37,14 +37,12 @@ import com.navinfo.omqs.ui.dialog.CommonDialog
import com.navinfo.omqs.ui.manager.TakePhotoManager import com.navinfo.omqs.ui.manager.TakePhotoManager
import com.navinfo.omqs.ui.widget.SignUtil import com.navinfo.omqs.ui.widget.SignUtil
import com.navinfo.omqs.util.DateTimeUtil import com.navinfo.omqs.util.DateTimeUtil
import com.navinfo.omqs.util.FlowEventBus
import com.navinfo.omqs.util.SoundMeter import com.navinfo.omqs.util.SoundMeter
import com.navinfo.omqs.util.SpeakMode import com.navinfo.omqs.util.SpeakMode
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import io.realm.Realm import io.realm.Realm
import io.realm.RealmSet import io.realm.RealmSet
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.oscim.core.GeoPoint import org.oscim.core.GeoPoint
@ -72,7 +70,7 @@ class MainViewModel @Inject constructor(
//看板数据 //看板数据
val liveDataSignList = MutableLiveData<List<SignBean>>() val liveDataSignList = MutableLiveData<List<SignBean>>()
var testPoint = GeoPoint(0, 0) // var testPoint = GeoPoint(0, 0)
//语音窗体 //语音窗体
private var pop: PopupWindow? = null private var pop: PopupWindow? = null
@ -83,10 +81,15 @@ class MainViewModel @Inject constructor(
var volume: ImageView? = null var volume: ImageView? = null
var mSoundMeter: SoundMeter? = null var mSoundMeter: SoundMeter? = null
var menuState :Boolean = false var menuState: Boolean = false
val liveDataMenuState = MutableLiveData<Boolean>() val liveDataMenuState = MutableLiveData<Boolean>()
/**
* 是不是线选择模式
*/
private var bSelectRoad = false
init { init {
mapController.markerHandle.setOnQsRecordItemClickListener(object : mapController.markerHandle.setOnQsRecordItemClickListener(object :
OnQsRecordItemClickListener { OnQsRecordItemClickListener {
@ -97,7 +100,10 @@ class MainViewModel @Inject constructor(
initLocation() initLocation()
viewModelScope.launch { viewModelScope.launch {
mapController.onMapClickFlow.collectLatest { mapController.onMapClickFlow.collectLatest {
testPoint = it // testPoint = it
if (bSelectRoad) {
captureLink(it)
}
} }
} }
@ -140,8 +146,8 @@ class MainViewModel @Inject constructor(
//用于定位点存储到数据库 //用于定位点存储到数据库
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
mapController.locationLayerHandler.niLocationFlow.collect { location -> mapController.locationLayerHandler.niLocationFlow.collect { location ->
location.longitude = testPoint.longitude // location.longitude = testPoint.longitude
location.latitude = testPoint.latitude // location.latitude = testPoint.latitude
val geometry = GeometryTools.createGeometry( val geometry = GeometryTools.createGeometry(
GeoPoint( GeoPoint(
location.latitude, location.latitude,
@ -168,48 +174,10 @@ class MainViewModel @Inject constructor(
//用于定位点捕捉道路 //用于定位点捕捉道路
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
mapController.locationLayerHandler.niLocationFlow.collectLatest { location -> mapController.locationLayerHandler.niLocationFlow.collectLatest { location ->
Log.e("jingo", "定位点绑定道路 ${Thread.currentThread().name}") // location.longitude = testPoint.longitude
location.longitude = testPoint.longitude // location.latitude = testPoint.latitude
location.latitude = testPoint.latitude if (!isSelectRoad())
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { captureLink(GeoPoint(location.latitude, location.longitude))
val linkList = realmOperateHelper.queryLink(
point = GeometryTools.createPoint(
location.longitude,
location.latitude
),
)
//看板数据
val signList = mutableListOf<SignBean>()
if (linkList.isNotEmpty()) {
val link = linkList[0]
val linkId = link.properties[RenderEntity.Companion.LinkTable.linkPid]
mapController.lineHandler.showLine(link.geometry)
linkId?.let {
var elementList = realmOperateHelper.queryLinkByLinkPid(it)
for (element in elementList) {
val distance = GeometryTools.distanceToDouble(
GeoPoint(
location.latitude, location.longitude,
),
GeometryTools.createGeoPoint(element.geometry)
)
signList.add(
SignBean(
iconId = SignUtil.getSignIcon(element),
iconText = SignUtil.getSignIconText(element),
distance = distance.toInt(),
elementId = element.id,
linkId = linkId,
geometry = element.geometry,
bottomText = SignUtil.getSignBottomText(element)
)
)
}
liveDataSignList.postValue(signList)
Log.e("jingo", "自动捕捉数据 共${elementList.size}")
}
}
}
} }
} }
@ -218,6 +186,48 @@ class MainViewModel @Inject constructor(
} }
/**
* 捕获道路和面板
*/
private suspend fun captureLink(point: GeoPoint) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val linkList = realmOperateHelper.queryLink(
point = point,
)
//看板数据
val signList = mutableListOf<SignBean>()
if (linkList.isNotEmpty()) {
val link = linkList[0]
val linkId = link.properties[RenderEntity.Companion.LinkTable.linkPid]
mapController.lineHandler.showLine(link.geometry)
linkId?.let {
var elementList = realmOperateHelper.queryLinkByLinkPid(it)
for (element in elementList) {
val distance = GeometryTools.distanceToDouble(
point,
GeometryTools.createGeoPoint(element.geometry)
)
signList.add(
SignBean(
iconId = SignUtil.getSignIcon(element),
iconText = SignUtil.getSignIconText(element),
distance = distance.toInt(),
elementId = element.id,
linkId = linkId,
geometry = element.geometry,
bottomText = SignUtil.getSignBottomText(element),
elementCode = element.code
)
)
}
}
}
liveDataSignList.postValue(signList)
Log.e("jingo", "自动捕捉数据 共${signList.size}")
}
}
/** /**
* 点击我的位置回到我的位置 * 点击我的位置回到我的位置
*/ */
@ -360,15 +370,16 @@ class MainViewModel @Inject constructor(
* */ * */
fun refreshOMDBLayer(layerConfigList: List<ImportConfig>) { fun refreshOMDBLayer(layerConfigList: List<ImportConfig>) {
// 根据获取到的配置信息,筛选未勾选的图层名称 // 根据获取到的配置信息,筛选未勾选的图层名称
if (layerConfigList!=null && !layerConfigList.isEmpty()) { if (layerConfigList != null && !layerConfigList.isEmpty()) {
val omdbVisibleList = layerConfigList.filter { importConfig-> val omdbVisibleList = layerConfigList.filter { importConfig ->
importConfig.tableGroupName == "OMDB数据" importConfig.tableGroupName == "OMDB数据"
}.first().tables.filter { tableInfo -> }.first().tables.filter { tableInfo ->
!tableInfo.checked !tableInfo.checked
}.map { }.map { tableInfo ->
tableInfo -> tableInfo.table tableInfo.table
}.toList() }.toList()
com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY = omdbVisibleList.toTypedArray() com.navinfo.collect.library.system.Constant.HAD_LAYER_INVISIABLE_ARRAY =
omdbVisibleList.toTypedArray()
// 刷新地图 // 刷新地图
mapController.mMapView.vtmMap.clearMap() mapController.mMapView.vtmMap.clearMap()
} }
@ -409,4 +420,20 @@ class MainViewModel @Inject constructor(
} }
} }
} }
/**
* 开启线选择
*/
fun setSelectRoad(select: Boolean) {
bSelectRoad = select
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mapController.lineHandler.removeLine()
liveDataSignList.value = mutableListOf()
}
}
fun isSelectRoad(): Boolean {
return bSelectRoad
}
} }

View File

@ -25,6 +25,7 @@ class SignAdapter(private var itemListener: ((Int, SignBean) -> Unit?)? = null)
val item = data[position] val item = data[position]
bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId) bd.signMainIcon.background = holder.viewBinding.root.context.getDrawable(item.iconId)
bd.signMainIcon.text = item.iconText bd.signMainIcon.text = item.iconText
bd.signBottomText.text = item.bottomText
bd.root.setOnClickListener { bd.root.setOnClickListener {
itemListener?.invoke(position, item) itemListener?.invoke(position, item)
} }

View File

@ -4,9 +4,7 @@ import android.app.Activity
import android.content.Context import android.content.Context
import android.graphics.drawable.AnimationDrawable import android.graphics.drawable.AnimationDrawable
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.Gravity import android.view.Gravity
@ -15,11 +13,9 @@ import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.PopupWindow import android.widget.PopupWindow
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.util.rangeTo
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.navigation.findNavController
import com.blankj.utilcode.util.ToastUtils import com.blankj.utilcode.util.ToastUtils
import com.navinfo.collect.library.data.entity.AttachmentBean import com.navinfo.collect.library.data.entity.AttachmentBean
import com.navinfo.collect.library.data.entity.QsRecordBean import com.navinfo.collect.library.data.entity.QsRecordBean
@ -121,16 +117,16 @@ class EvaluationResultViewModel @Inject constructor(
* 查询数据库获取问题分类 * 查询数据库获取问题分类
*/ */
fun initNewData(bean: SignBean?, filePath: String) { fun initNewData(bean: SignBean?, filePath: String) {
viewModelScope.launch(Dispatchers.IO) { //获取当前定位点
getClassTypeList()
getProblemLinkList()
}
val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint() val geoPoint = mapController.locationLayerHandler.getCurrentGeoPoint()
//如果不是从面板进来的
if (bean == null) { if (bean == null) {
geoPoint?.let { geoPoint?.let {
liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText() liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(it).toText()
mapController.markerHandle.addMarker(geoPoint, markerTitle) mapController.markerHandle.addMarker(geoPoint, markerTitle)
mapController.animationHandler.animationByLonLat(geoPoint.latitude,geoPoint.longitude) mapController.animationHandler.animationByLonLat(
geoPoint.latitude, geoPoint.longitude
)
viewModelScope.launch { viewModelScope.launch {
captureLink(geoPoint.longitude, geoPoint.latitude) captureLink(geoPoint.longitude, geoPoint.latitude)
} }
@ -149,13 +145,17 @@ class EvaluationResultViewModel @Inject constructor(
} }
} }
} }
val point = GeometryTools.createGeoPoint(bean.geometry)
this.geometry = GeometryTools.createGeometry(point).toText()
mapController.animationHandler.animationByLonLat(point.latitude, point.longitude)
mapController.markerHandle.addMarker(point, markerTitle)
} }
val point = GeometryTools.createGeoPoint(bean.geometry)
liveDataQsRecordBean.value!!.geometry = GeometryTools.createGeometry(point).toText()
mapController.animationHandler.animationByLonLat(point.latitude,point.longitude)
mapController.markerHandle.addMarker(point, markerTitle)
} }
//查询元数据
viewModelScope.launch(Dispatchers.IO) {
getClassTypeList(bean)
getProblemLinkList()
}
addChatMsgEntity(filePath) addChatMsgEntity(filePath)
} }
@ -165,16 +165,12 @@ class EvaluationResultViewModel @Inject constructor(
private suspend fun captureLink(longitude: Double, latitude: Double) { private suspend fun captureLink(longitude: Double, latitude: Double) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val linkList = realmOperateHelper.queryLink( val linkList = realmOperateHelper.queryLink(
point = GeometryTools.createPoint( point = GeoPoint(latitude, longitude),
longitude,
latitude
),
) )
liveDataQsRecordBean.value?.let { liveDataQsRecordBean.value?.let {
if (linkList.isNotEmpty()) { if (linkList.isNotEmpty()) {
it.linkId = it.linkId = linkList[0].properties[LinkTable.linkPid] ?: ""
linkList[0].properties[LinkTable.linkPid] ?: ""
mapController.lineHandler.showLine(linkList[0].geometry) mapController.lineHandler.showLine(linkList[0].geometry)
Log.e("jingo", "捕捉到的linkId = ${it.linkId}") Log.e("jingo", "捕捉到的linkId = ${it.linkId}")
} else { } else {
@ -188,18 +184,23 @@ class EvaluationResultViewModel @Inject constructor(
/** /**
* //获取问题分类列表 * //获取问题分类列表
*/ */
fun getClassTypeList() { fun getClassTypeList(bean: SignBean? = null) {
Log.e("jingo", "getClassTypeList S")
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val list = roomAppDatabase.getScProblemTypeDao().findClassTypeList() val list = roomAppDatabase.getScProblemTypeDao().findClassTypeList()
list?.let { list?.let {
if (list.isNotEmpty()) { if (list.isNotEmpty()) {
//通知页面更新 //通知页面更新
liveDataLeftTypeList.postValue(it) liveDataLeftTypeList.postValue(it)
val classType = it[0] var classType = it[0]
if (bean != null) {
val classType2 = roomAppDatabase.getScProblemTypeDao()
.findClassTypeByCode(bean.elementCode)
if (classType2 != null)
classType = classType2
}
//如果右侧栏没数据,给个默认值 //如果右侧栏没数据,给个默认值
if (liveDataQsRecordBean.value!!.classType.isEmpty()) { if (liveDataQsRecordBean.value!!.classType.isEmpty()) {
Log.e("jingo", "getClassTypeList $classType")
liveDataQsRecordBean.value!!.classType = classType liveDataQsRecordBean.value!!.classType = classType
classTypeTemp = classType classTypeTemp = classType
} }
@ -207,7 +208,6 @@ class EvaluationResultViewModel @Inject constructor(
} }
} }
} }
Log.e("jingo", "getClassTypeList E")
} }
/** /**
@ -313,6 +313,7 @@ class EvaluationResultViewModel @Inject constructor(
fun saveData() { fun saveData() {
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
liveDataQsRecordBean.value!!.checkTime = DateTimeUtil.getDataTime()
realm.executeTransaction { realm.executeTransaction {
it.copyToRealmOrUpdate(liveDataQsRecordBean.value) it.copyToRealmOrUpdate(liveDataQsRecordBean.value)
} }
@ -328,8 +329,9 @@ class EvaluationResultViewModel @Inject constructor(
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
Log.e("jingo", "realm hashCOde ${realm.hashCode()}") Log.e("jingo", "realm hashCOde ${realm.hashCode()}")
realm.executeTransaction { realm.executeTransaction {
val objects = it.where(QsRecordBean::class.java) val objects =
.equalTo("id", liveDataQsRecordBean.value?.id).findFirst() it.where(QsRecordBean::class.java).equalTo("id", liveDataQsRecordBean.value?.id)
.findFirst()
objects?.deleteFromRealm() objects?.deleteFromRealm()
} }
// realm.close() // realm.close()
@ -355,8 +357,7 @@ class EvaluationResultViewModel @Inject constructor(
liveDataQsRecordBean.postValue(it.copy()) liveDataQsRecordBean.postValue(it.copy())
val p = GeometryTools.createGeoPoint(it.geometry) val p = GeometryTools.createGeoPoint(it.geometry)
mapController.markerHandle.addMarker( mapController.markerHandle.addMarker(
GeoPoint(p.latitude, p.longitude), GeoPoint(p.latitude, p.longitude), markerTitle
markerTitle
) )
if (it.linkId.isNotEmpty()) { if (it.linkId.isNotEmpty()) {

View File

@ -1,5 +1,6 @@
package com.navinfo.omqs.ui.fragment.evaluationresult package com.navinfo.omqs.ui.fragment.evaluationresult
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
@ -62,11 +63,13 @@ class PhenomenonFragment :
} }
binding.phenomenonRightRecyclerview.adapter = rightAdapter binding.phenomenonRightRecyclerview.adapter = rightAdapter
//右侧菜单增加组标题 //右侧菜单增加组标题
binding.phenomenonRightRecyclerview.addItemDecoration( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
RightGroupHeaderDecoration( binding.phenomenonRightRecyclerview.addItemDecoration(
requireContext() RightGroupHeaderDecoration(
requireContext()
)
) )
) }
//右侧菜单查询数据监听 //右侧菜单查询数据监听
viewModel.liveDataRightTypeList.observe(viewLifecycleOwner) { viewModel.liveDataRightTypeList.observe(viewLifecycleOwner) {
rightAdapter.refreshData(it) rightAdapter.refreshData(it)

View File

@ -51,14 +51,18 @@ class QsRecordListAdapter(
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
itemClickListener!!.onItemClickListener(position) itemClickListener!!.onItemClickListener(position)
} }
changeViews(binding, qsRecordBean) changeViews(position, binding, qsRecordBean)
} }
private fun changeViews(binding: AdapterQsRecordListBinding, qsRecordBean: QsRecordBean) { private fun changeViews(position: Int,binding: AdapterQsRecordListBinding, qsRecordBean: QsRecordBean) {
if(position<99)
binding.qsRecordIndex.text = (position+1).toString()
else
binding.qsRecordIndex.text = "99."
binding.qsRecordClassType.text = qsRecordBean.classType binding.qsRecordClassType.text = qsRecordBean.classType
binding.qsRecordProblemType.text = qsRecordBean.problemType binding.qsRecordProblemType.text = qsRecordBean.problemType
binding.qsRecordPhenomenon.text = qsRecordBean.phenomenon binding.qsRecordPhenomenon.text = qsRecordBean.phenomenon
binding.qsRecordProblemLink.text = qsRecordBean.problemLink binding.qsRecordTime.text = qsRecordBean.checkTime
} }
override fun getItemViewRes(position: Int): Int { override fun getItemViewRes(position: Int): Int {

View File

@ -44,6 +44,7 @@ class QsRecordListFragment : BaseFragment(){
binding.qsRecyclerview.adapter = adapter binding.qsRecyclerview.adapter = adapter
viewModel.liveDataQSList.observe(viewLifecycleOwner) { viewModel.liveDataQSList.observe(viewLifecycleOwner) {
adapter.refreshData(it) adapter.refreshData(it)
binding.tvTitleCount.text = ""+adapter.data.size+""
} }
val itemDecoration = DividerItemDecoration(context, DividerItemDecoration.VERTICAL) val itemDecoration = DividerItemDecoration(context, DividerItemDecoration.VERTICAL)
itemDecoration.setDrawable(resources.getDrawable(R.drawable.separator)) itemDecoration.setDrawable(resources.getDrawable(R.drawable.separator))
@ -57,7 +58,7 @@ class QsRecordListFragment : BaseFragment(){
} }
}) })
binding.recordBack.setOnClickListener{ binding.imgBack.setOnClickListener{
findNavController().navigateUp() findNavController().navigateUp()
} }
} }

View File

@ -2,12 +2,14 @@ package com.navinfo.omqs.ui.fragment.tasklist
import android.content.Context import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.os.Build
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.NIMapController
import com.navinfo.omqs.Constant
import com.navinfo.omqs.bean.TaskBean import com.navinfo.omqs.bean.TaskBean
import com.navinfo.omqs.http.NetResult import com.navinfo.omqs.http.NetResult
import com.navinfo.omqs.http.NetworkService import com.navinfo.omqs.http.NetworkService
@ -23,7 +25,7 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class TaskListViewModel @Inject constructor( class TaskListViewModel @Inject constructor(
private val networkService: NetworkService, private val networkService: NetworkService,
private val niMapController: NIMapController private val mapController: NIMapController
) : ViewModel() { ) : ViewModel() {
val liveDataTaskList = MutableLiveData<List<TaskBean>>() val liveDataTaskList = MutableLiveData<List<TaskBean>>()
@ -35,7 +37,7 @@ class TaskListViewModel @Inject constructor(
viewModelScope.launch(Dispatchers.IO) { viewModelScope.launch(Dispatchers.IO) {
var taskList: List<TaskBean> = mutableListOf() var taskList: List<TaskBean> = mutableListOf()
when (val result = networkService.getTaskList("02911")) { when (val result = networkService.getTaskList(Constant.USER_ID)) {
is NetResult.Success -> { is NetResult.Success -> {
if (result.data != null) { if (result.data != null) {
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
@ -66,6 +68,7 @@ class TaskListViewModel @Inject constructor(
} }
val objects = realm.where(TaskBean::class.java).findAll() val objects = realm.where(TaskBean::class.java).findAll()
taskList = realm.copyFromRealm(objects) taskList = realm.copyFromRealm(objects)
} }
} }
} }
@ -95,6 +98,14 @@ class TaskListViewModel @Inject constructor(
// } // }
// niMapController.lineHandler.omdbTaskLinkLayer.update() // niMapController.lineHandler.omdbTaskLinkLayer.update()
liveDataTaskList.postValue(taskList) liveDataTaskList.postValue(taskList)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mapController.lineHandler.omdbTaskLinkLayer.removeAll()
for (item in taskList) {
mapController.lineHandler.omdbTaskLinkLayer.setLineColor(Color.valueOf(item.color))
mapController.lineHandler.omdbTaskLinkLayer.addLineList(item.hadLinkDvoList)
}
}
} }
} }

View File

@ -1,4 +1,4 @@
<vector android:height="24dp" android:tint="#18FD00" <vector android:height="24dp" android:tint="@color/icon_blue"
android:viewportHeight="24" android:viewportWidth="24" android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/> <path android:fillColor="@android:color/white" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#3756DF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M23,8c0,1.1 -0.9,2 -2,2c-0.18,0 -0.35,-0.02 -0.51,-0.07l-3.56,3.55C16.98,13.64 17,13.82 17,14c0,1.1 -0.9,2 -2,2s-2,-0.9 -2,-2c0,-0.18 0.02,-0.36 0.07,-0.52l-2.55,-2.55C10.36,10.98 10.18,11 10,11s-0.36,-0.02 -0.52,-0.07l-4.55,4.56C4.98,15.65 5,15.82 5,16c0,1.1 -0.9,2 -2,2s-2,-0.9 -2,-2s0.9,-2 2,-2c0.18,0 0.35,0.02 0.51,0.07l4.56,-4.55C8.02,9.36 8,9.18 8,9c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,0.18 -0.02,0.36 -0.07,0.52l2.55,2.55C14.64,12.02 14.82,12 15,12s0.36,0.02 0.52,0.07l3.55,-3.56C19.02,8.35 19,8.18 19,8c0,-1.1 0.9,-2 2,-2S23,6.9 23,8z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="@color/white"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M23,8c0,1.1 -0.9,2 -2,2c-0.18,0 -0.35,-0.02 -0.51,-0.07l-3.56,3.55C16.98,13.64 17,13.82 17,14c0,1.1 -0.9,2 -2,2s-2,-0.9 -2,-2c0,-0.18 0.02,-0.36 0.07,-0.52l-2.55,-2.55C10.36,10.98 10.18,11 10,11s-0.36,-0.02 -0.52,-0.07l-4.55,4.56C4.98,15.65 5,15.82 5,16c0,1.1 -0.9,2 -2,2s-2,-0.9 -2,-2s0.9,-2 2,-2c0.18,0 0.35,0.02 0.51,0.07l4.56,-4.55C8.02,9.36 8,9.18 8,9c0,-1.1 0.9,-2 2,-2s2,0.9 2,2c0,0.18 -0.02,0.36 -0.07,0.52l2.55,2.55C14.64,12.02 14.82,12 15,12s0.36,0.02 0.52,0.07l3.55,-3.56C19.02,8.35 19,8.18 19,8c0,-1.1 0.9,-2 2,-2S23,6.9 23,8z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 643 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_card_bg_select" android:state_selected="true"></item>
<item android:drawable="@drawable/shape_card_bg_default" />
</selector>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/baseline_timeline_select_24" android:state_selected="true"></item>
<item android:drawable="@drawable/baseline_timeline_24" />
</selector>

View File

@ -2,8 +2,8 @@
android:shape="line"> android:shape="line">
<size android:height="2dp"/> <size android:height="2dp"/>
<stroke <stroke
android:color="@color/skyblue" android:color="@color/bg_gray2"
android:dashWidth="2px" android:dashWidth="1px"
android:dashGap="2px" android:dashGap="1px"
android:width="1dp"/> android:width="1dp"/>
</shape> </shape>

View File

@ -1,11 +1,26 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
android:shape="rectangle"> <!-- 灰色阴影 -->
<corners android:radius="@dimen/default_widget_padding"></corners> <item
<padding android:bottom="1dp"
android:bottom="@dimen/nimap_defalut_padding" android:left="1dp"
android:left="@dimen/nimap_defalut_padding" android:right="1dp"
android:right="@dimen/nimap_defalut_padding" android:top="1dp">
android:top="@dimen/nimap_defalut_padding"></padding> <shape>
<solid android:color="@color/colorSurface"></solid> <solid android:color="#A1DBDCDF" />
</shape> <corners android:radius="2dp" />
</shape>
</item>
<!-- 白色前景 -->
<item
android:bottom="2dp"
android:left="2dp"
android:right="2dp"
android:top="2dp">
<shape>
<solid android:color="#FFFFFF" />
<corners android:radius="2dp" />
</shape>
</item>
</layer-list>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 灰色阴影 -->
<item
android:bottom="1dp"
android:left="1dp"
android:right="1dp"
android:top="1dp">
<shape>
<solid android:color="#A1DBDCDF" />
<corners android:radius="2dp" />
</shape>
</item>
<!-- 白色前景 -->
<item
android:bottom="2dp"
android:left="2dp"
android:right="2dp"
android:top="2dp">
<shape>
<solid android:color="#03A9F4" />
<corners android:radius="2dp" />
</shape>
</item>
</layer-list>

View File

@ -42,9 +42,9 @@
android:layout_height="48dp" android:layout_height="48dp"
android:layout_marginLeft="20dp" android:layout_marginLeft="20dp"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:background="@null"
android:onClick="@{()->mainActivity.openMenu()}" android:onClick="@{()->mainActivity.openMenu()}"
android:src="@drawable/baseline_person_24" android:src="@drawable/baseline_person_24"
android:background="@null"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -57,38 +57,48 @@
app:layout_constraintTop_toBottomOf="@id/main_activity_person_center" /> app:layout_constraintTop_toBottomOf="@id/main_activity_person_center" />
<LinearLayout <LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginRight="8dp" android:layout_marginRight="8dp"
android:layout_marginBottom="108dp" android:layout_marginBottom="108dp"
app:layout_constraintRight_toLeftOf="@+id/main_activity_right_fragment" android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@+id/main_activity_right_fragment"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
tools:ignore="MissingConstraints"> tools:ignore="MissingConstraints">
<ImageButton
android:id="@+id/main_activity_select_line"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/selector_road_line_btn_bg"
android:onClick="@{()->mainActivity.selectLineOnclick()}"
android:src="@drawable/selector_road_line_src" />
<ImageButton <ImageButton
android:id="@+id/main_activity_voice" android:id="@+id/main_activity_voice"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:src="@drawable/icon_add_voice" android:background="@null"
android:background="@null" /> android:src="@drawable/icon_add_voice" />
<ImageButton <ImageButton
android:id="@+id/main_activity_line" android:id="@+id/main_activity_line"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@null"
android:onClick="@{()->mainActivity.voiceOnclick()}" android:onClick="@{()->mainActivity.voiceOnclick()}"
android:src="@drawable/icon_add_data" android:src="@drawable/icon_add_data" />
android:background="@null" />
<ImageButton <ImageButton
android:id="@+id/main_activity_location" android:id="@+id/main_activity_location"
android:layout_width="48dp" android:layout_width="48dp"
android:layout_height="48dp" android:layout_height="48dp"
android:background="@null"
android:onClick="@{()->viewModel.onClickLocationButton()}" android:onClick="@{()->viewModel.onClickLocationButton()}"
android:src="@drawable/icon_location" android:src="@drawable/icon_location" />
android:background="@null" />
</LinearLayout> </LinearLayout>
@ -116,69 +126,70 @@
app:navGraph="@navigation/right_fragment_nav_graph" /> app:navGraph="@navigation/right_fragment_nav_graph" />
<LinearLayout <LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintRight_toLeftOf="@+id/main_activity_right_fragment" app:layout_constraintRight_toLeftOf="@+id/main_activity_right_fragment"
android:layout_marginRight="10dp" android:layout_marginRight="10dp"
android:layout_marginTop="10dp" android:orientation="horizontal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints"> tools:ignore="MissingConstraints">
<LinearLayout <LinearLayout
android:id="@+id/main_activity_menu_layout" android:id="@+id/main_activity_menu_layout"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone" android:orientation="horizontal"
android:orientation="horizontal"> android:visibility="gone">
<ImageButton <ImageButton
android:id="@+id/main_activity_serach" android:id="@+id/main_activity_serach"
android:onClick="@{()->mainActivity.onClickSerach()}"
android:background="@drawable/icon_serach"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:background="@drawable/icon_serach"
android:onClick="@{()->mainActivity.onClickSerach()}" />
<ImageButton <ImageButton
android:id="@+id/main_activity_2d_3d" android:id="@+id/main_activity_2d_3d"
android:background="@drawable/icon_2d_3d"
android:onClick="@{()->mainActivity.onClick2DOr3D()}"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:background="@drawable/icon_2d_3d"
android:onClick="@{()->mainActivity.onClick2DOr3D()}" />
<ImageButton <ImageButton
android:id="@+id/main_activity_camera" android:id="@+id/main_activity_camera"
android:background="@drawable/icon_page_video_a1"
android:onClick="@{()->mainActivity.openCamera()}"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:background="@drawable/icon_page_video_a1"
android:onClick="@{()->mainActivity.openCamera()}" />
<ImageButton <ImageButton
android:id="@+id/main_activity_trace" android:id="@+id/main_activity_trace"
android:onClick="@{()->mainActivity.onClickTrace()}"
android:background="@drawable/icon_trace"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:background="@drawable/icon_trace"
android:onClick="@{()->mainActivity.onClickTrace()}" />
<ImageButton <ImageButton
android:id="@+id/main_activity_calc_disance" android:id="@+id/main_activity_calc_disance"
android:background="@drawable/icon_calc_disance"
android:onClick="@{()->mainActivity.onClickCalcDisance()}"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:background="@drawable/icon_calc_disance"
android:onClick="@{()->mainActivity.onClickCalcDisance()}" />
</LinearLayout> </LinearLayout>
<ImageButton <ImageButton
android:layout_marginTop="5dp"
android:id="@+id/main_activity_menu" android:id="@+id/main_activity_menu"
android:background="@drawable/chk_icon_menu_open_close_xml"
android:onClick="@{()->mainActivity.onClickMenu()}"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:background="@drawable/chk_icon_menu_open_close_xml"
android:onClick="@{()->mainActivity.onClickMenu()}" />
</LinearLayout> </LinearLayout>
@ -190,9 +201,9 @@
android:layout_height="48dp" android:layout_height="48dp"
android:layout_marginLeft="20dp" android:layout_marginLeft="20dp"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:background="@null"
android:onClick="@{()->mainActivity.openCamera()}" android:onClick="@{()->mainActivity.openCamera()}"
android:src="@drawable/baseline_person_24" android:src="@drawable/baseline_person_24"
android:background="@null"
android:visibility="gone" android:visibility="gone"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

View File

@ -6,16 +6,16 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/ivory" android:background="@color/ivory"
android:paddingLeft="10dp" android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp" android:paddingTop="5dp"
android:paddingRight="10dp"
tools:context="com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapCityListAdapter"> tools:context="com.navinfo.omqs.ui.fragment.offlinemap.OfflineMapCityListAdapter">
<TextView <TextView
android:id="@+id/offline_map_city_name" android:id="@+id/offline_map_city_name"
style="@style/map_size_font_style"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="省市名称" android:text="省市名称"
style="@style/map_size_font_style"
android:textSize="@dimen/default_font_size" /> android:textSize="@dimen/default_font_size" />
<TextView <TextView
@ -24,25 +24,26 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/offline_map_city_name" android:layout_below="@id/offline_map_city_name"
android:drawableLeft="@mipmap/point_blue"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:textColor="@color/gray_121" android:drawableLeft="@mipmap/point_blue"
android:text="文件大小" /> android:text="文件大小"
android:textColor="@color/gray_121" />
<TextView <TextView
android:id="@+id/offline_map_download_btn" android:id="@+id/offline_map_download_btn"
style="@style/map_download_style_btn" style="@style/map_download_style_btn"
android:layout_width="60dp" android:layout_width="60dp"
android:layout_alignTop="@id/offline_map_city_name"
android:layout_alignBottom="@id/offline_map_city_size"
android:layout_alignParentRight="true" android:layout_alignParentRight="true"
android:layout_gravity="center_vertical"
android:gravity="center"
android:shadowColor="@android:color/transparent" android:shadowColor="@android:color/transparent"
android:text="下载" android:text="下载"
android:textSize="@dimen/card_title_font_2size" /> android:textSize="@dimen/card_title_font_2size" />
<TextView <TextView
android:id="@+id/tv_city_list_status" android:id="@+id/tv_city_list_status"
style="@style/content_font_default_size_13sp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_centerVertical="true" android:layout_centerVertical="true"
@ -50,8 +51,7 @@
android:layout_toLeftOf="@id/offline_map_download_btn" android:layout_toLeftOf="@id/offline_map_download_btn"
android:clickable="true" android:clickable="true"
android:focusable="false" android:focusable="false"
android:shadowColor="@android:color/transparent" android:shadowColor="@android:color/transparent" />
style="@style/content_font_default_size_13sp" />
<com.navinfo.omqs.ui.widget.MyProgressBar <com.navinfo.omqs.ui.widget.MyProgressBar
android:id="@+id/offline_map_progress" android:id="@+id/offline_map_progress"
@ -59,7 +59,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="16dp" android:layout_height="16dp"
android:layout_below="@id/offline_map_download_btn" android:layout_below="@id/offline_map_download_btn"
android:progressDrawable="@drawable/progress_bg"
android:paddingTop="10dp" android:paddingTop="10dp"
android:progressDrawable="@drawable/progress_bg"
android:visibility="invisible" /> android:visibility="invisible" />
</RelativeLayout> </RelativeLayout>

View File

@ -1,53 +1,63 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/ivory"
android:paddingLeft="10dp" android:paddingLeft="10dp"
android:paddingRight="10dp" android:paddingRight="10dp"
android:paddingTop="5dp" android:paddingTop="5dp"
android:paddingBottom="5dp" android:paddingBottom="5dp"
tools:context="com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListAdapter"> tools:context="com.navinfo.omqs.ui.fragment.qsrecordlist.QsRecordListAdapter">
<TextView
android:id="@+id/qs_record_index"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@mipmap/marker"
android:maxLength="3"
android:text=""
android:layout_marginRight="@dimen/default_widget_padding"
style="@style/content_font_default_size_13sp" />
<TextView <TextView
android:id="@+id/qs_record_classType" android:id="@+id/qs_record_classType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@mipmap/point_blue"
android:text="问题分类"
style="@style/content_font_default"
android:textSize="@dimen/default_font_size" />
<TextView
android:id="@+id/qs_record_problemLink"
style="@style/content_font_default"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/qs_record_classType"
android:drawableLeft="@mipmap/point_blue"
android:layout_marginLeft="@dimen/default_widget_padding"
android:text="问题环节" />
<TextView
android:id="@+id/qs_record_problem_type"
style="@style/content_font_default_size_13sp" style="@style/content_font_default_size_13sp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:maxEms="6"
android:singleLine="true"
android:ellipsize="end"
android:layout_toRightOf="@id/qs_record_index"
android:text="问题分类" />
<TextView
android:id="@+id/qs_record_time"
style="@style/content_font_default_size_13sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/default_widget_padding"
android:layout_toRightOf="@id/qs_record_classType"
android:maxLines="1"
android:text="" />
<TextView
android:id="@+id/qs_record_problem_type"
style="@style/content_font_default_size_10sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/qs_record_classType" android:layout_below="@id/qs_record_classType"
android:drawableLeft="@mipmap/point_blue" android:layout_toRightOf="@id/qs_record_index"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:text="问题类型" /> android:text="问题类型" />
<TextView <TextView
android:id="@+id/qs_record_phenomenon" android:id="@+id/qs_record_phenomenon"
style="@style/content_font_default_size_13sp" style="@style/content_font_default_size_10sp"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/qs_record_problem_type" android:layout_toRightOf="@id/qs_record_problem_type"
android:maxLines="2"
android:layout_below="@id/qs_record_classType" android:layout_below="@id/qs_record_classType"
android:drawableLeft="@mipmap/point_blue"
android:layout_marginLeft="@dimen/default_widget_padding" android:layout_marginLeft="@dimen/default_widget_padding"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:text="问题现象" /> android:text="问题现象" />

View File

@ -17,4 +17,15 @@
android:text="80" android:text="80"
android:textColor="#2F2F2F" android:textColor="#2F2F2F"
android:textSize="14.67sp" /> android:textSize="14.67sp" />
<TextView
android:id="@+id/sign_bottom_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginLeft="15dp"
android:layout_marginBottom="5dp"
android:text="道路名"
android:layout_alignParentBottom="true"
android:textColor="@color/white"
android:textSize="14.67sp" />
</RelativeLayout> </RelativeLayout>

View File

@ -15,11 +15,9 @@
android:id="@+id/task_name" android:id="@+id/task_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toLeftOf="@id/task_download_btn" android:layout_marginRight="5dp"
android:text="任务名称" android:text="任务名称"
android:textStyle="bold" android:textSize="12sp" />
android:textColor="@color/black"
android:textSize="@dimen/default_font_size" />
<TextView <TextView
android:id="@+id/task_city_name" android:id="@+id/task_city_name"
@ -37,10 +35,10 @@
style="@style/map_size_font_style" style="@style/map_size_font_style"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentLeft="true" android:layout_marginRight="5dp"
android:layout_toLeftOf="@id/task_upload_btn"
android:layout_below="@id/task_city_name" android:layout_below="@id/task_city_name"
android:textColor="@color/gray_121" android:layout_toLeftOf="@id/task_upload_btn"
android:layout_alignParentLeft="true"
android:text="版本号" android:text="版本号"
android:textSize="@dimen/card_title_font_3size" /> android:textSize="@dimen/card_title_font_3size" />
@ -51,7 +49,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/task_data_version" android:layout_below="@id/task_data_version"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:drawableLeft="@mipmap/point_blue"
android:text="路线颜色" android:text="路线颜色"
android:textSize="@dimen/card_title_font_3size" /> android:textSize="@dimen/card_title_font_3size" />
@ -65,6 +62,7 @@
android:gravity="center" android:gravity="center"
android:shadowColor="@android:color/transparent" android:shadowColor="@android:color/transparent"
android:text="下载" android:text="下载"
android:textColor="@color/btn_blue_solid"
android:textSize="@dimen/card_title_font_2size" /> android:textSize="@dimen/card_title_font_2size" />
<TextView <TextView
@ -78,6 +76,7 @@
android:gravity="center" android:gravity="center"
android:shadowColor="@android:color/transparent" android:shadowColor="@android:color/transparent"
android:text="同步" android:text="同步"
android:textColor="@color/btn_blue_solid"
android:textSize="@dimen/card_title_font_2size" /> android:textSize="@dimen/card_title_font_2size" />
<TextView <TextView

View File

@ -13,30 +13,85 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
style="@style/left_pannel_title_layout"> style="@style/left_pannel_title_layout">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/record_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="5dp"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/selector_bg_round_button"
android:foreground="@drawable/ripple_btn_press"
style="@style/btn_round"
android:src="@drawable/ic_baseline_keyboard_arrow_left_24"></androidx.appcompat.widget.AppCompatImageView>
<androidx.appcompat.widget.AppCompatTextView <com.google.android.material.appbar.AppBarLayout
android:id="@+id/record_title" android:id="@+id/evaluation_appbar_layout"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="@dimen/left_pannel_title_font" app:layout_constraintTop_toTopOf="parent">
android:textStyle="bold"
android:text="我的数据" <RelativeLayout
app:layout_constraintLeft_toLeftOf="parent" android:layout_width="match_parent"
app:layout_constraintRight_toRightOf="parent" android:layout_height="wrap_content">
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"></androidx.appcompat.widget.AppCompatTextView> <ImageView
android:id="@+id/img_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/eight"
android:layout_alignParentLeft="true"
android:layout_centerInParent="true"
android:src="@drawable/btn_back_xml" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingTop="@dimen/ten"
android:paddingBottom="@dimen/five"
android:text="测评结果"
android:textColor="@color/highFontColor"
android:textSize="@dimen/default_font_size" />
<TextView
android:id="@+id/tv_title_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_title"
android:paddingLeft="@dimen/ten"
android:layout_alignStart="@+id/tv_title"
android:paddingBottom="@dimen/ten"
android:textSize="@dimen/card_title_font_3size"
android:text="共0个"
android:textColor="@color/cv_gray_153" />
<ImageView
android:id="@+id/img_refrush"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:padding="@dimen/eight"
android:layout_centerInParent="true"
android:layout_marginRight="@dimen/eight"
android:background="@drawable/icon_refrush" />
<ImageView
android:id="@+id/img_order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:padding="@dimen/eight"
android:layout_marginRight="@dimen/eight"
android:layout_toLeftOf="@+id/img_refrush"
android:background="@drawable/icon_order" />
<ImageView
android:id="@+id/img_filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:padding="@dimen/eight"
android:layout_marginRight="@dimen/eight"
android:layout_toLeftOf="@+id/img_order"
android:background="@drawable/icon_filter" />
</RelativeLayout>
</com.google.android.material.appbar.AppBarLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/filter"
android:contentDescription="筛选"
android:icon="@drawable/icon_filter"
android:title="筛选"
app:showAsAction="ifRoom" />
<item
android:id="@+id/order"
android:contentDescription="排序"
android:icon="@drawable/icon_order"
android:title="排序"
app:showAsAction="ifRoom" />
<item
android:id="@+id/refrush"
android:contentDescription="刷新"
android:icon="@drawable/icon_refrush"
android:title="刷新"
app:showAsAction="ifRoom" />
</menu>

View File

@ -41,7 +41,7 @@
<item <item
android:id="@+id/personal_center_menu_qs_record_list" android:id="@+id/personal_center_menu_qs_record_list"
android:icon="@drawable/ic_baseline_playlist_add_check_24" android:icon="@drawable/ic_baseline_playlist_add_check_24"
android:title="我的数据" /> android:title="测评结果" />
<item <item
android:id="@+id/personal_center_menu_layer_manager" android:id="@+id/personal_center_menu_layer_manager"
android:icon="@drawable/ic_baseline_layers_24" android:icon="@drawable/ic_baseline_layers_24"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 332 B

View File

@ -166,6 +166,7 @@
<color name="highFontColor">#2631DD</color> <color name="highFontColor">#2631DD</color>
<color name="high_item_color">#FFF5F7FE</color> <color name="high_item_color">#FFF5F7FE</color>
<color name="contentColor">#000000</color> <color name="contentColor">#000000</color>
<color name="icon_blue">#FF4263EB</color>
<!-- 一键连接对话框背景色 --> <!-- 一键连接对话框背景色 -->
<color name="bg_gray2">#d1d1d1</color> <color name="bg_gray2">#d1d1d1</color>
<!-- 一键连接时间显示区域背景色 --> <!-- 一键连接时间显示区域背景色 -->

View File

@ -63,6 +63,15 @@
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
</style> </style>
<!-- 默认字体 -->
<style name="content_font_default_size_10sp">
<item name="android:gravity">center_vertical</item>
<item name="android:textSize">@dimen/card_title_font_3size</item>
<item name="android:textColor">@color/black</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
<!-- 输入框基本样式 --> <!-- 输入框基本样式 -->
<style name="input_blue_type" parent="content_font_default"> <style name="input_blue_type" parent="content_font_default">
<item name="android:textSize">16sp</item> <item name="android:textSize">16sp</item>

View File

@ -57,7 +57,7 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
private lateinit var canvas: org.oscim.backend.canvas.Canvas private lateinit var canvas: org.oscim.backend.canvas.Canvas
private lateinit var itemizedLayer: MyItemizedLayer private lateinit var itemizedLayer: MyItemizedLayer
private lateinit var markerRendererFactory: MarkerRendererFactory private lateinit var markerRendererFactory: MarkerRendererFactory
private var resId = R.mipmap.map_icon_point_add private var resId = R.mipmap.map_icon_report
private var itemListener: OnQsRecordItemClickListener? = null private var itemListener: OnQsRecordItemClickListener? = null
/** /**

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB