Merge branch 'master' of https://gitlab.navinfo.com/CollectVehicle/OneMapQS
Conflicts: app/src/main/res/layout/fragment_evaluation_result.xml
This commit is contained in:
@@ -39,6 +39,8 @@ class MainActivity : BaseActivity() {
|
||||
private lateinit var binding: ActivityMainBinding
|
||||
private val viewModel by viewModels<MainViewModel>()
|
||||
|
||||
var switchFragment = false
|
||||
|
||||
//注入地图控制器
|
||||
@Inject
|
||||
lateinit var mapController: NIMapController
|
||||
@@ -81,6 +83,7 @@ class MainActivity : BaseActivity() {
|
||||
)
|
||||
// 在mapController初始化前获取当前OMDB图层显隐
|
||||
viewModel.refreshOMDBLayer(LayerConfigUtils.getLayerConfigList())
|
||||
mapController.mMapView.vtmMap.viewport().maxZoomLevel = 25
|
||||
//关联生命周期
|
||||
binding.lifecycleOwner = this
|
||||
//给xml转递对象
|
||||
@@ -115,9 +118,9 @@ class MainActivity : BaseActivity() {
|
||||
viewModel.liveDataMenuState.observe(this) {
|
||||
binding.mainActivityMenu.isSelected = it
|
||||
if (it == true) {
|
||||
binding.mainActivityMenuLayout.visibility = View.VISIBLE
|
||||
binding.mainActivityMenuGroup.visibility = View.VISIBLE
|
||||
} else {
|
||||
binding.mainActivityMenuLayout.visibility = View.GONE
|
||||
binding.mainActivityMenuGroup.visibility = View.INVISIBLE
|
||||
}
|
||||
|
||||
}
|
||||
@@ -225,6 +228,32 @@ class MainActivity : BaseActivity() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* zoomin
|
||||
*/
|
||||
fun zoomInOnclick(view: View) {
|
||||
mapController.animationHandler.zoomIn()
|
||||
}
|
||||
|
||||
/**
|
||||
* zoomOut
|
||||
*/
|
||||
fun zoomOutOnclick(view: View) {
|
||||
mapController.animationHandler.zoomOut()
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
fun onSwitchFragment() {
|
||||
switchFragment = !switchFragment
|
||||
binding.mainActivityFragmentSwitch.isSelected = switchFragment
|
||||
if (switchFragment) {
|
||||
binding.mainActivityFragmentGroup.visibility = View.GONE
|
||||
} else {
|
||||
binding.mainActivityFragmentGroup.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 点击录音按钮
|
||||
|
||||
@@ -34,7 +34,6 @@ import com.navinfo.collect.library.sensor.ISensor.enmConnectionStatus;
|
||||
import com.navinfo.collect.library.sensor.ISensor.SensorWorkingMode;
|
||||
import com.navinfo.collect.library.garminvirbxe.SensorParams;
|
||||
import com.navinfo.collect.library.garminvirbxe.HostBean;
|
||||
import com.navinfo.collect.library.system.VLCApplication;
|
||||
import com.navinfo.omqs.Constant;
|
||||
import com.navinfo.omqs.R;
|
||||
import com.navinfo.omqs.ui.activity.map.MainActivity;
|
||||
@@ -295,7 +294,7 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
|
||||
mOneBtConnect.setPressed(false);
|
||||
mOneBtConnect.setText("一键连接");
|
||||
mStartOrEndTakePicture.setEnabled(false);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.btn_connect_bg_enabled);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.shape_btn_connect_bg_enabled);
|
||||
updateCameraResources(1, getmDeviceNum());
|
||||
|
||||
Log.e("AAA", "未知返回");
|
||||
@@ -485,7 +484,7 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
|
||||
mShareUtil.setConnectstate(Constant.USER_ID, connectstate);
|
||||
stopVideo();
|
||||
mOneBtConnect.setPressed(true);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.btn_red_disconnect_bg);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.shape_btn_red_disconnect_bg);
|
||||
mOneBtConnect.setText("断开连接!");
|
||||
//停止获取GPS状态
|
||||
if (getmDeviceNum() == 1)
|
||||
@@ -679,7 +678,7 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
|
||||
if (connectstate) {
|
||||
mOneBtConnect.setPressed(true);
|
||||
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.btn_red_disconnect_bg);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.shape_btn_red_disconnect_bg);
|
||||
|
||||
mOneBtConnect.setText("断开连接!");
|
||||
|
||||
@@ -857,7 +856,7 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
|
||||
//停止当前活动
|
||||
takephotoManager.StopContinuousTakePhoto(mHostBean, getmDeviceNum());
|
||||
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.btn_connect_bg_enabled);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.shape_btn_connect_bg_enabled);
|
||||
|
||||
mOneBtConnect.setText("一键连接!");
|
||||
|
||||
@@ -1076,7 +1075,7 @@ public class CommonDialog extends Dialog implements SurfaceHolder.Callback, IVid
|
||||
connectstate = false;
|
||||
mShareUtil.setConnectstate(Constant.USER_ID, connectstate);
|
||||
mOneBtConnect.setPressed(false);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.btn_connect_bg_enabled);
|
||||
mOneBtConnect.setBackgroundResource(R.drawable.shape_btn_connect_bg_enabled);
|
||||
mOneBtConnect.setText("一键连接");
|
||||
//增加按钮状态控制
|
||||
mStartOrEndTakePicture.setEnabled(false);
|
||||
|
||||
@@ -23,6 +23,10 @@ import androidx.navigation.findNavController
|
||||
@AndroidEntryPoint
|
||||
class EvaluationResultFragment : BaseFragment(), View.OnClickListener {
|
||||
private lateinit var binding: FragmentEvaluationResultBinding
|
||||
|
||||
/**
|
||||
* 和[PhenomenonFragment],[ProblemLinkFragment],[EvaluationResultFragment]共用同一个viewModel
|
||||
*/
|
||||
private val viewModel by shareViewModels<EvaluationResultViewModel>("QsRecode")
|
||||
|
||||
// private val args:EmptyFragmentArgs by navArgs()
|
||||
|
||||
@@ -29,10 +29,10 @@ class LeftAdapter(private var itemListener: ((Int, String) -> Unit?)? = null) :
|
||||
val title = data[position]
|
||||
bd.itemId.text = title
|
||||
if (selectTitle == title) {
|
||||
bd.itemId.setBackgroundResource(R.drawable.drawable_bg_tittle_blue_bg_4_radius)
|
||||
bd.itemId.setBackgroundResource(R.drawable.shape_rect_white_2dp_bg)
|
||||
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.highFontColor))
|
||||
} else {
|
||||
bd.itemId.setBackgroundResource(R.drawable.drawable_bg_white_bg_4_radius)
|
||||
bd.itemId.setBackgroundResource(R.drawable.shape_rect_white_2dp_bg)
|
||||
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.black))
|
||||
}
|
||||
bd.root.setOnClickListener {
|
||||
|
||||
@@ -32,10 +32,10 @@ class MiddleAdapter(private var itemListener: ((Int, String) -> Unit?)? = null)
|
||||
layoutParams.width = 115
|
||||
bd.itemLayout.layoutParams = layoutParams
|
||||
if (selectTitle == title) {
|
||||
bd.itemId.setBackgroundResource(R.drawable.drawable_bg_blue_bg_4_radius)
|
||||
bd.itemId.setBackgroundResource(R.drawable.shape_bg_blue_bg_4_radius)
|
||||
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.white))
|
||||
} else {
|
||||
bd.itemId.setBackgroundResource(R.drawable.drawable_bg_white_bg_4_radius)
|
||||
bd.itemId.setBackgroundResource(R.drawable.shape_rect_white_2dp_bg)
|
||||
bd.itemId.setTextColor(holder.viewBinding.root.context.getColor(R.color.black))
|
||||
}
|
||||
bd.root.setOnClickListener {
|
||||
|
||||
@@ -19,6 +19,9 @@ class PhenomenonFragment :
|
||||
BaseFragment() {
|
||||
private var _binding: FragmentPhenomenonBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
/**
|
||||
* 和[PhenomenonFragment],[ProblemLinkFragment],[EvaluationResultFragment]共用同一个viewModel
|
||||
*/
|
||||
private val viewModel: EvaluationResultViewModel by shareViewModels("QsRecode")
|
||||
|
||||
override fun onCreateView(
|
||||
@@ -112,14 +115,14 @@ class PhenomenonFragment :
|
||||
viewModel.liveDataMiddleTypeList.observe(viewLifecycleOwner) {
|
||||
middleAdapter.refreshData(it)
|
||||
}
|
||||
binding.phenomenonDrawer.setOnClickListener {
|
||||
when (binding.group.visibility) {
|
||||
View.INVISIBLE, View.GONE ->
|
||||
binding.group.visibility = View.VISIBLE
|
||||
else ->
|
||||
binding.group.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
// binding.phenomenonDrawer.setOnClickListener {
|
||||
// when (binding.group.visibility) {
|
||||
// View.INVISIBLE, View.GONE ->
|
||||
// binding.group.visibility = View.VISIBLE
|
||||
// else ->
|
||||
// binding.group.visibility = View.GONE
|
||||
// }
|
||||
// }
|
||||
|
||||
viewModel.getClassTypeList()
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.navinfo.omqs.ui.fragment.evaluationresult
|
||||
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
@@ -14,6 +15,11 @@ import com.navinfo.omqs.ui.other.shareViewModels
|
||||
class ProblemLinkFragment : BaseFragment() {
|
||||
private var _binding: FragmentProblemLinkBinding? = null
|
||||
private val binding get() = _binding!!
|
||||
|
||||
/**
|
||||
* 和[PhenomenonFragment],[ProblemLinkFragment],[EvaluationResultFragment]共用同一个viewModel
|
||||
*/
|
||||
|
||||
private val viewModel: EvaluationResultViewModel by shareViewModels("QsRecode")
|
||||
|
||||
override fun onCreateView(
|
||||
@@ -40,11 +46,13 @@ class ProblemLinkFragment : BaseFragment() {
|
||||
}
|
||||
binding.linkRightRecyclerview.adapter = rightAdapter
|
||||
//右侧菜单增加组标题
|
||||
binding.linkRightRecyclerview.addItemDecoration(
|
||||
RightGroupHeaderDecoration(
|
||||
requireContext()
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
binding.linkRightRecyclerview.addItemDecoration(
|
||||
RightGroupHeaderDecoration(
|
||||
requireContext()
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
//右侧菜单查询数据监听
|
||||
viewModel.liveDataRightTypeList.observe(viewLifecycleOwner) {
|
||||
rightAdapter.refreshData(it)
|
||||
|
||||
@@ -114,7 +114,7 @@ class PersonalCenterFragment : BaseFragment(), FSAFActivityCallbacks {
|
||||
.animateTo(GeoPoint(40.1012346774074730, 116.25571303257621))
|
||||
}
|
||||
R.id.personal_center_menu_task_list -> {
|
||||
findNavController().navigate(R.id.TaskListFragment)
|
||||
findNavController().navigate(R.id.TaskManagerFragment)
|
||||
}
|
||||
R.id.personal_center_menu_qs_record_list -> {
|
||||
findNavController().navigate(R.id.QsRecordListFragment)
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.navinfo.omqs.ui.fragment.tasklist
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.ViewGroup
|
||||
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.databinding.AdapterTaskBinding
|
||||
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
|
||||
import com.navinfo.omqs.ui.other.BaseViewHolder
|
||||
|
||||
|
||||
interface TaskAdapterCallback {
|
||||
fun itemOnClick(bean: HadLinkDvoBean)
|
||||
fun editOnclick(position: Int, bean: HadLinkDvoBean)
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前任务适配器
|
||||
*/
|
||||
class TaskAdapter(
|
||||
private val callback: TaskAdapterCallback
|
||||
) : BaseRecyclerViewAdapter<HadLinkDvoBean>() {
|
||||
private var selectPosition = -1
|
||||
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
|
||||
val viewBinding =
|
||||
AdapterTaskBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
return BaseViewHolder(viewBinding)
|
||||
}
|
||||
|
||||
override fun onViewRecycled(holder: BaseViewHolder) {
|
||||
super.onViewRecycled(holder)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
|
||||
val binding: AdapterTaskBinding =
|
||||
holder.viewBinding as AdapterTaskBinding
|
||||
val bean = data[position]
|
||||
binding.taskLinkPid.text = "PID:${bean.linkPid}"
|
||||
binding.taskMesh.text = "mesh:${bean.mesh}"
|
||||
binding.root.isSelected = selectPosition == position
|
||||
binding.root.setOnClickListener {
|
||||
val pos = holder.adapterPosition
|
||||
if (selectPosition != pos) {
|
||||
val lastPos = selectPosition
|
||||
selectPosition = pos
|
||||
if (lastPos > -1 && lastPos < itemCount) {
|
||||
notifyItemChanged(lastPos)
|
||||
}
|
||||
binding.root.isSelected = true
|
||||
callback.itemOnClick(bean)
|
||||
}
|
||||
}
|
||||
binding.taskEdit.isSelected = bean.reason != ""
|
||||
binding.taskEdit.setOnClickListener {
|
||||
callback.editOnclick(position, bean)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getItemViewRes(position: Int): Int {
|
||||
return R.layout.adapter_task
|
||||
}
|
||||
|
||||
fun resetSelect() {
|
||||
selectPosition = -1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.navinfo.omqs.ui.fragment.tasklist
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.EditText
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.databinding.FragmentTaskBinding
|
||||
import com.navinfo.omqs.databinding.FragmentTaskListBinding
|
||||
import com.navinfo.omqs.http.taskdownload.TaskDownloadManager
|
||||
import com.navinfo.omqs.http.taskupload.TaskUploadManager
|
||||
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||
import com.navinfo.omqs.ui.other.shareViewModels
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* 当前任务的道路列表
|
||||
*/
|
||||
@AndroidEntryPoint
|
||||
class TaskFragment : BaseFragment() {
|
||||
|
||||
private var _binding: FragmentTaskBinding? = null
|
||||
|
||||
/**
|
||||
* 和[TaskManagerFragment],[TaskListFragment],[TaskFragment]共用同一个viewModel
|
||||
*/
|
||||
private val viewModel by shareViewModels<TaskViewModel>("Task")
|
||||
private val binding get() = _binding!!
|
||||
private val adapter: TaskAdapter by lazy {
|
||||
TaskAdapter(object : TaskAdapterCallback {
|
||||
override fun itemOnClick(bean: HadLinkDvoBean) {
|
||||
viewModel.showCurrentLink(bean)
|
||||
}
|
||||
|
||||
override fun editOnclick(position: Int, bean: HadLinkDvoBean) {
|
||||
showLinkEditDialog(position, bean)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentTaskBinding.inflate(inflater, container, false)
|
||||
return binding.root
|
||||
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val layoutManager = LinearLayoutManager(context)
|
||||
//// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能
|
||||
binding.taskRecyclerview.setHasFixedSize(true)
|
||||
binding.taskRecyclerview.layoutManager = layoutManager
|
||||
binding.taskRecyclerview.adapter = adapter
|
||||
viewModel.liveDataTaskLinks.observe(viewLifecycleOwner) {
|
||||
adapter.resetSelect()
|
||||
adapter.refreshData(it)
|
||||
}
|
||||
viewModel.getTaskList(requireContext())
|
||||
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示link编辑dialog
|
||||
*/
|
||||
private fun showLinkEditDialog(position: Int, bean: HadLinkDvoBean) {
|
||||
val view = this.layoutInflater.inflate(R.layout.dialog_view_edittext, null)
|
||||
val inputDialog = MaterialAlertDialogBuilder(
|
||||
requireContext()
|
||||
).setTitle("标记原因").setView(view)
|
||||
var editText = view.findViewById<EditText>(R.id.dialog_edittext)
|
||||
editText.setText(bean.reason)
|
||||
inputDialog.setNegativeButton("取消") { dialog, _ ->
|
||||
dialog.dismiss()
|
||||
}
|
||||
inputDialog.setPositiveButton("确定") { dialog, _ ->
|
||||
lifecycleScope.launch {
|
||||
val text = editText.text.toString()
|
||||
viewModel.saveLinkReason(bean, text)
|
||||
adapter.notifyItemChanged(position)
|
||||
dialog.dismiss()
|
||||
}
|
||||
|
||||
}
|
||||
inputDialog.show()
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,8 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.lifecycle.Observer
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.collect.library.data.entity.TaskBean
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.databinding.AdapterTaskListBinding
|
||||
import com.navinfo.omqs.http.taskdownload.TaskDownloadManager
|
||||
import com.navinfo.omqs.http.taskupload.TaskUploadManager
|
||||
@@ -25,11 +25,13 @@ import com.navinfo.omqs.ui.other.BaseViewHolder
|
||||
*/
|
||||
class TaskListAdapter(
|
||||
private val downloadManager: TaskDownloadManager,
|
||||
private val uploadManager: TaskUploadManager
|
||||
private val uploadManager: TaskUploadManager,
|
||||
private var itemListener: ((Int, TaskBean) -> Unit?)? = null
|
||||
) : BaseRecyclerViewAdapter<TaskBean>() {
|
||||
private var selectPosition = -1
|
||||
|
||||
|
||||
private val downloadBtnClick = View.OnClickListener() {
|
||||
private
|
||||
val downloadBtnClick = View.OnClickListener() {
|
||||
if (it.tag != null) {
|
||||
val taskBean = data[it.tag as Int]
|
||||
when (taskBean.status) {
|
||||
@@ -53,7 +55,7 @@ class TaskListAdapter(
|
||||
val taskBean = data[it.tag as Int]
|
||||
Log.e("jingo", "开始上传 ${taskBean.syncStatus}")
|
||||
when (taskBean.syncStatus) {
|
||||
FileUploadStatus.NONE, FileUploadStatus.ERROR,FileUploadStatus.WAITING -> {
|
||||
FileUploadStatus.NONE, FileUploadStatus.ERROR, FileUploadStatus.WAITING -> {
|
||||
uploadManager.start(taskBean.id)
|
||||
}
|
||||
}
|
||||
@@ -80,7 +82,7 @@ class TaskListAdapter(
|
||||
holder.tag = taskBean.id.toString()
|
||||
changeViews(binding, taskBean)
|
||||
downloadManager.addTask(taskBean)
|
||||
downloadManager.observer(taskBean.id, holder, DownloadObserver(taskBean.id, binding))
|
||||
downloadManager.observer(taskBean.id, holder, DownloadObserver(taskBean.id, holder))
|
||||
uploadManager.addTask(taskBean)
|
||||
uploadManager.observer(taskBean.id, holder, UploadObserver(taskBean.id, binding))
|
||||
binding.taskDownloadBtn.tag = position
|
||||
@@ -91,14 +93,32 @@ class TaskListAdapter(
|
||||
binding.taskCityName.text = taskBean.cityName
|
||||
binding.taskDataVersion.text = "版本号:${taskBean.dataVersion}"
|
||||
binding.taskColor.setTextColor(taskBean.color)
|
||||
// binding.offlineMapCitySize.text = cityBean.getFileSizeText()
|
||||
binding.root.isSelected = selectPosition == position
|
||||
binding.root.setOnClickListener {
|
||||
val pos = holder.adapterPosition
|
||||
if (selectPosition != pos) {
|
||||
val lastPos = selectPosition
|
||||
selectPosition = pos
|
||||
if (lastPos > -1) {
|
||||
notifyItemChanged(lastPos)
|
||||
}
|
||||
binding.root.isSelected = true
|
||||
itemListener?.invoke(position, taskBean)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
inner class DownloadObserver(val id: Int, val binding: AdapterTaskListBinding) :
|
||||
inner class DownloadObserver(val id: Int, val holder: BaseViewHolder) :
|
||||
Observer<TaskBean> {
|
||||
override fun onChanged(t: TaskBean?) {
|
||||
if (id == t?.id)
|
||||
changeViews(binding, t)
|
||||
override fun onChanged(taskBean: TaskBean?) {
|
||||
taskBean?.let { bean ->
|
||||
if (id.toString() == holder.tag) {
|
||||
val binding: AdapterTaskListBinding =
|
||||
holder.viewBinding as AdapterTaskListBinding
|
||||
changeViews(binding, bean)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,22 +11,31 @@ import com.navinfo.omqs.databinding.FragmentTaskListBinding
|
||||
import com.navinfo.omqs.http.taskdownload.TaskDownloadManager
|
||||
import com.navinfo.omqs.http.taskupload.TaskUploadManager
|
||||
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||
import com.navinfo.omqs.ui.other.shareViewModels
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import javax.inject.Inject
|
||||
|
||||
@AndroidEntryPoint
|
||||
class TaskListFragment : BaseFragment(){
|
||||
class TaskListFragment : BaseFragment() {
|
||||
|
||||
@Inject
|
||||
lateinit var downloadManager: TaskDownloadManager
|
||||
|
||||
@Inject
|
||||
lateinit var uploadManager: TaskUploadManager
|
||||
private var _binding: FragmentTaskListBinding? = null
|
||||
private val viewModel by viewModels<TaskListViewModel>()
|
||||
|
||||
/**
|
||||
* 和[TaskManagerFragment],[TaskListFragment],[TaskFragment]共用同一个viewModel
|
||||
*/
|
||||
private val viewModel by shareViewModels<TaskViewModel>("Task")
|
||||
private val binding get() = _binding!!
|
||||
private val adapter: TaskListAdapter by lazy {
|
||||
TaskListAdapter(
|
||||
downloadManager,uploadManager
|
||||
)
|
||||
downloadManager, uploadManager
|
||||
) { position, taskBean ->
|
||||
viewModel.setSelectTaskBean(taskBean)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
@@ -44,16 +53,13 @@ class TaskListFragment : BaseFragment(){
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val layoutManager = LinearLayoutManager(context)
|
||||
//// 设置 RecyclerView 的固定大小,避免在滚动时重新计算视图大小和布局,提高性能
|
||||
binding.taskRecyclerview.setHasFixedSize(true)
|
||||
binding.taskRecyclerview.layoutManager = layoutManager
|
||||
binding.taskRecyclerview.adapter = adapter
|
||||
binding.taskListRecyclerview.setHasFixedSize(true)
|
||||
binding.taskListRecyclerview.layoutManager = layoutManager
|
||||
binding.taskListRecyclerview.adapter = adapter
|
||||
viewModel.liveDataTaskList.observe(viewLifecycleOwner) {
|
||||
adapter.refreshData(it)
|
||||
}
|
||||
viewModel.getTaskList(requireContext())
|
||||
binding.taskBack.setOnClickListener{
|
||||
findNavController().navigateUp()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.navinfo.omqs.ui.fragment.tasklist
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
import androidx.viewpager2.adapter.FragmentStateAdapter
|
||||
|
||||
/**
|
||||
* 离线地图主页面,viewpage适配器
|
||||
*/
|
||||
class TaskManagerAdapter(activity: FragmentActivity) :
|
||||
FragmentStateAdapter(activity) {
|
||||
private val taskListFragment = TaskListFragment()
|
||||
private val taskFragment = TaskFragment()
|
||||
override fun getItemCount(): Int {
|
||||
return 2
|
||||
}
|
||||
|
||||
override fun createFragment(position: Int): Fragment {
|
||||
return when (position) {
|
||||
0 -> taskFragment
|
||||
else ->
|
||||
taskListFragment
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.navinfo.omqs.ui.fragment.tasklist
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import com.navinfo.omqs.databinding.FragmentTaskManagerBinding
|
||||
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||
import com.navinfo.omqs.ui.other.shareViewModels
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
||||
/**
|
||||
* 评测任务viewpager管理页面
|
||||
*/
|
||||
@AndroidEntryPoint
|
||||
class TaskManagerFragment : BaseFragment() {
|
||||
private var _binding: FragmentTaskManagerBinding? = null
|
||||
|
||||
private val binding get() = _binding!!
|
||||
|
||||
/**
|
||||
* 和[TaskManagerFragment],[TaskListFragment],[TaskFragment]共用同一个viewModel
|
||||
*/
|
||||
private val viewModel by shareViewModels<TaskViewModel>("Task")
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentTaskManagerBinding.inflate(inflater, container, false)
|
||||
return binding.root
|
||||
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
//禁止滑动,因为页面在抽屉里,和抽屉的滑动有冲突
|
||||
binding.taskManagerViewpager.isUserInputEnabled = false
|
||||
//创建viewpager2的适配器
|
||||
binding.taskManagerViewpager.adapter = activity?.let { TaskManagerAdapter(it) }
|
||||
//绑定viewpager2与tabLayout
|
||||
TabLayoutMediator(
|
||||
binding.taskManagerTabLayout,
|
||||
binding.taskManagerViewpager
|
||||
) { tab, position ->
|
||||
when (position) {
|
||||
0 -> tab.text = "当前任务"
|
||||
1 -> tab.text = "任务列表"
|
||||
}
|
||||
}.attach()
|
||||
viewModel.getTaskList(requireContext())
|
||||
binding.taskBack.setOnClickListener {
|
||||
findNavController().navigateUp()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
}
|
||||
@@ -3,14 +3,15 @@ package com.navinfo.omqs.ui.fragment.tasklist
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.os.Build
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.navinfo.collect.library.map.NIMapController
|
||||
import com.navinfo.omqs.Constant
|
||||
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
|
||||
import com.navinfo.collect.library.data.entity.TaskBean
|
||||
import com.navinfo.collect.library.map.NIMapController
|
||||
import com.navinfo.collect.library.utils.GeometryTools
|
||||
import com.navinfo.omqs.Constant
|
||||
import com.navinfo.omqs.http.NetResult
|
||||
import com.navinfo.omqs.http.NetworkService
|
||||
import com.navinfo.omqs.tools.FileManager
|
||||
@@ -24,16 +25,29 @@ import javax.inject.Inject
|
||||
|
||||
|
||||
@HiltViewModel
|
||||
class TaskListViewModel @Inject constructor(
|
||||
class TaskViewModel @Inject constructor(
|
||||
private val networkService: NetworkService,
|
||||
private val mapController: NIMapController
|
||||
) : ViewModel() {
|
||||
|
||||
/**
|
||||
* 用来更新任务列表
|
||||
*/
|
||||
val liveDataTaskList = MutableLiveData<List<TaskBean>>()
|
||||
|
||||
val colors =
|
||||
/**
|
||||
* 用来更新当前任务
|
||||
*/
|
||||
val liveDataTaskLinks = MutableLiveData<List<HadLinkDvoBean>>()
|
||||
private val colors =
|
||||
arrayOf(Color.RED, Color.YELLOW, Color.BLUE, Color.MAGENTA, Color.GREEN, Color.CYAN)
|
||||
|
||||
/**
|
||||
* 当前选中的任务
|
||||
*/
|
||||
private var currentSelectTaskBean: TaskBean? = null
|
||||
|
||||
|
||||
/**
|
||||
* 下载任务列表
|
||||
*/
|
||||
@@ -54,7 +68,6 @@ class TaskListViewModel @Inject constructor(
|
||||
).findFirst()
|
||||
if (item != null) {
|
||||
task.fileSize = item.fileSize
|
||||
Log.e("jingo", "当前文件大小 ${task.fileSize}")
|
||||
task.status = item.status
|
||||
task.currentSize = item.currentSize
|
||||
task.color = item.color
|
||||
@@ -106,12 +119,94 @@ class TaskListViewModel @Inject constructor(
|
||||
// }
|
||||
// niMapController.lineHandler.omdbTaskLinkLayer.update()
|
||||
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)
|
||||
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
// mapController.lineHandler.omdbTaskLinkLayer.removeAll()
|
||||
// if(taskList.isNotEmpty()){
|
||||
// mapController.lineHandler.omdbTaskLinkLayer.addLineList(item.hadLinkDvoList)
|
||||
// }
|
||||
// for (item in taskList) {
|
||||
// mapController.lineHandler.omdbTaskLinkLayer.setLineColor(Color.valueOf(item.color))
|
||||
//
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前选择的任务,并高亮当前任务的所有link
|
||||
*/
|
||||
fun setSelectTaskBean(taskBean: TaskBean) {
|
||||
currentSelectTaskBean = taskBean
|
||||
liveDataTaskLinks.value = taskBean.hadLinkDvoList
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
mapController.lineHandler.omdbTaskLinkLayer.removeAll()
|
||||
mapController.lineHandler.omdbTaskLinkLayer.addLineList(taskBean.hadLinkDvoList)
|
||||
var maxX = 0.0
|
||||
var maxY = 0.0
|
||||
var minX = 0.0
|
||||
var minY = 0.0
|
||||
for (item in taskBean.hadLinkDvoList) {
|
||||
val geometry = GeometryTools.createGeometry(item.geometry)
|
||||
val envelope = geometry.envelopeInternal
|
||||
if (envelope.maxX > maxX) {
|
||||
maxX = envelope.maxX
|
||||
}
|
||||
if (envelope.maxY > maxY) {
|
||||
maxY = envelope.maxY
|
||||
}
|
||||
if (envelope.minX < minX || minX == 0.0) {
|
||||
minX = envelope.minX
|
||||
}
|
||||
if (envelope.minY < minY || minY == 0.0) {
|
||||
minY = envelope.minY
|
||||
}
|
||||
}
|
||||
mapController.animationHandler.animateToBox(
|
||||
maxX = maxX,
|
||||
maxY = maxY,
|
||||
minX = minX,
|
||||
minY = minY
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 高亮当前选中的link
|
||||
*/
|
||||
fun showCurrentLink(link: HadLinkDvoBean) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
mapController.lineHandler.omdbTaskLinkLayer.showSelectLine(link)
|
||||
val geometry = GeometryTools.createGeometry(link.geometry)
|
||||
val envelope = geometry.envelopeInternal
|
||||
mapController.animationHandler.animateToBox(
|
||||
maxX = envelope.maxX,
|
||||
maxY = envelope.maxY,
|
||||
minX = envelope.minX,
|
||||
minY = envelope.minY
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
mapController.lineHandler.omdbTaskLinkLayer.clearSelectLine()
|
||||
}
|
||||
super.onCleared()
|
||||
}
|
||||
|
||||
|
||||
suspend fun saveLinkReason(bean: HadLinkDvoBean, text: String) {
|
||||
withContext(Dispatchers.IO) {
|
||||
currentSelectTaskBean?.let {
|
||||
for (item in it.hadLinkDvoList) {
|
||||
if (item.linkPid == bean.linkPid) {
|
||||
item.reason = text
|
||||
}
|
||||
}
|
||||
}
|
||||
val realm = Realm.getDefaultInstance()
|
||||
realm.executeTransaction {
|
||||
realm.copyToRealmOrUpdate(currentSelectTaskBean)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -63,13 +63,13 @@ class SignUtil {
|
||||
try {
|
||||
//限速标志 0 限速开始 1 限速解除
|
||||
return when (data.properties["speed_flag"]) {
|
||||
"1" -> return R.drawable.icon_speed_limit_off
|
||||
else -> return R.drawable.icon_speed_limit
|
||||
"1" -> return R.drawable.shape_icon_speed_limit_off
|
||||
else -> return R.drawable.shape_icon_speed_limit
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("jingo", "获取限速面板ICON出错2 $e")
|
||||
}
|
||||
return R.drawable.icon_speed_limit
|
||||
return R.drawable.shape_icon_speed_limit
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -86,7 +86,7 @@ class SignUtil {
|
||||
2041 -> getLaneNumIcon(data)
|
||||
//限速
|
||||
4002 -> getSpeedLimitIcon(data)
|
||||
else -> R.drawable.icon_speed_limit
|
||||
else -> R.drawable.shape_icon_speed_limit
|
||||
}
|
||||
|
||||
}
|
||||
@@ -99,24 +99,24 @@ class SignUtil {
|
||||
try {
|
||||
val kind = data.properties["kind"]
|
||||
return when (kind!!.toInt()) {
|
||||
1 -> R.mipmap.icon_kind_code_k1
|
||||
2 -> R.mipmap.icon_kind_code_k2
|
||||
3 -> R.mipmap.icon_kind_code_k3
|
||||
4 -> R.mipmap.icon_kind_code_k4
|
||||
6 -> R.mipmap.icon_kind_code_k6
|
||||
7 -> R.mipmap.icon_kind_code_k7
|
||||
8 -> R.mipmap.icon_kind_code_k8
|
||||
9 -> R.mipmap.icon_kind_code_k9
|
||||
10 -> R.mipmap.icon_kind_code_k10
|
||||
11 -> R.mipmap.icon_kind_code_k11
|
||||
13 -> R.mipmap.icon_kind_code_k13
|
||||
15 -> R.mipmap.icon_kind_code_k15
|
||||
else -> R.mipmap.icon_kind_code
|
||||
1 -> R.drawable.icon_kind_code_k1
|
||||
2 -> R.drawable.icon_kind_code_k2
|
||||
3 -> R.drawable.icon_kind_code_k3
|
||||
4 -> R.drawable.icon_kind_code_k4
|
||||
6 -> R.drawable.icon_kind_code_k6
|
||||
7 -> R.drawable.icon_kind_code_k7
|
||||
8 -> R.drawable.icon_kind_code_k8
|
||||
9 -> R.drawable.icon_kind_code_k9
|
||||
10 -> R.drawable.icon_kind_code_k10
|
||||
11 -> R.drawable.icon_kind_code_k11
|
||||
13 -> R.drawable.icon_kind_code_k13
|
||||
15 -> R.drawable.icon_kind_code_k15
|
||||
else -> R.drawable.icon_kind_code
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("jingo", "获取种别面板ICON出错 $e")
|
||||
}
|
||||
return R.mipmap.icon_kind_code
|
||||
return R.drawable.icon_kind_code
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -126,41 +126,41 @@ class SignUtil {
|
||||
try {
|
||||
val lineNum = data.properties["laneNum"]
|
||||
return when (lineNum!!.toInt()) {
|
||||
1 -> R.mipmap.icon_lane_num1
|
||||
2 -> R.mipmap.icon_lane_num2
|
||||
3 -> R.mipmap.icon_lane_num3
|
||||
4 -> R.mipmap.icon_lane_num4
|
||||
5 -> R.mipmap.icon_lane_num5
|
||||
6 -> R.mipmap.icon_lane_num6
|
||||
7 -> R.mipmap.icon_lane_num7
|
||||
8 -> R.mipmap.icon_lane_num8
|
||||
9 -> R.mipmap.icon_lane_num9
|
||||
10 -> R.mipmap.icon_lane_num10
|
||||
11 -> R.mipmap.icon_lane_num11
|
||||
12 -> R.mipmap.icon_lane_num12
|
||||
else -> R.mipmap.icon_lane_num1
|
||||
1 -> R.drawable.icon_lane_num1
|
||||
2 -> R.drawable.icon_lane_num2
|
||||
3 -> R.drawable.icon_lane_num3
|
||||
4 -> R.drawable.icon_lane_num4
|
||||
5 -> R.drawable.icon_lane_num5
|
||||
6 -> R.drawable.icon_lane_num6
|
||||
7 -> R.drawable.icon_lane_num7
|
||||
8 -> R.drawable.icon_lane_num8
|
||||
9 -> R.drawable.icon_lane_num9
|
||||
10 -> R.drawable.icon_lane_num10
|
||||
11 -> R.drawable.icon_lane_num11
|
||||
12 -> R.drawable.icon_lane_num12
|
||||
else -> R.drawable.icon_lane_num1
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("jingo", "获取车道数面板ICON出错 $e")
|
||||
}
|
||||
return R.mipmap.icon_road_direction
|
||||
return R.drawable.icon_road_direction
|
||||
}
|
||||
|
||||
fun getRoadDirection(data: RenderEntity): Int {
|
||||
try {
|
||||
val direct = data.properties["direct"]
|
||||
return when (direct!!.toInt()) {
|
||||
0 -> R.mipmap.icon_road_direction
|
||||
1 -> R.mipmap.icon_road_direction
|
||||
2 -> R.mipmap.icon_road_direction
|
||||
3 -> R.mipmap.icon_road_direction
|
||||
-99 -> R.mipmap.icon_road_direction
|
||||
else -> R.mipmap.icon_road_direction
|
||||
0 -> R.drawable.icon_road_direction
|
||||
1 -> R.drawable.icon_road_direction
|
||||
2 -> R.drawable.icon_road_direction
|
||||
3 -> R.drawable.icon_road_direction
|
||||
-99 -> R.drawable.icon_road_direction
|
||||
else -> R.drawable.icon_road_direction
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("jingo", "获取道路方向面板ICON出错 $e")
|
||||
}
|
||||
return R.mipmap.icon_road_direction
|
||||
return R.drawable.icon_road_direction
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user