fix: 合并代码

This commit is contained in:
2023-05-22 10:18:13 +08:00
235 changed files with 1876 additions and 1576 deletions

View File

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

View File

@@ -1,6 +1,5 @@
package com.navinfo.omqs.hilt
import android.content.Context
import com.navinfo.collect.library.map.NIMapController
import com.navinfo.omqs.db.RealmOperateHelper
import com.navinfo.omqs.db.RoomAppDatabase
@@ -12,7 +11,6 @@ import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityRetainedComponent
import dagger.hilt.android.qualifiers.ActivityContext
import dagger.hilt.android.scopes.ActivityRetainedScoped
@InstallIn(ActivityRetainedComponent::class)

View File

@@ -50,13 +50,13 @@ interface RetrofitNetworkServiceAPI {
@Url url: String
): Response<ResponseBody>
@GET("/devcp/task?evaluatType=2")
@GET("/devcp/getEvaluationTask?evaluatType=2")
suspend fun retrofitGetTaskList(
@Query("evaluatorNo") evaluatorNo: String,
): Response<DefaultTaskResponse<List<TaskBean>>>
@Headers("Content-Type: application/json")
@POST("/devcp/upload")
@POST("/devcp/uploadSceneProblem")
suspend fun postRequest(@Body listEvaluationInfo: List<EvaluationInfo>?): Response<ResponseBody>
/**

View File

@@ -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
@@ -116,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
}
}
@@ -226,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
}
}
/**
* 点击录音按钮

View File

@@ -216,6 +216,7 @@ class MainViewModel @Inject constructor(
linkId = linkId,
geometry = element.geometry,
bottomText = SignUtil.getSignBottomText(element),
bottomRightText = SignUtil.getSignBottomRightText(element),
elementCode = element.code
)
)

View File

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

View File

@@ -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);

View File

@@ -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()

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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()
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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
}
}

View File

@@ -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()
}
}

View File

@@ -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)
}
}
}
}

View File

@@ -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() {

View File

@@ -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
}
}
}

View File

@@ -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
}
}

View File

@@ -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)
}
}
}

View File

@@ -12,8 +12,8 @@ class SignUtil {
*/
fun getSignIconText(data: RenderEntity): String {
return when (data.code) {
//常规点限速
4002 -> getSpeedLimitText(data)
//常规点限速,条件点限速
4002, 4003 -> getSpeedLimitText(data)
// //道路种别
// 2008 -> getKindCodeIcon(data)
// //道路方向
@@ -26,8 +26,12 @@ class SignUtil {
fun getSignBottomText(data: RenderEntity): String {
return when (data.code) {
//可变点限速
4004 -> "可变点限速"
//常规点限速
4002 -> "常规点限速"
//常点限速
4003 -> "条件点限速"
//道路种别
2008 -> "道路种别"
//道路方向
@@ -38,6 +42,64 @@ class SignUtil {
}
}
/**
* 右下角文字
*/
fun getSignBottomRightText(data: RenderEntity): String {
return when (data.code) {
//常点限速
4003 -> getConditionLimitText(data)
else -> ""
}
}
/**
* 条件点限速文字
*/
fun getConditionLimitText(data: RenderEntity): String {
var stringBuffer = StringBuffer()
try {
val dependent = data.properties["speedDependent"]
dependent?.let {
val dependentInt = it.toInt()
for (i in 31 downTo 0) {
val bit = (dependentInt shr i) and 1
if (bit == 1) {
when (i) {
0 -> stringBuffer.append("学校 ")
1 -> stringBuffer.append("")
2 -> stringBuffer.append("")
3 -> stringBuffer.append("结冰 ")
4 -> stringBuffer.append("其他天气 ")
5 -> stringBuffer.append("减速带 ")
6 -> stringBuffer.append("时间 ")
7 -> stringBuffer.append("车辆 ")
8 -> stringBuffer.append("建议 ")
9 -> stringBuffer.append("")
10 -> stringBuffer.append("其他 ")
}
}
}
}
} catch (e: Exception) {
}
return stringBuffer.toString()
}
private fun isBitSet(number: Int, n: Int): Boolean {
// 创建一个二进制数,只有第 n 个 bit 位是 1其他 bit 位是 0
val mask = 1 shl (n - 1)
// 将原始二进制数与上面创建的二进制数进行位运算
val result = number and mask
// 判断运算结果是否为 0
return result != 0
}
/**
* 获取限速值文字
*/
@@ -85,7 +147,9 @@ class SignUtil {
//车道数
2041 -> getLaneNumIcon(data)
//限速
4002 -> getSpeedLimitIcon(data)
4002, 4003 -> getSpeedLimitIcon(data)
//可变点限速
4004 -> R.drawable.icon_change_limit
else -> R.drawable.icon_speed_limit
}
@@ -99,24 +163,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 +190,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
}
}
}