diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 93cb795b..30aef395 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -37,52 +37,49 @@ class RealmOperateHelper() { sort: Boolean = true ): MutableList { val result = mutableListOf() - withContext(Dispatchers.IO) { - val polygon = getPolygonFromPoint( - GeometryTools.createPoint(point.longitude, point.latitude), - buffer, - bufferType - ) - // 根据polygon查询相交的tile号 - val tileXSet = mutableSetOf() - tileXSet.toString() - GeometryToolsKt.getTileXByGeometry(polygon.toString(), tileXSet) - val tileYSet = mutableSetOf() - GeometryToolsKt.getTileYByGeometry(polygon.toString(), tileYSet) + val polygon = getPolygonFromPoint( + GeometryTools.createPoint(point.longitude, point.latitude), + buffer, + bufferType + ) + // 根据polygon查询相交的tile号 + val tileXSet = mutableSetOf() + tileXSet.toString() + GeometryToolsKt.getTileXByGeometry(polygon.toString(), tileXSet) + val tileYSet = mutableSetOf() + GeometryToolsKt.getTileYByGeometry(polygon.toString(), tileYSet) - // 对tileXSet和tileYSet查询最大最小值 - val xStart = tileXSet.stream().min(Comparator.naturalOrder()).orElse(null) - val xEnd = tileXSet.stream().max(Comparator.naturalOrder()).orElse(null) - val yStart = tileYSet.stream().min(Comparator.naturalOrder()).orElse(null) - val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null) - // 查询realm中对应tile号的数据 - val realm = Realm.getDefaultInstance() - val realmList = realm.where(RenderEntity::class.java) - .equalTo("table", "OMDB_RD_LINK") - .and() - .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd") - .findAll() - // 将获取到的数据和查询的polygon做相交,只返回相交的数据 - val dataList = realm.copyFromRealm(realmList) - val queryResult = dataList?.stream()?.filter { - polygon.intersects(it.wkt) - }?.toList() + // 对tileXSet和tileYSet查询最大最小值 + val xStart = tileXSet.stream().min(Comparator.naturalOrder()).orElse(null) + val xEnd = tileXSet.stream().max(Comparator.naturalOrder()).orElse(null) + val yStart = tileYSet.stream().min(Comparator.naturalOrder()).orElse(null) + val yEnd = tileYSet.stream().max(Comparator.naturalOrder()).orElse(null) + // 查询realm中对应tile号的数据 + val realm = Realm.getDefaultInstance() + val realmList = realm.where(RenderEntity::class.java) + .equalTo("table", "OMDB_RD_LINK") + .and() + .rawPredicate("tileX>=$xStart and tileX<=$xEnd and tileY>=$yStart and tileY<=$yEnd") + .findAll() + // 将获取到的数据和查询的polygon做相交,只返回相交的数据 + val dataList = realm.copyFromRealm(realmList) + val queryResult = dataList?.stream()?.filter { + polygon.intersects(it.wkt) + }?.toList() - queryResult?.let { - if (sort) { - result.addAll( - sortRenderEntity( - GeometryTools.createPoint( - point.longitude, - point.latitude - ) , it - ) + queryResult?.let { + if (sort) { + result.addAll( + sortRenderEntity( + GeometryTools.createPoint( + point.longitude, + point.latitude + ), it ) - } else { - result.addAll(it) - } + ) + } else { + result.addAll(it) } - } return result } @@ -163,15 +160,13 @@ class RealmOperateHelper() { * */ suspend fun queryLinkByLinkPid(linkPid: String): MutableList { val result = mutableListOf() - withContext(Dispatchers.IO) { - val realm = Realm.getDefaultInstance() - val realmList = realm.where(RenderEntity::class.java) - .notEqualTo("table", "OMDB_RD_LINK") - .and() - .equalTo("properties['${LinkTable.linkPid}']", linkPid) - .findAll() - result.addAll(realm.copyFromRealm(realmList)) - } + val realm = Realm.getDefaultInstance() + val realmList = realm.where(RenderEntity::class.java) + .notEqualTo("table", "OMDB_RD_LINK") + .and() + .equalTo("properties['${LinkTable.linkPid}']", linkPid) + .findAll() + result.addAll(realm.copyFromRealm(realmList)) return result } diff --git a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt index d4f226c3..caa5ecd2 100644 --- a/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt +++ b/app/src/main/java/com/navinfo/omqs/http/taskdownload/TaskDownloadScope.kt @@ -44,7 +44,7 @@ class TaskDownloadScope( //改进的代码 fun start() { - launch{ + launch { change(FileDownloadStatus.WAITING) } downloadManager.launchScope(this@TaskDownloadScope) @@ -56,7 +56,7 @@ class TaskDownloadScope( */ fun pause() { downloadJob?.cancel("pause") - launch{ + launch { change(FileDownloadStatus.PAUSE) } @@ -141,7 +141,7 @@ class TaskDownloadScope( } catch (e: Exception) { Log.e("jingo", "数据安装失败 ${e.toString()}") change(FileDownloadStatus.ERROR) - }finally { + } finally { } @@ -167,8 +167,12 @@ class TaskDownloadScope( val fileTemp = File("${Constant.DOWNLOAD_PATH}${taskBean.evaluationTaskName}_${taskBean.dataVersion}.zip") - val startPosition = taskBean.currentSize - + var startPosition = taskBean.currentSize + if (fileTemp.length() > taskBean.fileSize && taskBean.fileSize > 0) { + fileTemp.delete() + fileTemp.createNewFile() + startPosition = 0 + } if (fileTemp.length() > 0 && taskBean.fileSize > 0 && fileTemp.length() == taskBean.fileSize) { importData(fileTemp) return diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt index 9823311c..a1314579 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/BaseActivity.kt @@ -1,9 +1,7 @@ package com.navinfo.omqs.ui.activity -import android.app.Dialog import android.content.pm.ActivityInfo import android.os.Bundle -import android.os.PersistableBundle import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import com.google.android.material.R diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 593d9b5b..cc45b163 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -23,6 +23,7 @@ import androidx.navigation.findNavController import com.blankj.utilcode.util.ToastUtils import com.navinfo.collect.library.data.dao.impl.TraceDataBase import com.navinfo.collect.library.data.entity.RenderEntity +import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.collect.library.map.NIMapController import com.navinfo.collect.library.map.handler.OnQsRecordItemClickListener import com.navinfo.collect.library.utils.GeometryTools @@ -31,7 +32,6 @@ import com.navinfo.omqs.Constant import com.navinfo.omqs.R import com.navinfo.omqs.bean.ImportConfig import com.navinfo.omqs.bean.SignBean -import com.navinfo.collect.library.data.entity.TaskBean import com.navinfo.omqs.db.RealmOperateHelper import com.navinfo.omqs.ui.dialog.CommonDialog import com.navinfo.omqs.ui.manager.TakePhotoManager @@ -115,7 +115,7 @@ class MainViewModel @Inject constructor( }) initLocation() //处理地图点击操作 - viewModelScope.launch { + viewModelScope.launch(Dispatchers.Default) { mapController.onMapClickFlow.collectLatest { // testPoint = it //线选择状态 @@ -146,9 +146,9 @@ class MainViewModel @Inject constructor( } mapController.lineHandler.omdbTaskLinkLayer.removeAll() for (item in list) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - mapController.lineHandler.omdbTaskLinkLayer.setLineColor(Color.valueOf(item.color)) - } +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// mapController.lineHandler.omdbTaskLinkLayer.setLineColor(Color.valueOf(item.color)) +// } mapController.lineHandler.omdbTaskLinkLayer.addLineList(item.hadLinkDvoList) } } @@ -213,10 +213,11 @@ class MainViewModel @Inject constructor( //看板数据 val signList = mutableListOf() val topSignList = mutableListOf() - + mapController.lineHandler.linksLayer.clear() if (linkList.isNotEmpty()) { val link = linkList[0] val linkId = link.properties[RenderEntity.Companion.LinkTable.linkPid] + Log.e("jingo", "捕捉到的linkid $linkId ${link.geometry}") mapController.lineHandler.showLine(link.geometry) linkId?.let { var elementList = realmOperateHelper.queryLinkByLinkPid(it) @@ -244,19 +245,37 @@ class MainViewModel @Inject constructor( 4002, 4003, 4004, 4022 -> signList.add( signBean ) - 4006 -> { - mapController.lineHandler.linksLayer.clear() - val inLink = element.properties["linkIn"] - val outLink = element.properties["linkOut"] - if (inLink != null){ - - } - } } } + val realm = Realm.getDefaultInstance() + val entity = realm.where(RenderEntity::class.java) + .equalTo("table", "OMDB_RESTRICTION") + .and() + .equalTo( + "properties['linkIn']", + it + ).findFirst() + if (entity != null) { + val outLink = entity.properties["linkOut"] + val linkOutEntity = realm.where(RenderEntity::class.java) + .equalTo("table", "OMDB_RD_LINK") + .and() + .equalTo( + "properties['${RenderEntity.Companion.LinkTable.linkPid}']", + outLink + ).findFirst() + if (linkOutEntity != null) { + mapController.lineHandler.linksLayer.addLine( + linkOutEntity.geometry, + 0x7DFF0000 + ) + Log.e("jingo", "捕捉到的linkid $outLink ${linkOutEntity.geometry}") + } + } } + } liveDataTopSignList.postValue(topSignList.distinctBy { it.elementCode }) liveDataSignList.postValue(signList.distinctBy { it.elementCode }) diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/ProblemLinkFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/ProblemLinkFragment.kt index 878cb446..0341d84d 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/ProblemLinkFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/evaluationresult/ProblemLinkFragment.kt @@ -75,22 +75,6 @@ class ProblemLinkFragment : BaseFragment() { } }) -// //中间菜单 -// binding.linkMiddleRecyclerview.setHasFixedSize(true) -// binding.linkMiddleRecyclerview.layoutManager = LinearLayoutManager(requireContext()) -// binding.linkMiddleRecyclerview.adapter = middleAdapter - //中间侧菜单查询结果监听 -// viewModel.liveDataMiddleTypeList.observe(viewLifecycleOwner) { -// middleAdapter.refreshData(it) -// } - binding.linkDrawer.setOnClickListener { - when (binding.group.visibility) { - View.INVISIBLE, View.GONE -> - binding.group.visibility = View.VISIBLE - else -> - binding.group.visibility = View.GONE - } - } viewModel.getProblemLinkList() } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt index 6461c8fb..e7d00a93 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskFragment.kt @@ -3,6 +3,8 @@ package com.navinfo.omqs.ui.fragment.tasklist import android.app.AlertDialog import android.content.DialogInterface import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -64,12 +66,26 @@ class TaskFragment : BaseFragment() { binding.taskRecyclerview.setHasFixedSize(true) binding.taskRecyclerview.layoutManager = layoutManager binding.taskRecyclerview.adapter = adapter + binding.taskSearchClear.setOnClickListener { + binding.taskSearch.setText("") + } viewModel.liveDataTaskLinks.observe(viewLifecycleOwner) { adapter.resetSelect() adapter.refreshData(it) } viewModel.getTaskList(requireContext()) + binding.taskSearch.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + } + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + } + + override fun afterTextChanged(s: Editable?) { + viewModel.filterTask(s.toString()) + } + + }) } override fun onDestroyView() { diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt index 08e21371..a574fafa 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListAdapter.kt @@ -1,5 +1,6 @@ package com.navinfo.omqs.ui.fragment.tasklist +import android.graphics.Color import android.util.Log import android.view.LayoutInflater import android.view.View @@ -85,6 +86,27 @@ class TaskListAdapter( downloadManager.observer(taskBean.id, holder, DownloadObserver(taskBean.id, holder)) uploadManager.addTask(taskBean) uploadManager.observer(taskBean.id, holder, UploadObserver(taskBean.id, binding)) + if (taskBean.status == FileDownloadStatus.NONE) { + binding.taskDownloadBtn.setBackgroundColor(Color.WHITE) + binding.taskDownloadBtn.setTextColor(Color.parseColor("#888FB3")) + } else { + binding.taskDownloadBtn.setBackgroundColor(Color.parseColor("#888FB3")) + binding.taskDownloadBtn.setTextColor(Color.WHITE) + } + if (taskBean.status == FileDownloadStatus.DONE) { + binding.taskDownloadBtn.visibility = View.INVISIBLE + binding.taskUploadBtn.visibility = View.VISIBLE + } else { + binding.taskDownloadBtn.visibility = View.VISIBLE + binding.taskUploadBtn.visibility = View.INVISIBLE + } + if (taskBean.syncStatus == FileUploadStatus.DONE) { + binding.taskUploadBtn.setProgress(0) + binding.taskUploadBtn.setBackgroundColor(binding.root.resources.getColor(R.color.ripple_end_color)) + } else { + binding.taskUploadBtn.setProgress(100) + binding.taskUploadBtn.setBackgroundColor(Color.parseColor("#888FB3")) + } binding.taskDownloadBtn.tag = position binding.taskDownloadBtn.setOnClickListener(downloadBtnClick) binding.taskUploadBtn.tag = position @@ -92,7 +114,6 @@ class TaskListAdapter( binding.taskName.text = taskBean.evaluationTaskName binding.taskCityName.text = taskBean.cityName binding.taskDataVersion.text = "版本号:${taskBean.dataVersion}" - binding.taskColor.setTextColor(taskBean.color) binding.root.isSelected = selectPosition == position binding.root.setOnClickListener { val pos = holder.adapterPosition @@ -133,87 +154,108 @@ class TaskListAdapter( private fun changeUploadTxtViews(binding: AdapterTaskListBinding, taskBean: TaskBean) { when (taskBean.syncStatus) { FileUploadStatus.DONE -> { - binding.taskUploadBtn.text = "已上传" + binding.taskUploadBtn.stopAnimator() + binding.taskUploadBtn.setText("已上传") + binding.taskUploadBtn.setProgress(0) + binding.taskUploadBtn.setBackgroundColor(binding.root.resources.getColor(R.color.ripple_end_color)) } FileUploadStatus.ERROR -> { - binding.taskUploadBtn.text = "重新同步" + binding.taskUploadBtn.stopAnimator() + binding.taskUploadBtn.setText("重新同步") + binding.taskUploadBtn.setProgress(100) } FileUploadStatus.NONE -> { - binding.taskUploadBtn.text = "同步" + binding.taskUploadBtn.setText("未上传") + binding.taskUploadBtn.setProgress(0) } FileUploadStatus.WAITING -> { - binding.taskUploadBtn.text = "等待同步" + binding.taskUploadBtn.setText("等待同步") + binding.taskUploadBtn.setProgress(100) } FileUploadStatus.UPLOADING -> { - binding.taskUploadBtn.text = "同步中" + binding.taskUploadBtn.setText("上传中") + binding.taskUploadBtn.setProgress(100) + binding.taskUploadBtn.startAnimator() } } } private fun changeViews(binding: AdapterTaskListBinding, taskBean: TaskBean) { + if (taskBean.status == FileDownloadStatus.NONE) { + binding.taskDownloadBtn.setBackgroundColor(Color.WHITE) + binding.taskDownloadBtn.setTextColor(Color.parseColor("#888FB3")) + } else { + binding.taskDownloadBtn.setBackgroundColor(Color.parseColor("#888FB3")) + binding.taskDownloadBtn.setTextColor(Color.WHITE) + } + if (taskBean.fileSize > 0L) { - binding.taskProgress.progress = - (taskBean.currentSize * 100 / taskBean.fileSize).toInt() + val progress = (taskBean.currentSize * 100 / taskBean.fileSize).toInt() + binding.taskProgressText.text = + "$progress%" + binding.taskDownloadBtn.setProgress(progress) } when (taskBean.status) { FileDownloadStatus.NONE -> { - if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility == View.VISIBLE) binding.taskProgressText.visibility = View.INVISIBLE - binding.taskDownloadBtn.text = "下载" + binding.taskDownloadBtn.setText("下载") } FileDownloadStatus.WAITING -> { - if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE - binding.taskDownloadBtn.text = "等待中" + binding.taskDownloadBtn.setText("等待中") } FileDownloadStatus.LOADING -> { - if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE - binding.taskDownloadBtn.text = "暂停" + binding.taskDownloadBtn.setText("暂停") } FileDownloadStatus.PAUSE -> { - if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE - binding.taskDownloadBtn.text = "继续" + binding.taskDownloadBtn.setText("继续") } FileDownloadStatus.ERROR -> { - if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE - binding.taskDownloadBtn.text = "重试" + binding.taskDownloadBtn.setText("重试") } FileDownloadStatus.DONE -> { - if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility == View.VISIBLE) binding.taskProgressText.visibility = View.INVISIBLE - binding.taskDownloadBtn.text = "已完成" + binding.taskDownloadBtn.setText("已完成") + binding.taskDownloadBtn.visibility = View.INVISIBLE + binding.taskUploadBtn.visibility = View.VISIBLE } FileDownloadStatus.UPDATE -> { - if (binding.taskProgress.visibility == View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility == View.VISIBLE) binding.taskProgressText.visibility = View.INVISIBLE - binding.taskDownloadBtn.text = "更新" + binding.taskDownloadBtn.setText("更新") } FileDownloadStatus.IMPORTING -> { - if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.VISIBLE - binding.taskDownloadBtn.text = "安装中" + binding.taskDownloadBtn.setText("安装中") val split = taskBean.message.split("/") if (split.size == 2) { try { val index = split[0].toInt() val count = split[1].toInt() - binding.taskProgress.progress = - index * 100 / count + binding.taskProgressText.text = + "${index * 100 / count}%" } catch (e: Exception) { Log.e("jingo", "更新进度条 $e") } } else { - binding.taskProgress.progress = 0 + binding.taskProgressText.text = "0%" } } FileDownloadStatus.IMPORT -> { - if (binding.taskProgress.visibility != View.VISIBLE) binding.taskProgress.visibility = + if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility = View.INVISIBLE - binding.taskDownloadBtn.text = "安装" + binding.taskDownloadBtn.setText("安装") } } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt index d6c6e697..fc9c5780 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskListFragment.kt @@ -1,6 +1,8 @@ package com.navinfo.omqs.ui.fragment.tasklist import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -60,6 +62,17 @@ class TaskListFragment : BaseFragment() { adapter.refreshData(it) } + binding.taskListSearch.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { + } + + override fun afterTextChanged(s: Editable?) { + viewModel.filterTaskList(s.toString()) + } + }) } override fun onDestroyView() { diff --git a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt index 382ed521..d166ce76 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/fragment/tasklist/TaskViewModel.kt @@ -17,17 +17,13 @@ import com.navinfo.omqs.http.NetworkService import com.navinfo.omqs.tools.FileManager import dagger.hilt.android.lifecycle.HiltViewModel import io.realm.Realm -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.util.* +import kotlinx.coroutines.* import javax.inject.Inject @HiltViewModel class TaskViewModel @Inject constructor( - private val networkService: NetworkService, - private val mapController: NIMapController + private val networkService: NetworkService, private val mapController: NIMapController ) : ViewModel() { /** @@ -47,6 +43,12 @@ class TaskViewModel @Inject constructor( */ private var currentSelectTaskBean: TaskBean? = null + /** + * 任务列表查询协程 + */ + private var filterTaskListJob: Job? = null + + private var filterTaskJob: Job? = null /** * 下载任务列表 @@ -70,20 +72,21 @@ class TaskViewModel @Inject constructor( task.fileSize = item.fileSize task.status = item.status task.currentSize = item.currentSize - task.color = item.color - } else { - if (index < 6) - task.color = colors[index] - else { - val random = Random() - task.color = Color.argb( - 255, - random.nextInt(256), - random.nextInt(256), - random.nextInt(256) - ) - } +// task.color = item.color } +// else { +// if (index < 6) +// task.color = colors[index] +// else { +// val random = Random() +// task.color = Color.argb( +// 255, +// random.nextInt(256), +// random.nextInt(256), +// random.nextInt(256) +// ) +// } +// } realm.copyToRealmOrUpdate(task) } } @@ -162,10 +165,7 @@ class TaskViewModel @Inject constructor( } } mapController.animationHandler.animateToBox( - maxX = maxX, - maxY = maxY, - minX = minX, - minY = minY + maxX = maxX, maxY = maxY, minX = minX, minY = minY ) } } @@ -210,4 +210,41 @@ class TaskViewModel @Inject constructor( } } } + + /** + * 筛选任务列表 + */ + fun filterTaskList(key: String) { + if (filterTaskListJob != null) + filterTaskListJob!!.cancel() + filterTaskListJob = viewModelScope.launch(Dispatchers.IO) { + delay(500) + val realm = Realm.getDefaultInstance() + val list = realm.where(TaskBean::class.java) + .contains("evaluationTaskName", key) + .or() + .contains("dataVersion", key) + .or() + .contains("cityName", key) + .findAll() + liveDataTaskList.postValue(realm.copyFromRealm(list)) + } + } + + fun filterTask(pidKey: String) { + if (currentSelectTaskBean == null) + return + + if (filterTaskJob != null) + filterTaskJob!!.cancel() + filterTaskJob = viewModelScope.launch(Dispatchers.Default) { + delay(500) + val list = mutableListOf() + for (item in currentSelectTaskBean!!.hadLinkDvoList) { + if (item.linkPid.contains(pidKey)) + list.add(item) + } + liveDataTaskLinks.postValue(list) + } + } } diff --git a/app/src/main/java/com/navinfo/omqs/ui/widget/TextProgressButtonBar.kt b/app/src/main/java/com/navinfo/omqs/ui/widget/TextProgressButtonBar.kt new file mode 100644 index 00000000..3e687f45 --- /dev/null +++ b/app/src/main/java/com/navinfo/omqs/ui/widget/TextProgressButtonBar.kt @@ -0,0 +1,270 @@ +package com.navinfo.omqs.ui.widget + +import android.animation.ArgbEvaluator +import android.animation.ValueAnimator +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.* +import android.os.Build +import android.util.AttributeSet +import android.view.MotionEvent +import android.view.View +import com.navinfo.omqs.R + +class TextProgressButtonBar : View { + constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) { + init(context!!, attrs!!) + } + + constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super(context, attrs) { + init(context!!, attrs!!) + } + + private lateinit var fm: Paint.FontMetrics + private var progress = 0 + private var textColor: Int = Color.WHITE + private var paint: Paint? = null + private var textSize: Float = 10f + private var foreground = 0 + private var backgroundcolor = 0 + private var text: String? = null + private var max = 100 + private val corner = 30 // 圆角的弧度 + private val mStartColor = resources.getColor(R.color.default_button_blue_color) + private val mEndColor = resources.getColor(R.color.ripple_end_color) + private val mValueAnimator = ValueAnimator.ofInt( + mEndColor, + mStartColor + ) + private var mCurrentColor = mEndColor +// private var buttonClickListener: OnProgressButtonClickListener? = null + + + fun init( + context: Context, attrs: AttributeSet + ) { + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.ProgressButton) + backgroundcolor = typedArray.getInteger( + R.styleable.ProgressButton_backgroundcolor, Color.parseColor("#C6C6C6") + ) + foreground = typedArray.getInteger( + R.styleable.ProgressButton_foreground, Color.rgb(20, 131, 214) + ) + textColor = typedArray.getInteger( + R.styleable.ProgressButton_textcolor, Color.WHITE + ) + max = typedArray.getInteger(R.styleable.ProgressButton_max, 100) + progress = typedArray.getInteger(R.styleable.ProgressButton_progress, 0) + text = typedArray.getString(R.styleable.ProgressButton_text) + textSize = typedArray.getDimension(R.styleable.ProgressButton_textSize, 20f) + typedArray.recycle() + + mValueAnimator.duration = 1000 + mValueAnimator.repeatCount = ValueAnimator.INFINITE + mValueAnimator.repeatMode = ValueAnimator.REVERSE + + // 为 ValueAnimator 对象添加 ArgbEvaluator + mValueAnimator.setEvaluator(ArgbEvaluator()); + // 添加动画监听器,在动画值改变时更新当前颜色值并重绘 View + mValueAnimator.addUpdateListener { animation -> + mCurrentColor = animation.animatedValue as Int + invalidate(); + }; + + } + + fun startAnimator() { + if (!mValueAnimator.isStarted) { + progress = max + mValueAnimator.start() + } + } + + fun stopAnimator() { + if (mValueAnimator.isRunning || mValueAnimator.isStarted) { + mValueAnimator.cancel() + mCurrentColor = mEndColor + } + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + // 在 View 从窗口中移除时停止动画 + mValueAnimator.cancel() + } + + @SuppressLint("DrawAllocation") + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + paint = Paint() + paint?.let { + it.isAntiAlias = true + it.strokeWidth = 5f + it.style = Paint.Style.STROKE + it.color = textColor + /** + * 绘制背景 + */ + var oval = RectF(0F, 0F, width.toFloat(), height.toFloat()) + canvas.drawRoundRect(oval, corner.toFloat(), corner.toFloat(), it) + it.style = Paint.Style.FILL + it.color = this.backgroundcolor + canvas.drawRoundRect(oval, corner.toFloat(), corner.toFloat(), it) + + if (progress <= corner) { + oval = RectF( + 0F, + (corner - progress).toFloat(), + (width * progress / max).toFloat(), + (height - corner + progress).toFloat() + ) + /*** + * 绘制进度值 + */ + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + val shader = LinearGradient( + oval.left, + oval.top, + oval.right, + oval.bottom, + mStartColor, + mCurrentColor, + Shader.TileMode.MIRROR + ) + it.shader = shader + } + canvas.drawRoundRect(oval, progress.toFloat(), progress.toFloat(), it) + } else { + oval = RectF( + 0F, 0F, (width * progress / max).toFloat(), height.toFloat() + ) + /*** + * 绘制进度值 + */ + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + val shader = LinearGradient( + oval.left, + oval.top, + oval.right, + oval.bottom, + mStartColor, + mCurrentColor, + Shader.TileMode.CLAMP + ) + it.shader = shader + } + canvas.drawRoundRect(oval, corner.toFloat(), corner.toFloat(), it) + } + /*** + * 绘制文本 + */ + it.shader = null + if ("" == text || text == null) { + return + } + it.textSize = textSize + fm = it.fontMetrics + it.color = textColor + val textCenterVerticalBaselineY = height / 2 - fm.descent + (fm.descent - fm.ascent) / 2 + canvas.drawText( + text!!, (measuredWidth - it.measureText(text)) / 2, textCenterVerticalBaselineY, it + ) + } + + } + + /** + * 设置最大值 + * + * @param max + */ + fun setMax(max: Int) { + this.max = max + } + + /** + * 设置文本提示信息 + * + * @param text + */ + fun setText(text: String?) { + this.text = text + postInvalidate() + } + + /** + * 设置进度条的颜色值 + * + * @param color + */ + fun setForeground(color: Int) { + foreground = color + } + + /** + * 设置进度条的背景色 + */ + override fun setBackgroundColor(color: Int) { + this.backgroundcolor = color + } + + /*** + * 设置文本的大小 + */ + fun setTextSize(size: Int) { + textSize = size.toFloat() + } + + /** + * 设置文本的颜色值 + * + * @param color + */ + fun setTextColor(color: Int) { + textColor = color + } + + /** + * 设置进度值 + * + * @param progress + */ + fun setProgress(progress: Int) { + if (progress > max) { + return + } + this.progress = progress + //设置进度之后,要求UI强制进行重绘 + postInvalidate() + } + + fun getMax(): Int { + return max + } + + fun getProgress(): Int { + return progress + } + +// @SuppressLint("ClickableViewAccessibility") +// override fun onTouchEvent(event: MotionEvent): Boolean { +// when (event.action) { +// MotionEvent.ACTION_UP -> buttonClickListener?.onClickListener(this) +// else -> { +// } +// } +// return true +// } +// +// fun setOnProgressButtonClickListener(clickListener: OnProgressButtonClickListener) { +// buttonClickListener = clickListener +// } +// +// +// interface OnProgressButtonClickListener { +// fun onClickListener(view: View) +// } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/adapter_task_list.xml b/app/src/main/res/layout/adapter_task_list.xml index a8de167f..56b85cbc 100644 --- a/app/src/main/res/layout/adapter_task_list.xml +++ b/app/src/main/res/layout/adapter_task_list.xml @@ -8,7 +8,7 @@ android:paddingLeft="8dp" android:paddingTop="6dp" android:paddingRight="8dp" - android:paddingBottom="4dp" + android:paddingBottom="8dp" tools:context="com.navinfo.omqs.ui.fragment.tasklist.TaskListAdapter"> - + android:text="省市名称" + android:textColor="@color/gray_121" + android:textSize="13sp" /> - - + app:backgroundcolor="#888FB3" + app:text="下载" + app:textSize="@dimen/card_title_font_2size" + app:textcolor="@color/white" /> - + android:layout_width="75dp" + android:layout_height="22dp" + android:layout_alignBottom="@id/task_city_name" + android:layout_alignParentRight="true" + android:layout_gravity="center" + android:layout_marginTop="5dp" + android:visibility="gone" + app:backgroundcolor="#888FB3" + app:text="未上传" + app:textSize="@dimen/card_title_font_2size" + app:textcolor="@color/white" /> - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_phenomenon.xml b/app/src/main/res/layout/fragment_phenomenon.xml index 50b235c1..47d18747 100644 --- a/app/src/main/res/layout/fragment_phenomenon.xml +++ b/app/src/main/res/layout/fragment_phenomenon.xml @@ -7,25 +7,6 @@ android:background="@drawable/shape_middle_fragment_bg" tools:context="com.navinfo.omqs.ui.fragment.evaluationresult.PhenomenonFragment"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_problem_link.xml b/app/src/main/res/layout/fragment_problem_link.xml index c5e7a09a..d31f06f3 100644 --- a/app/src/main/res/layout/fragment_problem_link.xml +++ b/app/src/main/res/layout/fragment_problem_link.xml @@ -1,51 +1,14 @@ - - - - - - - - - - - - - \ No newline at end of file + android:layout_height="match_parent" /> + \ No newline at end of file diff --git a/app/src/main/res/values-w1024dp/dimens.xml b/app/src/main/res/values-w1024dp/dimens.xml index 2ea8fafc..2c5ebe9d 100644 --- a/app/src/main/res/values-w1024dp/dimens.xml +++ b/app/src/main/res/values-w1024dp/dimens.xml @@ -9,4 +9,5 @@ 230dp 28dp 360dp + 213dp \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 00000000..e98b7923 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index acc41e1d..9e404f83 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -39,6 +39,6 @@ 213dp 230dp 28dp + 213dp - \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt index d04ca6c3..6eea65b3 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/handler/LineHandler.kt @@ -393,5 +393,6 @@ class LineHandler(context: AppCompatActivity, mapView: NIMapView) : BaseHandler( editIndex = -1 bDrawLine = false omdbTaskLinkLayer.removeAll() + linksLayer.clear() } } \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiLinesLayer.kt b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiLinesLayer.kt index 30c51446..71ef043d 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiLinesLayer.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/layers/MultiLinesLayer.kt @@ -28,6 +28,7 @@ class MultiLinesLayer(map: Map) : VectorLayer(map) { LineDrawable(GeometryTools.createGeometry(geometry), style) super.add(lineDrawable) linkList.add(lineDrawable) + update() } catch (e: Exception) { } @@ -39,5 +40,6 @@ class MultiLinesLayer(map: Map) : VectorLayer(map) { super.remove(item) } linkList.clear() + update() } } \ No newline at end of file diff --git a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java index 897fb2ba..eb42d21b 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java +++ b/collect-library/src/main/java/com/navinfo/collect/library/map/source/OMDBTileDataSource.java @@ -32,19 +32,18 @@ public class OMDBTileDataSource implements ITileDataSource { @Override public void query(MapTile tile, ITileDataSink mapDataSink) { // 获取tile对应的坐标范围 - if (tile.zoomLevel>=Constant.OMDB_MIN_ZOOM&&tile.zoomLevel<=Constant.OVER_ZOOM) { - int m = Constant.OVER_ZOOM-tile.zoomLevel; - int xStart = (int)tile.tileX<= Constant.OMDB_MIN_ZOOM && tile.zoomLevel <= Constant.OVER_ZOOM) { + int m = Constant.OVER_ZOOM - tile.zoomLevel; + int xStart = (int) tile.tileX << m; + int xEnd = (int) ((tile.tileX + 1) << m); + int yStart = (int) tile.tileY << m; + int yEnd = (int) ((tile.tileY + 1) << m); - RealmQuery realmQuery = Realm.getDefaultInstance().where(RenderEntity.class) - .rawPredicate("tileX>="+xStart+" and tileX<="+xEnd+" and tileY>="+yStart+" and tileY<="+yEnd); + RealmQuery realmQuery = Realm.getDefaultInstance().where(RenderEntity.class).rawPredicate("tileX>=" + xStart + " and tileX<=" + xEnd + " and tileY>=" + yStart + " and tileY<=" + yEnd); // 筛选不显示的数据 - if (Constant.HAD_LAYER_INVISIABLE_ARRAY!=null&&Constant.HAD_LAYER_INVISIABLE_ARRAY.length>0) { + if (Constant.HAD_LAYER_INVISIABLE_ARRAY != null && Constant.HAD_LAYER_INVISIABLE_ARRAY.length > 0) { realmQuery.beginGroup(); - for (String type: Constant.HAD_LAYER_INVISIABLE_ARRAY) { + for (String type : Constant.HAD_LAYER_INVISIABLE_ARRAY) { realmQuery.notEqualTo("table", type); } realmQuery.endGroup(); diff --git a/collect-library/src/main/res/values/colors.xml b/collect-library/src/main/res/values/colors.xml index 8adbf2e8..45cbc411 100644 --- a/collect-library/src/main/res/values/colors.xml +++ b/collect-library/src/main/res/values/colors.xml @@ -1,7 +1,7 @@ #00000000 - #FF03DAC5 + #7F03DAC5 #FF000000 #FFFFFFFF #00FFFFFF