diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index c0e48f5..7135bbe 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -17,7 +17,6 @@ import com.casic.br.app.callback.OnYoloResultSiftCallback import com.casic.br.app.databinding.ActivityStartCheckByYoloBinding import com.casic.br.app.extensions.convert2YoloResult -import com.casic.br.app.extensions.difference import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar import com.casic.br.app.external.INativeCallback @@ -47,7 +46,6 @@ import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow import kotlinx.coroutines.launch import org.opencv.core.Mat import org.opencv.osgi.OpenCVNativeLoader @@ -70,9 +68,9 @@ private lateinit var configViewModel: ConfigViewModel private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var alarmViewModel: AlarmViewModel + private lateinit var result: HiddenTroubleResult private var inspectionAddress = "" private var isDetectTarget = false - private var alarmCodeArray = ArrayList() override fun initOnCreate(savedInstanceState: Bundle?) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) @@ -128,17 +126,10 @@ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] imageFileViewModel.resultModel.observe(this) { if (it.code == 200) { - //报警图片提交成功后,分批提交隐患 - lifecycleScope.launch { - flow { - alarmCodeArray.forEach { code -> - emit(code) - delay(1000) - } - }.collect { code -> - alarmViewModel.uploadDetectTargetAlarm(context, code, it.data.toString()) - } - } + //报警图片提交成功后,提交隐患 + alarmViewModel.uploadDetectTargetAlarm( + context, result.alarmCode, it.data.toString() + ) } } } @@ -328,10 +319,13 @@ if (results.isEmpty()) { return } + //只显示最后一个 + val troubleResult = results.last() + //显示隐患弹框 val message = weakReferenceHandler.obtainMessage() message.what = 2024082902 - message.obj = results + message.obj = troubleResult //延迟显示 weakReferenceHandler.sendMessageDelayed(message, 10 * 1000L) } @@ -375,31 +369,20 @@ } //安全转换。转换失败直接return,不影响程序运行 - val results = msg.obj as? ArrayList ?: return true - val troubleSet = HashSet() - results.forEach { - troubleSet.add(it.warning) - } - - val intersectResult = troubleSet.difference(detectedTargetSet) - //若差集为空,则说明隐患已全部识别过 - if (intersectResult.isEmpty()) { + val result = msg.obj as HiddenTroubleResult + if (detectedTargetSet.contains(result.warning)) { return true } //显示差集的隐患 if (mat.width() > 0 || mat.height() > 0) { - detectResultDialog.updateDialogContentView(results, intersectResult, mat, + detectResultDialog.updateDialogContentView(result, mat, object : DetectResultDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - file: File, alarmCodeArray: ArrayList - ) { + override fun onConfirmClick(file: File, result: HiddenTroubleResult) { //一张图里可能会包含多种隐患 - this@StartCheckByYoloActivity.alarmCodeArray = alarmCodeArray + this@StartCheckByYoloActivity.result = result imageFileViewModel.uploadImage(file) - intersectResult.forEach { - detectedTargetSet.add(it) - } + detectedTargetSet.add(result.warning) } }).show() } diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index c0e48f5..7135bbe 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -17,7 +17,6 @@ import com.casic.br.app.callback.OnYoloResultSiftCallback import com.casic.br.app.databinding.ActivityStartCheckByYoloBinding import com.casic.br.app.extensions.convert2YoloResult -import com.casic.br.app.extensions.difference import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar import com.casic.br.app.external.INativeCallback @@ -47,7 +46,6 @@ import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow import kotlinx.coroutines.launch import org.opencv.core.Mat import org.opencv.osgi.OpenCVNativeLoader @@ -70,9 +68,9 @@ private lateinit var configViewModel: ConfigViewModel private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var alarmViewModel: AlarmViewModel + private lateinit var result: HiddenTroubleResult private var inspectionAddress = "" private var isDetectTarget = false - private var alarmCodeArray = ArrayList() override fun initOnCreate(savedInstanceState: Bundle?) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) @@ -128,17 +126,10 @@ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] imageFileViewModel.resultModel.observe(this) { if (it.code == 200) { - //报警图片提交成功后,分批提交隐患 - lifecycleScope.launch { - flow { - alarmCodeArray.forEach { code -> - emit(code) - delay(1000) - } - }.collect { code -> - alarmViewModel.uploadDetectTargetAlarm(context, code, it.data.toString()) - } - } + //报警图片提交成功后,提交隐患 + alarmViewModel.uploadDetectTargetAlarm( + context, result.alarmCode, it.data.toString() + ) } } } @@ -328,10 +319,13 @@ if (results.isEmpty()) { return } + //只显示最后一个 + val troubleResult = results.last() + //显示隐患弹框 val message = weakReferenceHandler.obtainMessage() message.what = 2024082902 - message.obj = results + message.obj = troubleResult //延迟显示 weakReferenceHandler.sendMessageDelayed(message, 10 * 1000L) } @@ -375,31 +369,20 @@ } //安全转换。转换失败直接return,不影响程序运行 - val results = msg.obj as? ArrayList ?: return true - val troubleSet = HashSet() - results.forEach { - troubleSet.add(it.warning) - } - - val intersectResult = troubleSet.difference(detectedTargetSet) - //若差集为空,则说明隐患已全部识别过 - if (intersectResult.isEmpty()) { + val result = msg.obj as HiddenTroubleResult + if (detectedTargetSet.contains(result.warning)) { return true } //显示差集的隐患 if (mat.width() > 0 || mat.height() > 0) { - detectResultDialog.updateDialogContentView(results, intersectResult, mat, + detectResultDialog.updateDialogContentView(result, mat, object : DetectResultDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - file: File, alarmCodeArray: ArrayList - ) { + override fun onConfirmClick(file: File, result: HiddenTroubleResult) { //一张图里可能会包含多种隐患 - this@StartCheckByYoloActivity.alarmCodeArray = alarmCodeArray + this@StartCheckByYoloActivity.result = result imageFileViewModel.uploadImage(file) - intersectResult.forEach { - detectedTargetSet.add(it) - } + detectedTargetSet.add(result.warning) } }).show() } diff --git a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt index 0be917e..64c801a 100644 --- a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt +++ b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt @@ -20,7 +20,7 @@ private val kTag = "DetectResultDialog" private val binding: DialogDetectResultBinding by binding() - private var alarmCodeArray = ArrayList() + private lateinit var result: HiddenTroubleResult private lateinit var mat: Mat private lateinit var listener: OnDialogButtonClickListener @@ -38,7 +38,7 @@ //压缩 imagePath.compressImage(context, object : OnImageCompressListener { override fun onSuccess(file: File) { - listener.onConfirmClick(file, alarmCodeArray) + listener.onConfirmClick(file, result) dismiss() } @@ -52,32 +52,16 @@ } fun updateDialogContentView( - results: ArrayList, troubles: Set, mat: Mat, - listener: OnDialogButtonClickListener + result: HiddenTroubleResult, mat: Mat, listener: OnDialogButtonClickListener ): DetectResultDialog { this.mat = mat this.listener = listener - - //序列化alarmCode - val alarmCodeArray = ArrayList() - results.forEach { - alarmCodeArray.add(it.alarmCode) - } - this.alarmCodeArray = alarmCodeArray - - val string = StringBuffer() - troubles.forEachIndexed { index, s -> - if (index == troubles.size - 1) { - string.append(s) - } else { - string.append(s).append(",") - } - } - binding.messageView.text = string + this.result = result + binding.messageView.text = result.warning return this } interface OnDialogButtonClickListener { - fun onConfirmClick(file: File, alarmCodeArray: ArrayList) + fun onConfirmClick(file: File, result: HiddenTroubleResult) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index c0e48f5..7135bbe 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -17,7 +17,6 @@ import com.casic.br.app.callback.OnYoloResultSiftCallback import com.casic.br.app.databinding.ActivityStartCheckByYoloBinding import com.casic.br.app.extensions.convert2YoloResult -import com.casic.br.app.extensions.difference import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar import com.casic.br.app.external.INativeCallback @@ -47,7 +46,6 @@ import com.pengxh.kt.lite.widget.dialog.BottomActionSheet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow import kotlinx.coroutines.launch import org.opencv.core.Mat import org.opencv.osgi.OpenCVNativeLoader @@ -70,9 +68,9 @@ private lateinit var configViewModel: ConfigViewModel private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var alarmViewModel: AlarmViewModel + private lateinit var result: HiddenTroubleResult private var inspectionAddress = "" private var isDetectTarget = false - private var alarmCodeArray = ArrayList() override fun initOnCreate(savedInstanceState: Bundle?) { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) @@ -128,17 +126,10 @@ alarmViewModel = ViewModelProvider(this)[AlarmViewModel::class.java] imageFileViewModel.resultModel.observe(this) { if (it.code == 200) { - //报警图片提交成功后,分批提交隐患 - lifecycleScope.launch { - flow { - alarmCodeArray.forEach { code -> - emit(code) - delay(1000) - } - }.collect { code -> - alarmViewModel.uploadDetectTargetAlarm(context, code, it.data.toString()) - } - } + //报警图片提交成功后,提交隐患 + alarmViewModel.uploadDetectTargetAlarm( + context, result.alarmCode, it.data.toString() + ) } } } @@ -328,10 +319,13 @@ if (results.isEmpty()) { return } + //只显示最后一个 + val troubleResult = results.last() + //显示隐患弹框 val message = weakReferenceHandler.obtainMessage() message.what = 2024082902 - message.obj = results + message.obj = troubleResult //延迟显示 weakReferenceHandler.sendMessageDelayed(message, 10 * 1000L) } @@ -375,31 +369,20 @@ } //安全转换。转换失败直接return,不影响程序运行 - val results = msg.obj as? ArrayList ?: return true - val troubleSet = HashSet() - results.forEach { - troubleSet.add(it.warning) - } - - val intersectResult = troubleSet.difference(detectedTargetSet) - //若差集为空,则说明隐患已全部识别过 - if (intersectResult.isEmpty()) { + val result = msg.obj as HiddenTroubleResult + if (detectedTargetSet.contains(result.warning)) { return true } //显示差集的隐患 if (mat.width() > 0 || mat.height() > 0) { - detectResultDialog.updateDialogContentView(results, intersectResult, mat, + detectResultDialog.updateDialogContentView(result, mat, object : DetectResultDialog.OnDialogButtonClickListener { - override fun onConfirmClick( - file: File, alarmCodeArray: ArrayList - ) { + override fun onConfirmClick(file: File, result: HiddenTroubleResult) { //一张图里可能会包含多种隐患 - this@StartCheckByYoloActivity.alarmCodeArray = alarmCodeArray + this@StartCheckByYoloActivity.result = result imageFileViewModel.uploadImage(file) - intersectResult.forEach { - detectedTargetSet.add(it) - } + detectedTargetSet.add(result.warning) } }).show() } diff --git a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt index 0be917e..64c801a 100644 --- a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt +++ b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt @@ -20,7 +20,7 @@ private val kTag = "DetectResultDialog" private val binding: DialogDetectResultBinding by binding() - private var alarmCodeArray = ArrayList() + private lateinit var result: HiddenTroubleResult private lateinit var mat: Mat private lateinit var listener: OnDialogButtonClickListener @@ -38,7 +38,7 @@ //压缩 imagePath.compressImage(context, object : OnImageCompressListener { override fun onSuccess(file: File) { - listener.onConfirmClick(file, alarmCodeArray) + listener.onConfirmClick(file, result) dismiss() } @@ -52,32 +52,16 @@ } fun updateDialogContentView( - results: ArrayList, troubles: Set, mat: Mat, - listener: OnDialogButtonClickListener + result: HiddenTroubleResult, mat: Mat, listener: OnDialogButtonClickListener ): DetectResultDialog { this.mat = mat this.listener = listener - - //序列化alarmCode - val alarmCodeArray = ArrayList() - results.forEach { - alarmCodeArray.add(it.alarmCode) - } - this.alarmCodeArray = alarmCodeArray - - val string = StringBuffer() - troubles.forEachIndexed { index, s -> - if (index == troubles.size - 1) { - string.append(s) - } else { - string.append(s).append(",") - } - } - binding.messageView.text = string + this.result = result + binding.messageView.text = result.warning return this } interface OnDialogButtonClickListener { - fun onConfirmClick(file: File, alarmCodeArray: ArrayList) + fun onConfirmClick(file: File, result: HiddenTroubleResult) } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_detect_result.xml b/app/src/main/res/layout/dialog_detect_result.xml index 62763af..8b95a7e 100644 --- a/app/src/main/res/layout/dialog_detect_result.xml +++ b/app/src/main/res/layout/dialog_detect_result.xml @@ -12,7 +12,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:drawablePadding="@dimen/dp_5" - android:text="发现隐患" + android:text="发现疑似隐患" android:textColor="@color/white" android:textSize="@dimen/sp_16" app:drawableStartCompat="@drawable/ic_warning" />