diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f9ce1e2..378a76b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,9 +63,7 @@
-
-
-
-
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f9ce1e2..378a76b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,9 +63,7 @@
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f9ce1e2..378a76b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,9 +63,7 @@
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
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 ae048ce..79e7e11 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -60,7 +60,6 @@
import com.casic.detector.utils.ExcelHub
import com.casic.detector.utils.FileType
import com.casic.detector.utils.GpioManager
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.utils.LocationHub
import com.casic.detector.utils.RouteOnMap
@@ -89,6 +88,7 @@
import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.FileDownloadManager
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -133,7 +133,7 @@
/***inner class 需要用到*****start*/
private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] }
private val attr = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f9ce1e2..378a76b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,9 +63,7 @@
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
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 ae048ce..79e7e11 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -60,7 +60,6 @@
import com.casic.detector.utils.ExcelHub
import com.casic.detector.utils.FileType
import com.casic.detector.utils.GpioManager
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.utils.LocationHub
import com.casic.detector.utils.RouteOnMap
@@ -89,6 +88,7 @@
import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.FileDownloadManager
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -133,7 +133,7 @@
/***inner class 需要用到*****start*/
private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] }
private val attr = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build()
diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
deleted file mode 100644
index 3d8bb94..0000000
--- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-package com.casic.detector.view
-
-import android.graphics.Color
-import android.media.AudioAttributes
-import android.media.SoundPool
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.animation.Animation
-import android.view.animation.RotateAnimation
-import androidx.activity.OnBackPressedCallback
-import androidx.lifecycle.ViewModelProvider
-import com.casic.detector.R
-import com.casic.detector.bean.TaskBean
-import com.casic.detector.databinding.ActivitySearchLabelBinding
-import com.casic.detector.extensions.hexToString
-import com.casic.detector.extensions.isNumber
-import com.casic.detector.extensions.toHex
-import com.casic.detector.utils.DataBaseManager
-import com.casic.detector.utils.LoadingDialogHub
-import com.casic.detector.utils.LocationHub
-import com.casic.detector.utils.SerialPortManager
-import com.casic.detector.vm.TaskViewModel
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
-import java.text.DecimalFormat
-
-class SearchLabelActivity : KotlinBaseActivity(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "SearchLabelActivity"
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val decimal by lazy { DecimalFormat("0.0") }
- private val degreeCache by lazy { HashMap() }
- private val locationHub by lazy { LocationHub(this) }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private lateinit var taskViewModel: TaskViewModel
- private lateinit var slowSoundPool: SoundPool
- private lateinit var fastSoundPool: SoundPool
- private var slowResId = 0
- private var fastResId = 0
- private var markerId = ""
- private var taskLabel: TaskBean? = null
- private var isPlaying = false
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- initSoundResource()
- serialPortManager.detectMarker()
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
- //角度
- degreeCache["lastDegree"] = 0f
-
- //实时定位
-// locationHub.getCurrentLocation(false, object : ILocationListener {
-// override fun onAMapLocationGet(location: AMapLocation?) {
-// if (location != null) {
-// if (identifierId != "") {
-// val label = DataBaseManager.get.queryLabelById(identifierId).first()
-//
-// val result = location.calculateAngle(
-// LatLng(label.lat.toDouble(), label.lng.toDouble())
-// )
-//
-// binding.resultTextView.text =
-// "标识器ID ${identifierId},${result.direction} ${result.angle},距离 ${result.distance}"
-// }
-// }
-// }
-// })
- }
-
- override fun initEvent() {
- binding.depthButton.setOnClickListener {
-// serialPortManager.closeSerialPort()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- val tag = when (result.first().identifierType) {
- "EM30" -> '7'
- "EM50" -> '8'
- "EM14" -> '9'
- else -> '1'
- }
- if (tag == '1') {
- "此标识器无法读取埋深!".show(this)
- } else {
- // 发送读取标识器埋设深度指令
- LoadingDialogHub.show(this, "正在测距,请稍后...")
- serialPortManager.detectDepth(tag)
- object : CountDownTimer(15 * 1000, 1000) {
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- LoadingDialogHub.dismiss()
- "请重试".show(this@SearchLabelActivity)
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }.start()
- }
- } else {
- "标识器未安装,安装成功后才可读取埋深!".show(this)
- }
- }
-
- binding.markerInfoButton.setOnClickListener {
- //查库
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- navigatePageTo(result.first().toJson())
- } else {
- navigatePageTo(markerId)
- }
- }
-
- //返回键监听,替换onBackPressed
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- slowSoundPool.release()
- fastSoundPool.release()
- serialPortManager.closeSerialPort()
- finish()
- }
- })
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.startsWith("4E")) {
- try {
- //4E转为String为N,代表能量值
- //用能量值转动表盘
- val energyResponse = hex.take(10).hexToString()
- val energy = energyResponse.substring(1).toInt()
- if (energy >= 4000) {
- isPlaying = if (!isPlaying) {
- fastSoundPool.play(fastResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- fastSoundPool.stop(fastResId)
- false
- }
- } else {
- isPlaying = if (!isPlaying) {
- slowSoundPool.play(slowResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- slowSoundPool.stop(slowResId)
- false
- }
- }
-
- binding.resultTextView.text = "信号能量值:${energyResponse}"
-
- //转换为转动的角度
- val degree = (energy.toFloat() / (50 * 100)) * 180
- binding.energyValueView.text = decimal.format(degree)
-
- degreeCache["lastDegree"]?.apply {
- val animation = RotateAnimation(
- this, degree,
- Animation.RELATIVE_TO_SELF, 0.5f,
- Animation.RELATIVE_TO_SELF, 0.5f
- )
- animation.duration = 0
- animation.fillAfter = true
- binding.needleView.startAnimation(animation)
- }
-
- //保存旋转后的角度
- degreeCache["lastDegree"] = degree
-
- if (energy <= 700) {//18°
- binding.energyTipsView.text = "标识器信号较弱,可能距离较远"
- binding.energyTipsView.setTextColor(Color.parseColor("#8D1717"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red)
-
- binding.depthButton.isEnabled = false
- binding.depthButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable)
- binding.markerInfoButton.isEnabled = false
- binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable)
-
- binding.searchResultView.text = "未检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#8D1717"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red)
- } else if (energy >= 4100) {//148°
- binding.energyTipsView.text = "标识器信号极强,可能在正下方"
- binding.energyTipsView.setTextColor(Color.parseColor("#428d00"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green)
- } else {//[18°,148°]
- binding.energyTipsView.text = "已靠近标识器,请继续移动位置"
- binding.energyTipsView.setTextColor(Color.parseColor("#8C5700"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow)
- }
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else if (hex.startsWith("53")) {
- LoadingDialogHub.dismiss()
- try {
- val depthResponse = hex.take(10).hexToString()
- val depth = depthResponse.drop(4)
- AlertMessageDialog.Builder()
- .setContext(this@SearchLabelActivity)
- .setTitle("温馨提示")
- .setMessage("标识器埋深:${depth}厘米")
- .setPositiveButton("知道了")
- .setOnDialogButtonClickListener(object :
- AlertMessageDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }).build().show()
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else {
- if (hex.length >= 20) {
- val id = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- markerId = id
-
- binding.depthButton.isEnabled = true
- binding.depthButton.setTextColor(Color.WHITE)
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable)
- binding.markerInfoButton.isEnabled = true
- binding.markerInfoButton.setTextColor(Color.WHITE)
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable)
-
- binding.searchResultView.text = "已检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#428d00"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green)
-
- //自动上传标识器
- taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(
- markerId, "未开始"
- )
- taskLabel?.apply {
- /**
- * 此taskCode是 [com.casic.detector.model.TaskModel.MessageModel.TaskDetailInfosModel] 里面的主键,也就是这个标签在数据库里面的主键
- * */
- taskViewModel.uploadMarker(taskCode)
- }
- }
- }
- }
- }
-
- private fun initSoundResource() {
- /**
- * 声音效果速度
- * ling
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
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 ae048ce..79e7e11 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -60,7 +60,6 @@
import com.casic.detector.utils.ExcelHub
import com.casic.detector.utils.FileType
import com.casic.detector.utils.GpioManager
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.utils.LocationHub
import com.casic.detector.utils.RouteOnMap
@@ -89,6 +88,7 @@
import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.FileDownloadManager
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -133,7 +133,7 @@
/***inner class 需要用到*****start*/
private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] }
private val attr = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build()
diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
deleted file mode 100644
index 3d8bb94..0000000
--- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-package com.casic.detector.view
-
-import android.graphics.Color
-import android.media.AudioAttributes
-import android.media.SoundPool
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.animation.Animation
-import android.view.animation.RotateAnimation
-import androidx.activity.OnBackPressedCallback
-import androidx.lifecycle.ViewModelProvider
-import com.casic.detector.R
-import com.casic.detector.bean.TaskBean
-import com.casic.detector.databinding.ActivitySearchLabelBinding
-import com.casic.detector.extensions.hexToString
-import com.casic.detector.extensions.isNumber
-import com.casic.detector.extensions.toHex
-import com.casic.detector.utils.DataBaseManager
-import com.casic.detector.utils.LoadingDialogHub
-import com.casic.detector.utils.LocationHub
-import com.casic.detector.utils.SerialPortManager
-import com.casic.detector.vm.TaskViewModel
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
-import java.text.DecimalFormat
-
-class SearchLabelActivity : KotlinBaseActivity(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "SearchLabelActivity"
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val decimal by lazy { DecimalFormat("0.0") }
- private val degreeCache by lazy { HashMap() }
- private val locationHub by lazy { LocationHub(this) }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private lateinit var taskViewModel: TaskViewModel
- private lateinit var slowSoundPool: SoundPool
- private lateinit var fastSoundPool: SoundPool
- private var slowResId = 0
- private var fastResId = 0
- private var markerId = ""
- private var taskLabel: TaskBean? = null
- private var isPlaying = false
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- initSoundResource()
- serialPortManager.detectMarker()
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
- //角度
- degreeCache["lastDegree"] = 0f
-
- //实时定位
-// locationHub.getCurrentLocation(false, object : ILocationListener {
-// override fun onAMapLocationGet(location: AMapLocation?) {
-// if (location != null) {
-// if (identifierId != "") {
-// val label = DataBaseManager.get.queryLabelById(identifierId).first()
-//
-// val result = location.calculateAngle(
-// LatLng(label.lat.toDouble(), label.lng.toDouble())
-// )
-//
-// binding.resultTextView.text =
-// "标识器ID ${identifierId},${result.direction} ${result.angle},距离 ${result.distance}"
-// }
-// }
-// }
-// })
- }
-
- override fun initEvent() {
- binding.depthButton.setOnClickListener {
-// serialPortManager.closeSerialPort()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- val tag = when (result.first().identifierType) {
- "EM30" -> '7'
- "EM50" -> '8'
- "EM14" -> '9'
- else -> '1'
- }
- if (tag == '1') {
- "此标识器无法读取埋深!".show(this)
- } else {
- // 发送读取标识器埋设深度指令
- LoadingDialogHub.show(this, "正在测距,请稍后...")
- serialPortManager.detectDepth(tag)
- object : CountDownTimer(15 * 1000, 1000) {
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- LoadingDialogHub.dismiss()
- "请重试".show(this@SearchLabelActivity)
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }.start()
- }
- } else {
- "标识器未安装,安装成功后才可读取埋深!".show(this)
- }
- }
-
- binding.markerInfoButton.setOnClickListener {
- //查库
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- navigatePageTo(result.first().toJson())
- } else {
- navigatePageTo(markerId)
- }
- }
-
- //返回键监听,替换onBackPressed
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- slowSoundPool.release()
- fastSoundPool.release()
- serialPortManager.closeSerialPort()
- finish()
- }
- })
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.startsWith("4E")) {
- try {
- //4E转为String为N,代表能量值
- //用能量值转动表盘
- val energyResponse = hex.take(10).hexToString()
- val energy = energyResponse.substring(1).toInt()
- if (energy >= 4000) {
- isPlaying = if (!isPlaying) {
- fastSoundPool.play(fastResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- fastSoundPool.stop(fastResId)
- false
- }
- } else {
- isPlaying = if (!isPlaying) {
- slowSoundPool.play(slowResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- slowSoundPool.stop(slowResId)
- false
- }
- }
-
- binding.resultTextView.text = "信号能量值:${energyResponse}"
-
- //转换为转动的角度
- val degree = (energy.toFloat() / (50 * 100)) * 180
- binding.energyValueView.text = decimal.format(degree)
-
- degreeCache["lastDegree"]?.apply {
- val animation = RotateAnimation(
- this, degree,
- Animation.RELATIVE_TO_SELF, 0.5f,
- Animation.RELATIVE_TO_SELF, 0.5f
- )
- animation.duration = 0
- animation.fillAfter = true
- binding.needleView.startAnimation(animation)
- }
-
- //保存旋转后的角度
- degreeCache["lastDegree"] = degree
-
- if (energy <= 700) {//18°
- binding.energyTipsView.text = "标识器信号较弱,可能距离较远"
- binding.energyTipsView.setTextColor(Color.parseColor("#8D1717"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red)
-
- binding.depthButton.isEnabled = false
- binding.depthButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable)
- binding.markerInfoButton.isEnabled = false
- binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable)
-
- binding.searchResultView.text = "未检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#8D1717"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red)
- } else if (energy >= 4100) {//148°
- binding.energyTipsView.text = "标识器信号极强,可能在正下方"
- binding.energyTipsView.setTextColor(Color.parseColor("#428d00"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green)
- } else {//[18°,148°]
- binding.energyTipsView.text = "已靠近标识器,请继续移动位置"
- binding.energyTipsView.setTextColor(Color.parseColor("#8C5700"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow)
- }
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else if (hex.startsWith("53")) {
- LoadingDialogHub.dismiss()
- try {
- val depthResponse = hex.take(10).hexToString()
- val depth = depthResponse.drop(4)
- AlertMessageDialog.Builder()
- .setContext(this@SearchLabelActivity)
- .setTitle("温馨提示")
- .setMessage("标识器埋深:${depth}厘米")
- .setPositiveButton("知道了")
- .setOnDialogButtonClickListener(object :
- AlertMessageDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }).build().show()
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else {
- if (hex.length >= 20) {
- val id = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- markerId = id
-
- binding.depthButton.isEnabled = true
- binding.depthButton.setTextColor(Color.WHITE)
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable)
- binding.markerInfoButton.isEnabled = true
- binding.markerInfoButton.setTextColor(Color.WHITE)
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable)
-
- binding.searchResultView.text = "已检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#428d00"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green)
-
- //自动上传标识器
- taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(
- markerId, "未开始"
- )
- taskLabel?.apply {
- /**
- * 此taskCode是 [com.casic.detector.model.TaskModel.MessageModel.TaskDetailInfosModel] 里面的主键,也就是这个标签在数据库里面的主键
- * */
- taskViewModel.uploadMarker(taskCode)
- }
- }
- }
- }
- }
-
- private fun initSoundResource() {
- /**
- * 声音效果速度
- * ling
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
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 ae048ce..79e7e11 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -60,7 +60,6 @@
import com.casic.detector.utils.ExcelHub
import com.casic.detector.utils.FileType
import com.casic.detector.utils.GpioManager
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.utils.LocationHub
import com.casic.detector.utils.RouteOnMap
@@ -89,6 +88,7 @@
import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.FileDownloadManager
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -133,7 +133,7 @@
/***inner class 需要用到*****start*/
private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] }
private val attr = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build()
diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
deleted file mode 100644
index 3d8bb94..0000000
--- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-package com.casic.detector.view
-
-import android.graphics.Color
-import android.media.AudioAttributes
-import android.media.SoundPool
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.animation.Animation
-import android.view.animation.RotateAnimation
-import androidx.activity.OnBackPressedCallback
-import androidx.lifecycle.ViewModelProvider
-import com.casic.detector.R
-import com.casic.detector.bean.TaskBean
-import com.casic.detector.databinding.ActivitySearchLabelBinding
-import com.casic.detector.extensions.hexToString
-import com.casic.detector.extensions.isNumber
-import com.casic.detector.extensions.toHex
-import com.casic.detector.utils.DataBaseManager
-import com.casic.detector.utils.LoadingDialogHub
-import com.casic.detector.utils.LocationHub
-import com.casic.detector.utils.SerialPortManager
-import com.casic.detector.vm.TaskViewModel
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
-import java.text.DecimalFormat
-
-class SearchLabelActivity : KotlinBaseActivity(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "SearchLabelActivity"
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val decimal by lazy { DecimalFormat("0.0") }
- private val degreeCache by lazy { HashMap() }
- private val locationHub by lazy { LocationHub(this) }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private lateinit var taskViewModel: TaskViewModel
- private lateinit var slowSoundPool: SoundPool
- private lateinit var fastSoundPool: SoundPool
- private var slowResId = 0
- private var fastResId = 0
- private var markerId = ""
- private var taskLabel: TaskBean? = null
- private var isPlaying = false
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- initSoundResource()
- serialPortManager.detectMarker()
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
- //角度
- degreeCache["lastDegree"] = 0f
-
- //实时定位
-// locationHub.getCurrentLocation(false, object : ILocationListener {
-// override fun onAMapLocationGet(location: AMapLocation?) {
-// if (location != null) {
-// if (identifierId != "") {
-// val label = DataBaseManager.get.queryLabelById(identifierId).first()
-//
-// val result = location.calculateAngle(
-// LatLng(label.lat.toDouble(), label.lng.toDouble())
-// )
-//
-// binding.resultTextView.text =
-// "标识器ID ${identifierId},${result.direction} ${result.angle},距离 ${result.distance}"
-// }
-// }
-// }
-// })
- }
-
- override fun initEvent() {
- binding.depthButton.setOnClickListener {
-// serialPortManager.closeSerialPort()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- val tag = when (result.first().identifierType) {
- "EM30" -> '7'
- "EM50" -> '8'
- "EM14" -> '9'
- else -> '1'
- }
- if (tag == '1') {
- "此标识器无法读取埋深!".show(this)
- } else {
- // 发送读取标识器埋设深度指令
- LoadingDialogHub.show(this, "正在测距,请稍后...")
- serialPortManager.detectDepth(tag)
- object : CountDownTimer(15 * 1000, 1000) {
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- LoadingDialogHub.dismiss()
- "请重试".show(this@SearchLabelActivity)
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }.start()
- }
- } else {
- "标识器未安装,安装成功后才可读取埋深!".show(this)
- }
- }
-
- binding.markerInfoButton.setOnClickListener {
- //查库
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- navigatePageTo(result.first().toJson())
- } else {
- navigatePageTo(markerId)
- }
- }
-
- //返回键监听,替换onBackPressed
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- slowSoundPool.release()
- fastSoundPool.release()
- serialPortManager.closeSerialPort()
- finish()
- }
- })
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.startsWith("4E")) {
- try {
- //4E转为String为N,代表能量值
- //用能量值转动表盘
- val energyResponse = hex.take(10).hexToString()
- val energy = energyResponse.substring(1).toInt()
- if (energy >= 4000) {
- isPlaying = if (!isPlaying) {
- fastSoundPool.play(fastResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- fastSoundPool.stop(fastResId)
- false
- }
- } else {
- isPlaying = if (!isPlaying) {
- slowSoundPool.play(slowResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- slowSoundPool.stop(slowResId)
- false
- }
- }
-
- binding.resultTextView.text = "信号能量值:${energyResponse}"
-
- //转换为转动的角度
- val degree = (energy.toFloat() / (50 * 100)) * 180
- binding.energyValueView.text = decimal.format(degree)
-
- degreeCache["lastDegree"]?.apply {
- val animation = RotateAnimation(
- this, degree,
- Animation.RELATIVE_TO_SELF, 0.5f,
- Animation.RELATIVE_TO_SELF, 0.5f
- )
- animation.duration = 0
- animation.fillAfter = true
- binding.needleView.startAnimation(animation)
- }
-
- //保存旋转后的角度
- degreeCache["lastDegree"] = degree
-
- if (energy <= 700) {//18°
- binding.energyTipsView.text = "标识器信号较弱,可能距离较远"
- binding.energyTipsView.setTextColor(Color.parseColor("#8D1717"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red)
-
- binding.depthButton.isEnabled = false
- binding.depthButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable)
- binding.markerInfoButton.isEnabled = false
- binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable)
-
- binding.searchResultView.text = "未检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#8D1717"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red)
- } else if (energy >= 4100) {//148°
- binding.energyTipsView.text = "标识器信号极强,可能在正下方"
- binding.energyTipsView.setTextColor(Color.parseColor("#428d00"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green)
- } else {//[18°,148°]
- binding.energyTipsView.text = "已靠近标识器,请继续移动位置"
- binding.energyTipsView.setTextColor(Color.parseColor("#8C5700"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow)
- }
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else if (hex.startsWith("53")) {
- LoadingDialogHub.dismiss()
- try {
- val depthResponse = hex.take(10).hexToString()
- val depth = depthResponse.drop(4)
- AlertMessageDialog.Builder()
- .setContext(this@SearchLabelActivity)
- .setTitle("温馨提示")
- .setMessage("标识器埋深:${depth}厘米")
- .setPositiveButton("知道了")
- .setOnDialogButtonClickListener(object :
- AlertMessageDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }).build().show()
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else {
- if (hex.length >= 20) {
- val id = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- markerId = id
-
- binding.depthButton.isEnabled = true
- binding.depthButton.setTextColor(Color.WHITE)
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable)
- binding.markerInfoButton.isEnabled = true
- binding.markerInfoButton.setTextColor(Color.WHITE)
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable)
-
- binding.searchResultView.text = "已检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#428d00"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green)
-
- //自动上传标识器
- taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(
- markerId, "未开始"
- )
- taskLabel?.apply {
- /**
- * 此taskCode是 [com.casic.detector.model.TaskModel.MessageModel.TaskDetailInfosModel] 里面的主键,也就是这个标签在数据库里面的主键
- * */
- taskViewModel.uploadMarker(taskCode)
- }
- }
- }
- }
- }
-
- private fun initSoundResource() {
- /**
- * 声音效果速度
- * ling
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
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 ae048ce..79e7e11 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -60,7 +60,6 @@
import com.casic.detector.utils.ExcelHub
import com.casic.detector.utils.FileType
import com.casic.detector.utils.GpioManager
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.utils.LocationHub
import com.casic.detector.utils.RouteOnMap
@@ -89,6 +88,7 @@
import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.FileDownloadManager
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -133,7 +133,7 @@
/***inner class 需要用到*****start*/
private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] }
private val attr = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build()
diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
deleted file mode 100644
index 3d8bb94..0000000
--- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-package com.casic.detector.view
-
-import android.graphics.Color
-import android.media.AudioAttributes
-import android.media.SoundPool
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.animation.Animation
-import android.view.animation.RotateAnimation
-import androidx.activity.OnBackPressedCallback
-import androidx.lifecycle.ViewModelProvider
-import com.casic.detector.R
-import com.casic.detector.bean.TaskBean
-import com.casic.detector.databinding.ActivitySearchLabelBinding
-import com.casic.detector.extensions.hexToString
-import com.casic.detector.extensions.isNumber
-import com.casic.detector.extensions.toHex
-import com.casic.detector.utils.DataBaseManager
-import com.casic.detector.utils.LoadingDialogHub
-import com.casic.detector.utils.LocationHub
-import com.casic.detector.utils.SerialPortManager
-import com.casic.detector.vm.TaskViewModel
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
-import java.text.DecimalFormat
-
-class SearchLabelActivity : KotlinBaseActivity(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "SearchLabelActivity"
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val decimal by lazy { DecimalFormat("0.0") }
- private val degreeCache by lazy { HashMap() }
- private val locationHub by lazy { LocationHub(this) }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private lateinit var taskViewModel: TaskViewModel
- private lateinit var slowSoundPool: SoundPool
- private lateinit var fastSoundPool: SoundPool
- private var slowResId = 0
- private var fastResId = 0
- private var markerId = ""
- private var taskLabel: TaskBean? = null
- private var isPlaying = false
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- initSoundResource()
- serialPortManager.detectMarker()
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
- //角度
- degreeCache["lastDegree"] = 0f
-
- //实时定位
-// locationHub.getCurrentLocation(false, object : ILocationListener {
-// override fun onAMapLocationGet(location: AMapLocation?) {
-// if (location != null) {
-// if (identifierId != "") {
-// val label = DataBaseManager.get.queryLabelById(identifierId).first()
-//
-// val result = location.calculateAngle(
-// LatLng(label.lat.toDouble(), label.lng.toDouble())
-// )
-//
-// binding.resultTextView.text =
-// "标识器ID ${identifierId},${result.direction} ${result.angle},距离 ${result.distance}"
-// }
-// }
-// }
-// })
- }
-
- override fun initEvent() {
- binding.depthButton.setOnClickListener {
-// serialPortManager.closeSerialPort()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- val tag = when (result.first().identifierType) {
- "EM30" -> '7'
- "EM50" -> '8'
- "EM14" -> '9'
- else -> '1'
- }
- if (tag == '1') {
- "此标识器无法读取埋深!".show(this)
- } else {
- // 发送读取标识器埋设深度指令
- LoadingDialogHub.show(this, "正在测距,请稍后...")
- serialPortManager.detectDepth(tag)
- object : CountDownTimer(15 * 1000, 1000) {
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- LoadingDialogHub.dismiss()
- "请重试".show(this@SearchLabelActivity)
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }.start()
- }
- } else {
- "标识器未安装,安装成功后才可读取埋深!".show(this)
- }
- }
-
- binding.markerInfoButton.setOnClickListener {
- //查库
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- navigatePageTo(result.first().toJson())
- } else {
- navigatePageTo(markerId)
- }
- }
-
- //返回键监听,替换onBackPressed
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- slowSoundPool.release()
- fastSoundPool.release()
- serialPortManager.closeSerialPort()
- finish()
- }
- })
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.startsWith("4E")) {
- try {
- //4E转为String为N,代表能量值
- //用能量值转动表盘
- val energyResponse = hex.take(10).hexToString()
- val energy = energyResponse.substring(1).toInt()
- if (energy >= 4000) {
- isPlaying = if (!isPlaying) {
- fastSoundPool.play(fastResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- fastSoundPool.stop(fastResId)
- false
- }
- } else {
- isPlaying = if (!isPlaying) {
- slowSoundPool.play(slowResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- slowSoundPool.stop(slowResId)
- false
- }
- }
-
- binding.resultTextView.text = "信号能量值:${energyResponse}"
-
- //转换为转动的角度
- val degree = (energy.toFloat() / (50 * 100)) * 180
- binding.energyValueView.text = decimal.format(degree)
-
- degreeCache["lastDegree"]?.apply {
- val animation = RotateAnimation(
- this, degree,
- Animation.RELATIVE_TO_SELF, 0.5f,
- Animation.RELATIVE_TO_SELF, 0.5f
- )
- animation.duration = 0
- animation.fillAfter = true
- binding.needleView.startAnimation(animation)
- }
-
- //保存旋转后的角度
- degreeCache["lastDegree"] = degree
-
- if (energy <= 700) {//18°
- binding.energyTipsView.text = "标识器信号较弱,可能距离较远"
- binding.energyTipsView.setTextColor(Color.parseColor("#8D1717"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red)
-
- binding.depthButton.isEnabled = false
- binding.depthButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable)
- binding.markerInfoButton.isEnabled = false
- binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable)
-
- binding.searchResultView.text = "未检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#8D1717"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red)
- } else if (energy >= 4100) {//148°
- binding.energyTipsView.text = "标识器信号极强,可能在正下方"
- binding.energyTipsView.setTextColor(Color.parseColor("#428d00"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green)
- } else {//[18°,148°]
- binding.energyTipsView.text = "已靠近标识器,请继续移动位置"
- binding.energyTipsView.setTextColor(Color.parseColor("#8C5700"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow)
- }
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else if (hex.startsWith("53")) {
- LoadingDialogHub.dismiss()
- try {
- val depthResponse = hex.take(10).hexToString()
- val depth = depthResponse.drop(4)
- AlertMessageDialog.Builder()
- .setContext(this@SearchLabelActivity)
- .setTitle("温馨提示")
- .setMessage("标识器埋深:${depth}厘米")
- .setPositiveButton("知道了")
- .setOnDialogButtonClickListener(object :
- AlertMessageDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }).build().show()
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else {
- if (hex.length >= 20) {
- val id = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- markerId = id
-
- binding.depthButton.isEnabled = true
- binding.depthButton.setTextColor(Color.WHITE)
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable)
- binding.markerInfoButton.isEnabled = true
- binding.markerInfoButton.setTextColor(Color.WHITE)
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable)
-
- binding.searchResultView.text = "已检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#428d00"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green)
-
- //自动上传标识器
- taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(
- markerId, "未开始"
- )
- taskLabel?.apply {
- /**
- * 此taskCode是 [com.casic.detector.model.TaskModel.MessageModel.TaskDetailInfosModel] 里面的主键,也就是这个标签在数据库里面的主键
- * */
- taskViewModel.uploadMarker(taskCode)
- }
- }
- }
- }
- }
-
- private fun initSoundResource() {
- /**
- * 声音效果速度
- * ling
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f9ce1e2..378a76b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,9 +63,7 @@
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
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 ae048ce..79e7e11 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -60,7 +60,6 @@
import com.casic.detector.utils.ExcelHub
import com.casic.detector.utils.FileType
import com.casic.detector.utils.GpioManager
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.utils.LocationHub
import com.casic.detector.utils.RouteOnMap
@@ -89,6 +88,7 @@
import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.FileDownloadManager
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -133,7 +133,7 @@
/***inner class 需要用到*****start*/
private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] }
private val attr = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build()
diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
deleted file mode 100644
index 3d8bb94..0000000
--- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-package com.casic.detector.view
-
-import android.graphics.Color
-import android.media.AudioAttributes
-import android.media.SoundPool
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.animation.Animation
-import android.view.animation.RotateAnimation
-import androidx.activity.OnBackPressedCallback
-import androidx.lifecycle.ViewModelProvider
-import com.casic.detector.R
-import com.casic.detector.bean.TaskBean
-import com.casic.detector.databinding.ActivitySearchLabelBinding
-import com.casic.detector.extensions.hexToString
-import com.casic.detector.extensions.isNumber
-import com.casic.detector.extensions.toHex
-import com.casic.detector.utils.DataBaseManager
-import com.casic.detector.utils.LoadingDialogHub
-import com.casic.detector.utils.LocationHub
-import com.casic.detector.utils.SerialPortManager
-import com.casic.detector.vm.TaskViewModel
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
-import java.text.DecimalFormat
-
-class SearchLabelActivity : KotlinBaseActivity(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "SearchLabelActivity"
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val decimal by lazy { DecimalFormat("0.0") }
- private val degreeCache by lazy { HashMap() }
- private val locationHub by lazy { LocationHub(this) }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private lateinit var taskViewModel: TaskViewModel
- private lateinit var slowSoundPool: SoundPool
- private lateinit var fastSoundPool: SoundPool
- private var slowResId = 0
- private var fastResId = 0
- private var markerId = ""
- private var taskLabel: TaskBean? = null
- private var isPlaying = false
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- initSoundResource()
- serialPortManager.detectMarker()
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
- //角度
- degreeCache["lastDegree"] = 0f
-
- //实时定位
-// locationHub.getCurrentLocation(false, object : ILocationListener {
-// override fun onAMapLocationGet(location: AMapLocation?) {
-// if (location != null) {
-// if (identifierId != "") {
-// val label = DataBaseManager.get.queryLabelById(identifierId).first()
-//
-// val result = location.calculateAngle(
-// LatLng(label.lat.toDouble(), label.lng.toDouble())
-// )
-//
-// binding.resultTextView.text =
-// "标识器ID ${identifierId},${result.direction} ${result.angle},距离 ${result.distance}"
-// }
-// }
-// }
-// })
- }
-
- override fun initEvent() {
- binding.depthButton.setOnClickListener {
-// serialPortManager.closeSerialPort()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- val tag = when (result.first().identifierType) {
- "EM30" -> '7'
- "EM50" -> '8'
- "EM14" -> '9'
- else -> '1'
- }
- if (tag == '1') {
- "此标识器无法读取埋深!".show(this)
- } else {
- // 发送读取标识器埋设深度指令
- LoadingDialogHub.show(this, "正在测距,请稍后...")
- serialPortManager.detectDepth(tag)
- object : CountDownTimer(15 * 1000, 1000) {
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- LoadingDialogHub.dismiss()
- "请重试".show(this@SearchLabelActivity)
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }.start()
- }
- } else {
- "标识器未安装,安装成功后才可读取埋深!".show(this)
- }
- }
-
- binding.markerInfoButton.setOnClickListener {
- //查库
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- navigatePageTo(result.first().toJson())
- } else {
- navigatePageTo(markerId)
- }
- }
-
- //返回键监听,替换onBackPressed
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- slowSoundPool.release()
- fastSoundPool.release()
- serialPortManager.closeSerialPort()
- finish()
- }
- })
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.startsWith("4E")) {
- try {
- //4E转为String为N,代表能量值
- //用能量值转动表盘
- val energyResponse = hex.take(10).hexToString()
- val energy = energyResponse.substring(1).toInt()
- if (energy >= 4000) {
- isPlaying = if (!isPlaying) {
- fastSoundPool.play(fastResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- fastSoundPool.stop(fastResId)
- false
- }
- } else {
- isPlaying = if (!isPlaying) {
- slowSoundPool.play(slowResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- slowSoundPool.stop(slowResId)
- false
- }
- }
-
- binding.resultTextView.text = "信号能量值:${energyResponse}"
-
- //转换为转动的角度
- val degree = (energy.toFloat() / (50 * 100)) * 180
- binding.energyValueView.text = decimal.format(degree)
-
- degreeCache["lastDegree"]?.apply {
- val animation = RotateAnimation(
- this, degree,
- Animation.RELATIVE_TO_SELF, 0.5f,
- Animation.RELATIVE_TO_SELF, 0.5f
- )
- animation.duration = 0
- animation.fillAfter = true
- binding.needleView.startAnimation(animation)
- }
-
- //保存旋转后的角度
- degreeCache["lastDegree"] = degree
-
- if (energy <= 700) {//18°
- binding.energyTipsView.text = "标识器信号较弱,可能距离较远"
- binding.energyTipsView.setTextColor(Color.parseColor("#8D1717"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red)
-
- binding.depthButton.isEnabled = false
- binding.depthButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable)
- binding.markerInfoButton.isEnabled = false
- binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable)
-
- binding.searchResultView.text = "未检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#8D1717"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red)
- } else if (energy >= 4100) {//148°
- binding.energyTipsView.text = "标识器信号极强,可能在正下方"
- binding.energyTipsView.setTextColor(Color.parseColor("#428d00"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green)
- } else {//[18°,148°]
- binding.energyTipsView.text = "已靠近标识器,请继续移动位置"
- binding.energyTipsView.setTextColor(Color.parseColor("#8C5700"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow)
- }
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else if (hex.startsWith("53")) {
- LoadingDialogHub.dismiss()
- try {
- val depthResponse = hex.take(10).hexToString()
- val depth = depthResponse.drop(4)
- AlertMessageDialog.Builder()
- .setContext(this@SearchLabelActivity)
- .setTitle("温馨提示")
- .setMessage("标识器埋深:${depth}厘米")
- .setPositiveButton("知道了")
- .setOnDialogButtonClickListener(object :
- AlertMessageDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }).build().show()
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else {
- if (hex.length >= 20) {
- val id = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- markerId = id
-
- binding.depthButton.isEnabled = true
- binding.depthButton.setTextColor(Color.WHITE)
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable)
- binding.markerInfoButton.isEnabled = true
- binding.markerInfoButton.setTextColor(Color.WHITE)
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable)
-
- binding.searchResultView.text = "已检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#428d00"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green)
-
- //自动上传标识器
- taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(
- markerId, "未开始"
- )
- taskLabel?.apply {
- /**
- * 此taskCode是 [com.casic.detector.model.TaskModel.MessageModel.TaskDetailInfosModel] 里面的主键,也就是这个标签在数据库里面的主键
- * */
- taskViewModel.uploadMarker(taskCode)
- }
- }
- }
- }
- }
-
- private fun initSoundResource() {
- /**
- * 声音效果速度
- * ling
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/activity_search_demo.xml b/app/src/main/res/layout/activity_search_demo.xml
new file mode 100644
index 0000000..dbe732b
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_demo.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f9ce1e2..378a76b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -63,9 +63,7 @@
-
-
(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "InstallLabelActivity"
- private val context = this@InstallLabelActivity
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val calendar by lazy { Calendar.getInstance() }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private val realPaths = ArrayList() //真实图片路径
- private val locationHub by lazy { LocationHub(this) }
- private lateinit var imageAdapter: EditableImageAdapter
- private lateinit var taskViewModel: TaskViewModel
- private var soundPool: SoundPool? = null
-
- override fun initViewBinding(): ActivityInstallLabelBinding {
- return ActivityInstallLabelBinding.inflate(layoutInflater)
- }
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
-
- imageAdapter = EditableImageAdapter(this, 3, 3)
- binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
-
- //设置默认值
- binding.objectInclude.markerObjectTypeView.setText("markerObjectTypeView".getDefaultValue())
- binding.objectInclude.pipelineDiameterView.setText("pipelineDiameterView".getDefaultValue())
- binding.objectInclude.buryDeepView.setText("buryDeepView".getDefaultValue())
- binding.objectInclude.downPipeDiameterView.setText("downPipeDiameterView".getDefaultValue())
- binding.objectInclude.downPointDeepView.setText("downPointDeepView".getDefaultValue())
- binding.objectInclude.areaView.setText("areaView".getDefaultValue())
- binding.objectInclude.lineView.setText("lineView".getDefaultValue())
- binding.objectInclude.roadView.setText("roadView".getDefaultValue())
- binding.objectInclude.ownerView.setText("ownerView".getDefaultValue())
- binding.identifierInclude.identifierDeepView.setText("identifierDeepView".getDefaultValue())
- binding.identifierInclude.personDeptView.setText("personDeptView".getDefaultValue())
- }
-
- override fun initEvent() {
- binding.titleInclude.leftBackView.setOnClickListener { finish() }
-
- /**************************************************************************************/
- binding.objectInclude.objectTypeSpinner.show(this, LocaleConstant.POINT_TYPE_ARRAY, 0)
- binding.objectInclude.materialSpinner.show(this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0)
- binding.objectInclude.downPipeTypeSpinner.show(this, LocaleConstant.DOWN_PIPE_TYPE_ARRAY, 0)
- binding.objectInclude.downPipeMaterialSpinner.show(
- this, LocaleConstant.PIPE_MATERIAL_ARRAY, 0
- )
- binding.objectInclude.buryMethodSpinner.show(this, LocaleConstant.BURY_METHOD_ARRAY, 0)
-
- binding.objectInclude.constructDateView.setOnClickListener {
- val datePicker = DatePickerDialog(
- this,
- null,
- calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH)
- )
- datePicker.show()
-
- datePicker.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
- val year = datePicker.datePicker.year
- val month = datePicker.datePicker.month + 1
- val day = datePicker.datePicker.dayOfMonth
- val selectedDate = String.format(
- "%s-%s-%s", year, month.appendZero(), day.appendZero()
- )
-
- //当前时间
- val current = System.currentTimeMillis().timestampToTime()
- val today = "$selectedDate $current".dateToTimestamp()
- if (Date(today).after(Date())) {
- "建设年代不能早于当前日期".show(context)
- } else {
- datePicker.dismiss()
- binding.objectInclude.constructDateView.text = selectedDate
- }
- }
- }
-
- binding.identifierInclude.identifierTypeSpinner.show(
- this, LocaleConstant.IDENTIFIER_TYPE_ARRAY, 0
- )
-
- binding.identifierInclude.installTimeView.text =
- System.currentTimeMillis().timestampToCompleteDate()
- locationHub.getCurrentLocation(true, object : ILocationListener {
- override fun onAMapLocationGet(location: AMapLocation?) {
- if (location != null) {
- binding.identifierInclude.lngView.text = location.longitude.toString()
- binding.identifierInclude.latView.text = location.latitude.toString()
- } else {
- "当前位置信号差,无法获取定位".show(context)
- }
- }
- })
-
- binding.identifierInclude.colorSpinner.show(this, LocaleConstant.COLOR_ARRAY, 0)
-
- imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
- override fun onAddImageClick() {
- takePicture()
- }
-
- override fun onItemClick(position: Int) {
- if (realPaths[position].isEmpty()) {
- "图片加载失败,无法查看大图".show(context)
- } else {
- context.navigatePageTo(position, realPaths)
- }
- }
-
- override fun onItemLongClick(view: View?, position: Int) {
- imageAdapter.deleteImage(position)
- }
- })
- /**************************************************************************************/
- binding.installButton.setOnClickListener {
- if (isNetworkConnected()) {
- val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
- if (binding.objectInclude.markerObjectTypeView.text.isNullOrBlank()) {
- when (binding.objectInclude.objectTypeSpinner.selectedItem.toString()) {
- "管线" -> {
- "请输入管线种类!".show(this)
- }
-
- "管线附属物" -> {
- "请输入附属物名称!".show(this)
- }
-
- "管线特征管点" -> {
- "请输入特征管点!".show(this)
- }
-
- "交叉穿越点" -> {
- "请输入上层管种类!".show(this)
- }
- }
- return@setOnClickListener
- }
-
- if (binding.objectInclude.pipelineDiameterView.text.isNullOrBlank()) {
- "请输入管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.buryDeepView.text.isNullOrBlank()) {
- "请输入埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.downPipeDiameterView.text.isNullOrBlank()) {
- "请输入下层管管径".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.areaView.text.isNullOrBlank()) {
- "请输入所属区域".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.lineView.text.isNullOrBlank()) {
- "请输入所属线路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.roadView.text.isNullOrBlank()) {
- "请输入所属道路".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.constructDateView.text.isNullOrBlank()) {
- "请选择建设年代".show(this)
- return@setOnClickListener
- }
-
- if (binding.objectInclude.ownerView.text.isNullOrBlank()) {
- "请输入权属单位".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierIdView.text.isNullOrBlank()) {
- "请先读取标识器获取ID".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.identifierDeepView.text.isNullOrBlank()) {
- "请输入标识器埋深".show(this)
- return@setOnClickListener
- }
-
- if (binding.identifierInclude.personDeptView.text.isNullOrBlank()) {
- "请输入标识器安装部门".show(this)
- return@setOnClickListener
- }
-
- //查本地库
- val markerId = binding.identifierInclude.identifierIdView.text.toString()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isEmpty()) {
- "".show(this)
- return@setOnClickListener
- }
-
- //先存本地再上传服务器
- saveLabelInLocal()
-
- taskViewModel.installLabel(
- companyId,
- binding.objectInclude.objectTypeSpinner.selectedItem.toString().toObjectType(),
- binding.objectInclude.markerObjectTypeView.text.toString(),
- binding.objectInclude.materialSpinner.selectedItem.toString(),
- "${binding.objectInclude.pipelineDiameterView.text}mm",
- "${binding.objectInclude.buryDeepView.text}mm",
- binding.objectInclude.downPipeTypeSpinner.selectedItem.toString(),
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString(),
- "${binding.objectInclude.downPipeDiameterView.text}mm",
- "${binding.objectInclude.downPointDeepView.text}mm",
- binding.objectInclude.buryMethodSpinner.selectedItem.toString(),
- binding.objectInclude.areaView.text.toString(),
- binding.objectInclude.lineView.text.toString(),
- binding.objectInclude.roadView.text.toString(),
- binding.objectInclude.constructDateView.text.toString(),
- binding.objectInclude.ownerView.text.toString(),
- objectId,
- markerId,
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString(),
- "${binding.identifierInclude.identifierDeepView.text}mm",
- binding.identifierInclude.personDeptView.text.toString(),
- binding.identifierInclude.installTimeView.text.toString(),
- binding.identifierInclude.lngView.text.toString(),
- binding.identifierInclude.latView.text.toString(),
- binding.identifierInclude.colorSpinner.selectedItem.toString().toColor(),
- binding.remarkView.text.toString(),
- realPaths
- )
-
- //保存默认值
- "markerObjectTypeView".setDefaultValue(binding.objectInclude.markerObjectTypeView.text.toString())
- "pipelineDiameterView".setDefaultValue(binding.objectInclude.pipelineDiameterView.text.toString())
- "buryDeepView".setDefaultValue(binding.objectInclude.buryDeepView.text.toString())
- "downPipeDiameterView".setDefaultValue(binding.objectInclude.downPipeDiameterView.text.toString())
- "downPointDeepView".setDefaultValue(binding.objectInclude.downPointDeepView.text.toString())
- "areaView".setDefaultValue(binding.objectInclude.areaView.text.toString())
- "lineView".setDefaultValue(binding.objectInclude.lineView.text.toString())
- "roadView".setDefaultValue(binding.objectInclude.roadView.text.toString())
- "ownerView".setDefaultValue(binding.objectInclude.ownerView.text.toString())
- "identifierDeepView".setDefaultValue(binding.identifierInclude.identifierDeepView.text.toString())
- "personDeptView".setDefaultValue(binding.identifierInclude.personDeptView.text.toString())
- } else {
- NoNetworkDialog.Builder().setContext(context)
- .setOnDialogButtonClickListener(object :
- NoNetworkDialog.OnDialogButtonClickListener {
- override fun onButtonClick() {
- val intent = Intent(Settings.ACTION_SETTINGS)
- startActivity(intent)
- }
- }).build().show()
- }
- }
-
- binding.readLabelButton.setOnClickListener {
- LoadingDialogHub.show(this, "标识器读取中,请稍后...")
-
- soundPool = SoundPool.Builder()
- .setMaxStreams(16)
- .setAudioAttributes(audioAttributes)
- .build()
- soundPool?.apply {
- val soundResId = load(context, R.raw.ring3, 1)
- setOnLoadCompleteListener { soundPool, _, _ ->
- soundPool.play(soundResId, 1f, 1f, 0, -1, 1f)
- }
- }
-
- serialPortManager.searchMarkerSignal()
- }
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- LoadingDialogHub.dismiss()
- soundPool?.release()
-
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.length >= 20) {
- val markerId = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- binding.identifierInclude.identifierIdView.text = markerId
- serialPortManager.closeSerialPort()
- }
- }
- }
-
- private fun saveLabelInLocal() {
- val objectId = SaveKeyValues.getValue(LocaleConstant.OBJECT_ID, "") as String
-
- val labelBean = LabelBean()
- labelBean.objectType = binding.objectInclude.objectTypeSpinner.selectedItem.toString()
- labelBean.pipelineType = binding.objectInclude.markerObjectTypeView.text.toString()
- labelBean.pipelineMaterial = binding.objectInclude.materialSpinner.selectedItem.toString()
- labelBean.pipelineDiameter = "${binding.objectInclude.pipelineDiameterView.text}mm"
- labelBean.buryDeep = "${binding.objectInclude.buryDeepView.text}mm"
- labelBean.lowerType = binding.objectInclude.downPipeTypeSpinner.selectedItem.toString()
- labelBean.lowerMaterial =
- binding.objectInclude.downPipeMaterialSpinner.selectedItem.toString()
- labelBean.lowerDiameter = "${binding.objectInclude.downPipeDiameterView.text}mm"
- labelBean.lowerDeep = "${binding.objectInclude.downPointDeepView.text}mm"
- labelBean.buryMethod = binding.objectInclude.buryMethodSpinner.selectedItem.toString()
- labelBean.area = binding.objectInclude.areaView.text.toString()
- labelBean.line = binding.objectInclude.lineView.text.toString()
- labelBean.road = binding.objectInclude.roadView.text.toString()
- labelBean.constructTime = binding.objectInclude.constructDateView.text.toString()
- labelBean.owner = binding.objectInclude.ownerView.text.toString()
- labelBean.objectId = objectId
- labelBean.identifierId = binding.identifierInclude.identifierIdView.text.toString()
- labelBean.identifierType =
- binding.identifierInclude.identifierTypeSpinner.selectedItem.toString()
- labelBean.identifierDeep = "${binding.identifierInclude.identifierDeepView.text}mm"
- labelBean.person = binding.identifierInclude.personDeptView.text.toString()
- labelBean.installTime = binding.identifierInclude.installTimeView.text.toString()
- labelBean.lng = binding.identifierInclude.lngView.text.toString()
- labelBean.lat = binding.identifierInclude.latView.text.toString()
- labelBean.color = binding.identifierInclude.colorSpinner.selectedItem.toString().toColor()
- labelBean.remark = binding.remarkView.text.toString()
- labelBean.imagePath = realPaths.toJson()
-
- DataBaseManager.get.insertTaskLabel(labelBean)
- }
-
- private fun takePicture() {
- PictureSelector.create(this).openCamera(SelectMimeType.ofImage())
- .forResult(object : OnResultCallbackListener {
- override fun onResult(result: ArrayList?) {
- if (result == null) {
- "拍照失败,请重试".show(context)
- return
- }
- analyticalSelectResults(result[0])
- }
-
- override fun onCancel() {
-
- }
- })
- }
-
- private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
- result.realPath.compressImage(this, object : OnImageCompressListener {
- override fun onSuccess(file: File) {
- realPaths.add(file.absolutePath)
- imageAdapter.setupImage(realPaths)
- }
-
- override fun onError(e: Throwable) {
- e.printStackTrace()
- }
- })
- }
-
- override fun observeRequestState() {
- taskViewModel.loadState.observe(this) {
- when (it) {
- LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...")
- LoadState.Success -> {
- LoadingDialogHub.dismiss()
- finish()
- }
-
- else -> LoadingDialogHub.dismiss()
- }
- }
- }
-
- override fun setupTopBarLayout() {
- binding.titleInclude.titleView.text = "安装新标识器"
- binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this))
-
- binding.rootView.initImmersionBar(this, true, R.color.white)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- soundPool?.release()
- locationHub.stopLocation()
- }
-
- override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- soundPool?.release()
- }
- return super.onKeyDown(keyCode, event)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/detector/view/LoginActivity.kt b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
index 6a0cce9..dde848f 100644
--- a/app/src/main/java/com/casic/detector/view/LoginActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/LoginActivity.kt
@@ -4,13 +4,13 @@
import androidx.lifecycle.ViewModelProvider
import com.amap.api.navi.NaviSetting
import com.casic.detector.databinding.ActivityLoginBinding
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
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 ae048ce..79e7e11 100644
--- a/app/src/main/java/com/casic/detector/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/detector/view/MainActivity.kt
@@ -60,7 +60,6 @@
import com.casic.detector.utils.ExcelHub
import com.casic.detector.utils.FileType
import com.casic.detector.utils.GpioManager
-import com.casic.detector.utils.LoadingDialogHub
import com.casic.detector.utils.LocaleConstant
import com.casic.detector.utils.LocationHub
import com.casic.detector.utils.RouteOnMap
@@ -89,6 +88,7 @@
import com.pengxh.kt.lite.extensions.toJson
import com.pengxh.kt.lite.utils.FileDownloadManager
import com.pengxh.kt.lite.utils.LoadState
+import com.pengxh.kt.lite.utils.LoadingDialogHub
import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import com.pengxh.kt.lite.widget.dialog.AlertInputDialog
@@ -133,7 +133,7 @@
/***inner class 需要用到*****start*/
private val taskViewModel by lazy { ViewModelProvider(this)[TaskViewModel::class.java] }
private val attr = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_MEDIA)
+ .setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
private val soundPool = SoundPool.Builder().setMaxStreams(16).setAudioAttributes(attr).build()
diff --git a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt b/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
deleted file mode 100644
index 3d8bb94..0000000
--- a/app/src/main/java/com/casic/detector/view/SearchLabelActivity.kt
+++ /dev/null
@@ -1,301 +0,0 @@
-package com.casic.detector.view
-
-import android.graphics.Color
-import android.media.AudioAttributes
-import android.media.SoundPool
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.animation.Animation
-import android.view.animation.RotateAnimation
-import androidx.activity.OnBackPressedCallback
-import androidx.lifecycle.ViewModelProvider
-import com.casic.detector.R
-import com.casic.detector.bean.TaskBean
-import com.casic.detector.databinding.ActivitySearchLabelBinding
-import com.casic.detector.extensions.hexToString
-import com.casic.detector.extensions.isNumber
-import com.casic.detector.extensions.toHex
-import com.casic.detector.utils.DataBaseManager
-import com.casic.detector.utils.LoadingDialogHub
-import com.casic.detector.utils.LocationHub
-import com.casic.detector.utils.SerialPortManager
-import com.casic.detector.vm.TaskViewModel
-import com.gyf.immersionbar.ImmersionBar
-import com.pengxh.kt.lite.base.KotlinBaseActivity
-import com.pengxh.kt.lite.extensions.navigatePageTo
-import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.extensions.toJson
-import com.pengxh.kt.lite.utils.LoadState
-import com.pengxh.kt.lite.widget.dialog.AlertMessageDialog
-import java.text.DecimalFormat
-
-class SearchLabelActivity : KotlinBaseActivity(),
- SerialPortManager.OnSerialPortListener {
-
- private val kTag = "SearchLabelActivity"
- private val serialPortManager by lazy { SerialPortManager(this) }
- private val decimal by lazy { DecimalFormat("0.0") }
- private val degreeCache by lazy { HashMap() }
- private val locationHub by lazy { LocationHub(this) }
- private val audioAttributes = AudioAttributes.Builder()
- .setUsage(AudioAttributes.USAGE_ALARM)
- .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- .build()
- private lateinit var taskViewModel: TaskViewModel
- private lateinit var slowSoundPool: SoundPool
- private lateinit var fastSoundPool: SoundPool
- private var slowResId = 0
- private var fastResId = 0
- private var markerId = ""
- private var taskLabel: TaskBean? = null
- private var isPlaying = false
-
- override fun initOnCreate(savedInstanceState: Bundle?) {
- initSoundResource()
- serialPortManager.detectMarker()
-
- taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java]
- //角度
- degreeCache["lastDegree"] = 0f
-
- //实时定位
-// locationHub.getCurrentLocation(false, object : ILocationListener {
-// override fun onAMapLocationGet(location: AMapLocation?) {
-// if (location != null) {
-// if (identifierId != "") {
-// val label = DataBaseManager.get.queryLabelById(identifierId).first()
-//
-// val result = location.calculateAngle(
-// LatLng(label.lat.toDouble(), label.lng.toDouble())
-// )
-//
-// binding.resultTextView.text =
-// "标识器ID ${identifierId},${result.direction} ${result.angle},距离 ${result.distance}"
-// }
-// }
-// }
-// })
- }
-
- override fun initEvent() {
- binding.depthButton.setOnClickListener {
-// serialPortManager.closeSerialPort()
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- val tag = when (result.first().identifierType) {
- "EM30" -> '7'
- "EM50" -> '8'
- "EM14" -> '9'
- else -> '1'
- }
- if (tag == '1') {
- "此标识器无法读取埋深!".show(this)
- } else {
- // 发送读取标识器埋设深度指令
- LoadingDialogHub.show(this, "正在测距,请稍后...")
- serialPortManager.detectDepth(tag)
- object : CountDownTimer(15 * 1000, 1000) {
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- LoadingDialogHub.dismiss()
- "请重试".show(this@SearchLabelActivity)
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }.start()
- }
- } else {
- "标识器未安装,安装成功后才可读取埋深!".show(this)
- }
- }
-
- binding.markerInfoButton.setOnClickListener {
- //查库
- val result = DataBaseManager.get.queryLabelById(markerId)
- if (result.isNotEmpty()) {
- navigatePageTo(result.first().toJson())
- } else {
- navigatePageTo(markerId)
- }
- }
-
- //返回键监听,替换onBackPressed
- onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
- override fun handleOnBackPressed() {
- slowSoundPool.release()
- fastSoundPool.release()
- serialPortManager.closeSerialPort()
- finish()
- }
- })
- }
-
- override fun onDataReceived(buffer: ByteArray) {
- val hex = buffer.toHex()
-// Log.d(kTag, "$kTag => $hex")
- if (hex.startsWith("4E")) {
- try {
- //4E转为String为N,代表能量值
- //用能量值转动表盘
- val energyResponse = hex.take(10).hexToString()
- val energy = energyResponse.substring(1).toInt()
- if (energy >= 4000) {
- isPlaying = if (!isPlaying) {
- fastSoundPool.play(fastResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- fastSoundPool.stop(fastResId)
- false
- }
- } else {
- isPlaying = if (!isPlaying) {
- slowSoundPool.play(slowResId, 1f, 1f, 0, 0, 1f)
- true
- } else {
- slowSoundPool.stop(slowResId)
- false
- }
- }
-
- binding.resultTextView.text = "信号能量值:${energyResponse}"
-
- //转换为转动的角度
- val degree = (energy.toFloat() / (50 * 100)) * 180
- binding.energyValueView.text = decimal.format(degree)
-
- degreeCache["lastDegree"]?.apply {
- val animation = RotateAnimation(
- this, degree,
- Animation.RELATIVE_TO_SELF, 0.5f,
- Animation.RELATIVE_TO_SELF, 0.5f
- )
- animation.duration = 0
- animation.fillAfter = true
- binding.needleView.startAnimation(animation)
- }
-
- //保存旋转后的角度
- degreeCache["lastDegree"] = degree
-
- if (energy <= 700) {//18°
- binding.energyTipsView.text = "标识器信号较弱,可能距离较远"
- binding.energyTipsView.setTextColor(Color.parseColor("#8D1717"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_red)
-
- binding.depthButton.isEnabled = false
- binding.depthButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_disable)
- binding.markerInfoButton.isEnabled = false
- binding.markerInfoButton.setTextColor(Color.parseColor("#CCCCCC"))
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_disable)
-
- binding.searchResultView.text = "未检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#8D1717"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_red)
- } else if (energy >= 4100) {//148°
- binding.energyTipsView.text = "标识器信号极强,可能在正下方"
- binding.energyTipsView.setTextColor(Color.parseColor("#428d00"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_green)
- } else {//[18°,148°]
- binding.energyTipsView.text = "已靠近标识器,请继续移动位置"
- binding.energyTipsView.setTextColor(Color.parseColor("#8C5700"))
- binding.energyTipsView.setBackgroundResource(R.mipmap.bg_large_text_yellow)
- }
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else if (hex.startsWith("53")) {
- LoadingDialogHub.dismiss()
- try {
- val depthResponse = hex.take(10).hexToString()
- val depth = depthResponse.drop(4)
- AlertMessageDialog.Builder()
- .setContext(this@SearchLabelActivity)
- .setTitle("温馨提示")
- .setMessage("标识器埋深:${depth}厘米")
- .setPositiveButton("知道了")
- .setOnDialogButtonClickListener(object :
- AlertMessageDialog.OnDialogButtonClickListener {
- override fun onConfirmClick() {
-// initSoundResource()
-// serialPortManager.detectMarker()
- }
- }).build().show()
- } catch (e: NumberFormatException) {
- e.printStackTrace()
- }
- } else {
- if (hex.length >= 20) {
- val id = hex.take(20).hexToString()
- if (markerId.isNumber()) {
- markerId = id
-
- binding.depthButton.isEnabled = true
- binding.depthButton.setTextColor(Color.WHITE)
- binding.depthButton.setBackgroundResource(R.mipmap.left_button_enable)
- binding.markerInfoButton.isEnabled = true
- binding.markerInfoButton.setTextColor(Color.WHITE)
- binding.markerInfoButton.setBackgroundResource(R.mipmap.right_button_enable)
-
- binding.searchResultView.text = "已检测到标识器"
- binding.searchResultView.setTextColor(Color.parseColor("#428d00"))
- binding.searchResultView.setBackgroundResource(R.mipmap.bg_small_text_green)
-
- //自动上传标识器
- taskLabel = DataBaseManager.get.queryTaskLabelByIdAndState(
- markerId, "未开始"
- )
- taskLabel?.apply {
- /**
- * 此taskCode是 [com.casic.detector.model.TaskModel.MessageModel.TaskDetailInfosModel] 里面的主键,也就是这个标签在数据库里面的主键
- * */
- taskViewModel.uploadMarker(taskCode)
- }
- }
- }
- }
- }
-
- private fun initSoundResource() {
- /**
- * 声音效果速度
- * ling
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/activity_search_demo.xml b/app/src/main/res/layout/activity_search_demo.xml
new file mode 100644
index 0000000..dbe732b
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_demo.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_label.xml b/app/src/main/res/layout/activity_search_label.xml
deleted file mode 100644
index ef54017..0000000
--- a/app/src/main/res/layout/activity_search_label.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file