增加任务列表下拉刷新功能

增加警示信息的预警面板和详情面板
This commit is contained in:
squallzhjch
2023-08-31 15:32:33 +08:00
parent f5e6a87b9b
commit 2d3e725119
16 changed files with 430 additions and 251 deletions

View File

@@ -136,6 +136,7 @@ dependencies {
//带侧滑的自定义列表 //带侧滑的自定义列表
implementation 'com.yanzhenjie.recyclerview:x:1.3.2' implementation 'com.yanzhenjie.recyclerview:x:1.3.2'
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
} }
//允许引用生成的代码 //允许引用生成的代码
kapt { kapt {

View File

@@ -471,10 +471,11 @@ class MainViewModel @Inject constructor(
private suspend fun captureItem(point: GeoPoint) { private suspend fun captureItem(point: GeoPoint) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val itemList = realmOperateHelper.queryElement( val itemList = realmOperateHelper.queryElement(
GeometryTools.createPoint( point = GeometryTools.createPoint(
point.longitude, point.longitude,
point.latitude point.latitude
) ),
buffer = 2.0
) )
if (itemList.size == 1) { if (itemList.size == 1) {
@@ -597,6 +598,7 @@ class MainViewModel @Inject constructor(
DataCodeEnum.OMDB_ELECTRONICEYE.code,//电子眼 DataCodeEnum.OMDB_ELECTRONICEYE.code,//电子眼
DataCodeEnum.OMDB_TRAFFICLIGHT.code,//交通灯 DataCodeEnum.OMDB_TRAFFICLIGHT.code,//交通灯
DataCodeEnum.OMDB_LANEINFO.code,//车信 DataCodeEnum.OMDB_LANEINFO.code,//车信
DataCodeEnum.OMDB_WARNINGSIGN.code,//危险信息
-> signList.add( -> signList.add(
signBean signBean
) )
@@ -1279,5 +1281,9 @@ class MainViewModel @Inject constructor(
} }
} }
} }
fun clearMarker() {
mapController.markerHandle.removeMarker()
}
} }

View File

@@ -2,6 +2,8 @@ package com.navinfo.omqs.ui.activity.map
import android.graphics.PorterDuff import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter import android.graphics.PorterDuffColorFilter
import android.graphics.drawable.BitmapDrawable
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@@ -14,6 +16,7 @@ import com.navinfo.omqs.databinding.AdapterSignLaneinfoBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder import com.navinfo.omqs.ui.other.BaseViewHolder
import com.navinfo.omqs.util.SignUtil import com.navinfo.omqs.util.SignUtil
import org.oscim.android.canvas.AndroidSvgBitmap
interface OnSignAdapterClickListener { interface OnSignAdapterClickListener {
fun onItemClick(signBean: SignBean) fun onItemClick(signBean: SignBean)
@@ -60,7 +63,34 @@ class SignAdapter(private var listener: OnSignAdapterClickListener?) :
if (holder.viewBinding is AdapterSignBinding) { if (holder.viewBinding is AdapterSignBinding) {
val bd = holder.viewBinding val bd = holder.viewBinding
if (item.iconId != 0) bd.signMainIconBg.setImageResource(item.iconId) if (item.iconId != 0) {
if (item.renderEntity.code == DataCodeEnum.OMDB_WARNINGSIGN.code) {
try {
var typeCode = "${item.iconId}"
while (typeCode.length < 5) {
typeCode = "0${typeCode}"
}
val input =
holder.viewBinding.root.context.assets.open("omdb/appendix/1105_${typeCode}_0.svg")
if (input != null) {
val bitmap =
AndroidSvgBitmap.getResourceBitmap(input, 1.0f, 60.0f, 60, 60, 100)
input.close()
val drawable = BitmapDrawable(
holder.viewBinding.root.context.resources,
bitmap
)
bd.signMainIconBg.setImageDrawable(drawable)
}
} catch (e: Exception) {
Log.e("jingo", "警示信息没有${item.iconId} 这个SVG")
}
} else {
bd.signMainIconBg.setImageResource(item.iconId)
}
}
bd.signMainIcon.text = item.iconText bd.signMainIcon.text = item.iconText
bd.signBottomText.text = item.name bd.signBottomText.text = item.name
//点击错误按钮 //点击错误按钮

View File

@@ -134,6 +134,7 @@ class SignMoreInfoFragment : BaseFragment() {
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
viewModel.clearMarker()
_binding = null _binding = null
} }
} }

View File

@@ -1,14 +1,22 @@
package com.navinfo.omqs.ui.fragment.signMoreInfo package com.navinfo.omqs.ui.fragment.signMoreInfo
import android.graphics.drawable.BitmapDrawable
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import com.bumptech.glide.Glide
import com.caverock.androidsvg.SVG
import com.caverock.androidsvg.SVGImageView
import com.navinfo.collect.library.enums.DataCodeEnum
import com.navinfo.omqs.databinding.AdapterTwoItemBinding import com.navinfo.omqs.databinding.AdapterTwoItemBinding
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
import com.navinfo.omqs.ui.other.BaseViewHolder import com.navinfo.omqs.ui.other.BaseViewHolder
import org.oscim.android.canvas.AndroidSvgBitmap
data class TwoItemAdapterItem( data class TwoItemAdapterItem(
val title: String, val title: String,
val text: String val text: String,
val code: String = "",
) )
class TwoItemAdapter : BaseRecyclerViewAdapter<TwoItemAdapterItem>() { class TwoItemAdapter : BaseRecyclerViewAdapter<TwoItemAdapterItem>() {
@@ -24,6 +32,31 @@ class TwoItemAdapter : BaseRecyclerViewAdapter<TwoItemAdapterItem>() {
holder.viewBinding as AdapterTwoItemBinding holder.viewBinding as AdapterTwoItemBinding
val item = data[position] val item = data[position]
binding.title.text = item.title binding.title.text = item.title
if (item.code == DataCodeEnum.OMDB_WARNINGSIGN.code) {
try {
val input =
holder.viewBinding.root.context.assets.open("omdb/appendix/1105_${item.text}_0.svg")
if (input != null) {
val bitmap = AndroidSvgBitmap.getResourceBitmap(input, 1.0f, 60.0f, 60, 60, 100)
input.close()
val drawableLeft = BitmapDrawable(
holder.viewBinding.root.context.resources,
bitmap
)
drawableLeft.setBounds(
0,
0,
(drawableLeft.minimumWidth * 1.2).toInt(),
(drawableLeft.minimumHeight * 1.2).toInt()
)//必须
binding.text.setCompoundDrawables(
drawableLeft, null, null, null
)
}
} catch (e: Exception) {
Log.e("jingo", "危险信息没有${item.text}这个svg")
}
}
binding.text.text = item.text binding.text.text = item.text
} }
} }

View File

@@ -95,7 +95,6 @@ class TaskFragment : BaseFragment() {
//增加侧滑按钮 //增加侧滑按钮
binding.taskRecyclerview.setSwipeMenuCreator(mSwipeMenuCreator) binding.taskRecyclerview.setSwipeMenuCreator(mSwipeMenuCreator)
//单项点击 //单项点击
binding.taskRecyclerview.setOnItemMenuClickListener { menuBridge, position -> binding.taskRecyclerview.setOnItemMenuClickListener { menuBridge, position ->
menuBridge.closeMenu() menuBridge.closeMenu()

View File

@@ -37,17 +37,10 @@ import com.navinfo.omqs.ui.widget.LeftDeleteView
class TaskListAdapter( class TaskListAdapter(
private val downloadManager: TaskDownloadManager, private val downloadManager: TaskDownloadManager,
private val uploadManager: TaskUploadManager, private val uploadManager: TaskUploadManager,
private val recyclerView: RecyclerView,
private var itemListener: ((Int, Int, TaskBean) -> Unit?)? = null, private var itemListener: ((Int, Int, TaskBean) -> Unit?)? = null,
) : BaseRecyclerViewAdapter<TaskBean>() { ) : BaseRecyclerViewAdapter<TaskBean>() {
private var selectPosition = -1 private var selectPosition = -1
private var leftDeleteView: LeftDeleteView? = null
private val mRecyclerView = recyclerView
private var isShowDeleteView = false
private val downloadBtnClick = View.OnClickListener() { private val downloadBtnClick = View.OnClickListener() {
if (it.tag != null) { if (it.tag != null) {
val taskBean = data[it.tag as Int] val taskBean = data[it.tag as Int]
@@ -110,10 +103,6 @@ class TaskListAdapter(
val viewBinding = val viewBinding =
AdapterTaskListBinding.inflate(LayoutInflater.from(parent.context), parent, false) AdapterTaskListBinding.inflate(LayoutInflater.from(parent.context), parent, false)
val deleteView = viewBinding.root
deleteView.setRecyclerView(mRecyclerView)
return BaseViewHolder(viewBinding) return BaseViewHolder(viewBinding)
} }
@@ -132,18 +121,6 @@ class TaskListAdapter(
val binding: AdapterTaskListBinding = val binding: AdapterTaskListBinding =
holder.viewBinding as AdapterTaskListBinding holder.viewBinding as AdapterTaskListBinding
val taskBean = data[position] val taskBean = data[position]
binding.root.mStatusChangeLister = {
isShowDeleteView = it
if (it) {
//重置以后滑动布局
restoreItemView()
// 如果编辑菜单在显示
leftDeleteView = binding.root
selectPosition = position
} else {
selectPosition = -1
}
}
//tag 方便onclick里拿到数据 //tag 方便onclick里拿到数据
holder.tag = taskBean.id.toString() holder.tag = taskBean.id.toString()
changeViews(binding, taskBean) changeViews(binding, taskBean)
@@ -196,9 +173,6 @@ class TaskListAdapter(
binding.root.isSelected = selectPosition == position binding.root.isSelected = selectPosition == position
binding.taskItemLayout.setOnClickListener { binding.taskItemLayout.setOnClickListener {
if (isShowDeleteView) {
leftDeleteView?.resetDeleteStatus()
} else {
val pos = holder.adapterPosition val pos = holder.adapterPosition
if (selectPosition != pos) { if (selectPosition != pos) {
val lastPos = selectPosition val lastPos = selectPosition
@@ -210,32 +184,11 @@ class TaskListAdapter(
itemListener?.invoke(position, ItemClickStatus.ITEM_LAYOUT_CLICK, taskBean) itemListener?.invoke(position, ItemClickStatus.ITEM_LAYOUT_CLICK, taskBean)
} }
} }
}
binding.taskDeleteLayout.setOnClickListener {
//重置状态
leftDeleteView?.resetDeleteStatus()
if (taskBean.syncStatus != FileUploadStatus.DONE) {
Toast.makeText(binding.taskUploadBtn.context, "数据未上传,不允许关闭!", Toast.LENGTH_SHORT)
.show()
} else {
itemListener?.invoke(position, ItemClickStatus.DELETE_LAYOUT_CLICK, taskBean)
}
}
}
/**
* 重置item状态
* @param point
*/
private fun restoreItemView() {
leftDeleteView?.let {
if (isShowDeleteView)
it.resetDeleteStatus()
}
} }
inner class DownloadObserver(val id: Int, val holder: BaseViewHolder) : inner class DownloadObserver(val id: Int, val holder: BaseViewHolder) :
Observer<TaskBean> { Observer<TaskBean> {
override fun onChanged(taskBean: TaskBean?) { override fun onChanged(taskBean: TaskBean?) {

View File

@@ -1,6 +1,5 @@
package com.navinfo.omqs.ui.fragment.tasklist package com.navinfo.omqs.ui.fragment.tasklist
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.text.Editable import android.text.Editable
import android.text.TextWatcher import android.text.TextWatcher
@@ -9,12 +8,18 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.navinfo.omqs.R
import com.navinfo.omqs.databinding.FragmentTaskListBinding import com.navinfo.omqs.databinding.FragmentTaskListBinding
import com.navinfo.omqs.http.taskdownload.TaskDownloadManager import com.navinfo.omqs.http.taskdownload.TaskDownloadManager
import com.navinfo.omqs.http.taskupload.TaskUploadManager import com.navinfo.omqs.http.taskupload.TaskUploadManager
import com.navinfo.omqs.tools.FileManager
import com.navinfo.omqs.ui.fragment.BaseFragment import com.navinfo.omqs.ui.fragment.BaseFragment
import com.navinfo.omqs.ui.other.shareViewModels import com.navinfo.omqs.ui.other.shareViewModels
import com.yanzhenjie.recyclerview.SwipeMenuCreator
import com.yanzhenjie.recyclerview.SwipeMenuItem
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.videolan.vlc.Util
import javax.inject.Inject import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
@@ -35,7 +40,7 @@ class TaskListFragment : BaseFragment() {
private val adapter: TaskListAdapter by lazy { private val adapter: TaskListAdapter by lazy {
TaskListAdapter( TaskListAdapter(
downloadManager, uploadManager, binding.taskListRecyclerview downloadManager, uploadManager,
) { _, status, taskBean -> ) { _, status, taskBean ->
if (taskBean.hadLinkDvoList.isEmpty()) { if (taskBean.hadLinkDvoList.isEmpty()) {
Toast.makeText(context, "数据错误无Link数据", Toast.LENGTH_SHORT).show() Toast.makeText(context, "数据错误无Link数据", Toast.LENGTH_SHORT).show()
@@ -46,8 +51,7 @@ class TaskListFragment : BaseFragment() {
viewModel.setSelectTaskBean(taskBean) viewModel.setSelectTaskBean(taskBean)
} }
TaskListAdapter.Companion.ItemClickStatus.DELETE_LAYOUT_CLICK -> { TaskListAdapter.Companion.ItemClickStatus.DELETE_LAYOUT_CLICK -> {
showLoadingDialog("正在关闭")
context?.let { viewModel.removeTask(it, taskBean) }
} }
TaskListAdapter.Companion.ItemClickStatus.UPLOAD_LAYOUT_CLICK -> { TaskListAdapter.Companion.ItemClickStatus.UPLOAD_LAYOUT_CLICK -> {
showLoadingDialog("正在校验") showLoadingDialog("正在校验")
@@ -74,12 +78,53 @@ class TaskListFragment : BaseFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
//注意:使用滑动菜单不能开启滑动删除,否则只有滑动删除没有滑动菜单
val mSwipeMenuCreator = SwipeMenuCreator { _, rightMenu, _ ->
//添加菜单自动添加至尾部
val deleteItem = SwipeMenuItem(context)
deleteItem.height = Util.convertDpToPx(requireContext(), 60)
deleteItem.width = Util.convertDpToPx(requireContext(), 80)
deleteItem.text = "关闭"
deleteItem.background = requireContext().getDrawable(R.color.red)
deleteItem.setTextColor(requireContext().resources.getColor(R.color.white))
rightMenu.addMenuItem(deleteItem)
}
val layoutManager = LinearLayoutManager(context) val layoutManager = LinearLayoutManager(context)
//// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能 //// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能
binding.taskListRecyclerview.setHasFixedSize(true) binding.taskListRecyclerview.setHasFixedSize(true)
binding.taskListRecyclerview.layoutManager = layoutManager binding.taskListRecyclerview.layoutManager = layoutManager
//增加侧滑按钮
binding.taskListRecyclerview.setSwipeMenuCreator(mSwipeMenuCreator)
//单项点击
binding.taskListRecyclerview.setOnItemMenuClickListener { menuBridge, position ->
menuBridge.closeMenu()
val taskBean = adapter.data[position]
if (taskBean.syncStatus != FileManager.Companion.FileUploadStatus.DONE) {
Toast.makeText(context, "数据未上传,不允许关闭!", Toast.LENGTH_SHORT)
.show()
} else {
viewModel.removeTask(requireContext(), taskBean)
}
}
/**
* 刷新
*/
binding.refreshLayout.setOnRefreshListener {
viewModel.loadNetTaskList(requireContext())
}
loadFinish()
binding.taskListRecyclerview.adapter = adapter binding.taskListRecyclerview.adapter = adapter
viewModel.liveDataTaskList.observe(viewLifecycleOwner) { viewModel.liveDataTaskList.observe(viewLifecycleOwner) {
loadFinish()
adapter.initSelectTask(it, viewModel.currentSelectTaskBean?.id) adapter.initSelectTask(it, viewModel.currentSelectTaskBean?.id)
} }
@@ -94,7 +139,12 @@ class TaskListFragment : BaseFragment() {
} }
binding.taskListSearch.addTextChangedListener(object : TextWatcher { binding.taskListSearch.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { override fun beforeTextChanged(
s: CharSequence?,
start: Int,
count: Int,
after: Int
) {
} }
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
@@ -106,8 +156,20 @@ class TaskListFragment : BaseFragment() {
}) })
} }
private fun loadFinish() {
binding.refreshLayout.isRefreshing = false
// 第一次加载数据:一定要调用这个方法,否则不会触发加载更多。
// 第一个参数表示此次数据是否为空假如你请求到的list为空(== null || list.size == 0)那么这里就要true。
// 第二个参数表示是否还有更多数据根据服务器返回给你的page等信息判断是否还有更多这样可以提供性能如果不能判断则传true。
// 第一次加载数据:一定要调用这个方法,否则不会触发加载更多。
// 第一个参数表示此次数据是否为空假如你请求到的list为空(== null || list.size == 0)那么这里就要true。
// 第二个参数表示是否还有更多数据根据服务器返回给你的page等信息判断是否还有更多这样可以提供性能如果不能判断则传true。
binding.taskListRecyclerview.loadMoreFinish(true, false)
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _binding = null

View File

@@ -5,6 +5,7 @@ import android.content.SharedPreferences
import android.content.SharedPreferences.OnSharedPreferenceChangeListener import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.os.Build import android.os.Build
import android.view.View import android.view.View
import android.widget.Toast
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@@ -20,8 +21,10 @@ import com.navinfo.collect.library.utils.GeometryTools
import com.navinfo.collect.library.utils.MapParamUtils import com.navinfo.collect.library.utils.MapParamUtils
import com.navinfo.omqs.Constant import com.navinfo.omqs.Constant
import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.http.NetResult
import com.navinfo.omqs.http.NetworkService import com.navinfo.omqs.http.NetworkService
import com.navinfo.omqs.tools.FileManager import com.navinfo.omqs.tools.FileManager
import com.navinfo.omqs.ui.activity.login.LoginStatus
import com.navinfo.omqs.ui.dialog.FirstDialog import com.navinfo.omqs.ui.dialog.FirstDialog
import com.navinfo.omqs.util.DateTimeUtil import com.navinfo.omqs.util.DateTimeUtil
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
@@ -176,6 +179,72 @@ class TaskViewModel @Inject constructor(
} }
} }
/**
* 获取任务列表
*/
fun loadNetTaskList(context: Context){
viewModelScope.launch(Dispatchers.IO) {
when (val result = networkService.getTaskList(Constant.USER_ID)) {
is NetResult.Success -> {
if (result.data != null) {
val realm = Realm.getDefaultInstance()
realm.executeTransaction {
result.data.obj?.let { list ->
for (index in list.indices) {
val task = list[index]
val item = realm.where(TaskBean::class.java).equalTo(
"id", task.id
).findFirst()
if (item != null) {
task.fileSize = item.fileSize
task.status = item.status
task.currentSize = item.currentSize
task.hadLinkDvoList = item.hadLinkDvoList
//已上传后不在更新操作时间
if (task.syncStatus != FileManager.Companion.FileUploadStatus.DONE) {
//赋值时间,用于查询过滤
task.operationTime = DateTimeUtil.getNowDate().time
}
} else {
for (hadLink in task.hadLinkDvoList) {
hadLink.taskId = task.id
}
//赋值时间,用于查询过滤
task.operationTime = DateTimeUtil.getNowDate().time
}
realm.copyToRealmOrUpdate(task)
}
}
}
}
getLocalTaskList()
}
is NetResult.Error<*> -> {
withContext(Dispatchers.Main) {
Toast.makeText(context, "${result.exception.message}", Toast.LENGTH_SHORT)
.show()
}
getLocalTaskList()
}
is NetResult.Failure<*> -> {
withContext(Dispatchers.Main) {
Toast.makeText(context, "${result.code}:${result.msg}", Toast.LENGTH_SHORT)
.show()
}
getLocalTaskList()
}
is NetResult.Loading -> {}
}
}
}
/** /**
* 获取任务列表 * 获取任务列表
*/ */

View File

@@ -1,5 +1,6 @@
package com.navinfo.omqs.util package com.navinfo.omqs.util
import android.provider.ContactsContract.Data
import android.util.Log import android.util.Log
import com.navinfo.collect.library.data.entity.RenderEntity import com.navinfo.collect.library.data.entity.RenderEntity
import com.navinfo.collect.library.enums.DataCodeEnum import com.navinfo.collect.library.enums.DataCodeEnum
@@ -82,10 +83,6 @@ class SignUtil {
else -> "" else -> ""
} }
} }
//隧道
DataCodeEnum.OMDB_TUNNEL.code -> "隧道"
//环岛
DataCodeEnum.OMDB_ROUNDABOUT.code -> "环岛"
//主辅路出入口 //主辅路出入口
DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code -> "出入口" DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code -> "出入口"
//辅路 //辅路
@@ -110,10 +107,8 @@ class SignUtil {
DataCodeEnum.OMDB_LINK_FORM2_11.code -> "风景路" DataCodeEnum.OMDB_LINK_FORM2_11.code -> "风景路"
DataCodeEnum.OMDB_LINK_FORM2_12.code -> "测试路" DataCodeEnum.OMDB_LINK_FORM2_12.code -> "测试路"
DataCodeEnum.OMDB_LINK_FORM2_13.code -> "驾考路" DataCodeEnum.OMDB_LINK_FORM2_13.code -> "驾考路"
DataCodeEnum.OMDB_VIADUCT.code -> "高架" else -> ""
DataCodeEnum.OMDB_LINK_CONSTRUCTION.code -> "道路施工"
DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> "车道施工"
else -> DataCodeEnum.valueOf(data.code).tableName
} }
} }
@@ -128,38 +123,8 @@ class SignUtil {
DataCodeEnum.OMDB_RD_LINK_KIND.code -> "种别" DataCodeEnum.OMDB_RD_LINK_KIND.code -> "种别"
//道路方向 //道路方向
DataCodeEnum.OMDB_LINK_DIRECT.code -> "方向" DataCodeEnum.OMDB_LINK_DIRECT.code -> "方向"
//车道边界类型
DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code -> "车道边界类型"
//常规线限速 //常规线限速
DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code -> "线限速" DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code -> "线限速"
//全封闭
DataCodeEnum.OMDB_CON_ACCESS.code -> "全封闭" //暂时不要标题
//匝道
DataCodeEnum.OMDB_RAMP.code -> "匝道"
//车道数
DataCodeEnum.OMDB_LANE_NUM.code -> "车道数"
//常规点限速
DataCodeEnum.OMDB_SPEEDLIMIT.code -> "常规点限速"
//常点限速
DataCodeEnum.OMDB_SPEEDLIMIT_COND.code -> "条件点限速"
//可变点限速
DataCodeEnum.OMDB_SPEEDLIMIT_VAR.code -> "可变点限速"
//普通交限
DataCodeEnum.OMDB_RESTRICTION.code -> "普通交限"
//电子眼
DataCodeEnum.OMDB_ELECTRONICEYE.code -> "电子眼"
//交通灯
DataCodeEnum.OMDB_TRAFFICLIGHT.code -> "交通灯"
//车信
DataCodeEnum.OMDB_LANEINFO.code -> "车信"
//上下线分离
DataCodeEnum.OMDB_MULTI_DIGITIZED.code -> "上下线分离"
//桥
DataCodeEnum.OMDB_BRIDGE.code -> ""
//隧道
DataCodeEnum.OMDB_TUNNEL.code -> "隧道"
//环岛
DataCodeEnum.OMDB_ROUNDABOUT.code -> "环岛"
DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code, DataCodeEnum.OMDB_LINK_ATTRIBUTE_MAIN_SIDE_ACCESS.code,
DataCodeEnum.OMDB_LINK_ATTRIBUTE_FORNTAGE.code, DataCodeEnum.OMDB_LINK_ATTRIBUTE_FORNTAGE.code,
@@ -183,11 +148,7 @@ class SignUtil {
DataCodeEnum.OMDB_LINK_FORM2_12.code, DataCodeEnum.OMDB_LINK_FORM2_12.code,
DataCodeEnum.OMDB_LINK_FORM2_13.code -> "道路形态" DataCodeEnum.OMDB_LINK_FORM2_13.code -> "道路形态"
DataCodeEnum.OMDB_VIADUCT.code -> "高架" else -> DataCodeEnum.findTableNameByCode(data.code)
DataCodeEnum.OMDB_LINK_CONSTRUCTION.code -> "道路施工"
DataCodeEnum.OMDB_LANE_CONSTRUCTION.code -> "车道施工"
else -> ""
} }
} }
@@ -397,6 +358,66 @@ class SignUtil {
) )
} }
} }
//警示信息
DataCodeEnum.OMDB_WARNINGSIGN.code -> {
list.add(
TwoItemAdapterItem(
title = "linkPid", text = "${data.properties["linkPid"]}"
)
)
list.add(
TwoItemAdapterItem(
title = "警示信息号码", text = "${data.properties["warningsignId"]}"
)
)
val direct = when (data.properties["direct"]) {
"2" -> "顺方向"
"3" -> "逆方向"
else -> ""
}
list.add(
TwoItemAdapterItem(
title = "作用方向", text = direct
)
)
list.add(
TwoItemAdapterItem(
title = "标牌类型",
text = "${data.properties["typeCode"]}",
code = data.code
)
)
list.add(
TwoItemAdapterItem(
title = "有效距离", text = "${data.properties["validDis"]}"
)
)
list.add(
TwoItemAdapterItem(
title = "预告距离", text = "${data.properties["warnDis"]}"
)
)
val vehicleType = data.properties["warnDis"]
if (vehicleType != null) {
list.add(
TwoItemAdapterItem(
title = "车辆类型",
text = getElectronicEyeVehicleType(vehicleType.toInt())
)
)
}
list.add(
TwoItemAdapterItem(
title = "时间段", text = "${data.properties["validPeriod"]}"
)
)
list.add(
TwoItemAdapterItem(
title = "文字说明", text = "${data.properties["descript"]}"
)
)
}
} }
adapter.data = list adapter.data = list
return adapter return adapter
@@ -763,6 +784,13 @@ class SignUtil {
DataCodeEnum.OMDB_ELECTRONICEYE.code -> R.drawable.icon_electronic_eye DataCodeEnum.OMDB_ELECTRONICEYE.code -> R.drawable.icon_electronic_eye
//交通灯 //交通灯
DataCodeEnum.OMDB_TRAFFICLIGHT.code -> R.drawable.icon_traffic_light DataCodeEnum.OMDB_TRAFFICLIGHT.code -> R.drawable.icon_traffic_light
//警示信息
DataCodeEnum.OMDB_WARNINGSIGN.code -> {
val typeCode = data.properties["typeCode"]
if (typeCode != null)
return typeCode.toInt()
return 0
}
else -> 0 else -> 0
} }
@@ -926,9 +954,11 @@ class SignUtil {
//常规点限速 //常规点限速
DataCodeEnum.OMDB_SPEEDLIMIT.code -> getSpeedLimitMinText(element) != "0" DataCodeEnum.OMDB_SPEEDLIMIT.code -> getSpeedLimitMinText(element) != "0"
//条件点限速 //条件点限速
DataCodeEnum.OMDB_SPEEDLIMIT_COND.code -> true DataCodeEnum.OMDB_SPEEDLIMIT_COND.code,
//电子眼 //电子眼
DataCodeEnum.OMDB_ELECTRONICEYE.code -> true DataCodeEnum.OMDB_ELECTRONICEYE.code,
//警示信息
DataCodeEnum.OMDB_WARNINGSIGN.code -> true
else -> false else -> false
} }
return isMore return isMore
@@ -984,20 +1014,20 @@ class SignUtil {
) )
} }
val kindUp = when (renderEntity.properties["kindUp"]) { // val kindUp = when (renderEntity.properties["kindUp"]) {
"0" -> "未调查" // "0" -> "未调查"
"1" -> "限速电子眼" // "1" -> "限速电子眼"
"4" -> "区间测速电子眼" // "4" -> "区间测速电子眼"
"5" -> "交通信号灯电子眼" // "5" -> "交通信号灯电子眼"
"6" -> "专用车道电子眼" // "6" -> "专用车道电子眼"
"7" -> "违章电子眼" // "7" -> "违章电子眼"
"11" -> "路况监控电子眼" // "11" -> "路况监控电子眼"
"19" -> "交通标线电子眼" // "19" -> "交通标线电子眼"
"20" -> "专用功能电子眼" // "20" -> "专用功能电子眼"
else -> "" // else -> ""
} // }
list.add(TwoItemAdapterItem(title = "电子眼类型大分类", text = kindUp)) // list.add(TwoItemAdapterItem(title = "电子眼类型大分类", text = kindUp))
val kindCode = renderEntity.properties["kind"]!!.toInt() val kindCode = renderEntity.properties["kind"]!!.toInt()
list.add( list.add(

View File

@@ -251,7 +251,7 @@ class TimePeriodUtil {
} }
if (list.size > 0) if (list.size > 0)
return list[0].toText() return list[0].toText()
return "" return time
} }
private fun getPeriodObject( private fun getPeriodObject(

View File

@@ -93,6 +93,7 @@
android:layout_height="300dp" android:layout_height="300dp"
android:layout_marginTop="80dp" android:layout_marginTop="80dp"
android:minHeight="140dp" android:minHeight="140dp"
android:layout_marginBottom="40dp"
app:layout_constraintLeft_toLeftOf="@id/main_activity_top_sign_recyclerview" app:layout_constraintLeft_toLeftOf="@id/main_activity_top_sign_recyclerview"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

View File

@@ -1,21 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<com.navinfo.omqs.ui.widget.LeftDeleteView 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:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:background="@drawable/selector_adapter_item_select_bg"
tools:context="com.navinfo.omqs.ui.fragment.tasklist.TaskListAdapter"
app:deleteBtnWidth="64"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<RelativeLayout
android:id="@+id/task_item_layout" android:id="@+id/task_item_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_adapter_item_select_bg"
android:paddingLeft="8dp" android:paddingLeft="8dp"
android:paddingTop="6dp" android:paddingTop="6dp"
android:paddingRight="8dp" android:paddingRight="8dp"
android:paddingBottom="8dp" android:paddingBottom="8dp"
android:layout_width="match_parent" tools:context="com.navinfo.omqs.ui.fragment.tasklist.TaskListAdapter">
android:layout_height="match_parent">
<ImageView <ImageView
android:id="@+id/task_list_head" android:id="@+id/task_list_head"
@@ -110,26 +106,6 @@
android:layout_toLeftOf="@id/task_download_btn" android:layout_toLeftOf="@id/task_download_btn"
android:gravity="center" android:gravity="center"
android:visibility="invisible" /> android:visibility="invisible" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/task_delete_layout"
android:background="@color/red"
android:layout_width="64dp"
android:layout_height="match_parent">
<TextView
android:layout_centerVertical="true"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:enabled="false"
android:text="关闭"
android:textColor="#15141F"
android:textSize="@dimen/left_pannel_title_font" />
</RelativeLayout>
</com.navinfo.omqs.ui.widget.LeftDeleteView>

View File

@@ -41,12 +41,17 @@
app:layout_constraintRight_toRightOf="@id/task_list_search" app:layout_constraintRight_toRightOf="@id/task_list_search"
app:layout_constraintTop_toTopOf="@id/task_list_search" /> app:layout_constraintTop_toTopOf="@id/task_list_search" />
<com.yanzhenjie.recyclerview.SwipeRecyclerView <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/task_list_recyclerview" android:id="@+id/refresh_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/task_list_search" /> app:layout_constraintTop_toBottomOf="@id/task_list_search">
<com.yanzhenjie.recyclerview.SwipeRecyclerView
android:id="@+id/task_list_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -64,6 +64,7 @@ enum class DataCodeEnum(var tableName: String, var code: String) {
OMDB_SPEEDLIMIT_COND("条件点限速", "4003"), OMDB_SPEEDLIMIT_COND("条件点限速", "4003"),
OMDB_SPEEDLIMIT_VAR("可变点限速", "4004"), OMDB_SPEEDLIMIT_VAR("可变点限速", "4004"),
OMDB_RESTRICTION("普通交限", "4006"), OMDB_RESTRICTION("普通交限", "4006"),
OMDB_WARNINGSIGN("警示信息", "4009"),
OMDB_ELECTRONICEYE("电子眼", "4010"), OMDB_ELECTRONICEYE("电子眼", "4010"),
OMDB_TRAFFICLIGHT("交通灯", "4022"), OMDB_TRAFFICLIGHT("交通灯", "4022"),
OMDB_TOLLGATE("收费站", "4023"), OMDB_TOLLGATE("收费站", "4023"),
@@ -71,13 +72,13 @@ enum class DataCodeEnum(var tableName: String, var code: String) {
OMDB_LANE_LINK_LG("车道中心线", "5001"); OMDB_LANE_LINK_LG("车道中心线", "5001");
companion object { companion object {
fun findTableNameByCode(code: String): String? { fun findTableNameByCode(code: String): String {
for (enumInstance in DataCodeEnum.values()) { for (enumInstance in DataCodeEnum.values()) {
if (enumInstance.code == code) { if (enumInstance.code == code) {
return enumInstance.tableName return enumInstance.tableName
} }
} }
return null // 若未找到匹配的 code则返回 null 或其他适当的默认值 return "" // 若未找到匹配的 code则返回 null 或其他适当的默认值
} }
} }
} }

View File

@@ -0,0 +1,12 @@
package com.navinfo.collect.library.utils
import android.content.Context
import java.io.InputStream
class AssetsFileLoadUtil {
companion object {
fun loadWarningSvg(context: Context, code: String): InputStream? {
return context.assets.open("omdb/appendix/1105_${code}_0.svg")
}
}
}