diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14e9b51..92d80c5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,7 +70,6 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> - diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14e9b51..92d80c5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,7 +70,6 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> - diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt deleted file mode 100644 index 6510104..0000000 --- a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt +++ /dev/null @@ -1,601 +0,0 @@ -package com.casic.electric.detector.view - -import android.annotation.SuppressLint -import android.app.AlertDialog -import android.app.DatePickerDialog -import android.content.Context -import android.content.DialogInterface -import android.content.Intent -import android.media.AudioAttributes -import android.media.SoundPool -import android.os.Bundle -import android.os.Handler -import android.os.Message -import android.provider.Settings -import android.util.Log -import android.view.KeyEvent -import android.view.View -import android.view.WindowManager -import android.widget.AdapterView -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import com.amap.api.location.AMapLocation -import com.casic.electric.detector.R -import com.casic.electric.detector.adapter.EditableImageAdapter -import com.casic.electric.detector.base.SerialPortActivity -import com.casic.electric.detector.callback.ILocationListener -import com.casic.electric.detector.callback.OnImageCompressListener -import com.casic.electric.detector.databinding.ActivityInstallLabelBinding -import com.casic.electric.detector.extensions.* -import com.casic.electric.detector.utils.* -import com.casic.electric.detector.vm.TaskViewModel -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener -import com.pengxh.kt.lite.extensions.* -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.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File -import java.io.IOException -import java.util.* - -@SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { - - private val kTag = "LabelActivity" - private val context: Context = this@InstallLabelActivity - private val gpioManager by lazy { GpioManager() } - private val calendar by lazy { Calendar.getInstance() } - private val locationHub by lazy { LocationHub(this) } - private val realPaths = ArrayList() //真实图片路径 - private var soundResId = 0 - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var soundPool: SoundPool - private lateinit var imageAdapter: EditableImageAdapter - private lateinit var taskViewModel: TaskViewModel - - override fun initViewBinding(): ActivityInstallLabelBinding { - return ActivityInstallLabelBinding.inflate(layoutInflater) - } - - override fun setupTopBarLayout() { - binding.titleInclude.titleView.text = "安装新标识器" - binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) - } - - override fun initOnCreate(savedInstanceState: Bundle?) { - window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) - - weakReferenceHandler = WeakReferenceHandler(this) - - val audioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_MEDIA) - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) - .build() - soundPool = SoundPool.Builder() - .setMaxStreams(16) - .setAudioAttributes(audioAttributes) - .build() - - //设置上次填写过的值 - binding.objectAttrInclude.objectCodeView.setText("objectCodeView".getDefaultValue()) - binding.objectAttrInclude.objectNameView.setText("objectNameView".getDefaultValue()) - binding.objectAttrInclude.inlineNameView.setText("inlineNameView".getDefaultValue()) - binding.objectAttrInclude.capacityView.setText("capacityView".getDefaultValue()) - binding.objectAttrInclude.transformerSpecView.setText("transformerSpecView".getDefaultValue()) - binding.objectAttrInclude.sLengthView.setText("sLengthView".getDefaultValue()) - binding.objectAttrInclude.sWidthView.setText("sWidthView".getDefaultValue()) - binding.objectAttrInclude.sHeightView.setText("sHeightView".getDefaultValue()) - binding.objectAttrInclude.inlineCountView.setText("inlineCountView".getDefaultValue()) - binding.objectAttrInclude.outlineCountView.setText("outlineCountView".getDefaultValue()) - binding.objectAttrInclude.bottomDepthView.setText("bottomDepthView".getDefaultValue()) - binding.objectAttrInclude.rowCountView.setText("rowCountView".getDefaultValue()) - binding.objectAttrInclude.rowHoleCountView.setText("rowHoleCountView".getDefaultValue()) - binding.objectAttrInclude.coverDepthView.setText("coverDepthView".getDefaultValue()) - binding.objectAttrInclude.remainingChannelsView.setText("remainingChannelsView".getDefaultValue()) - binding.objectAttrInclude.tieCableView1.setText("tieCableView1".getDefaultValue()) - binding.objectAttrInclude.tieCableView2.setText("tieCableView2".getDefaultValue()) - binding.objectAttrInclude.jointCountView.setText("jointCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleCountView.setText("casingHoleCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleDiameterView.setText("casingHoleDiameterView".getDefaultValue()) - binding.objectAttrInclude.heightView.setText("heightView".getDefaultValue()) - binding.objectAttrInclude.lineNumberView.setText("lineNumberView".getDefaultValue()) - binding.objectAttrInclude.inspectionUnitView.setText("inspectionUnitView".getDefaultValue()) - binding.objectAttrInclude.areaView.setText("areaView".getDefaultValue()) - binding.objectAttrInclude.roadView.setText("roadView".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView1.setText("objectRemarkView1".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView2.setText("objectRemarkView2".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView3.setText("objectRemarkView3".getDefaultValue()) - binding.markerAttrInclude.ownerView.setText("ownerView".getDefaultValue()) - binding.markerAttrInclude.markerDepthView.setText("markerDepthView".getDefaultValue()) - binding.markerAttrInclude.markerCountView.setText("markerCountView".getDefaultValue()) - binding.markerAttrInclude.remarkView1.setText("remarkView1".getDefaultValue()) - binding.markerAttrInclude.remarkView2.setText("remarkView2".getDefaultValue()) - binding.markerAttrInclude.remarkView3.setText("remarkView3".getDefaultValue()) - - //初始化图片九宫格 - imageAdapter = EditableImageAdapter(this, 3, 3) - binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter - - taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] - } - - override fun observeRequestState() { - taskViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...") - LoadState.Success -> { - LoadingDialogHub.dismiss() - finish() - } - - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun initEvent() { - binding.titleInclude.leftBackView.setOnClickListener { finish() } - - /**************************************************************************************/ - binding.objectAttrInclude.objectTypeSpinner.show(this, LocaleConstant.CONTENT_ARRAY, 0) - binding.objectAttrInclude.objectTypeSpinner.onItemSelectedListener = - object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - when (position) { - 0 -> { - //选择电缆井 - binding.objectAttrInclude.objectModeView.text = "类型:" - binding.objectAttrInclude.wellCoverMaterialView.text = "井盖材质:" - binding.objectAttrInclude.bottomDepthNameView.text = "井深:" - setLayoutVisibility( - View.VISIBLE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, LocaleConstant.OBJECT_MODE_ARRAY, 0 - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_1, - 0 - ) - } - - 1 -> { - //选择电缆通道 - binding.objectAttrInclude.bottomDepthNameView.text = "底部深度:" - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, View.VISIBLE, - View.GONE - ) - } - - 2 -> { - //选择配电房 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, - View.VISIBLE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 3 -> { - //选择开关站 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.VISIBLE, - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 4 -> { - //选择台区 - binding.objectAttrInclude.objectModeView.text = "变压器型号:" - setLayoutVisibility( - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, arrayOf("变压器 KVA"), 0 - ) - } - - 5 -> { - //选择杆塔 - binding.objectAttrInclude.wellCoverMaterialView.text = "对象材质:" - setLayoutVisibility( - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.VISIBLE - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_2, - 0 - ) - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - - binding.objectAttrInclude.cabinetTypeSpinner.show( - this, - LocaleConstant.CABINET_TYPE_ARRAY, - 0 - ) - binding.objectAttrInclude.casingMaterialSpinner.show( - this, - LocaleConstant.PIPE_MATERIAL_ARRAY, - 0 - ) - binding.markerAttrInclude.markerTypeSpinner.show(this, LocaleConstant.MARKER_TYPE_ARRAY, 0) - - //电压等级-多选 - binding.objectAttrInclude.voltageLevelView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择电压等级") - .setMultiChoiceItems( - LocaleConstant.VOLTAGE_LEVEL_ARRAY, LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.VOLTAGE_LEVEL_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.voltageLevelView.text = temp.reformat() - }.show() - } - - //交叉管道类型-多选 - binding.objectAttrInclude.crossPipeLineView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择交叉管道类型") - .setMultiChoiceItems( - LocaleConstant.CROSS_PIPE_ARRAY, LocaleConstant.CROSS_PIPE_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.CROSS_PIPE_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.CROSS_PIPE_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.CROSS_PIPE_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.crossPipeLineView.text = temp.reformat() - }.show() - } - - binding.objectAttrInclude.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.objectAttrInclude.constructDateView.text = selectedDate - } - } - } - - binding.markerAttrInclude.installTimeView.text = - System.currentTimeMillis().timestampToCompleteDate() - locationHub.getCurrentLocation(true, object : ILocationListener { - override fun onAMapLocationGet(location: AMapLocation?) { - if (location != null) { - binding.markerAttrInclude.lngView.text = location.longitude.toString() - binding.markerAttrInclude.latView.text = location.latitude.toString() - } else { - "当前位置信号差,无法获取定位".show(context) - } - } - }) - - imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { - override fun onAddImageClick() { - PictureSelector.create(this@InstallLabelActivity) - .openCamera(SelectMimeType.ofImage()) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList?) { - if (result == null) { - "拍照失败,请重试".show(context) - return - } - analyticalSelectResult(result[0]) - } - - override fun onCancel() { - - } - }) - } - - 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 itemPosition = binding.objectAttrInclude.objectTypeSpinner.selectedItemPosition - val objectTypeCode = itemPosition + 1 - - if (binding.markerAttrInclude.markerIdView.text.isNullOrBlank()) { - "标识器ID不能为空,请读标识器".show(this) - return@setOnClickListener - } - - if (binding.objectAttrInclude.constructDateView.text.isNullOrBlank()) { - "请选择建设时间".show(this) - return@setOnClickListener - } - - if (binding.markerAttrInclude.markerCountView.text.isNullOrBlank()) { - "请输入电子标签数量".show(this) - return@setOnClickListener - } - - //保存默认值 - "objectCodeView".setDefaultValue(binding.objectAttrInclude.objectCodeView) - "objectNameView".setDefaultValue(binding.objectAttrInclude.objectNameView) - "inlineNameView".setDefaultValue(binding.objectAttrInclude.inlineNameView) - "capacityView".setDefaultValue(binding.objectAttrInclude.capacityView) - "transformerSpecView".setDefaultValue(binding.objectAttrInclude.transformerSpecView) - "sLengthView".setDefaultValue(binding.objectAttrInclude.sLengthView) - "sWidthView".setDefaultValue(binding.objectAttrInclude.sWidthView) - "sHeightView".setDefaultValue(binding.objectAttrInclude.sHeightView) - "inlineCountView".setDefaultValue(binding.objectAttrInclude.inlineCountView) - "outlineCountView".setDefaultValue(binding.objectAttrInclude.outlineCountView) - "bottomDepthView".setDefaultValue(binding.objectAttrInclude.bottomDepthView) - "rowCountView".setDefaultValue(binding.objectAttrInclude.rowCountView) - "rowHoleCountView".setDefaultValue(binding.objectAttrInclude.rowHoleCountView) - "coverDepthView".setDefaultValue(binding.objectAttrInclude.coverDepthView) - "remainingChannelsView".setDefaultValue(binding.objectAttrInclude.remainingChannelsView) - "tieCableView1".setDefaultValue(binding.objectAttrInclude.tieCableView1) - "tieCableView2".setDefaultValue(binding.objectAttrInclude.tieCableView2) - "jointCountView".setDefaultValue(binding.objectAttrInclude.jointCountView) - "casingHoleCountView".setDefaultValue(binding.objectAttrInclude.casingHoleCountView) - "casingHoleDiameterView".setDefaultValue(binding.objectAttrInclude.casingHoleDiameterView) - "heightView".setDefaultValue(binding.objectAttrInclude.heightView) - "lineNumberView".setDefaultValue(binding.objectAttrInclude.lineNumberView) - "inspectionUnitView".setDefaultValue(binding.objectAttrInclude.inspectionUnitView) - "areaView".setDefaultValue(binding.objectAttrInclude.areaView) - "roadView".setDefaultValue(binding.objectAttrInclude.roadView) - "objectRemarkView1".setDefaultValue(binding.objectAttrInclude.objectRemarkView1) - "objectRemarkView2".setDefaultValue(binding.objectAttrInclude.objectRemarkView2) - "objectRemarkView3".setDefaultValue(binding.objectAttrInclude.objectRemarkView3) - "ownerView".setDefaultValue(binding.markerAttrInclude.ownerView) - "markerDepthView".setDefaultValue(binding.markerAttrInclude.markerDepthView) - "markerCountView".setDefaultValue(binding.markerAttrInclude.markerCountView) - "remarkView1".setDefaultValue(binding.markerAttrInclude.remarkView1) - "remarkView2".setDefaultValue(binding.markerAttrInclude.remarkView2) - "remarkView3".setDefaultValue(binding.markerAttrInclude.remarkView3) - - val labelData = LabelDataClass( - companyId, - objectTypeCode.toString(), - binding.objectAttrInclude.objectCodeView.text.toString(), - binding.objectAttrInclude.objectNameView.text.toString(), - binding.objectAttrInclude.voltageLevelView.text.toString(), - binding.objectAttrInclude.objectModeSpinner.selectedItem.toString(), - "进线${binding.objectAttrInclude.inlineNameView.text}", - binding.objectAttrInclude.wellCoverMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.capacityView.text}KVA", - binding.objectAttrInclude.transformerSpecView.text.toString(), - "${binding.objectAttrInclude.sLengthView.text}米长 x ${binding.objectAttrInclude.sWidthView.text}米宽 x ${binding.objectAttrInclude.sHeightView.text}米高", - binding.objectAttrInclude.inlineCountView.text.toString(), - binding.objectAttrInclude.outlineCountView.text.toString(), - binding.objectAttrInclude.cabinetTypeSpinner.selectedItem.toString(), - binding.objectAttrInclude.bottomDepthView.text.toString(), - "${binding.objectAttrInclude.rowCountView.text}排 x ${binding.objectAttrInclude.rowHoleCountView.text}孔", - "${binding.objectAttrInclude.coverDepthView.text}米", - binding.objectAttrInclude.crossPipeLineView.text.toString(), - binding.objectAttrInclude.remainingChannelsView.text.toString(), - binding.objectAttrInclude.tieCableView1.text.toString(), - binding.objectAttrInclude.tieCableView2.text.toString(), - binding.objectAttrInclude.jointCountView.text.toString(), - binding.objectAttrInclude.casingMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.casingHoleCountView.text}孔,直径${binding.objectAttrInclude.casingHoleDiameterView.text}毫米", - "${binding.objectAttrInclude.heightView.text.toString()}米", - binding.objectAttrInclude.lineNumberView.text.toString(), - binding.objectAttrInclude.constructDateView.text.toString(), - binding.objectAttrInclude.inspectionUnitView.text.toString(), - binding.objectAttrInclude.areaView.text.toString(), - binding.objectAttrInclude.roadView.text.toString(), - binding.objectAttrInclude.objectRemarkView1.text.toString(), - binding.objectAttrInclude.objectRemarkView2.text.toString(), - binding.objectAttrInclude.objectRemarkView3.text.toString(), - binding.markerAttrInclude.markerIdView.text.toString(), - binding.markerAttrInclude.markerTypeSpinner.selectedItem.toString(), - binding.markerAttrInclude.ownerView.text.toString(), - binding.markerAttrInclude.markerDepthView.text.toString(), - binding.markerAttrInclude.installTimeView.text.toString(), - binding.markerAttrInclude.lngView.text.toString(), - binding.markerAttrInclude.latView.text.toString(), - binding.markerAttrInclude.markerCountView.text.toString(), - binding.markerAttrInclude.remarkView1.text.toString(), - binding.markerAttrInclude.remarkView2.text.toString(), - binding.markerAttrInclude.remarkView3.text.toString(), - realPaths - ) - - //先存本地 - lifecycleScope.launch { - withContext(Dispatchers.IO) { - DataBaseManager.get.insertLabel(labelData) - } - } - - //再存服务器 - taskViewModel.installLabel(labelData) - } 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 { - gpioManager.setGpioHigh("18") - - LoadingDialogHub.show(this, "标识器读取中,请稍后...") - - soundResId = soundPool.load(this, R.raw.ring3, 1) - soundPool.setOnLoadCompleteListener { soundPool, _, _ -> - soundPool.play(soundResId, 1f, 1f, 0, -1, 1f) - } - - // 1000ms后发送读标识器或搜索信号 - weakReferenceHandler.postDelayed({ - try { - // 发送读标识器或搜索信号 - out.write("2".toByteArray()) - out.flush() - } catch (e: IOException) { - e.printStackTrace() - } - }, 1000) - } - } - - override fun onDataReceived(buffer: ByteArray) { - Log.d(kTag, "onDataReceived => " + buffer.contentToString()) - if (buffer != null) { - val message = weakReferenceHandler.obtainMessage() - message.what = 2023081701 - message.obj = buffer - weakReferenceHandler.sendMessage(message) - } - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == 2023081701) { - soundPool.release() - - val buffer = msg.obj as ByteArray - val hex = buffer.toHex() - - if (hex.length >= 20) { - val markerId = hex.substring(0, 20).hexToString() - - gpioManager.setGpioLow("18") - - //查本地库 - val result = DataBaseManager.get.queryLabelById(markerId) - if (result.isEmpty()) { - binding.markerAttrInclude.markerIdView.text = markerId - } else { - "此标识器已安装,请更换标识器!".show(this) - } - LoadingDialogHub.dismiss() - } - } - return true - } - - private fun analyticalSelectResult(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() - } - }) - } - - //根据选择类型控制界面某些区域显隐 - private fun setLayoutVisibility(vararg args: Int) { - binding.objectAttrInclude.objectModeLayout.visibility = args[0] - binding.objectAttrInclude.inlineNameLayout.visibility = args[1] - binding.objectAttrInclude.wellCoverMaterialLayout.visibility = args[2] - binding.objectAttrInclude.capacityLayout.visibility = args[3] - binding.objectAttrInclude.sizeLayout.visibility = args[4] - binding.objectAttrInclude.inlineCountLayout.visibility = args[5] - binding.objectAttrInclude.outlineCountLayout.visibility = args[6] - binding.objectAttrInclude.wellDepthLayout.visibility = args[7] - binding.objectAttrInclude.pipeLineLayout.visibility = args[8] - binding.objectAttrInclude.jointCountLayout.visibility = args[9] - binding.objectAttrInclude.heightLayout.visibility = args[10] - } - - override fun onDestroy() { - super.onDestroy() - soundPool.release() - gpioManager.setGpioLow("18") - } - - 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 14e9b51..92d80c5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,7 +70,6 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> - diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt deleted file mode 100644 index 6510104..0000000 --- a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt +++ /dev/null @@ -1,601 +0,0 @@ -package com.casic.electric.detector.view - -import android.annotation.SuppressLint -import android.app.AlertDialog -import android.app.DatePickerDialog -import android.content.Context -import android.content.DialogInterface -import android.content.Intent -import android.media.AudioAttributes -import android.media.SoundPool -import android.os.Bundle -import android.os.Handler -import android.os.Message -import android.provider.Settings -import android.util.Log -import android.view.KeyEvent -import android.view.View -import android.view.WindowManager -import android.widget.AdapterView -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import com.amap.api.location.AMapLocation -import com.casic.electric.detector.R -import com.casic.electric.detector.adapter.EditableImageAdapter -import com.casic.electric.detector.base.SerialPortActivity -import com.casic.electric.detector.callback.ILocationListener -import com.casic.electric.detector.callback.OnImageCompressListener -import com.casic.electric.detector.databinding.ActivityInstallLabelBinding -import com.casic.electric.detector.extensions.* -import com.casic.electric.detector.utils.* -import com.casic.electric.detector.vm.TaskViewModel -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener -import com.pengxh.kt.lite.extensions.* -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.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File -import java.io.IOException -import java.util.* - -@SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { - - private val kTag = "LabelActivity" - private val context: Context = this@InstallLabelActivity - private val gpioManager by lazy { GpioManager() } - private val calendar by lazy { Calendar.getInstance() } - private val locationHub by lazy { LocationHub(this) } - private val realPaths = ArrayList() //真实图片路径 - private var soundResId = 0 - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var soundPool: SoundPool - private lateinit var imageAdapter: EditableImageAdapter - private lateinit var taskViewModel: TaskViewModel - - override fun initViewBinding(): ActivityInstallLabelBinding { - return ActivityInstallLabelBinding.inflate(layoutInflater) - } - - override fun setupTopBarLayout() { - binding.titleInclude.titleView.text = "安装新标识器" - binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) - } - - override fun initOnCreate(savedInstanceState: Bundle?) { - window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) - - weakReferenceHandler = WeakReferenceHandler(this) - - val audioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_MEDIA) - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) - .build() - soundPool = SoundPool.Builder() - .setMaxStreams(16) - .setAudioAttributes(audioAttributes) - .build() - - //设置上次填写过的值 - binding.objectAttrInclude.objectCodeView.setText("objectCodeView".getDefaultValue()) - binding.objectAttrInclude.objectNameView.setText("objectNameView".getDefaultValue()) - binding.objectAttrInclude.inlineNameView.setText("inlineNameView".getDefaultValue()) - binding.objectAttrInclude.capacityView.setText("capacityView".getDefaultValue()) - binding.objectAttrInclude.transformerSpecView.setText("transformerSpecView".getDefaultValue()) - binding.objectAttrInclude.sLengthView.setText("sLengthView".getDefaultValue()) - binding.objectAttrInclude.sWidthView.setText("sWidthView".getDefaultValue()) - binding.objectAttrInclude.sHeightView.setText("sHeightView".getDefaultValue()) - binding.objectAttrInclude.inlineCountView.setText("inlineCountView".getDefaultValue()) - binding.objectAttrInclude.outlineCountView.setText("outlineCountView".getDefaultValue()) - binding.objectAttrInclude.bottomDepthView.setText("bottomDepthView".getDefaultValue()) - binding.objectAttrInclude.rowCountView.setText("rowCountView".getDefaultValue()) - binding.objectAttrInclude.rowHoleCountView.setText("rowHoleCountView".getDefaultValue()) - binding.objectAttrInclude.coverDepthView.setText("coverDepthView".getDefaultValue()) - binding.objectAttrInclude.remainingChannelsView.setText("remainingChannelsView".getDefaultValue()) - binding.objectAttrInclude.tieCableView1.setText("tieCableView1".getDefaultValue()) - binding.objectAttrInclude.tieCableView2.setText("tieCableView2".getDefaultValue()) - binding.objectAttrInclude.jointCountView.setText("jointCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleCountView.setText("casingHoleCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleDiameterView.setText("casingHoleDiameterView".getDefaultValue()) - binding.objectAttrInclude.heightView.setText("heightView".getDefaultValue()) - binding.objectAttrInclude.lineNumberView.setText("lineNumberView".getDefaultValue()) - binding.objectAttrInclude.inspectionUnitView.setText("inspectionUnitView".getDefaultValue()) - binding.objectAttrInclude.areaView.setText("areaView".getDefaultValue()) - binding.objectAttrInclude.roadView.setText("roadView".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView1.setText("objectRemarkView1".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView2.setText("objectRemarkView2".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView3.setText("objectRemarkView3".getDefaultValue()) - binding.markerAttrInclude.ownerView.setText("ownerView".getDefaultValue()) - binding.markerAttrInclude.markerDepthView.setText("markerDepthView".getDefaultValue()) - binding.markerAttrInclude.markerCountView.setText("markerCountView".getDefaultValue()) - binding.markerAttrInclude.remarkView1.setText("remarkView1".getDefaultValue()) - binding.markerAttrInclude.remarkView2.setText("remarkView2".getDefaultValue()) - binding.markerAttrInclude.remarkView3.setText("remarkView3".getDefaultValue()) - - //初始化图片九宫格 - imageAdapter = EditableImageAdapter(this, 3, 3) - binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter - - taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] - } - - override fun observeRequestState() { - taskViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...") - LoadState.Success -> { - LoadingDialogHub.dismiss() - finish() - } - - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun initEvent() { - binding.titleInclude.leftBackView.setOnClickListener { finish() } - - /**************************************************************************************/ - binding.objectAttrInclude.objectTypeSpinner.show(this, LocaleConstant.CONTENT_ARRAY, 0) - binding.objectAttrInclude.objectTypeSpinner.onItemSelectedListener = - object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - when (position) { - 0 -> { - //选择电缆井 - binding.objectAttrInclude.objectModeView.text = "类型:" - binding.objectAttrInclude.wellCoverMaterialView.text = "井盖材质:" - binding.objectAttrInclude.bottomDepthNameView.text = "井深:" - setLayoutVisibility( - View.VISIBLE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, LocaleConstant.OBJECT_MODE_ARRAY, 0 - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_1, - 0 - ) - } - - 1 -> { - //选择电缆通道 - binding.objectAttrInclude.bottomDepthNameView.text = "底部深度:" - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, View.VISIBLE, - View.GONE - ) - } - - 2 -> { - //选择配电房 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, - View.VISIBLE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 3 -> { - //选择开关站 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.VISIBLE, - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 4 -> { - //选择台区 - binding.objectAttrInclude.objectModeView.text = "变压器型号:" - setLayoutVisibility( - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, arrayOf("变压器 KVA"), 0 - ) - } - - 5 -> { - //选择杆塔 - binding.objectAttrInclude.wellCoverMaterialView.text = "对象材质:" - setLayoutVisibility( - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.VISIBLE - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_2, - 0 - ) - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - - binding.objectAttrInclude.cabinetTypeSpinner.show( - this, - LocaleConstant.CABINET_TYPE_ARRAY, - 0 - ) - binding.objectAttrInclude.casingMaterialSpinner.show( - this, - LocaleConstant.PIPE_MATERIAL_ARRAY, - 0 - ) - binding.markerAttrInclude.markerTypeSpinner.show(this, LocaleConstant.MARKER_TYPE_ARRAY, 0) - - //电压等级-多选 - binding.objectAttrInclude.voltageLevelView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择电压等级") - .setMultiChoiceItems( - LocaleConstant.VOLTAGE_LEVEL_ARRAY, LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.VOLTAGE_LEVEL_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.voltageLevelView.text = temp.reformat() - }.show() - } - - //交叉管道类型-多选 - binding.objectAttrInclude.crossPipeLineView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择交叉管道类型") - .setMultiChoiceItems( - LocaleConstant.CROSS_PIPE_ARRAY, LocaleConstant.CROSS_PIPE_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.CROSS_PIPE_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.CROSS_PIPE_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.CROSS_PIPE_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.crossPipeLineView.text = temp.reformat() - }.show() - } - - binding.objectAttrInclude.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.objectAttrInclude.constructDateView.text = selectedDate - } - } - } - - binding.markerAttrInclude.installTimeView.text = - System.currentTimeMillis().timestampToCompleteDate() - locationHub.getCurrentLocation(true, object : ILocationListener { - override fun onAMapLocationGet(location: AMapLocation?) { - if (location != null) { - binding.markerAttrInclude.lngView.text = location.longitude.toString() - binding.markerAttrInclude.latView.text = location.latitude.toString() - } else { - "当前位置信号差,无法获取定位".show(context) - } - } - }) - - imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { - override fun onAddImageClick() { - PictureSelector.create(this@InstallLabelActivity) - .openCamera(SelectMimeType.ofImage()) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList?) { - if (result == null) { - "拍照失败,请重试".show(context) - return - } - analyticalSelectResult(result[0]) - } - - override fun onCancel() { - - } - }) - } - - 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 itemPosition = binding.objectAttrInclude.objectTypeSpinner.selectedItemPosition - val objectTypeCode = itemPosition + 1 - - if (binding.markerAttrInclude.markerIdView.text.isNullOrBlank()) { - "标识器ID不能为空,请读标识器".show(this) - return@setOnClickListener - } - - if (binding.objectAttrInclude.constructDateView.text.isNullOrBlank()) { - "请选择建设时间".show(this) - return@setOnClickListener - } - - if (binding.markerAttrInclude.markerCountView.text.isNullOrBlank()) { - "请输入电子标签数量".show(this) - return@setOnClickListener - } - - //保存默认值 - "objectCodeView".setDefaultValue(binding.objectAttrInclude.objectCodeView) - "objectNameView".setDefaultValue(binding.objectAttrInclude.objectNameView) - "inlineNameView".setDefaultValue(binding.objectAttrInclude.inlineNameView) - "capacityView".setDefaultValue(binding.objectAttrInclude.capacityView) - "transformerSpecView".setDefaultValue(binding.objectAttrInclude.transformerSpecView) - "sLengthView".setDefaultValue(binding.objectAttrInclude.sLengthView) - "sWidthView".setDefaultValue(binding.objectAttrInclude.sWidthView) - "sHeightView".setDefaultValue(binding.objectAttrInclude.sHeightView) - "inlineCountView".setDefaultValue(binding.objectAttrInclude.inlineCountView) - "outlineCountView".setDefaultValue(binding.objectAttrInclude.outlineCountView) - "bottomDepthView".setDefaultValue(binding.objectAttrInclude.bottomDepthView) - "rowCountView".setDefaultValue(binding.objectAttrInclude.rowCountView) - "rowHoleCountView".setDefaultValue(binding.objectAttrInclude.rowHoleCountView) - "coverDepthView".setDefaultValue(binding.objectAttrInclude.coverDepthView) - "remainingChannelsView".setDefaultValue(binding.objectAttrInclude.remainingChannelsView) - "tieCableView1".setDefaultValue(binding.objectAttrInclude.tieCableView1) - "tieCableView2".setDefaultValue(binding.objectAttrInclude.tieCableView2) - "jointCountView".setDefaultValue(binding.objectAttrInclude.jointCountView) - "casingHoleCountView".setDefaultValue(binding.objectAttrInclude.casingHoleCountView) - "casingHoleDiameterView".setDefaultValue(binding.objectAttrInclude.casingHoleDiameterView) - "heightView".setDefaultValue(binding.objectAttrInclude.heightView) - "lineNumberView".setDefaultValue(binding.objectAttrInclude.lineNumberView) - "inspectionUnitView".setDefaultValue(binding.objectAttrInclude.inspectionUnitView) - "areaView".setDefaultValue(binding.objectAttrInclude.areaView) - "roadView".setDefaultValue(binding.objectAttrInclude.roadView) - "objectRemarkView1".setDefaultValue(binding.objectAttrInclude.objectRemarkView1) - "objectRemarkView2".setDefaultValue(binding.objectAttrInclude.objectRemarkView2) - "objectRemarkView3".setDefaultValue(binding.objectAttrInclude.objectRemarkView3) - "ownerView".setDefaultValue(binding.markerAttrInclude.ownerView) - "markerDepthView".setDefaultValue(binding.markerAttrInclude.markerDepthView) - "markerCountView".setDefaultValue(binding.markerAttrInclude.markerCountView) - "remarkView1".setDefaultValue(binding.markerAttrInclude.remarkView1) - "remarkView2".setDefaultValue(binding.markerAttrInclude.remarkView2) - "remarkView3".setDefaultValue(binding.markerAttrInclude.remarkView3) - - val labelData = LabelDataClass( - companyId, - objectTypeCode.toString(), - binding.objectAttrInclude.objectCodeView.text.toString(), - binding.objectAttrInclude.objectNameView.text.toString(), - binding.objectAttrInclude.voltageLevelView.text.toString(), - binding.objectAttrInclude.objectModeSpinner.selectedItem.toString(), - "进线${binding.objectAttrInclude.inlineNameView.text}", - binding.objectAttrInclude.wellCoverMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.capacityView.text}KVA", - binding.objectAttrInclude.transformerSpecView.text.toString(), - "${binding.objectAttrInclude.sLengthView.text}米长 x ${binding.objectAttrInclude.sWidthView.text}米宽 x ${binding.objectAttrInclude.sHeightView.text}米高", - binding.objectAttrInclude.inlineCountView.text.toString(), - binding.objectAttrInclude.outlineCountView.text.toString(), - binding.objectAttrInclude.cabinetTypeSpinner.selectedItem.toString(), - binding.objectAttrInclude.bottomDepthView.text.toString(), - "${binding.objectAttrInclude.rowCountView.text}排 x ${binding.objectAttrInclude.rowHoleCountView.text}孔", - "${binding.objectAttrInclude.coverDepthView.text}米", - binding.objectAttrInclude.crossPipeLineView.text.toString(), - binding.objectAttrInclude.remainingChannelsView.text.toString(), - binding.objectAttrInclude.tieCableView1.text.toString(), - binding.objectAttrInclude.tieCableView2.text.toString(), - binding.objectAttrInclude.jointCountView.text.toString(), - binding.objectAttrInclude.casingMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.casingHoleCountView.text}孔,直径${binding.objectAttrInclude.casingHoleDiameterView.text}毫米", - "${binding.objectAttrInclude.heightView.text.toString()}米", - binding.objectAttrInclude.lineNumberView.text.toString(), - binding.objectAttrInclude.constructDateView.text.toString(), - binding.objectAttrInclude.inspectionUnitView.text.toString(), - binding.objectAttrInclude.areaView.text.toString(), - binding.objectAttrInclude.roadView.text.toString(), - binding.objectAttrInclude.objectRemarkView1.text.toString(), - binding.objectAttrInclude.objectRemarkView2.text.toString(), - binding.objectAttrInclude.objectRemarkView3.text.toString(), - binding.markerAttrInclude.markerIdView.text.toString(), - binding.markerAttrInclude.markerTypeSpinner.selectedItem.toString(), - binding.markerAttrInclude.ownerView.text.toString(), - binding.markerAttrInclude.markerDepthView.text.toString(), - binding.markerAttrInclude.installTimeView.text.toString(), - binding.markerAttrInclude.lngView.text.toString(), - binding.markerAttrInclude.latView.text.toString(), - binding.markerAttrInclude.markerCountView.text.toString(), - binding.markerAttrInclude.remarkView1.text.toString(), - binding.markerAttrInclude.remarkView2.text.toString(), - binding.markerAttrInclude.remarkView3.text.toString(), - realPaths - ) - - //先存本地 - lifecycleScope.launch { - withContext(Dispatchers.IO) { - DataBaseManager.get.insertLabel(labelData) - } - } - - //再存服务器 - taskViewModel.installLabel(labelData) - } 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 { - gpioManager.setGpioHigh("18") - - LoadingDialogHub.show(this, "标识器读取中,请稍后...") - - soundResId = soundPool.load(this, R.raw.ring3, 1) - soundPool.setOnLoadCompleteListener { soundPool, _, _ -> - soundPool.play(soundResId, 1f, 1f, 0, -1, 1f) - } - - // 1000ms后发送读标识器或搜索信号 - weakReferenceHandler.postDelayed({ - try { - // 发送读标识器或搜索信号 - out.write("2".toByteArray()) - out.flush() - } catch (e: IOException) { - e.printStackTrace() - } - }, 1000) - } - } - - override fun onDataReceived(buffer: ByteArray) { - Log.d(kTag, "onDataReceived => " + buffer.contentToString()) - if (buffer != null) { - val message = weakReferenceHandler.obtainMessage() - message.what = 2023081701 - message.obj = buffer - weakReferenceHandler.sendMessage(message) - } - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == 2023081701) { - soundPool.release() - - val buffer = msg.obj as ByteArray - val hex = buffer.toHex() - - if (hex.length >= 20) { - val markerId = hex.substring(0, 20).hexToString() - - gpioManager.setGpioLow("18") - - //查本地库 - val result = DataBaseManager.get.queryLabelById(markerId) - if (result.isEmpty()) { - binding.markerAttrInclude.markerIdView.text = markerId - } else { - "此标识器已安装,请更换标识器!".show(this) - } - LoadingDialogHub.dismiss() - } - } - return true - } - - private fun analyticalSelectResult(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() - } - }) - } - - //根据选择类型控制界面某些区域显隐 - private fun setLayoutVisibility(vararg args: Int) { - binding.objectAttrInclude.objectModeLayout.visibility = args[0] - binding.objectAttrInclude.inlineNameLayout.visibility = args[1] - binding.objectAttrInclude.wellCoverMaterialLayout.visibility = args[2] - binding.objectAttrInclude.capacityLayout.visibility = args[3] - binding.objectAttrInclude.sizeLayout.visibility = args[4] - binding.objectAttrInclude.inlineCountLayout.visibility = args[5] - binding.objectAttrInclude.outlineCountLayout.visibility = args[6] - binding.objectAttrInclude.wellDepthLayout.visibility = args[7] - binding.objectAttrInclude.pipeLineLayout.visibility = args[8] - binding.objectAttrInclude.jointCountLayout.visibility = args[9] - binding.objectAttrInclude.heightLayout.visibility = args[10] - } - - override fun onDestroy() { - super.onDestroy() - soundPool.release() - gpioManager.setGpioLow("18") - } - - 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/electric/detector/view/MainActivity.kt b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt index a0a4aac..40a5f3d 100644 --- a/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt @@ -2,8 +2,10 @@ import android.annotation.SuppressLint import android.app.AlertDialog +import android.app.DatePickerDialog import android.app.Dialog import android.content.Context +import android.content.DialogInterface import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -16,6 +18,7 @@ import android.view.View import android.view.animation.Animation import android.view.animation.RotateAnimation +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.amap.api.location.AMapLocation @@ -33,6 +36,7 @@ import com.casic.electric.detector.bean.SmallLabelBean import com.casic.electric.detector.bean.TaskBean import com.casic.electric.detector.callback.ILocationListener +import com.casic.electric.detector.callback.OnImageCompressListener import com.casic.electric.detector.cluster.ClusterItem import com.casic.electric.detector.cluster.ClusterOverlay import com.casic.electric.detector.cluster.RegionItem @@ -41,14 +45,20 @@ import com.casic.electric.detector.databinding.DialogInstallSmallMarkerBinding import com.casic.electric.detector.databinding.DialogSearchMarkerBinding import com.casic.electric.detector.extensions.appendExcelDownloadUrl +import com.casic.electric.detector.extensions.compressImage import com.casic.electric.detector.extensions.drawCircle +import com.casic.electric.detector.extensions.getDefaultValue import com.casic.electric.detector.extensions.hexToString import com.casic.electric.detector.extensions.initImmersionBar import com.casic.electric.detector.extensions.isNumber +import com.casic.electric.detector.extensions.reformat +import com.casic.electric.detector.extensions.setDefaultValue +import com.casic.electric.detector.extensions.show import com.casic.electric.detector.extensions.toHex import com.casic.electric.detector.utils.DataBaseManager import com.casic.electric.detector.utils.ExcelHub import com.casic.electric.detector.utils.GpioManager +import com.casic.electric.detector.utils.LabelDataClass import com.casic.electric.detector.utils.LocaleConstant import com.casic.electric.detector.utils.LocationHub import com.casic.electric.detector.utils.RouteOnMap @@ -56,13 +66,22 @@ import com.casic.electric.detector.widgets.QueryMarkerDialog import com.casic.electric.detector.widgets.SamplePopupWindow import com.google.gson.Gson +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.extensions.appendZero import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.createDownloadFileDir +import com.pengxh.kt.lite.extensions.dateToTimestamp import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.initDialogLayoutParams import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.extensions.timestampToTime import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.FileDownloadManager import com.pengxh.kt.lite.utils.LoadState @@ -78,6 +97,7 @@ import java.io.File import java.text.DecimalFormat import java.util.Calendar +import java.util.Date import java.util.Timer import java.util.TimerTask @@ -456,16 +476,16 @@ Log.d(kTag, "$kTag => $hex") if (searchDialog.isDetectMarker) { searchDialog.bindingValue(hex) -// } else if (installMarkerDialog.isReadMarker) { -// val markerId = hex.take(20).hexToString() -// if (markerId.isNumber()) { -// installMarkerDialog.bindingValue(markerId) -// } -// } else if (installSmallMarkerDialog.isReadMarker) { -// val markerId = hex.take(20).hexToString() -// if (markerId.isNumber()) { -// installSmallMarkerDialog.bindingValue(markerId) -// } + } else if (installMarkerDialog.isReadMarker) { + val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { + installMarkerDialog.bindingValue(markerId) + } + } else if (installSmallMarkerDialog.isReadMarker) { + val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { + installSmallMarkerDialog.bindingValue(markerId) + } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() if (markerId.isNumber()) { @@ -847,6 +867,500 @@ var isReadMarker = false var isInstallMarker = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(1f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + //初始化数据 + initDefaultData() + + //返回 + binding.titleInclude.leftBackView.setOnClickListener { + soundPool.autoPause() + dismiss() + } + + binding.installButton.setOnClickListener { + val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String + + val itemPosition = binding.objectAttrInclude.objectTypeSpinner.selectedItemPosition + val objectTypeCode = itemPosition + 1 + + if (binding.markerAttrInclude.markerIdView.text.isNullOrBlank()) { + "标识器ID不能为空,请读标识器".show(context) + return@setOnClickListener + } + + if (binding.objectAttrInclude.constructDateView.text.isNullOrBlank()) { + "请选择建设时间".show(context) + return@setOnClickListener + } + + if (binding.markerAttrInclude.markerCountView.text.isNullOrBlank()) { + "请输入电子标签数量".show(context) + return@setOnClickListener + } + + //保存默认值 + "objectCodeView".setDefaultValue(binding.objectAttrInclude.objectCodeView) + "objectNameView".setDefaultValue(binding.objectAttrInclude.objectNameView) + "inlineNameView".setDefaultValue(binding.objectAttrInclude.inlineNameView) + "capacityView".setDefaultValue(binding.objectAttrInclude.capacityView) + "transformerSpecView".setDefaultValue(binding.objectAttrInclude.transformerSpecView) + "sLengthView".setDefaultValue(binding.objectAttrInclude.sLengthView) + "sWidthView".setDefaultValue(binding.objectAttrInclude.sWidthView) + "sHeightView".setDefaultValue(binding.objectAttrInclude.sHeightView) + "inlineCountView".setDefaultValue(binding.objectAttrInclude.inlineCountView) + "outlineCountView".setDefaultValue(binding.objectAttrInclude.outlineCountView) + "bottomDepthView".setDefaultValue(binding.objectAttrInclude.bottomDepthView) + "rowCountView".setDefaultValue(binding.objectAttrInclude.rowCountView) + "rowHoleCountView".setDefaultValue(binding.objectAttrInclude.rowHoleCountView) + "coverDepthView".setDefaultValue(binding.objectAttrInclude.coverDepthView) + "remainingChannelsView".setDefaultValue(binding.objectAttrInclude.remainingChannelsView) + "tieCableView1".setDefaultValue(binding.objectAttrInclude.tieCableView1) + "tieCableView2".setDefaultValue(binding.objectAttrInclude.tieCableView2) + "jointCountView".setDefaultValue(binding.objectAttrInclude.jointCountView) + "casingHoleCountView".setDefaultValue(binding.objectAttrInclude.casingHoleCountView) + "casingHoleDiameterView".setDefaultValue(binding.objectAttrInclude.casingHoleDiameterView) + "heightView".setDefaultValue(binding.objectAttrInclude.heightView) + "lineNumberView".setDefaultValue(binding.objectAttrInclude.lineNumberView) + "inspectionUnitView".setDefaultValue(binding.objectAttrInclude.inspectionUnitView) + "areaView".setDefaultValue(binding.objectAttrInclude.areaView) + "roadView".setDefaultValue(binding.objectAttrInclude.roadView) + "objectRemarkView1".setDefaultValue(binding.objectAttrInclude.objectRemarkView1) + "objectRemarkView2".setDefaultValue(binding.objectAttrInclude.objectRemarkView2) + "objectRemarkView3".setDefaultValue(binding.objectAttrInclude.objectRemarkView3) + "ownerView".setDefaultValue(binding.markerAttrInclude.ownerView) + "markerDepthView".setDefaultValue(binding.markerAttrInclude.markerDepthView) + "markerCountView".setDefaultValue(binding.markerAttrInclude.markerCountView) + "remarkView1".setDefaultValue(binding.markerAttrInclude.remarkView1) + "remarkView2".setDefaultValue(binding.markerAttrInclude.remarkView2) + "remarkView3".setDefaultValue(binding.markerAttrInclude.remarkView3) + + val labelData = LabelDataClass( + companyId, + objectTypeCode.toString(), + binding.objectAttrInclude.objectCodeView.text.toString(), + binding.objectAttrInclude.objectNameView.text.toString(), + binding.objectAttrInclude.voltageLevelView.text.toString(), + binding.objectAttrInclude.objectModeSpinner.selectedItem.toString(), + "进线${binding.objectAttrInclude.inlineNameView.text}", + binding.objectAttrInclude.wellCoverMaterialSpinner.selectedItem.toString(), + "${binding.objectAttrInclude.capacityView.text}KVA", + binding.objectAttrInclude.transformerSpecView.text.toString(), + "${binding.objectAttrInclude.sLengthView.text}米长 x ${binding.objectAttrInclude.sWidthView.text}米宽 x ${binding.objectAttrInclude.sHeightView.text}米高", + binding.objectAttrInclude.inlineCountView.text.toString(), + binding.objectAttrInclude.outlineCountView.text.toString(), + binding.objectAttrInclude.cabinetTypeSpinner.selectedItem.toString(), + binding.objectAttrInclude.bottomDepthView.text.toString(), + "${binding.objectAttrInclude.rowCountView.text}排 x ${binding.objectAttrInclude.rowHoleCountView.text}孔", + "${binding.objectAttrInclude.coverDepthView.text}米", + binding.objectAttrInclude.crossPipeLineView.text.toString(), + binding.objectAttrInclude.remainingChannelsView.text.toString(), + binding.objectAttrInclude.tieCableView1.text.toString(), + binding.objectAttrInclude.tieCableView2.text.toString(), + binding.objectAttrInclude.jointCountView.text.toString(), + binding.objectAttrInclude.casingMaterialSpinner.selectedItem.toString(), + "${binding.objectAttrInclude.casingHoleCountView.text}孔,直径${binding.objectAttrInclude.casingHoleDiameterView.text}毫米", + "${binding.objectAttrInclude.heightView.text.toString()}米", + binding.objectAttrInclude.lineNumberView.text.toString(), + binding.objectAttrInclude.constructDateView.text.toString(), + binding.objectAttrInclude.inspectionUnitView.text.toString(), + binding.objectAttrInclude.areaView.text.toString(), + binding.objectAttrInclude.roadView.text.toString(), + binding.objectAttrInclude.objectRemarkView1.text.toString(), + binding.objectAttrInclude.objectRemarkView2.text.toString(), + binding.objectAttrInclude.objectRemarkView3.text.toString(), + binding.markerAttrInclude.markerIdView.text.toString(), + binding.markerAttrInclude.markerTypeSpinner.selectedItem.toString(), + binding.markerAttrInclude.ownerView.text.toString(), + binding.markerAttrInclude.markerDepthView.text.toString(), + binding.markerAttrInclude.installTimeView.text.toString(), + binding.markerAttrInclude.lngView.text.toString(), + binding.markerAttrInclude.latView.text.toString(), + binding.markerAttrInclude.markerCountView.text.toString(), + binding.markerAttrInclude.remarkView1.text.toString(), + binding.markerAttrInclude.remarkView2.text.toString(), + binding.markerAttrInclude.remarkView3.text.toString(), + realPaths + ) + + //先存本地 + lifecycleScope.launch { + withContext(Dispatchers.IO) { + DataBaseManager.get.insertLabel(labelData) + } + } + + //再存服务器 + taskViewModel.installLabel(labelData) + } + + //读标识器 + binding.readMarkerButton.setOnClickListener { + LoadingDialogHub.show(this@MainActivity, "标识器读取中,请稍后...") + binding.readMarkerButton.isEnabled = false + + isReadMarker = true + + //调高串口电位 + gpioManager.setGpioHigh("18") + + soundPool.play(soundResourceId, 1f, 1f, 0, -1, 1f) + + out.write('2'.code) + out.flush() + } + } + + fun bindingValue(markerId: String) { + LoadingDialogHub.dismiss() + soundPool.autoPause() + binding.readMarkerButton.isEnabled = true + + //降低串口电位 + gpioManager.setGpioLow("18") + + isReadMarker = false + binding.markerAttrInclude.markerIdView.text = markerId + } + + private fun initDefaultData() { + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(context)) + + imageAdapter = EditableImageAdapter(context, 3, 3) + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter + + //设置上次填写过的值 + binding.objectAttrInclude.objectCodeView.setText("objectCodeView".getDefaultValue()) + binding.objectAttrInclude.objectNameView.setText("objectNameView".getDefaultValue()) + binding.objectAttrInclude.inlineNameView.setText("inlineNameView".getDefaultValue()) + binding.objectAttrInclude.capacityView.setText("capacityView".getDefaultValue()) + binding.objectAttrInclude.transformerSpecView.setText("transformerSpecView".getDefaultValue()) + binding.objectAttrInclude.sLengthView.setText("sLengthView".getDefaultValue()) + binding.objectAttrInclude.sWidthView.setText("sWidthView".getDefaultValue()) + binding.objectAttrInclude.sHeightView.setText("sHeightView".getDefaultValue()) + binding.objectAttrInclude.inlineCountView.setText("inlineCountView".getDefaultValue()) + binding.objectAttrInclude.outlineCountView.setText("outlineCountView".getDefaultValue()) + binding.objectAttrInclude.bottomDepthView.setText("bottomDepthView".getDefaultValue()) + binding.objectAttrInclude.rowCountView.setText("rowCountView".getDefaultValue()) + binding.objectAttrInclude.rowHoleCountView.setText("rowHoleCountView".getDefaultValue()) + binding.objectAttrInclude.coverDepthView.setText("coverDepthView".getDefaultValue()) + binding.objectAttrInclude.remainingChannelsView.setText("remainingChannelsView".getDefaultValue()) + binding.objectAttrInclude.tieCableView1.setText("tieCableView1".getDefaultValue()) + binding.objectAttrInclude.tieCableView2.setText("tieCableView2".getDefaultValue()) + binding.objectAttrInclude.jointCountView.setText("jointCountView".getDefaultValue()) + binding.objectAttrInclude.casingHoleCountView.setText("casingHoleCountView".getDefaultValue()) + binding.objectAttrInclude.casingHoleDiameterView.setText("casingHoleDiameterView".getDefaultValue()) + binding.objectAttrInclude.heightView.setText("heightView".getDefaultValue()) + binding.objectAttrInclude.lineNumberView.setText("lineNumberView".getDefaultValue()) + binding.objectAttrInclude.inspectionUnitView.setText("inspectionUnitView".getDefaultValue()) + binding.objectAttrInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectAttrInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView1.setText("objectRemarkView1".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView2.setText("objectRemarkView2".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView3.setText("objectRemarkView3".getDefaultValue()) + binding.markerAttrInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.markerAttrInclude.markerDepthView.setText("markerDepthView".getDefaultValue()) + binding.markerAttrInclude.markerCountView.setText("markerCountView".getDefaultValue()) + binding.markerAttrInclude.remarkView1.setText("remarkView1".getDefaultValue()) + binding.markerAttrInclude.remarkView2.setText("remarkView2".getDefaultValue()) + binding.markerAttrInclude.remarkView3.setText("remarkView3".getDefaultValue()) + + /**************************************************************************************/ + binding.objectAttrInclude.objectTypeSpinner.show( + this@MainActivity, LocaleConstant.CONTENT_ARRAY, 0 + ) + binding.objectAttrInclude.objectTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + when (position) { + 0 -> { + //选择电缆井 + binding.objectAttrInclude.objectModeView.text = "类型:" + binding.objectAttrInclude.wellCoverMaterialView.text = "井盖材质:" + binding.objectAttrInclude.bottomDepthNameView.text = "井深:" + setLayoutVisibility( + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE, + View.GONE, + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE + ) + binding.objectAttrInclude.objectModeSpinner.show( + this@MainActivity, LocaleConstant.OBJECT_MODE_ARRAY, 0 + ) + binding.objectAttrInclude.wellCoverMaterialSpinner.show( + this@MainActivity, LocaleConstant.WELL_COVER_MATERIAL_ARRAY_1, 0 + ) + } + + 1 -> { + //选择电缆通道 + binding.objectAttrInclude.bottomDepthNameView.text = "底部深度:" + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE + ) + } + + 2 -> { + //选择配电房 + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + } + + 3 -> { + //选择开关站 + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + } + + 4 -> { + //选择台区 + binding.objectAttrInclude.objectModeView.text = "变压器型号:" + setLayoutVisibility( + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + binding.objectAttrInclude.objectModeSpinner.show( + this@MainActivity, arrayOf("变压器 KVA"), 0 + ) + } + + 5 -> { + //选择杆塔 + binding.objectAttrInclude.wellCoverMaterialView.text = "对象材质:" + setLayoutVisibility( + View.GONE, + View.GONE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE + ) + binding.objectAttrInclude.wellCoverMaterialSpinner.show( + this@MainActivity, LocaleConstant.WELL_COVER_MATERIAL_ARRAY_2, 0 + ) + } + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.objectAttrInclude.cabinetTypeSpinner.show( + this@MainActivity, LocaleConstant.CABINET_TYPE_ARRAY, 0 + ) + binding.objectAttrInclude.casingMaterialSpinner.show( + this@MainActivity, LocaleConstant.PIPE_MATERIAL_ARRAY, 0 + ) + binding.markerAttrInclude.markerTypeSpinner.show( + this@MainActivity, LocaleConstant.MARKER_TYPE_ARRAY, 0 + ) + + //电压等级-多选 + binding.objectAttrInclude.voltageLevelView.setOnClickListener { + AlertDialog.Builder(context).setCancelable(false).setIcon(R.mipmap.ic_launcher) + .setTitle("请选择电压等级").setMultiChoiceItems( + LocaleConstant.VOLTAGE_LEVEL_ARRAY, LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY + ) { _, which, isChecked -> + LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[which] = isChecked + }.setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } + .setPositiveButton("确定") { _, _ -> + val temp = java.util.ArrayList() + LocaleConstant.VOLTAGE_LEVEL_ARRAY.forEachIndexed { index, s -> + if (LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[index]) { + temp.add(s) + } + } + + binding.objectAttrInclude.voltageLevelView.text = temp.reformat() + }.show() + } + + //交叉管道类型-多选 + binding.objectAttrInclude.crossPipeLineView.setOnClickListener { + AlertDialog.Builder(context).setCancelable(false).setIcon(R.mipmap.ic_launcher) + .setTitle("请选择交叉管道类型").setMultiChoiceItems( + LocaleConstant.CROSS_PIPE_ARRAY, LocaleConstant.CROSS_PIPE_STATE_ARRAY + ) { _, which, isChecked -> + LocaleConstant.CROSS_PIPE_STATE_ARRAY[which] = isChecked + }.setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } + .setPositiveButton("确定") { _, _ -> + val temp = java.util.ArrayList() + LocaleConstant.CROSS_PIPE_ARRAY.forEachIndexed { index, s -> + if (LocaleConstant.CROSS_PIPE_STATE_ARRAY[index]) { + temp.add(s) + } + } + + binding.objectAttrInclude.crossPipeLineView.text = temp.reformat() + }.show() + } + + binding.objectAttrInclude.constructDateView.setOnClickListener { + val datePicker = DatePickerDialog( + context, + 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.objectAttrInclude.constructDateView.text = selectedDate + } + } + } + + binding.markerAttrInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() + locationHub.getCurrentLocation(true, object : ILocationListener { + override fun onAMapLocationGet(location: AMapLocation?) { + if (location != null) { + binding.markerAttrInclude.lngView.text = location.longitude.toString() + binding.markerAttrInclude.latView.text = location.latitude.toString() + } else { + "当前位置信号差,无法获取定位".show(context) + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + PictureSelector.create(this@MainActivity).openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: java.util.ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(context) + return + } + analyticalSelectResult(result[0]) + } + + override fun onCancel() { + + } + }) + } + + 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) + } + }) + } + + private fun analyticalSelectResult(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(context, object : OnImageCompressListener { + override fun onSuccess(file: File) { + realPaths.add(file.absolutePath) + imageAdapter.setupImage(realPaths) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } + + //根据选择类型控制界面某些区域显隐 + private fun setLayoutVisibility(vararg args: Int) { + binding.objectAttrInclude.objectModeLayout.visibility = args[0] + binding.objectAttrInclude.inlineNameLayout.visibility = args[1] + binding.objectAttrInclude.wellCoverMaterialLayout.visibility = args[2] + binding.objectAttrInclude.capacityLayout.visibility = args[3] + binding.objectAttrInclude.sizeLayout.visibility = args[4] + binding.objectAttrInclude.inlineCountLayout.visibility = args[5] + binding.objectAttrInclude.outlineCountLayout.visibility = args[6] + binding.objectAttrInclude.wellDepthLayout.visibility = args[7] + binding.objectAttrInclude.pipeLineLayout.visibility = args[8] + binding.objectAttrInclude.jointCountLayout.visibility = args[9] + binding.objectAttrInclude.heightLayout.visibility = args[10] + } } /**安装小标签对话框******************************************************************************/ @@ -859,6 +1373,29 @@ var isReadMarker = false var isInstallMarker = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(1f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + //返回 + binding.titleInclude.leftBackView.setOnClickListener { + dismiss() + } + } + + fun bindingValue(markerId: String) { + LoadingDialogHub.dismiss() + soundPool.autoPause() + binding.readMarkerButton.isEnabled = true + + //降低串口电位 + gpioManager.setGpioLow("18") + + isReadMarker = false + } } /**探测标识器对话框******************************************************************************/ @@ -976,9 +1513,12 @@ degreeCache["lastDegree"]?.apply { val animation = RotateAnimation( - this, degree, - Animation.RELATIVE_TO_SELF, 0.5f, - Animation.RELATIVE_TO_SELF, 0.5f + this, + degree, + Animation.RELATIVE_TO_SELF, + 0.5f, + Animation.RELATIVE_TO_SELF, + 0.5f ) animation.duration = 0 animation.fillAfter = true diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14e9b51..92d80c5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,7 +70,6 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> - diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt deleted file mode 100644 index 6510104..0000000 --- a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt +++ /dev/null @@ -1,601 +0,0 @@ -package com.casic.electric.detector.view - -import android.annotation.SuppressLint -import android.app.AlertDialog -import android.app.DatePickerDialog -import android.content.Context -import android.content.DialogInterface -import android.content.Intent -import android.media.AudioAttributes -import android.media.SoundPool -import android.os.Bundle -import android.os.Handler -import android.os.Message -import android.provider.Settings -import android.util.Log -import android.view.KeyEvent -import android.view.View -import android.view.WindowManager -import android.widget.AdapterView -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import com.amap.api.location.AMapLocation -import com.casic.electric.detector.R -import com.casic.electric.detector.adapter.EditableImageAdapter -import com.casic.electric.detector.base.SerialPortActivity -import com.casic.electric.detector.callback.ILocationListener -import com.casic.electric.detector.callback.OnImageCompressListener -import com.casic.electric.detector.databinding.ActivityInstallLabelBinding -import com.casic.electric.detector.extensions.* -import com.casic.electric.detector.utils.* -import com.casic.electric.detector.vm.TaskViewModel -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener -import com.pengxh.kt.lite.extensions.* -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.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File -import java.io.IOException -import java.util.* - -@SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { - - private val kTag = "LabelActivity" - private val context: Context = this@InstallLabelActivity - private val gpioManager by lazy { GpioManager() } - private val calendar by lazy { Calendar.getInstance() } - private val locationHub by lazy { LocationHub(this) } - private val realPaths = ArrayList() //真实图片路径 - private var soundResId = 0 - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var soundPool: SoundPool - private lateinit var imageAdapter: EditableImageAdapter - private lateinit var taskViewModel: TaskViewModel - - override fun initViewBinding(): ActivityInstallLabelBinding { - return ActivityInstallLabelBinding.inflate(layoutInflater) - } - - override fun setupTopBarLayout() { - binding.titleInclude.titleView.text = "安装新标识器" - binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) - } - - override fun initOnCreate(savedInstanceState: Bundle?) { - window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) - - weakReferenceHandler = WeakReferenceHandler(this) - - val audioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_MEDIA) - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) - .build() - soundPool = SoundPool.Builder() - .setMaxStreams(16) - .setAudioAttributes(audioAttributes) - .build() - - //设置上次填写过的值 - binding.objectAttrInclude.objectCodeView.setText("objectCodeView".getDefaultValue()) - binding.objectAttrInclude.objectNameView.setText("objectNameView".getDefaultValue()) - binding.objectAttrInclude.inlineNameView.setText("inlineNameView".getDefaultValue()) - binding.objectAttrInclude.capacityView.setText("capacityView".getDefaultValue()) - binding.objectAttrInclude.transformerSpecView.setText("transformerSpecView".getDefaultValue()) - binding.objectAttrInclude.sLengthView.setText("sLengthView".getDefaultValue()) - binding.objectAttrInclude.sWidthView.setText("sWidthView".getDefaultValue()) - binding.objectAttrInclude.sHeightView.setText("sHeightView".getDefaultValue()) - binding.objectAttrInclude.inlineCountView.setText("inlineCountView".getDefaultValue()) - binding.objectAttrInclude.outlineCountView.setText("outlineCountView".getDefaultValue()) - binding.objectAttrInclude.bottomDepthView.setText("bottomDepthView".getDefaultValue()) - binding.objectAttrInclude.rowCountView.setText("rowCountView".getDefaultValue()) - binding.objectAttrInclude.rowHoleCountView.setText("rowHoleCountView".getDefaultValue()) - binding.objectAttrInclude.coverDepthView.setText("coverDepthView".getDefaultValue()) - binding.objectAttrInclude.remainingChannelsView.setText("remainingChannelsView".getDefaultValue()) - binding.objectAttrInclude.tieCableView1.setText("tieCableView1".getDefaultValue()) - binding.objectAttrInclude.tieCableView2.setText("tieCableView2".getDefaultValue()) - binding.objectAttrInclude.jointCountView.setText("jointCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleCountView.setText("casingHoleCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleDiameterView.setText("casingHoleDiameterView".getDefaultValue()) - binding.objectAttrInclude.heightView.setText("heightView".getDefaultValue()) - binding.objectAttrInclude.lineNumberView.setText("lineNumberView".getDefaultValue()) - binding.objectAttrInclude.inspectionUnitView.setText("inspectionUnitView".getDefaultValue()) - binding.objectAttrInclude.areaView.setText("areaView".getDefaultValue()) - binding.objectAttrInclude.roadView.setText("roadView".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView1.setText("objectRemarkView1".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView2.setText("objectRemarkView2".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView3.setText("objectRemarkView3".getDefaultValue()) - binding.markerAttrInclude.ownerView.setText("ownerView".getDefaultValue()) - binding.markerAttrInclude.markerDepthView.setText("markerDepthView".getDefaultValue()) - binding.markerAttrInclude.markerCountView.setText("markerCountView".getDefaultValue()) - binding.markerAttrInclude.remarkView1.setText("remarkView1".getDefaultValue()) - binding.markerAttrInclude.remarkView2.setText("remarkView2".getDefaultValue()) - binding.markerAttrInclude.remarkView3.setText("remarkView3".getDefaultValue()) - - //初始化图片九宫格 - imageAdapter = EditableImageAdapter(this, 3, 3) - binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter - - taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] - } - - override fun observeRequestState() { - taskViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...") - LoadState.Success -> { - LoadingDialogHub.dismiss() - finish() - } - - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun initEvent() { - binding.titleInclude.leftBackView.setOnClickListener { finish() } - - /**************************************************************************************/ - binding.objectAttrInclude.objectTypeSpinner.show(this, LocaleConstant.CONTENT_ARRAY, 0) - binding.objectAttrInclude.objectTypeSpinner.onItemSelectedListener = - object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - when (position) { - 0 -> { - //选择电缆井 - binding.objectAttrInclude.objectModeView.text = "类型:" - binding.objectAttrInclude.wellCoverMaterialView.text = "井盖材质:" - binding.objectAttrInclude.bottomDepthNameView.text = "井深:" - setLayoutVisibility( - View.VISIBLE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, LocaleConstant.OBJECT_MODE_ARRAY, 0 - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_1, - 0 - ) - } - - 1 -> { - //选择电缆通道 - binding.objectAttrInclude.bottomDepthNameView.text = "底部深度:" - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, View.VISIBLE, - View.GONE - ) - } - - 2 -> { - //选择配电房 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, - View.VISIBLE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 3 -> { - //选择开关站 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.VISIBLE, - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 4 -> { - //选择台区 - binding.objectAttrInclude.objectModeView.text = "变压器型号:" - setLayoutVisibility( - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, arrayOf("变压器 KVA"), 0 - ) - } - - 5 -> { - //选择杆塔 - binding.objectAttrInclude.wellCoverMaterialView.text = "对象材质:" - setLayoutVisibility( - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.VISIBLE - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_2, - 0 - ) - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - - binding.objectAttrInclude.cabinetTypeSpinner.show( - this, - LocaleConstant.CABINET_TYPE_ARRAY, - 0 - ) - binding.objectAttrInclude.casingMaterialSpinner.show( - this, - LocaleConstant.PIPE_MATERIAL_ARRAY, - 0 - ) - binding.markerAttrInclude.markerTypeSpinner.show(this, LocaleConstant.MARKER_TYPE_ARRAY, 0) - - //电压等级-多选 - binding.objectAttrInclude.voltageLevelView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择电压等级") - .setMultiChoiceItems( - LocaleConstant.VOLTAGE_LEVEL_ARRAY, LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.VOLTAGE_LEVEL_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.voltageLevelView.text = temp.reformat() - }.show() - } - - //交叉管道类型-多选 - binding.objectAttrInclude.crossPipeLineView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择交叉管道类型") - .setMultiChoiceItems( - LocaleConstant.CROSS_PIPE_ARRAY, LocaleConstant.CROSS_PIPE_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.CROSS_PIPE_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.CROSS_PIPE_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.CROSS_PIPE_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.crossPipeLineView.text = temp.reformat() - }.show() - } - - binding.objectAttrInclude.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.objectAttrInclude.constructDateView.text = selectedDate - } - } - } - - binding.markerAttrInclude.installTimeView.text = - System.currentTimeMillis().timestampToCompleteDate() - locationHub.getCurrentLocation(true, object : ILocationListener { - override fun onAMapLocationGet(location: AMapLocation?) { - if (location != null) { - binding.markerAttrInclude.lngView.text = location.longitude.toString() - binding.markerAttrInclude.latView.text = location.latitude.toString() - } else { - "当前位置信号差,无法获取定位".show(context) - } - } - }) - - imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { - override fun onAddImageClick() { - PictureSelector.create(this@InstallLabelActivity) - .openCamera(SelectMimeType.ofImage()) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList?) { - if (result == null) { - "拍照失败,请重试".show(context) - return - } - analyticalSelectResult(result[0]) - } - - override fun onCancel() { - - } - }) - } - - 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 itemPosition = binding.objectAttrInclude.objectTypeSpinner.selectedItemPosition - val objectTypeCode = itemPosition + 1 - - if (binding.markerAttrInclude.markerIdView.text.isNullOrBlank()) { - "标识器ID不能为空,请读标识器".show(this) - return@setOnClickListener - } - - if (binding.objectAttrInclude.constructDateView.text.isNullOrBlank()) { - "请选择建设时间".show(this) - return@setOnClickListener - } - - if (binding.markerAttrInclude.markerCountView.text.isNullOrBlank()) { - "请输入电子标签数量".show(this) - return@setOnClickListener - } - - //保存默认值 - "objectCodeView".setDefaultValue(binding.objectAttrInclude.objectCodeView) - "objectNameView".setDefaultValue(binding.objectAttrInclude.objectNameView) - "inlineNameView".setDefaultValue(binding.objectAttrInclude.inlineNameView) - "capacityView".setDefaultValue(binding.objectAttrInclude.capacityView) - "transformerSpecView".setDefaultValue(binding.objectAttrInclude.transformerSpecView) - "sLengthView".setDefaultValue(binding.objectAttrInclude.sLengthView) - "sWidthView".setDefaultValue(binding.objectAttrInclude.sWidthView) - "sHeightView".setDefaultValue(binding.objectAttrInclude.sHeightView) - "inlineCountView".setDefaultValue(binding.objectAttrInclude.inlineCountView) - "outlineCountView".setDefaultValue(binding.objectAttrInclude.outlineCountView) - "bottomDepthView".setDefaultValue(binding.objectAttrInclude.bottomDepthView) - "rowCountView".setDefaultValue(binding.objectAttrInclude.rowCountView) - "rowHoleCountView".setDefaultValue(binding.objectAttrInclude.rowHoleCountView) - "coverDepthView".setDefaultValue(binding.objectAttrInclude.coverDepthView) - "remainingChannelsView".setDefaultValue(binding.objectAttrInclude.remainingChannelsView) - "tieCableView1".setDefaultValue(binding.objectAttrInclude.tieCableView1) - "tieCableView2".setDefaultValue(binding.objectAttrInclude.tieCableView2) - "jointCountView".setDefaultValue(binding.objectAttrInclude.jointCountView) - "casingHoleCountView".setDefaultValue(binding.objectAttrInclude.casingHoleCountView) - "casingHoleDiameterView".setDefaultValue(binding.objectAttrInclude.casingHoleDiameterView) - "heightView".setDefaultValue(binding.objectAttrInclude.heightView) - "lineNumberView".setDefaultValue(binding.objectAttrInclude.lineNumberView) - "inspectionUnitView".setDefaultValue(binding.objectAttrInclude.inspectionUnitView) - "areaView".setDefaultValue(binding.objectAttrInclude.areaView) - "roadView".setDefaultValue(binding.objectAttrInclude.roadView) - "objectRemarkView1".setDefaultValue(binding.objectAttrInclude.objectRemarkView1) - "objectRemarkView2".setDefaultValue(binding.objectAttrInclude.objectRemarkView2) - "objectRemarkView3".setDefaultValue(binding.objectAttrInclude.objectRemarkView3) - "ownerView".setDefaultValue(binding.markerAttrInclude.ownerView) - "markerDepthView".setDefaultValue(binding.markerAttrInclude.markerDepthView) - "markerCountView".setDefaultValue(binding.markerAttrInclude.markerCountView) - "remarkView1".setDefaultValue(binding.markerAttrInclude.remarkView1) - "remarkView2".setDefaultValue(binding.markerAttrInclude.remarkView2) - "remarkView3".setDefaultValue(binding.markerAttrInclude.remarkView3) - - val labelData = LabelDataClass( - companyId, - objectTypeCode.toString(), - binding.objectAttrInclude.objectCodeView.text.toString(), - binding.objectAttrInclude.objectNameView.text.toString(), - binding.objectAttrInclude.voltageLevelView.text.toString(), - binding.objectAttrInclude.objectModeSpinner.selectedItem.toString(), - "进线${binding.objectAttrInclude.inlineNameView.text}", - binding.objectAttrInclude.wellCoverMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.capacityView.text}KVA", - binding.objectAttrInclude.transformerSpecView.text.toString(), - "${binding.objectAttrInclude.sLengthView.text}米长 x ${binding.objectAttrInclude.sWidthView.text}米宽 x ${binding.objectAttrInclude.sHeightView.text}米高", - binding.objectAttrInclude.inlineCountView.text.toString(), - binding.objectAttrInclude.outlineCountView.text.toString(), - binding.objectAttrInclude.cabinetTypeSpinner.selectedItem.toString(), - binding.objectAttrInclude.bottomDepthView.text.toString(), - "${binding.objectAttrInclude.rowCountView.text}排 x ${binding.objectAttrInclude.rowHoleCountView.text}孔", - "${binding.objectAttrInclude.coverDepthView.text}米", - binding.objectAttrInclude.crossPipeLineView.text.toString(), - binding.objectAttrInclude.remainingChannelsView.text.toString(), - binding.objectAttrInclude.tieCableView1.text.toString(), - binding.objectAttrInclude.tieCableView2.text.toString(), - binding.objectAttrInclude.jointCountView.text.toString(), - binding.objectAttrInclude.casingMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.casingHoleCountView.text}孔,直径${binding.objectAttrInclude.casingHoleDiameterView.text}毫米", - "${binding.objectAttrInclude.heightView.text.toString()}米", - binding.objectAttrInclude.lineNumberView.text.toString(), - binding.objectAttrInclude.constructDateView.text.toString(), - binding.objectAttrInclude.inspectionUnitView.text.toString(), - binding.objectAttrInclude.areaView.text.toString(), - binding.objectAttrInclude.roadView.text.toString(), - binding.objectAttrInclude.objectRemarkView1.text.toString(), - binding.objectAttrInclude.objectRemarkView2.text.toString(), - binding.objectAttrInclude.objectRemarkView3.text.toString(), - binding.markerAttrInclude.markerIdView.text.toString(), - binding.markerAttrInclude.markerTypeSpinner.selectedItem.toString(), - binding.markerAttrInclude.ownerView.text.toString(), - binding.markerAttrInclude.markerDepthView.text.toString(), - binding.markerAttrInclude.installTimeView.text.toString(), - binding.markerAttrInclude.lngView.text.toString(), - binding.markerAttrInclude.latView.text.toString(), - binding.markerAttrInclude.markerCountView.text.toString(), - binding.markerAttrInclude.remarkView1.text.toString(), - binding.markerAttrInclude.remarkView2.text.toString(), - binding.markerAttrInclude.remarkView3.text.toString(), - realPaths - ) - - //先存本地 - lifecycleScope.launch { - withContext(Dispatchers.IO) { - DataBaseManager.get.insertLabel(labelData) - } - } - - //再存服务器 - taskViewModel.installLabel(labelData) - } 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 { - gpioManager.setGpioHigh("18") - - LoadingDialogHub.show(this, "标识器读取中,请稍后...") - - soundResId = soundPool.load(this, R.raw.ring3, 1) - soundPool.setOnLoadCompleteListener { soundPool, _, _ -> - soundPool.play(soundResId, 1f, 1f, 0, -1, 1f) - } - - // 1000ms后发送读标识器或搜索信号 - weakReferenceHandler.postDelayed({ - try { - // 发送读标识器或搜索信号 - out.write("2".toByteArray()) - out.flush() - } catch (e: IOException) { - e.printStackTrace() - } - }, 1000) - } - } - - override fun onDataReceived(buffer: ByteArray) { - Log.d(kTag, "onDataReceived => " + buffer.contentToString()) - if (buffer != null) { - val message = weakReferenceHandler.obtainMessage() - message.what = 2023081701 - message.obj = buffer - weakReferenceHandler.sendMessage(message) - } - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == 2023081701) { - soundPool.release() - - val buffer = msg.obj as ByteArray - val hex = buffer.toHex() - - if (hex.length >= 20) { - val markerId = hex.substring(0, 20).hexToString() - - gpioManager.setGpioLow("18") - - //查本地库 - val result = DataBaseManager.get.queryLabelById(markerId) - if (result.isEmpty()) { - binding.markerAttrInclude.markerIdView.text = markerId - } else { - "此标识器已安装,请更换标识器!".show(this) - } - LoadingDialogHub.dismiss() - } - } - return true - } - - private fun analyticalSelectResult(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() - } - }) - } - - //根据选择类型控制界面某些区域显隐 - private fun setLayoutVisibility(vararg args: Int) { - binding.objectAttrInclude.objectModeLayout.visibility = args[0] - binding.objectAttrInclude.inlineNameLayout.visibility = args[1] - binding.objectAttrInclude.wellCoverMaterialLayout.visibility = args[2] - binding.objectAttrInclude.capacityLayout.visibility = args[3] - binding.objectAttrInclude.sizeLayout.visibility = args[4] - binding.objectAttrInclude.inlineCountLayout.visibility = args[5] - binding.objectAttrInclude.outlineCountLayout.visibility = args[6] - binding.objectAttrInclude.wellDepthLayout.visibility = args[7] - binding.objectAttrInclude.pipeLineLayout.visibility = args[8] - binding.objectAttrInclude.jointCountLayout.visibility = args[9] - binding.objectAttrInclude.heightLayout.visibility = args[10] - } - - override fun onDestroy() { - super.onDestroy() - soundPool.release() - gpioManager.setGpioLow("18") - } - - 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/electric/detector/view/MainActivity.kt b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt index a0a4aac..40a5f3d 100644 --- a/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt @@ -2,8 +2,10 @@ import android.annotation.SuppressLint import android.app.AlertDialog +import android.app.DatePickerDialog import android.app.Dialog import android.content.Context +import android.content.DialogInterface import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -16,6 +18,7 @@ import android.view.View import android.view.animation.Animation import android.view.animation.RotateAnimation +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.amap.api.location.AMapLocation @@ -33,6 +36,7 @@ import com.casic.electric.detector.bean.SmallLabelBean import com.casic.electric.detector.bean.TaskBean import com.casic.electric.detector.callback.ILocationListener +import com.casic.electric.detector.callback.OnImageCompressListener import com.casic.electric.detector.cluster.ClusterItem import com.casic.electric.detector.cluster.ClusterOverlay import com.casic.electric.detector.cluster.RegionItem @@ -41,14 +45,20 @@ import com.casic.electric.detector.databinding.DialogInstallSmallMarkerBinding import com.casic.electric.detector.databinding.DialogSearchMarkerBinding import com.casic.electric.detector.extensions.appendExcelDownloadUrl +import com.casic.electric.detector.extensions.compressImage import com.casic.electric.detector.extensions.drawCircle +import com.casic.electric.detector.extensions.getDefaultValue import com.casic.electric.detector.extensions.hexToString import com.casic.electric.detector.extensions.initImmersionBar import com.casic.electric.detector.extensions.isNumber +import com.casic.electric.detector.extensions.reformat +import com.casic.electric.detector.extensions.setDefaultValue +import com.casic.electric.detector.extensions.show import com.casic.electric.detector.extensions.toHex import com.casic.electric.detector.utils.DataBaseManager import com.casic.electric.detector.utils.ExcelHub import com.casic.electric.detector.utils.GpioManager +import com.casic.electric.detector.utils.LabelDataClass import com.casic.electric.detector.utils.LocaleConstant import com.casic.electric.detector.utils.LocationHub import com.casic.electric.detector.utils.RouteOnMap @@ -56,13 +66,22 @@ import com.casic.electric.detector.widgets.QueryMarkerDialog import com.casic.electric.detector.widgets.SamplePopupWindow import com.google.gson.Gson +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.extensions.appendZero import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.createDownloadFileDir +import com.pengxh.kt.lite.extensions.dateToTimestamp import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.initDialogLayoutParams import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.extensions.timestampToTime import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.FileDownloadManager import com.pengxh.kt.lite.utils.LoadState @@ -78,6 +97,7 @@ import java.io.File import java.text.DecimalFormat import java.util.Calendar +import java.util.Date import java.util.Timer import java.util.TimerTask @@ -456,16 +476,16 @@ Log.d(kTag, "$kTag => $hex") if (searchDialog.isDetectMarker) { searchDialog.bindingValue(hex) -// } else if (installMarkerDialog.isReadMarker) { -// val markerId = hex.take(20).hexToString() -// if (markerId.isNumber()) { -// installMarkerDialog.bindingValue(markerId) -// } -// } else if (installSmallMarkerDialog.isReadMarker) { -// val markerId = hex.take(20).hexToString() -// if (markerId.isNumber()) { -// installSmallMarkerDialog.bindingValue(markerId) -// } + } else if (installMarkerDialog.isReadMarker) { + val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { + installMarkerDialog.bindingValue(markerId) + } + } else if (installSmallMarkerDialog.isReadMarker) { + val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { + installSmallMarkerDialog.bindingValue(markerId) + } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() if (markerId.isNumber()) { @@ -847,6 +867,500 @@ var isReadMarker = false var isInstallMarker = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(1f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + //初始化数据 + initDefaultData() + + //返回 + binding.titleInclude.leftBackView.setOnClickListener { + soundPool.autoPause() + dismiss() + } + + binding.installButton.setOnClickListener { + val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String + + val itemPosition = binding.objectAttrInclude.objectTypeSpinner.selectedItemPosition + val objectTypeCode = itemPosition + 1 + + if (binding.markerAttrInclude.markerIdView.text.isNullOrBlank()) { + "标识器ID不能为空,请读标识器".show(context) + return@setOnClickListener + } + + if (binding.objectAttrInclude.constructDateView.text.isNullOrBlank()) { + "请选择建设时间".show(context) + return@setOnClickListener + } + + if (binding.markerAttrInclude.markerCountView.text.isNullOrBlank()) { + "请输入电子标签数量".show(context) + return@setOnClickListener + } + + //保存默认值 + "objectCodeView".setDefaultValue(binding.objectAttrInclude.objectCodeView) + "objectNameView".setDefaultValue(binding.objectAttrInclude.objectNameView) + "inlineNameView".setDefaultValue(binding.objectAttrInclude.inlineNameView) + "capacityView".setDefaultValue(binding.objectAttrInclude.capacityView) + "transformerSpecView".setDefaultValue(binding.objectAttrInclude.transformerSpecView) + "sLengthView".setDefaultValue(binding.objectAttrInclude.sLengthView) + "sWidthView".setDefaultValue(binding.objectAttrInclude.sWidthView) + "sHeightView".setDefaultValue(binding.objectAttrInclude.sHeightView) + "inlineCountView".setDefaultValue(binding.objectAttrInclude.inlineCountView) + "outlineCountView".setDefaultValue(binding.objectAttrInclude.outlineCountView) + "bottomDepthView".setDefaultValue(binding.objectAttrInclude.bottomDepthView) + "rowCountView".setDefaultValue(binding.objectAttrInclude.rowCountView) + "rowHoleCountView".setDefaultValue(binding.objectAttrInclude.rowHoleCountView) + "coverDepthView".setDefaultValue(binding.objectAttrInclude.coverDepthView) + "remainingChannelsView".setDefaultValue(binding.objectAttrInclude.remainingChannelsView) + "tieCableView1".setDefaultValue(binding.objectAttrInclude.tieCableView1) + "tieCableView2".setDefaultValue(binding.objectAttrInclude.tieCableView2) + "jointCountView".setDefaultValue(binding.objectAttrInclude.jointCountView) + "casingHoleCountView".setDefaultValue(binding.objectAttrInclude.casingHoleCountView) + "casingHoleDiameterView".setDefaultValue(binding.objectAttrInclude.casingHoleDiameterView) + "heightView".setDefaultValue(binding.objectAttrInclude.heightView) + "lineNumberView".setDefaultValue(binding.objectAttrInclude.lineNumberView) + "inspectionUnitView".setDefaultValue(binding.objectAttrInclude.inspectionUnitView) + "areaView".setDefaultValue(binding.objectAttrInclude.areaView) + "roadView".setDefaultValue(binding.objectAttrInclude.roadView) + "objectRemarkView1".setDefaultValue(binding.objectAttrInclude.objectRemarkView1) + "objectRemarkView2".setDefaultValue(binding.objectAttrInclude.objectRemarkView2) + "objectRemarkView3".setDefaultValue(binding.objectAttrInclude.objectRemarkView3) + "ownerView".setDefaultValue(binding.markerAttrInclude.ownerView) + "markerDepthView".setDefaultValue(binding.markerAttrInclude.markerDepthView) + "markerCountView".setDefaultValue(binding.markerAttrInclude.markerCountView) + "remarkView1".setDefaultValue(binding.markerAttrInclude.remarkView1) + "remarkView2".setDefaultValue(binding.markerAttrInclude.remarkView2) + "remarkView3".setDefaultValue(binding.markerAttrInclude.remarkView3) + + val labelData = LabelDataClass( + companyId, + objectTypeCode.toString(), + binding.objectAttrInclude.objectCodeView.text.toString(), + binding.objectAttrInclude.objectNameView.text.toString(), + binding.objectAttrInclude.voltageLevelView.text.toString(), + binding.objectAttrInclude.objectModeSpinner.selectedItem.toString(), + "进线${binding.objectAttrInclude.inlineNameView.text}", + binding.objectAttrInclude.wellCoverMaterialSpinner.selectedItem.toString(), + "${binding.objectAttrInclude.capacityView.text}KVA", + binding.objectAttrInclude.transformerSpecView.text.toString(), + "${binding.objectAttrInclude.sLengthView.text}米长 x ${binding.objectAttrInclude.sWidthView.text}米宽 x ${binding.objectAttrInclude.sHeightView.text}米高", + binding.objectAttrInclude.inlineCountView.text.toString(), + binding.objectAttrInclude.outlineCountView.text.toString(), + binding.objectAttrInclude.cabinetTypeSpinner.selectedItem.toString(), + binding.objectAttrInclude.bottomDepthView.text.toString(), + "${binding.objectAttrInclude.rowCountView.text}排 x ${binding.objectAttrInclude.rowHoleCountView.text}孔", + "${binding.objectAttrInclude.coverDepthView.text}米", + binding.objectAttrInclude.crossPipeLineView.text.toString(), + binding.objectAttrInclude.remainingChannelsView.text.toString(), + binding.objectAttrInclude.tieCableView1.text.toString(), + binding.objectAttrInclude.tieCableView2.text.toString(), + binding.objectAttrInclude.jointCountView.text.toString(), + binding.objectAttrInclude.casingMaterialSpinner.selectedItem.toString(), + "${binding.objectAttrInclude.casingHoleCountView.text}孔,直径${binding.objectAttrInclude.casingHoleDiameterView.text}毫米", + "${binding.objectAttrInclude.heightView.text.toString()}米", + binding.objectAttrInclude.lineNumberView.text.toString(), + binding.objectAttrInclude.constructDateView.text.toString(), + binding.objectAttrInclude.inspectionUnitView.text.toString(), + binding.objectAttrInclude.areaView.text.toString(), + binding.objectAttrInclude.roadView.text.toString(), + binding.objectAttrInclude.objectRemarkView1.text.toString(), + binding.objectAttrInclude.objectRemarkView2.text.toString(), + binding.objectAttrInclude.objectRemarkView3.text.toString(), + binding.markerAttrInclude.markerIdView.text.toString(), + binding.markerAttrInclude.markerTypeSpinner.selectedItem.toString(), + binding.markerAttrInclude.ownerView.text.toString(), + binding.markerAttrInclude.markerDepthView.text.toString(), + binding.markerAttrInclude.installTimeView.text.toString(), + binding.markerAttrInclude.lngView.text.toString(), + binding.markerAttrInclude.latView.text.toString(), + binding.markerAttrInclude.markerCountView.text.toString(), + binding.markerAttrInclude.remarkView1.text.toString(), + binding.markerAttrInclude.remarkView2.text.toString(), + binding.markerAttrInclude.remarkView3.text.toString(), + realPaths + ) + + //先存本地 + lifecycleScope.launch { + withContext(Dispatchers.IO) { + DataBaseManager.get.insertLabel(labelData) + } + } + + //再存服务器 + taskViewModel.installLabel(labelData) + } + + //读标识器 + binding.readMarkerButton.setOnClickListener { + LoadingDialogHub.show(this@MainActivity, "标识器读取中,请稍后...") + binding.readMarkerButton.isEnabled = false + + isReadMarker = true + + //调高串口电位 + gpioManager.setGpioHigh("18") + + soundPool.play(soundResourceId, 1f, 1f, 0, -1, 1f) + + out.write('2'.code) + out.flush() + } + } + + fun bindingValue(markerId: String) { + LoadingDialogHub.dismiss() + soundPool.autoPause() + binding.readMarkerButton.isEnabled = true + + //降低串口电位 + gpioManager.setGpioLow("18") + + isReadMarker = false + binding.markerAttrInclude.markerIdView.text = markerId + } + + private fun initDefaultData() { + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(context)) + + imageAdapter = EditableImageAdapter(context, 3, 3) + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter + + //设置上次填写过的值 + binding.objectAttrInclude.objectCodeView.setText("objectCodeView".getDefaultValue()) + binding.objectAttrInclude.objectNameView.setText("objectNameView".getDefaultValue()) + binding.objectAttrInclude.inlineNameView.setText("inlineNameView".getDefaultValue()) + binding.objectAttrInclude.capacityView.setText("capacityView".getDefaultValue()) + binding.objectAttrInclude.transformerSpecView.setText("transformerSpecView".getDefaultValue()) + binding.objectAttrInclude.sLengthView.setText("sLengthView".getDefaultValue()) + binding.objectAttrInclude.sWidthView.setText("sWidthView".getDefaultValue()) + binding.objectAttrInclude.sHeightView.setText("sHeightView".getDefaultValue()) + binding.objectAttrInclude.inlineCountView.setText("inlineCountView".getDefaultValue()) + binding.objectAttrInclude.outlineCountView.setText("outlineCountView".getDefaultValue()) + binding.objectAttrInclude.bottomDepthView.setText("bottomDepthView".getDefaultValue()) + binding.objectAttrInclude.rowCountView.setText("rowCountView".getDefaultValue()) + binding.objectAttrInclude.rowHoleCountView.setText("rowHoleCountView".getDefaultValue()) + binding.objectAttrInclude.coverDepthView.setText("coverDepthView".getDefaultValue()) + binding.objectAttrInclude.remainingChannelsView.setText("remainingChannelsView".getDefaultValue()) + binding.objectAttrInclude.tieCableView1.setText("tieCableView1".getDefaultValue()) + binding.objectAttrInclude.tieCableView2.setText("tieCableView2".getDefaultValue()) + binding.objectAttrInclude.jointCountView.setText("jointCountView".getDefaultValue()) + binding.objectAttrInclude.casingHoleCountView.setText("casingHoleCountView".getDefaultValue()) + binding.objectAttrInclude.casingHoleDiameterView.setText("casingHoleDiameterView".getDefaultValue()) + binding.objectAttrInclude.heightView.setText("heightView".getDefaultValue()) + binding.objectAttrInclude.lineNumberView.setText("lineNumberView".getDefaultValue()) + binding.objectAttrInclude.inspectionUnitView.setText("inspectionUnitView".getDefaultValue()) + binding.objectAttrInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectAttrInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView1.setText("objectRemarkView1".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView2.setText("objectRemarkView2".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView3.setText("objectRemarkView3".getDefaultValue()) + binding.markerAttrInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.markerAttrInclude.markerDepthView.setText("markerDepthView".getDefaultValue()) + binding.markerAttrInclude.markerCountView.setText("markerCountView".getDefaultValue()) + binding.markerAttrInclude.remarkView1.setText("remarkView1".getDefaultValue()) + binding.markerAttrInclude.remarkView2.setText("remarkView2".getDefaultValue()) + binding.markerAttrInclude.remarkView3.setText("remarkView3".getDefaultValue()) + + /**************************************************************************************/ + binding.objectAttrInclude.objectTypeSpinner.show( + this@MainActivity, LocaleConstant.CONTENT_ARRAY, 0 + ) + binding.objectAttrInclude.objectTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + when (position) { + 0 -> { + //选择电缆井 + binding.objectAttrInclude.objectModeView.text = "类型:" + binding.objectAttrInclude.wellCoverMaterialView.text = "井盖材质:" + binding.objectAttrInclude.bottomDepthNameView.text = "井深:" + setLayoutVisibility( + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE, + View.GONE, + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE + ) + binding.objectAttrInclude.objectModeSpinner.show( + this@MainActivity, LocaleConstant.OBJECT_MODE_ARRAY, 0 + ) + binding.objectAttrInclude.wellCoverMaterialSpinner.show( + this@MainActivity, LocaleConstant.WELL_COVER_MATERIAL_ARRAY_1, 0 + ) + } + + 1 -> { + //选择电缆通道 + binding.objectAttrInclude.bottomDepthNameView.text = "底部深度:" + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE + ) + } + + 2 -> { + //选择配电房 + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + } + + 3 -> { + //选择开关站 + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + } + + 4 -> { + //选择台区 + binding.objectAttrInclude.objectModeView.text = "变压器型号:" + setLayoutVisibility( + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + binding.objectAttrInclude.objectModeSpinner.show( + this@MainActivity, arrayOf("变压器 KVA"), 0 + ) + } + + 5 -> { + //选择杆塔 + binding.objectAttrInclude.wellCoverMaterialView.text = "对象材质:" + setLayoutVisibility( + View.GONE, + View.GONE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE + ) + binding.objectAttrInclude.wellCoverMaterialSpinner.show( + this@MainActivity, LocaleConstant.WELL_COVER_MATERIAL_ARRAY_2, 0 + ) + } + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.objectAttrInclude.cabinetTypeSpinner.show( + this@MainActivity, LocaleConstant.CABINET_TYPE_ARRAY, 0 + ) + binding.objectAttrInclude.casingMaterialSpinner.show( + this@MainActivity, LocaleConstant.PIPE_MATERIAL_ARRAY, 0 + ) + binding.markerAttrInclude.markerTypeSpinner.show( + this@MainActivity, LocaleConstant.MARKER_TYPE_ARRAY, 0 + ) + + //电压等级-多选 + binding.objectAttrInclude.voltageLevelView.setOnClickListener { + AlertDialog.Builder(context).setCancelable(false).setIcon(R.mipmap.ic_launcher) + .setTitle("请选择电压等级").setMultiChoiceItems( + LocaleConstant.VOLTAGE_LEVEL_ARRAY, LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY + ) { _, which, isChecked -> + LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[which] = isChecked + }.setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } + .setPositiveButton("确定") { _, _ -> + val temp = java.util.ArrayList() + LocaleConstant.VOLTAGE_LEVEL_ARRAY.forEachIndexed { index, s -> + if (LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[index]) { + temp.add(s) + } + } + + binding.objectAttrInclude.voltageLevelView.text = temp.reformat() + }.show() + } + + //交叉管道类型-多选 + binding.objectAttrInclude.crossPipeLineView.setOnClickListener { + AlertDialog.Builder(context).setCancelable(false).setIcon(R.mipmap.ic_launcher) + .setTitle("请选择交叉管道类型").setMultiChoiceItems( + LocaleConstant.CROSS_PIPE_ARRAY, LocaleConstant.CROSS_PIPE_STATE_ARRAY + ) { _, which, isChecked -> + LocaleConstant.CROSS_PIPE_STATE_ARRAY[which] = isChecked + }.setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } + .setPositiveButton("确定") { _, _ -> + val temp = java.util.ArrayList() + LocaleConstant.CROSS_PIPE_ARRAY.forEachIndexed { index, s -> + if (LocaleConstant.CROSS_PIPE_STATE_ARRAY[index]) { + temp.add(s) + } + } + + binding.objectAttrInclude.crossPipeLineView.text = temp.reformat() + }.show() + } + + binding.objectAttrInclude.constructDateView.setOnClickListener { + val datePicker = DatePickerDialog( + context, + 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.objectAttrInclude.constructDateView.text = selectedDate + } + } + } + + binding.markerAttrInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() + locationHub.getCurrentLocation(true, object : ILocationListener { + override fun onAMapLocationGet(location: AMapLocation?) { + if (location != null) { + binding.markerAttrInclude.lngView.text = location.longitude.toString() + binding.markerAttrInclude.latView.text = location.latitude.toString() + } else { + "当前位置信号差,无法获取定位".show(context) + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + PictureSelector.create(this@MainActivity).openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: java.util.ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(context) + return + } + analyticalSelectResult(result[0]) + } + + override fun onCancel() { + + } + }) + } + + 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) + } + }) + } + + private fun analyticalSelectResult(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(context, object : OnImageCompressListener { + override fun onSuccess(file: File) { + realPaths.add(file.absolutePath) + imageAdapter.setupImage(realPaths) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } + + //根据选择类型控制界面某些区域显隐 + private fun setLayoutVisibility(vararg args: Int) { + binding.objectAttrInclude.objectModeLayout.visibility = args[0] + binding.objectAttrInclude.inlineNameLayout.visibility = args[1] + binding.objectAttrInclude.wellCoverMaterialLayout.visibility = args[2] + binding.objectAttrInclude.capacityLayout.visibility = args[3] + binding.objectAttrInclude.sizeLayout.visibility = args[4] + binding.objectAttrInclude.inlineCountLayout.visibility = args[5] + binding.objectAttrInclude.outlineCountLayout.visibility = args[6] + binding.objectAttrInclude.wellDepthLayout.visibility = args[7] + binding.objectAttrInclude.pipeLineLayout.visibility = args[8] + binding.objectAttrInclude.jointCountLayout.visibility = args[9] + binding.objectAttrInclude.heightLayout.visibility = args[10] + } } /**安装小标签对话框******************************************************************************/ @@ -859,6 +1373,29 @@ var isReadMarker = false var isInstallMarker = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(1f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + //返回 + binding.titleInclude.leftBackView.setOnClickListener { + dismiss() + } + } + + fun bindingValue(markerId: String) { + LoadingDialogHub.dismiss() + soundPool.autoPause() + binding.readMarkerButton.isEnabled = true + + //降低串口电位 + gpioManager.setGpioLow("18") + + isReadMarker = false + } } /**探测标识器对话框******************************************************************************/ @@ -976,9 +1513,12 @@ degreeCache["lastDegree"]?.apply { val animation = RotateAnimation( - this, degree, - Animation.RELATIVE_TO_SELF, 0.5f, - Animation.RELATIVE_TO_SELF, 0.5f + this, + degree, + Animation.RELATIVE_TO_SELF, + 0.5f, + Animation.RELATIVE_TO_SELF, + 0.5f ) animation.duration = 0 animation.fillAfter = true diff --git a/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt b/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt index 0d9f58b..169147b 100644 --- a/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt +++ b/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt @@ -10,10 +10,10 @@ import android.widget.Spinner import com.casic.electric.detector.R import com.casic.electric.detector.databinding.DialogQueryMarkerBinding -import com.casic.electric.detector.extensions.appendZero import com.casic.electric.detector.utils.DataBaseManager import com.casic.electric.detector.utils.LocaleConstant import com.casic.electric.detector.utils.QueryMode +import com.pengxh.kt.lite.extensions.appendZero import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.initDialogLayoutParams import kotlinx.coroutines.CoroutineScope @@ -82,7 +82,6 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.initDialogLayoutParams(0.8f) - setContentView(R.layout.dialog_query_marker) setCanceledOnTouchOutside(false) initView() } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 14e9b51..92d80c5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -70,7 +70,6 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> - diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt deleted file mode 100644 index 6510104..0000000 --- a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt +++ /dev/null @@ -1,601 +0,0 @@ -package com.casic.electric.detector.view - -import android.annotation.SuppressLint -import android.app.AlertDialog -import android.app.DatePickerDialog -import android.content.Context -import android.content.DialogInterface -import android.content.Intent -import android.media.AudioAttributes -import android.media.SoundPool -import android.os.Bundle -import android.os.Handler -import android.os.Message -import android.provider.Settings -import android.util.Log -import android.view.KeyEvent -import android.view.View -import android.view.WindowManager -import android.widget.AdapterView -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope -import com.amap.api.location.AMapLocation -import com.casic.electric.detector.R -import com.casic.electric.detector.adapter.EditableImageAdapter -import com.casic.electric.detector.base.SerialPortActivity -import com.casic.electric.detector.callback.ILocationListener -import com.casic.electric.detector.callback.OnImageCompressListener -import com.casic.electric.detector.databinding.ActivityInstallLabelBinding -import com.casic.electric.detector.extensions.* -import com.casic.electric.detector.utils.* -import com.casic.electric.detector.vm.TaskViewModel -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener -import com.pengxh.kt.lite.extensions.* -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.utils.WeakReferenceHandler -import com.pengxh.kt.lite.widget.dialog.NoNetworkDialog -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import java.io.File -import java.io.IOException -import java.util.* - -@SuppressLint("SetTextI18n") -class InstallLabelActivity : SerialPortActivity(), Handler.Callback { - - private val kTag = "LabelActivity" - private val context: Context = this@InstallLabelActivity - private val gpioManager by lazy { GpioManager() } - private val calendar by lazy { Calendar.getInstance() } - private val locationHub by lazy { LocationHub(this) } - private val realPaths = ArrayList() //真实图片路径 - private var soundResId = 0 - private lateinit var weakReferenceHandler: WeakReferenceHandler - private lateinit var soundPool: SoundPool - private lateinit var imageAdapter: EditableImageAdapter - private lateinit var taskViewModel: TaskViewModel - - override fun initViewBinding(): ActivityInstallLabelBinding { - return ActivityInstallLabelBinding.inflate(layoutInflater) - } - - override fun setupTopBarLayout() { - binding.titleInclude.titleView.text = "安装新标识器" - binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(this)) - } - - override fun initOnCreate(savedInstanceState: Bundle?) { - window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) - - weakReferenceHandler = WeakReferenceHandler(this) - - val audioAttributes = AudioAttributes.Builder() - .setUsage(AudioAttributes.USAGE_MEDIA) - .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) - .build() - soundPool = SoundPool.Builder() - .setMaxStreams(16) - .setAudioAttributes(audioAttributes) - .build() - - //设置上次填写过的值 - binding.objectAttrInclude.objectCodeView.setText("objectCodeView".getDefaultValue()) - binding.objectAttrInclude.objectNameView.setText("objectNameView".getDefaultValue()) - binding.objectAttrInclude.inlineNameView.setText("inlineNameView".getDefaultValue()) - binding.objectAttrInclude.capacityView.setText("capacityView".getDefaultValue()) - binding.objectAttrInclude.transformerSpecView.setText("transformerSpecView".getDefaultValue()) - binding.objectAttrInclude.sLengthView.setText("sLengthView".getDefaultValue()) - binding.objectAttrInclude.sWidthView.setText("sWidthView".getDefaultValue()) - binding.objectAttrInclude.sHeightView.setText("sHeightView".getDefaultValue()) - binding.objectAttrInclude.inlineCountView.setText("inlineCountView".getDefaultValue()) - binding.objectAttrInclude.outlineCountView.setText("outlineCountView".getDefaultValue()) - binding.objectAttrInclude.bottomDepthView.setText("bottomDepthView".getDefaultValue()) - binding.objectAttrInclude.rowCountView.setText("rowCountView".getDefaultValue()) - binding.objectAttrInclude.rowHoleCountView.setText("rowHoleCountView".getDefaultValue()) - binding.objectAttrInclude.coverDepthView.setText("coverDepthView".getDefaultValue()) - binding.objectAttrInclude.remainingChannelsView.setText("remainingChannelsView".getDefaultValue()) - binding.objectAttrInclude.tieCableView1.setText("tieCableView1".getDefaultValue()) - binding.objectAttrInclude.tieCableView2.setText("tieCableView2".getDefaultValue()) - binding.objectAttrInclude.jointCountView.setText("jointCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleCountView.setText("casingHoleCountView".getDefaultValue()) - binding.objectAttrInclude.casingHoleDiameterView.setText("casingHoleDiameterView".getDefaultValue()) - binding.objectAttrInclude.heightView.setText("heightView".getDefaultValue()) - binding.objectAttrInclude.lineNumberView.setText("lineNumberView".getDefaultValue()) - binding.objectAttrInclude.inspectionUnitView.setText("inspectionUnitView".getDefaultValue()) - binding.objectAttrInclude.areaView.setText("areaView".getDefaultValue()) - binding.objectAttrInclude.roadView.setText("roadView".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView1.setText("objectRemarkView1".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView2.setText("objectRemarkView2".getDefaultValue()) - binding.objectAttrInclude.objectRemarkView3.setText("objectRemarkView3".getDefaultValue()) - binding.markerAttrInclude.ownerView.setText("ownerView".getDefaultValue()) - binding.markerAttrInclude.markerDepthView.setText("markerDepthView".getDefaultValue()) - binding.markerAttrInclude.markerCountView.setText("markerCountView".getDefaultValue()) - binding.markerAttrInclude.remarkView1.setText("remarkView1".getDefaultValue()) - binding.markerAttrInclude.remarkView2.setText("remarkView2".getDefaultValue()) - binding.markerAttrInclude.remarkView3.setText("remarkView3".getDefaultValue()) - - //初始化图片九宫格 - imageAdapter = EditableImageAdapter(this, 3, 3) - binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter - - taskViewModel = ViewModelProvider(this)[TaskViewModel::class.java] - } - - override fun observeRequestState() { - taskViewModel.loadState.observe(this) { - when (it) { - LoadState.Loading -> LoadingDialogHub.show(this, "标识器安装中,请稍后...") - LoadState.Success -> { - LoadingDialogHub.dismiss() - finish() - } - - else -> LoadingDialogHub.dismiss() - } - } - } - - override fun initEvent() { - binding.titleInclude.leftBackView.setOnClickListener { finish() } - - /**************************************************************************************/ - binding.objectAttrInclude.objectTypeSpinner.show(this, LocaleConstant.CONTENT_ARRAY, 0) - binding.objectAttrInclude.objectTypeSpinner.onItemSelectedListener = - object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>?, view: View?, position: Int, id: Long - ) { - when (position) { - 0 -> { - //选择电缆井 - binding.objectAttrInclude.objectModeView.text = "类型:" - binding.objectAttrInclude.wellCoverMaterialView.text = "井盖材质:" - binding.objectAttrInclude.bottomDepthNameView.text = "井深:" - setLayoutVisibility( - View.VISIBLE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.VISIBLE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, LocaleConstant.OBJECT_MODE_ARRAY, 0 - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_1, - 0 - ) - } - - 1 -> { - //选择电缆通道 - binding.objectAttrInclude.bottomDepthNameView.text = "底部深度:" - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, View.VISIBLE, - View.GONE - ) - } - - 2 -> { - //选择配电房 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.VISIBLE, View.VISIBLE, - View.VISIBLE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 3 -> { - //选择开关站 - setLayoutVisibility( - View.GONE, View.GONE, View.GONE, View.GONE, View.VISIBLE, - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - } - - 4 -> { - //选择台区 - binding.objectAttrInclude.objectModeView.text = "变压器型号:" - setLayoutVisibility( - View.VISIBLE, View.VISIBLE, View.GONE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.GONE - ) - binding.objectAttrInclude.objectModeSpinner.show( - this@InstallLabelActivity, arrayOf("变压器 KVA"), 0 - ) - } - - 5 -> { - //选择杆塔 - binding.objectAttrInclude.wellCoverMaterialView.text = "对象材质:" - setLayoutVisibility( - View.GONE, View.GONE, View.VISIBLE, View.GONE, View.GONE, - View.GONE, View.GONE, View.GONE, View.GONE, View.GONE, - View.VISIBLE - ) - binding.objectAttrInclude.wellCoverMaterialSpinner.show( - this@InstallLabelActivity, - LocaleConstant.WELL_COVER_MATERIAL_ARRAY_2, - 0 - ) - } - } - } - - override fun onNothingSelected(parent: AdapterView<*>?) { - - } - } - - binding.objectAttrInclude.cabinetTypeSpinner.show( - this, - LocaleConstant.CABINET_TYPE_ARRAY, - 0 - ) - binding.objectAttrInclude.casingMaterialSpinner.show( - this, - LocaleConstant.PIPE_MATERIAL_ARRAY, - 0 - ) - binding.markerAttrInclude.markerTypeSpinner.show(this, LocaleConstant.MARKER_TYPE_ARRAY, 0) - - //电压等级-多选 - binding.objectAttrInclude.voltageLevelView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择电压等级") - .setMultiChoiceItems( - LocaleConstant.VOLTAGE_LEVEL_ARRAY, LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.VOLTAGE_LEVEL_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.voltageLevelView.text = temp.reformat() - }.show() - } - - //交叉管道类型-多选 - binding.objectAttrInclude.crossPipeLineView.setOnClickListener { - AlertDialog.Builder(context) - .setCancelable(false) - .setIcon(R.mipmap.ic_launcher) - .setTitle("请选择交叉管道类型") - .setMultiChoiceItems( - LocaleConstant.CROSS_PIPE_ARRAY, LocaleConstant.CROSS_PIPE_STATE_ARRAY - ) { _, which, isChecked -> - LocaleConstant.CROSS_PIPE_STATE_ARRAY[which] = isChecked - } - .setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } - .setPositiveButton("确定") { _, _ -> - val temp = ArrayList() - LocaleConstant.CROSS_PIPE_ARRAY.forEachIndexed { index, s -> - if (LocaleConstant.CROSS_PIPE_STATE_ARRAY[index]) { - temp.add(s) - } - } - - binding.objectAttrInclude.crossPipeLineView.text = temp.reformat() - }.show() - } - - binding.objectAttrInclude.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.objectAttrInclude.constructDateView.text = selectedDate - } - } - } - - binding.markerAttrInclude.installTimeView.text = - System.currentTimeMillis().timestampToCompleteDate() - locationHub.getCurrentLocation(true, object : ILocationListener { - override fun onAMapLocationGet(location: AMapLocation?) { - if (location != null) { - binding.markerAttrInclude.lngView.text = location.longitude.toString() - binding.markerAttrInclude.latView.text = location.latitude.toString() - } else { - "当前位置信号差,无法获取定位".show(context) - } - } - }) - - imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { - override fun onAddImageClick() { - PictureSelector.create(this@InstallLabelActivity) - .openCamera(SelectMimeType.ofImage()) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList?) { - if (result == null) { - "拍照失败,请重试".show(context) - return - } - analyticalSelectResult(result[0]) - } - - override fun onCancel() { - - } - }) - } - - 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 itemPosition = binding.objectAttrInclude.objectTypeSpinner.selectedItemPosition - val objectTypeCode = itemPosition + 1 - - if (binding.markerAttrInclude.markerIdView.text.isNullOrBlank()) { - "标识器ID不能为空,请读标识器".show(this) - return@setOnClickListener - } - - if (binding.objectAttrInclude.constructDateView.text.isNullOrBlank()) { - "请选择建设时间".show(this) - return@setOnClickListener - } - - if (binding.markerAttrInclude.markerCountView.text.isNullOrBlank()) { - "请输入电子标签数量".show(this) - return@setOnClickListener - } - - //保存默认值 - "objectCodeView".setDefaultValue(binding.objectAttrInclude.objectCodeView) - "objectNameView".setDefaultValue(binding.objectAttrInclude.objectNameView) - "inlineNameView".setDefaultValue(binding.objectAttrInclude.inlineNameView) - "capacityView".setDefaultValue(binding.objectAttrInclude.capacityView) - "transformerSpecView".setDefaultValue(binding.objectAttrInclude.transformerSpecView) - "sLengthView".setDefaultValue(binding.objectAttrInclude.sLengthView) - "sWidthView".setDefaultValue(binding.objectAttrInclude.sWidthView) - "sHeightView".setDefaultValue(binding.objectAttrInclude.sHeightView) - "inlineCountView".setDefaultValue(binding.objectAttrInclude.inlineCountView) - "outlineCountView".setDefaultValue(binding.objectAttrInclude.outlineCountView) - "bottomDepthView".setDefaultValue(binding.objectAttrInclude.bottomDepthView) - "rowCountView".setDefaultValue(binding.objectAttrInclude.rowCountView) - "rowHoleCountView".setDefaultValue(binding.objectAttrInclude.rowHoleCountView) - "coverDepthView".setDefaultValue(binding.objectAttrInclude.coverDepthView) - "remainingChannelsView".setDefaultValue(binding.objectAttrInclude.remainingChannelsView) - "tieCableView1".setDefaultValue(binding.objectAttrInclude.tieCableView1) - "tieCableView2".setDefaultValue(binding.objectAttrInclude.tieCableView2) - "jointCountView".setDefaultValue(binding.objectAttrInclude.jointCountView) - "casingHoleCountView".setDefaultValue(binding.objectAttrInclude.casingHoleCountView) - "casingHoleDiameterView".setDefaultValue(binding.objectAttrInclude.casingHoleDiameterView) - "heightView".setDefaultValue(binding.objectAttrInclude.heightView) - "lineNumberView".setDefaultValue(binding.objectAttrInclude.lineNumberView) - "inspectionUnitView".setDefaultValue(binding.objectAttrInclude.inspectionUnitView) - "areaView".setDefaultValue(binding.objectAttrInclude.areaView) - "roadView".setDefaultValue(binding.objectAttrInclude.roadView) - "objectRemarkView1".setDefaultValue(binding.objectAttrInclude.objectRemarkView1) - "objectRemarkView2".setDefaultValue(binding.objectAttrInclude.objectRemarkView2) - "objectRemarkView3".setDefaultValue(binding.objectAttrInclude.objectRemarkView3) - "ownerView".setDefaultValue(binding.markerAttrInclude.ownerView) - "markerDepthView".setDefaultValue(binding.markerAttrInclude.markerDepthView) - "markerCountView".setDefaultValue(binding.markerAttrInclude.markerCountView) - "remarkView1".setDefaultValue(binding.markerAttrInclude.remarkView1) - "remarkView2".setDefaultValue(binding.markerAttrInclude.remarkView2) - "remarkView3".setDefaultValue(binding.markerAttrInclude.remarkView3) - - val labelData = LabelDataClass( - companyId, - objectTypeCode.toString(), - binding.objectAttrInclude.objectCodeView.text.toString(), - binding.objectAttrInclude.objectNameView.text.toString(), - binding.objectAttrInclude.voltageLevelView.text.toString(), - binding.objectAttrInclude.objectModeSpinner.selectedItem.toString(), - "进线${binding.objectAttrInclude.inlineNameView.text}", - binding.objectAttrInclude.wellCoverMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.capacityView.text}KVA", - binding.objectAttrInclude.transformerSpecView.text.toString(), - "${binding.objectAttrInclude.sLengthView.text}米长 x ${binding.objectAttrInclude.sWidthView.text}米宽 x ${binding.objectAttrInclude.sHeightView.text}米高", - binding.objectAttrInclude.inlineCountView.text.toString(), - binding.objectAttrInclude.outlineCountView.text.toString(), - binding.objectAttrInclude.cabinetTypeSpinner.selectedItem.toString(), - binding.objectAttrInclude.bottomDepthView.text.toString(), - "${binding.objectAttrInclude.rowCountView.text}排 x ${binding.objectAttrInclude.rowHoleCountView.text}孔", - "${binding.objectAttrInclude.coverDepthView.text}米", - binding.objectAttrInclude.crossPipeLineView.text.toString(), - binding.objectAttrInclude.remainingChannelsView.text.toString(), - binding.objectAttrInclude.tieCableView1.text.toString(), - binding.objectAttrInclude.tieCableView2.text.toString(), - binding.objectAttrInclude.jointCountView.text.toString(), - binding.objectAttrInclude.casingMaterialSpinner.selectedItem.toString(), - "${binding.objectAttrInclude.casingHoleCountView.text}孔,直径${binding.objectAttrInclude.casingHoleDiameterView.text}毫米", - "${binding.objectAttrInclude.heightView.text.toString()}米", - binding.objectAttrInclude.lineNumberView.text.toString(), - binding.objectAttrInclude.constructDateView.text.toString(), - binding.objectAttrInclude.inspectionUnitView.text.toString(), - binding.objectAttrInclude.areaView.text.toString(), - binding.objectAttrInclude.roadView.text.toString(), - binding.objectAttrInclude.objectRemarkView1.text.toString(), - binding.objectAttrInclude.objectRemarkView2.text.toString(), - binding.objectAttrInclude.objectRemarkView3.text.toString(), - binding.markerAttrInclude.markerIdView.text.toString(), - binding.markerAttrInclude.markerTypeSpinner.selectedItem.toString(), - binding.markerAttrInclude.ownerView.text.toString(), - binding.markerAttrInclude.markerDepthView.text.toString(), - binding.markerAttrInclude.installTimeView.text.toString(), - binding.markerAttrInclude.lngView.text.toString(), - binding.markerAttrInclude.latView.text.toString(), - binding.markerAttrInclude.markerCountView.text.toString(), - binding.markerAttrInclude.remarkView1.text.toString(), - binding.markerAttrInclude.remarkView2.text.toString(), - binding.markerAttrInclude.remarkView3.text.toString(), - realPaths - ) - - //先存本地 - lifecycleScope.launch { - withContext(Dispatchers.IO) { - DataBaseManager.get.insertLabel(labelData) - } - } - - //再存服务器 - taskViewModel.installLabel(labelData) - } 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 { - gpioManager.setGpioHigh("18") - - LoadingDialogHub.show(this, "标识器读取中,请稍后...") - - soundResId = soundPool.load(this, R.raw.ring3, 1) - soundPool.setOnLoadCompleteListener { soundPool, _, _ -> - soundPool.play(soundResId, 1f, 1f, 0, -1, 1f) - } - - // 1000ms后发送读标识器或搜索信号 - weakReferenceHandler.postDelayed({ - try { - // 发送读标识器或搜索信号 - out.write("2".toByteArray()) - out.flush() - } catch (e: IOException) { - e.printStackTrace() - } - }, 1000) - } - } - - override fun onDataReceived(buffer: ByteArray) { - Log.d(kTag, "onDataReceived => " + buffer.contentToString()) - if (buffer != null) { - val message = weakReferenceHandler.obtainMessage() - message.what = 2023081701 - message.obj = buffer - weakReferenceHandler.sendMessage(message) - } - } - - override fun handleMessage(msg: Message): Boolean { - if (msg.what == 2023081701) { - soundPool.release() - - val buffer = msg.obj as ByteArray - val hex = buffer.toHex() - - if (hex.length >= 20) { - val markerId = hex.substring(0, 20).hexToString() - - gpioManager.setGpioLow("18") - - //查本地库 - val result = DataBaseManager.get.queryLabelById(markerId) - if (result.isEmpty()) { - binding.markerAttrInclude.markerIdView.text = markerId - } else { - "此标识器已安装,请更换标识器!".show(this) - } - LoadingDialogHub.dismiss() - } - } - return true - } - - private fun analyticalSelectResult(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() - } - }) - } - - //根据选择类型控制界面某些区域显隐 - private fun setLayoutVisibility(vararg args: Int) { - binding.objectAttrInclude.objectModeLayout.visibility = args[0] - binding.objectAttrInclude.inlineNameLayout.visibility = args[1] - binding.objectAttrInclude.wellCoverMaterialLayout.visibility = args[2] - binding.objectAttrInclude.capacityLayout.visibility = args[3] - binding.objectAttrInclude.sizeLayout.visibility = args[4] - binding.objectAttrInclude.inlineCountLayout.visibility = args[5] - binding.objectAttrInclude.outlineCountLayout.visibility = args[6] - binding.objectAttrInclude.wellDepthLayout.visibility = args[7] - binding.objectAttrInclude.pipeLineLayout.visibility = args[8] - binding.objectAttrInclude.jointCountLayout.visibility = args[9] - binding.objectAttrInclude.heightLayout.visibility = args[10] - } - - override fun onDestroy() { - super.onDestroy() - soundPool.release() - gpioManager.setGpioLow("18") - } - - 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/electric/detector/view/MainActivity.kt b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt index a0a4aac..40a5f3d 100644 --- a/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt @@ -2,8 +2,10 @@ import android.annotation.SuppressLint import android.app.AlertDialog +import android.app.DatePickerDialog import android.app.Dialog import android.content.Context +import android.content.DialogInterface import android.graphics.Color import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable @@ -16,6 +18,7 @@ import android.view.View import android.view.animation.Animation import android.view.animation.RotateAnimation +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.amap.api.location.AMapLocation @@ -33,6 +36,7 @@ import com.casic.electric.detector.bean.SmallLabelBean import com.casic.electric.detector.bean.TaskBean import com.casic.electric.detector.callback.ILocationListener +import com.casic.electric.detector.callback.OnImageCompressListener import com.casic.electric.detector.cluster.ClusterItem import com.casic.electric.detector.cluster.ClusterOverlay import com.casic.electric.detector.cluster.RegionItem @@ -41,14 +45,20 @@ import com.casic.electric.detector.databinding.DialogInstallSmallMarkerBinding import com.casic.electric.detector.databinding.DialogSearchMarkerBinding import com.casic.electric.detector.extensions.appendExcelDownloadUrl +import com.casic.electric.detector.extensions.compressImage import com.casic.electric.detector.extensions.drawCircle +import com.casic.electric.detector.extensions.getDefaultValue import com.casic.electric.detector.extensions.hexToString import com.casic.electric.detector.extensions.initImmersionBar import com.casic.electric.detector.extensions.isNumber +import com.casic.electric.detector.extensions.reformat +import com.casic.electric.detector.extensions.setDefaultValue +import com.casic.electric.detector.extensions.show import com.casic.electric.detector.extensions.toHex import com.casic.electric.detector.utils.DataBaseManager import com.casic.electric.detector.utils.ExcelHub import com.casic.electric.detector.utils.GpioManager +import com.casic.electric.detector.utils.LabelDataClass import com.casic.electric.detector.utils.LocaleConstant import com.casic.electric.detector.utils.LocationHub import com.casic.electric.detector.utils.RouteOnMap @@ -56,13 +66,22 @@ import com.casic.electric.detector.widgets.QueryMarkerDialog import com.casic.electric.detector.widgets.SamplePopupWindow import com.google.gson.Gson +import com.luck.picture.lib.basic.PictureSelector +import com.luck.picture.lib.config.SelectMimeType +import com.luck.picture.lib.entity.LocalMedia +import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.extensions.appendZero import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.createDownloadFileDir +import com.pengxh.kt.lite.extensions.dateToTimestamp import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.initDialogLayoutParams import com.pengxh.kt.lite.extensions.isNetworkConnected import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.extensions.timestampToCompleteDate +import com.pengxh.kt.lite.extensions.timestampToTime import com.pengxh.kt.lite.extensions.toJson import com.pengxh.kt.lite.utils.FileDownloadManager import com.pengxh.kt.lite.utils.LoadState @@ -78,6 +97,7 @@ import java.io.File import java.text.DecimalFormat import java.util.Calendar +import java.util.Date import java.util.Timer import java.util.TimerTask @@ -456,16 +476,16 @@ Log.d(kTag, "$kTag => $hex") if (searchDialog.isDetectMarker) { searchDialog.bindingValue(hex) -// } else if (installMarkerDialog.isReadMarker) { -// val markerId = hex.take(20).hexToString() -// if (markerId.isNumber()) { -// installMarkerDialog.bindingValue(markerId) -// } -// } else if (installSmallMarkerDialog.isReadMarker) { -// val markerId = hex.take(20).hexToString() -// if (markerId.isNumber()) { -// installSmallMarkerDialog.bindingValue(markerId) -// } + } else if (installMarkerDialog.isReadMarker) { + val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { + installMarkerDialog.bindingValue(markerId) + } + } else if (installSmallMarkerDialog.isReadMarker) { + val markerId = hex.take(20).hexToString() + if (markerId.isNumber()) { + installSmallMarkerDialog.bindingValue(markerId) + } } else if (isFreeTask) { val markerId = hex.take(20).hexToString() if (markerId.isNumber()) { @@ -847,6 +867,500 @@ var isReadMarker = false var isInstallMarker = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(1f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + //初始化数据 + initDefaultData() + + //返回 + binding.titleInclude.leftBackView.setOnClickListener { + soundPool.autoPause() + dismiss() + } + + binding.installButton.setOnClickListener { + val companyId = SaveKeyValues.getValue(LocaleConstant.USER_COMPANY_ID, "") as String + + val itemPosition = binding.objectAttrInclude.objectTypeSpinner.selectedItemPosition + val objectTypeCode = itemPosition + 1 + + if (binding.markerAttrInclude.markerIdView.text.isNullOrBlank()) { + "标识器ID不能为空,请读标识器".show(context) + return@setOnClickListener + } + + if (binding.objectAttrInclude.constructDateView.text.isNullOrBlank()) { + "请选择建设时间".show(context) + return@setOnClickListener + } + + if (binding.markerAttrInclude.markerCountView.text.isNullOrBlank()) { + "请输入电子标签数量".show(context) + return@setOnClickListener + } + + //保存默认值 + "objectCodeView".setDefaultValue(binding.objectAttrInclude.objectCodeView) + "objectNameView".setDefaultValue(binding.objectAttrInclude.objectNameView) + "inlineNameView".setDefaultValue(binding.objectAttrInclude.inlineNameView) + "capacityView".setDefaultValue(binding.objectAttrInclude.capacityView) + "transformerSpecView".setDefaultValue(binding.objectAttrInclude.transformerSpecView) + "sLengthView".setDefaultValue(binding.objectAttrInclude.sLengthView) + "sWidthView".setDefaultValue(binding.objectAttrInclude.sWidthView) + "sHeightView".setDefaultValue(binding.objectAttrInclude.sHeightView) + "inlineCountView".setDefaultValue(binding.objectAttrInclude.inlineCountView) + "outlineCountView".setDefaultValue(binding.objectAttrInclude.outlineCountView) + "bottomDepthView".setDefaultValue(binding.objectAttrInclude.bottomDepthView) + "rowCountView".setDefaultValue(binding.objectAttrInclude.rowCountView) + "rowHoleCountView".setDefaultValue(binding.objectAttrInclude.rowHoleCountView) + "coverDepthView".setDefaultValue(binding.objectAttrInclude.coverDepthView) + "remainingChannelsView".setDefaultValue(binding.objectAttrInclude.remainingChannelsView) + "tieCableView1".setDefaultValue(binding.objectAttrInclude.tieCableView1) + "tieCableView2".setDefaultValue(binding.objectAttrInclude.tieCableView2) + "jointCountView".setDefaultValue(binding.objectAttrInclude.jointCountView) + "casingHoleCountView".setDefaultValue(binding.objectAttrInclude.casingHoleCountView) + "casingHoleDiameterView".setDefaultValue(binding.objectAttrInclude.casingHoleDiameterView) + "heightView".setDefaultValue(binding.objectAttrInclude.heightView) + "lineNumberView".setDefaultValue(binding.objectAttrInclude.lineNumberView) + "inspectionUnitView".setDefaultValue(binding.objectAttrInclude.inspectionUnitView) + "areaView".setDefaultValue(binding.objectAttrInclude.areaView) + "roadView".setDefaultValue(binding.objectAttrInclude.roadView) + "objectRemarkView1".setDefaultValue(binding.objectAttrInclude.objectRemarkView1) + "objectRemarkView2".setDefaultValue(binding.objectAttrInclude.objectRemarkView2) + "objectRemarkView3".setDefaultValue(binding.objectAttrInclude.objectRemarkView3) + "ownerView".setDefaultValue(binding.markerAttrInclude.ownerView) + "markerDepthView".setDefaultValue(binding.markerAttrInclude.markerDepthView) + "markerCountView".setDefaultValue(binding.markerAttrInclude.markerCountView) + "remarkView1".setDefaultValue(binding.markerAttrInclude.remarkView1) + "remarkView2".setDefaultValue(binding.markerAttrInclude.remarkView2) + "remarkView3".setDefaultValue(binding.markerAttrInclude.remarkView3) + + val labelData = LabelDataClass( + companyId, + objectTypeCode.toString(), + binding.objectAttrInclude.objectCodeView.text.toString(), + binding.objectAttrInclude.objectNameView.text.toString(), + binding.objectAttrInclude.voltageLevelView.text.toString(), + binding.objectAttrInclude.objectModeSpinner.selectedItem.toString(), + "进线${binding.objectAttrInclude.inlineNameView.text}", + binding.objectAttrInclude.wellCoverMaterialSpinner.selectedItem.toString(), + "${binding.objectAttrInclude.capacityView.text}KVA", + binding.objectAttrInclude.transformerSpecView.text.toString(), + "${binding.objectAttrInclude.sLengthView.text}米长 x ${binding.objectAttrInclude.sWidthView.text}米宽 x ${binding.objectAttrInclude.sHeightView.text}米高", + binding.objectAttrInclude.inlineCountView.text.toString(), + binding.objectAttrInclude.outlineCountView.text.toString(), + binding.objectAttrInclude.cabinetTypeSpinner.selectedItem.toString(), + binding.objectAttrInclude.bottomDepthView.text.toString(), + "${binding.objectAttrInclude.rowCountView.text}排 x ${binding.objectAttrInclude.rowHoleCountView.text}孔", + "${binding.objectAttrInclude.coverDepthView.text}米", + binding.objectAttrInclude.crossPipeLineView.text.toString(), + binding.objectAttrInclude.remainingChannelsView.text.toString(), + binding.objectAttrInclude.tieCableView1.text.toString(), + binding.objectAttrInclude.tieCableView2.text.toString(), + binding.objectAttrInclude.jointCountView.text.toString(), + binding.objectAttrInclude.casingMaterialSpinner.selectedItem.toString(), + "${binding.objectAttrInclude.casingHoleCountView.text}孔,直径${binding.objectAttrInclude.casingHoleDiameterView.text}毫米", + "${binding.objectAttrInclude.heightView.text.toString()}米", + binding.objectAttrInclude.lineNumberView.text.toString(), + binding.objectAttrInclude.constructDateView.text.toString(), + binding.objectAttrInclude.inspectionUnitView.text.toString(), + binding.objectAttrInclude.areaView.text.toString(), + binding.objectAttrInclude.roadView.text.toString(), + binding.objectAttrInclude.objectRemarkView1.text.toString(), + binding.objectAttrInclude.objectRemarkView2.text.toString(), + binding.objectAttrInclude.objectRemarkView3.text.toString(), + binding.markerAttrInclude.markerIdView.text.toString(), + binding.markerAttrInclude.markerTypeSpinner.selectedItem.toString(), + binding.markerAttrInclude.ownerView.text.toString(), + binding.markerAttrInclude.markerDepthView.text.toString(), + binding.markerAttrInclude.installTimeView.text.toString(), + binding.markerAttrInclude.lngView.text.toString(), + binding.markerAttrInclude.latView.text.toString(), + binding.markerAttrInclude.markerCountView.text.toString(), + binding.markerAttrInclude.remarkView1.text.toString(), + binding.markerAttrInclude.remarkView2.text.toString(), + binding.markerAttrInclude.remarkView3.text.toString(), + realPaths + ) + + //先存本地 + lifecycleScope.launch { + withContext(Dispatchers.IO) { + DataBaseManager.get.insertLabel(labelData) + } + } + + //再存服务器 + taskViewModel.installLabel(labelData) + } + + //读标识器 + binding.readMarkerButton.setOnClickListener { + LoadingDialogHub.show(this@MainActivity, "标识器读取中,请稍后...") + binding.readMarkerButton.isEnabled = false + + isReadMarker = true + + //调高串口电位 + gpioManager.setGpioHigh("18") + + soundPool.play(soundResourceId, 1f, 1f, 0, -1, 1f) + + out.write('2'.code) + out.flush() + } + } + + fun bindingValue(markerId: String) { + LoadingDialogHub.dismiss() + soundPool.autoPause() + binding.readMarkerButton.isEnabled = true + + //降低串口电位 + gpioManager.setGpioLow("18") + + isReadMarker = false + binding.markerAttrInclude.markerIdView.text = markerId + } + + private fun initDefaultData() { + binding.titleInclude.titleView.text = "安装新标识器" + binding.titleInclude.titleView.setTextColor(R.color.themeColor.convertColor(context)) + + imageAdapter = EditableImageAdapter(context, 3, 3) + binding.cameraInclude.addImageRecyclerView.adapter = imageAdapter + + //设置上次填写过的值 + binding.objectAttrInclude.objectCodeView.setText("objectCodeView".getDefaultValue()) + binding.objectAttrInclude.objectNameView.setText("objectNameView".getDefaultValue()) + binding.objectAttrInclude.inlineNameView.setText("inlineNameView".getDefaultValue()) + binding.objectAttrInclude.capacityView.setText("capacityView".getDefaultValue()) + binding.objectAttrInclude.transformerSpecView.setText("transformerSpecView".getDefaultValue()) + binding.objectAttrInclude.sLengthView.setText("sLengthView".getDefaultValue()) + binding.objectAttrInclude.sWidthView.setText("sWidthView".getDefaultValue()) + binding.objectAttrInclude.sHeightView.setText("sHeightView".getDefaultValue()) + binding.objectAttrInclude.inlineCountView.setText("inlineCountView".getDefaultValue()) + binding.objectAttrInclude.outlineCountView.setText("outlineCountView".getDefaultValue()) + binding.objectAttrInclude.bottomDepthView.setText("bottomDepthView".getDefaultValue()) + binding.objectAttrInclude.rowCountView.setText("rowCountView".getDefaultValue()) + binding.objectAttrInclude.rowHoleCountView.setText("rowHoleCountView".getDefaultValue()) + binding.objectAttrInclude.coverDepthView.setText("coverDepthView".getDefaultValue()) + binding.objectAttrInclude.remainingChannelsView.setText("remainingChannelsView".getDefaultValue()) + binding.objectAttrInclude.tieCableView1.setText("tieCableView1".getDefaultValue()) + binding.objectAttrInclude.tieCableView2.setText("tieCableView2".getDefaultValue()) + binding.objectAttrInclude.jointCountView.setText("jointCountView".getDefaultValue()) + binding.objectAttrInclude.casingHoleCountView.setText("casingHoleCountView".getDefaultValue()) + binding.objectAttrInclude.casingHoleDiameterView.setText("casingHoleDiameterView".getDefaultValue()) + binding.objectAttrInclude.heightView.setText("heightView".getDefaultValue()) + binding.objectAttrInclude.lineNumberView.setText("lineNumberView".getDefaultValue()) + binding.objectAttrInclude.inspectionUnitView.setText("inspectionUnitView".getDefaultValue()) + binding.objectAttrInclude.areaView.setText("areaView".getDefaultValue()) + binding.objectAttrInclude.roadView.setText("roadView".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView1.setText("objectRemarkView1".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView2.setText("objectRemarkView2".getDefaultValue()) + binding.objectAttrInclude.objectRemarkView3.setText("objectRemarkView3".getDefaultValue()) + binding.markerAttrInclude.ownerView.setText("ownerView".getDefaultValue()) + binding.markerAttrInclude.markerDepthView.setText("markerDepthView".getDefaultValue()) + binding.markerAttrInclude.markerCountView.setText("markerCountView".getDefaultValue()) + binding.markerAttrInclude.remarkView1.setText("remarkView1".getDefaultValue()) + binding.markerAttrInclude.remarkView2.setText("remarkView2".getDefaultValue()) + binding.markerAttrInclude.remarkView3.setText("remarkView3".getDefaultValue()) + + /**************************************************************************************/ + binding.objectAttrInclude.objectTypeSpinner.show( + this@MainActivity, LocaleConstant.CONTENT_ARRAY, 0 + ) + binding.objectAttrInclude.objectTypeSpinner.onItemSelectedListener = + object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, position: Int, id: Long + ) { + when (position) { + 0 -> { + //选择电缆井 + binding.objectAttrInclude.objectModeView.text = "类型:" + binding.objectAttrInclude.wellCoverMaterialView.text = "井盖材质:" + binding.objectAttrInclude.bottomDepthNameView.text = "井深:" + setLayoutVisibility( + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE, + View.GONE, + View.VISIBLE, + View.GONE, + View.VISIBLE, + View.GONE + ) + binding.objectAttrInclude.objectModeSpinner.show( + this@MainActivity, LocaleConstant.OBJECT_MODE_ARRAY, 0 + ) + binding.objectAttrInclude.wellCoverMaterialSpinner.show( + this@MainActivity, LocaleConstant.WELL_COVER_MATERIAL_ARRAY_1, 0 + ) + } + + 1 -> { + //选择电缆通道 + binding.objectAttrInclude.bottomDepthNameView.text = "底部深度:" + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE + ) + } + + 2 -> { + //选择配电房 + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + } + + 3 -> { + //选择开关站 + setLayoutVisibility( + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE, + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + } + + 4 -> { + //选择台区 + binding.objectAttrInclude.objectModeView.text = "变压器型号:" + setLayoutVisibility( + View.VISIBLE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE + ) + binding.objectAttrInclude.objectModeSpinner.show( + this@MainActivity, arrayOf("变压器 KVA"), 0 + ) + } + + 5 -> { + //选择杆塔 + binding.objectAttrInclude.wellCoverMaterialView.text = "对象材质:" + setLayoutVisibility( + View.GONE, + View.GONE, + View.VISIBLE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.GONE, + View.VISIBLE + ) + binding.objectAttrInclude.wellCoverMaterialSpinner.show( + this@MainActivity, LocaleConstant.WELL_COVER_MATERIAL_ARRAY_2, 0 + ) + } + } + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + + binding.objectAttrInclude.cabinetTypeSpinner.show( + this@MainActivity, LocaleConstant.CABINET_TYPE_ARRAY, 0 + ) + binding.objectAttrInclude.casingMaterialSpinner.show( + this@MainActivity, LocaleConstant.PIPE_MATERIAL_ARRAY, 0 + ) + binding.markerAttrInclude.markerTypeSpinner.show( + this@MainActivity, LocaleConstant.MARKER_TYPE_ARRAY, 0 + ) + + //电压等级-多选 + binding.objectAttrInclude.voltageLevelView.setOnClickListener { + AlertDialog.Builder(context).setCancelable(false).setIcon(R.mipmap.ic_launcher) + .setTitle("请选择电压等级").setMultiChoiceItems( + LocaleConstant.VOLTAGE_LEVEL_ARRAY, LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY + ) { _, which, isChecked -> + LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[which] = isChecked + }.setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } + .setPositiveButton("确定") { _, _ -> + val temp = java.util.ArrayList() + LocaleConstant.VOLTAGE_LEVEL_ARRAY.forEachIndexed { index, s -> + if (LocaleConstant.VOLTAGE_LEVEL_STATE_ARRAY[index]) { + temp.add(s) + } + } + + binding.objectAttrInclude.voltageLevelView.text = temp.reformat() + }.show() + } + + //交叉管道类型-多选 + binding.objectAttrInclude.crossPipeLineView.setOnClickListener { + AlertDialog.Builder(context).setCancelable(false).setIcon(R.mipmap.ic_launcher) + .setTitle("请选择交叉管道类型").setMultiChoiceItems( + LocaleConstant.CROSS_PIPE_ARRAY, LocaleConstant.CROSS_PIPE_STATE_ARRAY + ) { _, which, isChecked -> + LocaleConstant.CROSS_PIPE_STATE_ARRAY[which] = isChecked + }.setNegativeButton("取消") { dialog, _ -> dialog?.dismiss() } + .setPositiveButton("确定") { _, _ -> + val temp = java.util.ArrayList() + LocaleConstant.CROSS_PIPE_ARRAY.forEachIndexed { index, s -> + if (LocaleConstant.CROSS_PIPE_STATE_ARRAY[index]) { + temp.add(s) + } + } + + binding.objectAttrInclude.crossPipeLineView.text = temp.reformat() + }.show() + } + + binding.objectAttrInclude.constructDateView.setOnClickListener { + val datePicker = DatePickerDialog( + context, + 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.objectAttrInclude.constructDateView.text = selectedDate + } + } + } + + binding.markerAttrInclude.installTimeView.text = + System.currentTimeMillis().timestampToCompleteDate() + locationHub.getCurrentLocation(true, object : ILocationListener { + override fun onAMapLocationGet(location: AMapLocation?) { + if (location != null) { + binding.markerAttrInclude.lngView.text = location.longitude.toString() + binding.markerAttrInclude.latView.text = location.latitude.toString() + } else { + "当前位置信号差,无法获取定位".show(context) + } + } + }) + + imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { + override fun onAddImageClick() { + PictureSelector.create(this@MainActivity).openCamera(SelectMimeType.ofImage()) + .forResult(object : OnResultCallbackListener { + override fun onResult(result: java.util.ArrayList?) { + if (result == null) { + "拍照失败,请重试".show(context) + return + } + analyticalSelectResult(result[0]) + } + + override fun onCancel() { + + } + }) + } + + 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) + } + }) + } + + private fun analyticalSelectResult(result: LocalMedia) { + //压缩图片 + result.realPath.compressImage(context, object : OnImageCompressListener { + override fun onSuccess(file: File) { + realPaths.add(file.absolutePath) + imageAdapter.setupImage(realPaths) + } + + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) + } + + //根据选择类型控制界面某些区域显隐 + private fun setLayoutVisibility(vararg args: Int) { + binding.objectAttrInclude.objectModeLayout.visibility = args[0] + binding.objectAttrInclude.inlineNameLayout.visibility = args[1] + binding.objectAttrInclude.wellCoverMaterialLayout.visibility = args[2] + binding.objectAttrInclude.capacityLayout.visibility = args[3] + binding.objectAttrInclude.sizeLayout.visibility = args[4] + binding.objectAttrInclude.inlineCountLayout.visibility = args[5] + binding.objectAttrInclude.outlineCountLayout.visibility = args[6] + binding.objectAttrInclude.wellDepthLayout.visibility = args[7] + binding.objectAttrInclude.pipeLineLayout.visibility = args[8] + binding.objectAttrInclude.jointCountLayout.visibility = args[9] + binding.objectAttrInclude.heightLayout.visibility = args[10] + } } /**安装小标签对话框******************************************************************************/ @@ -859,6 +1373,29 @@ var isReadMarker = false var isInstallMarker = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(1f) + setCancelable(false) + setCanceledOnTouchOutside(false) + + //返回 + binding.titleInclude.leftBackView.setOnClickListener { + dismiss() + } + } + + fun bindingValue(markerId: String) { + LoadingDialogHub.dismiss() + soundPool.autoPause() + binding.readMarkerButton.isEnabled = true + + //降低串口电位 + gpioManager.setGpioLow("18") + + isReadMarker = false + } } /**探测标识器对话框******************************************************************************/ @@ -976,9 +1513,12 @@ degreeCache["lastDegree"]?.apply { val animation = RotateAnimation( - this, degree, - Animation.RELATIVE_TO_SELF, 0.5f, - Animation.RELATIVE_TO_SELF, 0.5f + this, + degree, + Animation.RELATIVE_TO_SELF, + 0.5f, + Animation.RELATIVE_TO_SELF, + 0.5f ) animation.duration = 0 animation.fillAfter = true diff --git a/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt b/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt index 0d9f58b..169147b 100644 --- a/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt +++ b/app/src/main/java/com/casic/electric/detector/widgets/QueryMarkerDialog.kt @@ -10,10 +10,10 @@ import android.widget.Spinner import com.casic.electric.detector.R import com.casic.electric.detector.databinding.DialogQueryMarkerBinding -import com.casic.electric.detector.extensions.appendZero import com.casic.electric.detector.utils.DataBaseManager import com.casic.electric.detector.utils.LocaleConstant import com.casic.electric.detector.utils.QueryMode +import com.pengxh.kt.lite.extensions.appendZero import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.initDialogLayoutParams import kotlinx.coroutines.CoroutineScope @@ -82,7 +82,6 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.initDialogLayoutParams(0.8f) - setContentView(R.layout.dialog_query_marker) setCanceledOnTouchOutside(false) initView() } diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml deleted file mode 100644 index eddafd4..0000000 --- a/app/src/main/res/layout/activity_install_label.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -