diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d6bfba4..93ec3d6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d6bfba4..93ec3d6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/app/src/main/java/com/casic/detector/model/CalculateResult.kt b/app/src/main/java/com/casic/detector/model/CalculateResult.kt deleted file mode 100644 index 02cb0a0..0000000 --- a/app/src/main/java/com/casic/detector/model/CalculateResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.casic.detector.model - -data class CalculateResult(val angle: Int, val direction: String, val distance: Int) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d6bfba4..93ec3d6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/app/src/main/java/com/casic/detector/model/CalculateResult.kt b/app/src/main/java/com/casic/detector/model/CalculateResult.kt deleted file mode 100644 index 02cb0a0..0000000 --- a/app/src/main/java/com/casic/detector/model/CalculateResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.casic.detector.model - -data class CalculateResult(val angle: Int, val direction: String, val distance: Int) diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 0e53715..f654364 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -74,6 +74,7 @@ import com.casic.detector.utils.LocationHub import com.casic.detector.utils.RouteOnMap import com.casic.detector.vm.TaskViewModel +import com.casic.detector.widgets.MarkerDetailDialog import com.casic.detector.widgets.QueryMarkerDialog import com.casic.detector.widgets.RadarScanView import com.casic.detector.widgets.SamplePopupWindow @@ -130,6 +131,7 @@ private val installDialog by lazy { InstallMarkerDialog(this) } private val searchDialog by lazy { SearchMarkerDialog(this) } private val searchNewDialog by lazy { SearchMarkerNewDialog(this) } + private val detailDialog by lazy { MarkerDetailDialog(this) } private val sensorMessageCode = 2024022301 private val rotationMatrix = FloatArray(9)//旋转矩阵缓存 private val valueArray = FloatArray(3)//方位角数值 @@ -141,6 +143,7 @@ private var isFreeTask = false private var ids = HashSet() private var signalTask: TimerTask? = null + private var energyTask: TimerTask? = null private var searchMarkerTimer: Timer? = null private var taskId: String? = null private var gravity: FloatArray? = null @@ -491,9 +494,18 @@ out.flush() } } + + energyTask = object : TimerTask() { + override fun run() { + out.write('6'.code) + out.flush() + } + } + searchMarkerTimer = Timer() searchMarkerTimer?.apply { - schedule(signalTask, 0, 100) + schedule(signalTask, 0, 200) + schedule(energyTask, 0, 251) } binding.stopFreeTaskButton.visibility = View.VISIBLE @@ -517,10 +529,10 @@ } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { //只响一次,因为探测频率高,所以依旧是连续的报警声 soundPool.play(soundResourceId, 1f, 1f, 0, 0, 1f) - "标识器${markerId}已探测".show(this) //添加地图Marker if (!ids.contains(markerId)) { //根据markerId查询标识器经纬度 @@ -529,14 +541,30 @@ val bean = labels.first() aMap.addMarker( MarkerOptions().position( - LatLng( - bean.lat.toDouble(), bean.lng.toDouble() - ) + LatLng(bean.lat.toDouble(), bean.lng.toDouble()) ).icon(BitmapDescriptorFactory.fromResource(R.mipmap.label_blue1)) ) } } ids.add(markerId) + + //显示标识器详细信息 + if (!detailDialog.isShowing) { + detailDialog.setMarkerId(markerId) + detailDialog.show() + } + } + + if (hex.startsWith("4E")) { + val energyResponse = hex.take(10).hexToString() + try { + val energy = energyResponse.substring(1).toInt() + if (energy <= 500) { + detailDialog.dismiss() + } + } catch (e: NumberFormatException) { + e.printStackTrace() + } } } } @@ -977,6 +1005,7 @@ super.onDestroy() binding.mapView.onDestroy() signalTask?.cancel() + energyTask?.cancel() searchMarkerTimer?.cancel() soundPool.release() locationHub.stopLocation() diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d6bfba4..93ec3d6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/app/src/main/java/com/casic/detector/model/CalculateResult.kt b/app/src/main/java/com/casic/detector/model/CalculateResult.kt deleted file mode 100644 index 02cb0a0..0000000 --- a/app/src/main/java/com/casic/detector/model/CalculateResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.casic.detector.model - -data class CalculateResult(val angle: Int, val direction: String, val distance: Int) diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 0e53715..f654364 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -74,6 +74,7 @@ import com.casic.detector.utils.LocationHub import com.casic.detector.utils.RouteOnMap import com.casic.detector.vm.TaskViewModel +import com.casic.detector.widgets.MarkerDetailDialog import com.casic.detector.widgets.QueryMarkerDialog import com.casic.detector.widgets.RadarScanView import com.casic.detector.widgets.SamplePopupWindow @@ -130,6 +131,7 @@ private val installDialog by lazy { InstallMarkerDialog(this) } private val searchDialog by lazy { SearchMarkerDialog(this) } private val searchNewDialog by lazy { SearchMarkerNewDialog(this) } + private val detailDialog by lazy { MarkerDetailDialog(this) } private val sensorMessageCode = 2024022301 private val rotationMatrix = FloatArray(9)//旋转矩阵缓存 private val valueArray = FloatArray(3)//方位角数值 @@ -141,6 +143,7 @@ private var isFreeTask = false private var ids = HashSet() private var signalTask: TimerTask? = null + private var energyTask: TimerTask? = null private var searchMarkerTimer: Timer? = null private var taskId: String? = null private var gravity: FloatArray? = null @@ -491,9 +494,18 @@ out.flush() } } + + energyTask = object : TimerTask() { + override fun run() { + out.write('6'.code) + out.flush() + } + } + searchMarkerTimer = Timer() searchMarkerTimer?.apply { - schedule(signalTask, 0, 100) + schedule(signalTask, 0, 200) + schedule(energyTask, 0, 251) } binding.stopFreeTaskButton.visibility = View.VISIBLE @@ -517,10 +529,10 @@ } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { //只响一次,因为探测频率高,所以依旧是连续的报警声 soundPool.play(soundResourceId, 1f, 1f, 0, 0, 1f) - "标识器${markerId}已探测".show(this) //添加地图Marker if (!ids.contains(markerId)) { //根据markerId查询标识器经纬度 @@ -529,14 +541,30 @@ val bean = labels.first() aMap.addMarker( MarkerOptions().position( - LatLng( - bean.lat.toDouble(), bean.lng.toDouble() - ) + LatLng(bean.lat.toDouble(), bean.lng.toDouble()) ).icon(BitmapDescriptorFactory.fromResource(R.mipmap.label_blue1)) ) } } ids.add(markerId) + + //显示标识器详细信息 + if (!detailDialog.isShowing) { + detailDialog.setMarkerId(markerId) + detailDialog.show() + } + } + + if (hex.startsWith("4E")) { + val energyResponse = hex.take(10).hexToString() + try { + val energy = energyResponse.substring(1).toInt() + if (energy <= 500) { + detailDialog.dismiss() + } + } catch (e: NumberFormatException) { + e.printStackTrace() + } } } } @@ -977,6 +1005,7 @@ super.onDestroy() binding.mapView.onDestroy() signalTask?.cancel() + energyTask?.cancel() searchMarkerTimer?.cancel() soundPool.release() locationHub.stopLocation() diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index 58f75c4..42c9dfe 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -173,20 +173,21 @@ loadState.value = LoadState.Fail }) - fun uploadEvent(context: Context, taskId: String, event: String, realPaths: ArrayList) = - launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) - if (response.getResponseState()) { - loadState.value = LoadState.Success - } else { - loadState.value = LoadState.Fail - response.getResponseMessage().show(context) - } - }, { - it.printStackTrace() + fun uploadEvent( + context: Context, taskId: String, event: String, realPaths: ArrayList + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) + if (response.getResponseState()) { + loadState.value = LoadState.Success + } else { loadState.value = LoadState.Fail - }) + response.getResponseMessage().show(context) + } + }, { + it.printStackTrace() + loadState.value = LoadState.Fail + }) fun uploadMarker(context: Context, taskDetailId: String) = launch({ loadState.value = LoadState.Loading diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d6bfba4..93ec3d6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/app/src/main/java/com/casic/detector/model/CalculateResult.kt b/app/src/main/java/com/casic/detector/model/CalculateResult.kt deleted file mode 100644 index 02cb0a0..0000000 --- a/app/src/main/java/com/casic/detector/model/CalculateResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.casic.detector.model - -data class CalculateResult(val angle: Int, val direction: String, val distance: Int) diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 0e53715..f654364 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -74,6 +74,7 @@ import com.casic.detector.utils.LocationHub import com.casic.detector.utils.RouteOnMap import com.casic.detector.vm.TaskViewModel +import com.casic.detector.widgets.MarkerDetailDialog import com.casic.detector.widgets.QueryMarkerDialog import com.casic.detector.widgets.RadarScanView import com.casic.detector.widgets.SamplePopupWindow @@ -130,6 +131,7 @@ private val installDialog by lazy { InstallMarkerDialog(this) } private val searchDialog by lazy { SearchMarkerDialog(this) } private val searchNewDialog by lazy { SearchMarkerNewDialog(this) } + private val detailDialog by lazy { MarkerDetailDialog(this) } private val sensorMessageCode = 2024022301 private val rotationMatrix = FloatArray(9)//旋转矩阵缓存 private val valueArray = FloatArray(3)//方位角数值 @@ -141,6 +143,7 @@ private var isFreeTask = false private var ids = HashSet() private var signalTask: TimerTask? = null + private var energyTask: TimerTask? = null private var searchMarkerTimer: Timer? = null private var taskId: String? = null private var gravity: FloatArray? = null @@ -491,9 +494,18 @@ out.flush() } } + + energyTask = object : TimerTask() { + override fun run() { + out.write('6'.code) + out.flush() + } + } + searchMarkerTimer = Timer() searchMarkerTimer?.apply { - schedule(signalTask, 0, 100) + schedule(signalTask, 0, 200) + schedule(energyTask, 0, 251) } binding.stopFreeTaskButton.visibility = View.VISIBLE @@ -517,10 +529,10 @@ } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { //只响一次,因为探测频率高,所以依旧是连续的报警声 soundPool.play(soundResourceId, 1f, 1f, 0, 0, 1f) - "标识器${markerId}已探测".show(this) //添加地图Marker if (!ids.contains(markerId)) { //根据markerId查询标识器经纬度 @@ -529,14 +541,30 @@ val bean = labels.first() aMap.addMarker( MarkerOptions().position( - LatLng( - bean.lat.toDouble(), bean.lng.toDouble() - ) + LatLng(bean.lat.toDouble(), bean.lng.toDouble()) ).icon(BitmapDescriptorFactory.fromResource(R.mipmap.label_blue1)) ) } } ids.add(markerId) + + //显示标识器详细信息 + if (!detailDialog.isShowing) { + detailDialog.setMarkerId(markerId) + detailDialog.show() + } + } + + if (hex.startsWith("4E")) { + val energyResponse = hex.take(10).hexToString() + try { + val energy = energyResponse.substring(1).toInt() + if (energy <= 500) { + detailDialog.dismiss() + } + } catch (e: NumberFormatException) { + e.printStackTrace() + } } } } @@ -977,6 +1005,7 @@ super.onDestroy() binding.mapView.onDestroy() signalTask?.cancel() + energyTask?.cancel() searchMarkerTimer?.cancel() soundPool.release() locationHub.stopLocation() diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index 58f75c4..42c9dfe 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -173,20 +173,21 @@ loadState.value = LoadState.Fail }) - fun uploadEvent(context: Context, taskId: String, event: String, realPaths: ArrayList) = - launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) - if (response.getResponseState()) { - loadState.value = LoadState.Success - } else { - loadState.value = LoadState.Fail - response.getResponseMessage().show(context) - } - }, { - it.printStackTrace() + fun uploadEvent( + context: Context, taskId: String, event: String, realPaths: ArrayList + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) + if (response.getResponseState()) { + loadState.value = LoadState.Success + } else { loadState.value = LoadState.Fail - }) + response.getResponseMessage().show(context) + } + }, { + it.printStackTrace() + loadState.value = LoadState.Fail + }) fun uploadMarker(context: Context, taskDetailId: String) = launch({ loadState.value = LoadState.Loading diff --git a/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt b/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt new file mode 100644 index 0000000..be97c4c --- /dev/null +++ b/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt @@ -0,0 +1,62 @@ +package com.casic.detector.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import com.casic.detector.R +import com.casic.detector.databinding.DialogMarkerDetailBinding +import com.casic.detector.utils.DataBaseManager +import com.casic.detector.utils.LocaleConstant +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth + +class MarkerDetailDialog constructor(context: Context) : + Dialog(context, R.style.UserDefinedDialogStyle) { + + private lateinit var markerId: String + + fun setMarkerId(markerId: String) { + this.markerId = markerId + } + + private val binding: DialogMarkerDetailBinding by binding() + + private fun Dialog.initDialogLayoutParams() { + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + val params = window.attributes + params.width = ((context.getScreenWidth() * 0.8).toInt()) + params.height = ((context.getScreenHeight() * 0.7).toInt()) + window.attributes = params + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams() + setCanceledOnTouchOutside(true) + + val labelBean = DataBaseManager.get.queryLabelById(markerId).firstOrNull() ?: return + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark + } +} \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d6bfba4..93ec3d6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/app/src/main/java/com/casic/detector/model/CalculateResult.kt b/app/src/main/java/com/casic/detector/model/CalculateResult.kt deleted file mode 100644 index 02cb0a0..0000000 --- a/app/src/main/java/com/casic/detector/model/CalculateResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.casic.detector.model - -data class CalculateResult(val angle: Int, val direction: String, val distance: Int) diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 0e53715..f654364 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -74,6 +74,7 @@ import com.casic.detector.utils.LocationHub import com.casic.detector.utils.RouteOnMap import com.casic.detector.vm.TaskViewModel +import com.casic.detector.widgets.MarkerDetailDialog import com.casic.detector.widgets.QueryMarkerDialog import com.casic.detector.widgets.RadarScanView import com.casic.detector.widgets.SamplePopupWindow @@ -130,6 +131,7 @@ private val installDialog by lazy { InstallMarkerDialog(this) } private val searchDialog by lazy { SearchMarkerDialog(this) } private val searchNewDialog by lazy { SearchMarkerNewDialog(this) } + private val detailDialog by lazy { MarkerDetailDialog(this) } private val sensorMessageCode = 2024022301 private val rotationMatrix = FloatArray(9)//旋转矩阵缓存 private val valueArray = FloatArray(3)//方位角数值 @@ -141,6 +143,7 @@ private var isFreeTask = false private var ids = HashSet() private var signalTask: TimerTask? = null + private var energyTask: TimerTask? = null private var searchMarkerTimer: Timer? = null private var taskId: String? = null private var gravity: FloatArray? = null @@ -491,9 +494,18 @@ out.flush() } } + + energyTask = object : TimerTask() { + override fun run() { + out.write('6'.code) + out.flush() + } + } + searchMarkerTimer = Timer() searchMarkerTimer?.apply { - schedule(signalTask, 0, 100) + schedule(signalTask, 0, 200) + schedule(energyTask, 0, 251) } binding.stopFreeTaskButton.visibility = View.VISIBLE @@ -517,10 +529,10 @@ } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { //只响一次,因为探测频率高,所以依旧是连续的报警声 soundPool.play(soundResourceId, 1f, 1f, 0, 0, 1f) - "标识器${markerId}已探测".show(this) //添加地图Marker if (!ids.contains(markerId)) { //根据markerId查询标识器经纬度 @@ -529,14 +541,30 @@ val bean = labels.first() aMap.addMarker( MarkerOptions().position( - LatLng( - bean.lat.toDouble(), bean.lng.toDouble() - ) + LatLng(bean.lat.toDouble(), bean.lng.toDouble()) ).icon(BitmapDescriptorFactory.fromResource(R.mipmap.label_blue1)) ) } } ids.add(markerId) + + //显示标识器详细信息 + if (!detailDialog.isShowing) { + detailDialog.setMarkerId(markerId) + detailDialog.show() + } + } + + if (hex.startsWith("4E")) { + val energyResponse = hex.take(10).hexToString() + try { + val energy = energyResponse.substring(1).toInt() + if (energy <= 500) { + detailDialog.dismiss() + } + } catch (e: NumberFormatException) { + e.printStackTrace() + } } } } @@ -977,6 +1005,7 @@ super.onDestroy() binding.mapView.onDestroy() signalTask?.cancel() + energyTask?.cancel() searchMarkerTimer?.cancel() soundPool.release() locationHub.stopLocation() diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index 58f75c4..42c9dfe 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -173,20 +173,21 @@ loadState.value = LoadState.Fail }) - fun uploadEvent(context: Context, taskId: String, event: String, realPaths: ArrayList) = - launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) - if (response.getResponseState()) { - loadState.value = LoadState.Success - } else { - loadState.value = LoadState.Fail - response.getResponseMessage().show(context) - } - }, { - it.printStackTrace() + fun uploadEvent( + context: Context, taskId: String, event: String, realPaths: ArrayList + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) + if (response.getResponseState()) { + loadState.value = LoadState.Success + } else { loadState.value = LoadState.Fail - }) + response.getResponseMessage().show(context) + } + }, { + it.printStackTrace() + loadState.value = LoadState.Fail + }) fun uploadMarker(context: Context, taskDetailId: String) = launch({ loadState.value = LoadState.Loading diff --git a/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt b/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt new file mode 100644 index 0000000..be97c4c --- /dev/null +++ b/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt @@ -0,0 +1,62 @@ +package com.casic.detector.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import com.casic.detector.R +import com.casic.detector.databinding.DialogMarkerDetailBinding +import com.casic.detector.utils.DataBaseManager +import com.casic.detector.utils.LocaleConstant +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth + +class MarkerDetailDialog constructor(context: Context) : + Dialog(context, R.style.UserDefinedDialogStyle) { + + private lateinit var markerId: String + + fun setMarkerId(markerId: String) { + this.markerId = markerId + } + + private val binding: DialogMarkerDetailBinding by binding() + + private fun Dialog.initDialogLayoutParams() { + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + val params = window.attributes + params.width = ((context.getScreenWidth() * 0.8).toInt()) + params.height = ((context.getScreenHeight() * 0.7).toInt()) + window.attributes = params + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams() + setCanceledOnTouchOutside(true) + + val labelBean = DataBaseManager.get.queryLabelById(markerId).firstOrNull() ?: return + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_marker_detail.xml b/app/src/main/res/layout/dialog_marker_detail.xml new file mode 100644 index 0000000..651d755 --- /dev/null +++ b/app/src/main/res/layout/dialog_marker_detail.xml @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index d6bfba4..93ec3d6 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -7,7 +7,7 @@ - + diff --git a/app/src/main/java/com/casic/detector/model/CalculateResult.kt b/app/src/main/java/com/casic/detector/model/CalculateResult.kt deleted file mode 100644 index 02cb0a0..0000000 --- a/app/src/main/java/com/casic/detector/model/CalculateResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.casic.detector.model - -data class CalculateResult(val angle: Int, val direction: String, val distance: Int) diff --git a/app/src/main/java/com/casic/detector/view/MainActivity.kt b/app/src/main/java/com/casic/detector/view/MainActivity.kt index 0e53715..f654364 100644 --- a/app/src/main/java/com/casic/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt @@ -74,6 +74,7 @@ import com.casic.detector.utils.LocationHub import com.casic.detector.utils.RouteOnMap import com.casic.detector.vm.TaskViewModel +import com.casic.detector.widgets.MarkerDetailDialog import com.casic.detector.widgets.QueryMarkerDialog import com.casic.detector.widgets.RadarScanView import com.casic.detector.widgets.SamplePopupWindow @@ -130,6 +131,7 @@ private val installDialog by lazy { InstallMarkerDialog(this) } private val searchDialog by lazy { SearchMarkerDialog(this) } private val searchNewDialog by lazy { SearchMarkerNewDialog(this) } + private val detailDialog by lazy { MarkerDetailDialog(this) } private val sensorMessageCode = 2024022301 private val rotationMatrix = FloatArray(9)//旋转矩阵缓存 private val valueArray = FloatArray(3)//方位角数值 @@ -141,6 +143,7 @@ private var isFreeTask = false private var ids = HashSet() private var signalTask: TimerTask? = null + private var energyTask: TimerTask? = null private var searchMarkerTimer: Timer? = null private var taskId: String? = null private var gravity: FloatArray? = null @@ -491,9 +494,18 @@ out.flush() } } + + energyTask = object : TimerTask() { + override fun run() { + out.write('6'.code) + out.flush() + } + } + searchMarkerTimer = Timer() searchMarkerTimer?.apply { - schedule(signalTask, 0, 100) + schedule(signalTask, 0, 200) + schedule(energyTask, 0, 251) } binding.stopFreeTaskButton.visibility = View.VISIBLE @@ -517,10 +529,10 @@ } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { //只响一次,因为探测频率高,所以依旧是连续的报警声 soundPool.play(soundResourceId, 1f, 1f, 0, 0, 1f) - "标识器${markerId}已探测".show(this) //添加地图Marker if (!ids.contains(markerId)) { //根据markerId查询标识器经纬度 @@ -529,14 +541,30 @@ val bean = labels.first() aMap.addMarker( MarkerOptions().position( - LatLng( - bean.lat.toDouble(), bean.lng.toDouble() - ) + LatLng(bean.lat.toDouble(), bean.lng.toDouble()) ).icon(BitmapDescriptorFactory.fromResource(R.mipmap.label_blue1)) ) } } ids.add(markerId) + + //显示标识器详细信息 + if (!detailDialog.isShowing) { + detailDialog.setMarkerId(markerId) + detailDialog.show() + } + } + + if (hex.startsWith("4E")) { + val energyResponse = hex.take(10).hexToString() + try { + val energy = energyResponse.substring(1).toInt() + if (energy <= 500) { + detailDialog.dismiss() + } + } catch (e: NumberFormatException) { + e.printStackTrace() + } } } } @@ -977,6 +1005,7 @@ super.onDestroy() binding.mapView.onDestroy() signalTask?.cancel() + energyTask?.cancel() searchMarkerTimer?.cancel() soundPool.release() locationHub.stopLocation() diff --git a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt index 58f75c4..42c9dfe 100644 --- a/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/detector/vm/TaskViewModel.kt @@ -173,20 +173,21 @@ loadState.value = LoadState.Fail }) - fun uploadEvent(context: Context, taskId: String, event: String, realPaths: ArrayList) = - launch({ - loadState.value = LoadState.Loading - val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) - if (response.getResponseState()) { - loadState.value = LoadState.Success - } else { - loadState.value = LoadState.Fail - response.getResponseMessage().show(context) - } - }, { - it.printStackTrace() + fun uploadEvent( + context: Context, taskId: String, event: String, realPaths: ArrayList + ) = launch({ + loadState.value = LoadState.Loading + val response = RetrofitServiceManager.uploadEvent(taskId, event, realPaths) + if (response.getResponseState()) { + loadState.value = LoadState.Success + } else { loadState.value = LoadState.Fail - }) + response.getResponseMessage().show(context) + } + }, { + it.printStackTrace() + loadState.value = LoadState.Fail + }) fun uploadMarker(context: Context, taskDetailId: String) = launch({ loadState.value = LoadState.Loading diff --git a/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt b/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt new file mode 100644 index 0000000..be97c4c --- /dev/null +++ b/app/src/main/java/com/casic/detector/widgets/MarkerDetailDialog.kt @@ -0,0 +1,62 @@ +package com.casic.detector.widgets + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import com.casic.detector.R +import com.casic.detector.databinding.DialogMarkerDetailBinding +import com.casic.detector.utils.DataBaseManager +import com.casic.detector.utils.LocaleConstant +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.getScreenHeight +import com.pengxh.kt.lite.extensions.getScreenWidth + +class MarkerDetailDialog constructor(context: Context) : + Dialog(context, R.style.UserDefinedDialogStyle) { + + private lateinit var markerId: String + + fun setMarkerId(markerId: String) { + this.markerId = markerId + } + + private val binding: DialogMarkerDetailBinding by binding() + + private fun Dialog.initDialogLayoutParams() { + val window = this.window ?: return + window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + window.decorView.setBackgroundColor(Color.TRANSPARENT) + val params = window.attributes + params.width = ((context.getScreenWidth() * 0.8).toInt()) + params.height = ((context.getScreenHeight() * 0.7).toInt()) + window.attributes = params + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams() + setCanceledOnTouchOutside(true) + + val labelBean = DataBaseManager.get.queryLabelById(markerId).firstOrNull() ?: return + binding.objectTypeView.text = + LocaleConstant.POINT_TYPE_ARRAY[labelBean.objectType.toInt() - 1] + binding.pipelineTypeView.text = labelBean.pipelineType + binding.pipelineDiameterView.text = labelBean.pipelineDiameter + binding.pipelineMaterialView.text = labelBean.pipelineMaterial + binding.buryMethodView.text = labelBean.buryMethod + binding.buryDeepView.text = labelBean.buryDeep + binding.areaView.text = labelBean.area + binding.lineView.text = labelBean.line + binding.roadView.text = labelBean.road + binding.constructTimeView.text = labelBean.constructTime + binding.ownerView.text = labelBean.owner + binding.identifierIdView.text = labelBean.identifierId + binding.identifierTypeView.text = labelBean.identifierType + binding.identifierDeepView.text = labelBean.identifierDeep + binding.personView.text = labelBean.person + binding.installTimeView.text = labelBean.installTime + binding.remarkView.text = labelBean.remark + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_marker_detail.xml b/app/src/main/res/layout/dialog_marker_detail.xml new file mode 100644 index 0000000..651d755 --- /dev/null +++ b/app/src/main/res/layout/dialog_marker_detail.xml @@ -0,0 +1,277 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a9f4ebc..5a96ecc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -65,7 +65,7 @@ @drawable/bg_edit_text_solid_border_radius_3 @dimen/dp_7 @dimen/dp_7 - true + true @color/black @color/hintColor @dimen/sp_18 @@ -76,7 +76,7 @@ 1 wrap_content @android:drawable/btn_dropdown - true + true \ No newline at end of file