diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt index 496175c..2109114 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt @@ -1,12 +1,22 @@ package com.casic.br.app.view import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityCheckManifestDetailBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.CheckManifestDetailModel import com.casic.br.app.vm.CheckManifestViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState @@ -15,6 +25,7 @@ class CheckManifestDetailActivity : KotlinBaseActivity() { + private val context = this private lateinit var checkManifestViewModel: CheckManifestViewModel override fun initEvent() { @@ -23,6 +34,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String + + val viewWidth = getScreenWidth() - 75.dp2px(this) + checkManifestViewModel = ViewModelProvider(this)[CheckManifestViewModel::class.java] checkManifestViewModel.getCheckManifestDetailById(this, id) checkManifestViewModel.manifestDetailResult.observe(this) { @@ -33,19 +47,33 @@ binding.checkMethodView.text = it.data.checkMethod //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_check_manifest_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: CheckManifestDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } binding.remarkView.text = it.data.remark diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt index 496175c..2109114 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt @@ -1,12 +1,22 @@ package com.casic.br.app.view import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityCheckManifestDetailBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.CheckManifestDetailModel import com.casic.br.app.vm.CheckManifestViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState @@ -15,6 +25,7 @@ class CheckManifestDetailActivity : KotlinBaseActivity() { + private val context = this private lateinit var checkManifestViewModel: CheckManifestViewModel override fun initEvent() { @@ -23,6 +34,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String + + val viewWidth = getScreenWidth() - 75.dp2px(this) + checkManifestViewModel = ViewModelProvider(this)[CheckManifestViewModel::class.java] checkManifestViewModel.getCheckManifestDetailById(this, id) checkManifestViewModel.manifestDetailResult.observe(this) { @@ -33,19 +47,33 @@ binding.checkMethodView.text = it.data.checkMethod //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_check_manifest_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: CheckManifestDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } binding.remarkView.text = it.data.remark diff --git a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt index d76781b..956394d 100644 --- a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt @@ -2,13 +2,17 @@ import android.os.Bundle import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityHiddenTroubleDetailBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.vm.HiddenTroubleViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.getScreenWidth @@ -31,7 +35,7 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String - val viewWidth = getScreenWidth() - 75.dp2px(context) + val viewWidth = getScreenWidth() - 75.dp2px(this) hiddenTroubleViewModel = ViewModelProvider(this)[HiddenTroubleViewModel::class.java] hiddenTroubleViewModel.getHiddenTroubleDetail(this, id) @@ -43,19 +47,33 @@ binding.troubleContentView.text = it.data.content //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } val alarmImageList = it.data.alarmImageList diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt index 496175c..2109114 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt @@ -1,12 +1,22 @@ package com.casic.br.app.view import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityCheckManifestDetailBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.CheckManifestDetailModel import com.casic.br.app.vm.CheckManifestViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState @@ -15,6 +25,7 @@ class CheckManifestDetailActivity : KotlinBaseActivity() { + private val context = this private lateinit var checkManifestViewModel: CheckManifestViewModel override fun initEvent() { @@ -23,6 +34,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String + + val viewWidth = getScreenWidth() - 75.dp2px(this) + checkManifestViewModel = ViewModelProvider(this)[CheckManifestViewModel::class.java] checkManifestViewModel.getCheckManifestDetailById(this, id) checkManifestViewModel.manifestDetailResult.observe(this) { @@ -33,19 +47,33 @@ binding.checkMethodView.text = it.data.checkMethod //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_check_manifest_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: CheckManifestDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } binding.remarkView.text = it.data.remark diff --git a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt index d76781b..956394d 100644 --- a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt @@ -2,13 +2,17 @@ import android.os.Bundle import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityHiddenTroubleDetailBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.vm.HiddenTroubleViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.getScreenWidth @@ -31,7 +35,7 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String - val viewWidth = getScreenWidth() - 75.dp2px(context) + val viewWidth = getScreenWidth() - 75.dp2px(this) hiddenTroubleViewModel = ViewModelProvider(this)[HiddenTroubleViewModel::class.java] hiddenTroubleViewModel.getHiddenTroubleDetail(this, id) @@ -43,19 +47,33 @@ binding.troubleContentView.text = it.data.content //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } val alarmImageList = it.data.alarmImageList 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 dbf6c4b..ffcf8b7 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 @@ -139,11 +139,6 @@ override fun initEvent() { binding.stopButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "巡检任务创建中,请稍后再结束任务".show(this) - return@setOnClickListener - } - Intent(this, CheckResultActivity::class.java).also { stopTaskLauncher.launch(it) } @@ -168,10 +163,6 @@ * 根据场景查看检查清单 * */ binding.listButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "请先选择场景或者识别出场景再试".show(this) - return@setOnClickListener - } navigatePageTo() } } @@ -269,7 +260,6 @@ ) { Log.d(kTag, "onSegmentation: ") if (segmentationOutput.isEmpty() || detectOutput.isEmpty()) { - weakReferenceHandler.sendEmptyMessage(2024083001) binding.detectView.updateTargetPosition() } else { val segmentationResults = ArrayList() @@ -550,10 +540,6 @@ }).show() } } - - 2024083001 -> { -// detectResultDialog.dismiss() - } } return true } diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt index 496175c..2109114 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt @@ -1,12 +1,22 @@ package com.casic.br.app.view import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityCheckManifestDetailBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.CheckManifestDetailModel import com.casic.br.app.vm.CheckManifestViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState @@ -15,6 +25,7 @@ class CheckManifestDetailActivity : KotlinBaseActivity() { + private val context = this private lateinit var checkManifestViewModel: CheckManifestViewModel override fun initEvent() { @@ -23,6 +34,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String + + val viewWidth = getScreenWidth() - 75.dp2px(this) + checkManifestViewModel = ViewModelProvider(this)[CheckManifestViewModel::class.java] checkManifestViewModel.getCheckManifestDetailById(this, id) checkManifestViewModel.manifestDetailResult.observe(this) { @@ -33,19 +47,33 @@ binding.checkMethodView.text = it.data.checkMethod //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_check_manifest_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: CheckManifestDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } binding.remarkView.text = it.data.remark diff --git a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt index d76781b..956394d 100644 --- a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt @@ -2,13 +2,17 @@ import android.os.Bundle import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityHiddenTroubleDetailBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.vm.HiddenTroubleViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.getScreenWidth @@ -31,7 +35,7 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String - val viewWidth = getScreenWidth() - 75.dp2px(context) + val viewWidth = getScreenWidth() - 75.dp2px(this) hiddenTroubleViewModel = ViewModelProvider(this)[HiddenTroubleViewModel::class.java] hiddenTroubleViewModel.getHiddenTroubleDetail(this, id) @@ -43,19 +47,33 @@ binding.troubleContentView.text = it.data.content //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } val alarmImageList = it.data.alarmImageList 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 dbf6c4b..ffcf8b7 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 @@ -139,11 +139,6 @@ override fun initEvent() { binding.stopButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "巡检任务创建中,请稍后再结束任务".show(this) - return@setOnClickListener - } - Intent(this, CheckResultActivity::class.java).also { stopTaskLauncher.launch(it) } @@ -168,10 +163,6 @@ * 根据场景查看检查清单 * */ binding.listButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "请先选择场景或者识别出场景再试".show(this) - return@setOnClickListener - } navigatePageTo() } } @@ -269,7 +260,6 @@ ) { Log.d(kTag, "onSegmentation: ") if (segmentationOutput.isEmpty() || detectOutput.isEmpty()) { - weakReferenceHandler.sendEmptyMessage(2024083001) binding.detectView.updateTargetPosition() } else { val segmentationResults = ArrayList() @@ -550,10 +540,6 @@ }).show() } } - - 2024083001 -> { -// detectResultDialog.dismiss() - } } return true } diff --git a/app/src/main/res/layout/activity_check_manifest_detail.xml b/app/src/main/res/layout/activity_check_manifest_detail.xml index 2540b6b..5559160 100644 --- a/app/src/main/res/layout/activity_check_manifest_detail.xml +++ b/app/src/main/res/layout/activity_check_manifest_detail.xml @@ -140,15 +140,13 @@ android:textColor="@color/black" android:textSize="@dimen/sp_16" /> - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt index 496175c..2109114 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt @@ -1,12 +1,22 @@ package com.casic.br.app.view import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityCheckManifestDetailBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.CheckManifestDetailModel import com.casic.br.app.vm.CheckManifestViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState @@ -15,6 +25,7 @@ class CheckManifestDetailActivity : KotlinBaseActivity() { + private val context = this private lateinit var checkManifestViewModel: CheckManifestViewModel override fun initEvent() { @@ -23,6 +34,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String + + val viewWidth = getScreenWidth() - 75.dp2px(this) + checkManifestViewModel = ViewModelProvider(this)[CheckManifestViewModel::class.java] checkManifestViewModel.getCheckManifestDetailById(this, id) checkManifestViewModel.manifestDetailResult.observe(this) { @@ -33,19 +47,33 @@ binding.checkMethodView.text = it.data.checkMethod //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_check_manifest_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: CheckManifestDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } binding.remarkView.text = it.data.remark diff --git a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt index d76781b..956394d 100644 --- a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt @@ -2,13 +2,17 @@ import android.os.Bundle import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityHiddenTroubleDetailBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.vm.HiddenTroubleViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.getScreenWidth @@ -31,7 +35,7 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String - val viewWidth = getScreenWidth() - 75.dp2px(context) + val viewWidth = getScreenWidth() - 75.dp2px(this) hiddenTroubleViewModel = ViewModelProvider(this)[HiddenTroubleViewModel::class.java] hiddenTroubleViewModel.getHiddenTroubleDetail(this, id) @@ -43,19 +47,33 @@ binding.troubleContentView.text = it.data.content //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } val alarmImageList = it.data.alarmImageList 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 dbf6c4b..ffcf8b7 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 @@ -139,11 +139,6 @@ override fun initEvent() { binding.stopButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "巡检任务创建中,请稍后再结束任务".show(this) - return@setOnClickListener - } - Intent(this, CheckResultActivity::class.java).also { stopTaskLauncher.launch(it) } @@ -168,10 +163,6 @@ * 根据场景查看检查清单 * */ binding.listButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "请先选择场景或者识别出场景再试".show(this) - return@setOnClickListener - } navigatePageTo() } } @@ -269,7 +260,6 @@ ) { Log.d(kTag, "onSegmentation: ") if (segmentationOutput.isEmpty() || detectOutput.isEmpty()) { - weakReferenceHandler.sendEmptyMessage(2024083001) binding.detectView.updateTargetPosition() } else { val segmentationResults = ArrayList() @@ -550,10 +540,6 @@ }).show() } } - - 2024083001 -> { -// detectResultDialog.dismiss() - } } return true } diff --git a/app/src/main/res/layout/activity_check_manifest_detail.xml b/app/src/main/res/layout/activity_check_manifest_detail.xml index 2540b6b..5559160 100644 --- a/app/src/main/res/layout/activity_check_manifest_detail.xml +++ b/app/src/main/res/layout/activity_check_manifest_detail.xml @@ -140,15 +140,13 @@ android:textColor="@color/black" android:textSize="@dimen/sp_16" /> - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
- + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt index 496175c..2109114 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt @@ -1,12 +1,22 @@ package com.casic.br.app.view import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityCheckManifestDetailBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.CheckManifestDetailModel import com.casic.br.app.vm.CheckManifestViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState @@ -15,6 +25,7 @@ class CheckManifestDetailActivity : KotlinBaseActivity() { + private val context = this private lateinit var checkManifestViewModel: CheckManifestViewModel override fun initEvent() { @@ -23,6 +34,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String + + val viewWidth = getScreenWidth() - 75.dp2px(this) + checkManifestViewModel = ViewModelProvider(this)[CheckManifestViewModel::class.java] checkManifestViewModel.getCheckManifestDetailById(this, id) checkManifestViewModel.manifestDetailResult.observe(this) { @@ -33,19 +47,33 @@ binding.checkMethodView.text = it.data.checkMethod //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_check_manifest_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: CheckManifestDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } binding.remarkView.text = it.data.remark diff --git a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt index d76781b..956394d 100644 --- a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt @@ -2,13 +2,17 @@ import android.os.Bundle import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityHiddenTroubleDetailBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.vm.HiddenTroubleViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.getScreenWidth @@ -31,7 +35,7 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String - val viewWidth = getScreenWidth() - 75.dp2px(context) + val viewWidth = getScreenWidth() - 75.dp2px(this) hiddenTroubleViewModel = ViewModelProvider(this)[HiddenTroubleViewModel::class.java] hiddenTroubleViewModel.getHiddenTroubleDetail(this, id) @@ -43,19 +47,33 @@ binding.troubleContentView.text = it.data.content //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } val alarmImageList = it.data.alarmImageList 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 dbf6c4b..ffcf8b7 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 @@ -139,11 +139,6 @@ override fun initEvent() { binding.stopButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "巡检任务创建中,请稍后再结束任务".show(this) - return@setOnClickListener - } - Intent(this, CheckResultActivity::class.java).also { stopTaskLauncher.launch(it) } @@ -168,10 +163,6 @@ * 根据场景查看检查清单 * */ binding.listButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "请先选择场景或者识别出场景再试".show(this) - return@setOnClickListener - } navigatePageTo() } } @@ -269,7 +260,6 @@ ) { Log.d(kTag, "onSegmentation: ") if (segmentationOutput.isEmpty() || detectOutput.isEmpty()) { - weakReferenceHandler.sendEmptyMessage(2024083001) binding.detectView.updateTargetPosition() } else { val segmentationResults = ArrayList() @@ -550,10 +540,6 @@ }).show() } } - - 2024083001 -> { -// detectResultDialog.dismiss() - } } return true } diff --git a/app/src/main/res/layout/activity_check_manifest_detail.xml b/app/src/main/res/layout/activity_check_manifest_detail.xml index 2540b6b..5559160 100644 --- a/app/src/main/res/layout/activity_check_manifest_detail.xml +++ b/app/src/main/res/layout/activity_check_manifest_detail.xml @@ -140,15 +140,13 @@ android:textColor="@color/black" android:textSize="@dimen/sp_16" /> - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
- + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/cpp/yolo.cpp b/app/src/main/cpp/yolo.cpp index 011f00a..0c4f203 100644 --- a/app/src/main/cpp/yolo.cpp +++ b/app/src/main/cpp/yolo.cpp @@ -695,6 +695,15 @@ //分割和检测结果统一回调 env->CallVoidMethod(j_callback, j_method_id, segment_array_obj, detect_array_obj); + + /** + * Mat数据。 + *
-----------------------------------------------
+ * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 + * */ + auto *res = (cv::Mat *) j_mat_addr; + res->create(rgb.rows, rgb.cols, rgb.type()); + memcpy(res->data, rgb.data, rgb.rows * rgb.step); } return 0; } @@ -814,15 +823,6 @@ } //回调 env->CallVoidMethod(j_callback, j_method_id, arraylist_obj); - - /** - * Mat数据。 - *
-----------------------------------------------
- * 通过内存地址赋值。Java层传入Mat对象内存地址,再通过C++给此地址赋值,Java即可得到内存地址的Mat矩阵数据 - * */ - auto *res = (cv::Mat *) j_mat_addr; - res->create(rgb.rows, rgb.cols, rgb.type()); - memcpy(res->data, rgb.data, rgb.rows * rgb.step); } else { __android_log_print( ANDROID_LOG_DEBUG, "ncnn", "yolo_d detect is paused, state = %d", j_state diff --git a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java index e318bd0..8bbdb19 100644 --- a/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/CheckManifestDetailModel.java @@ -222,6 +222,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -285,6 +287,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java index 8e6a870..68329df 100644 --- a/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java +++ b/app/src/main/java/com/casic/br/app/model/HiddenTroubleDetailModel.java @@ -333,6 +333,8 @@ private String createUserId; private String createUserName; private String id; + private List imageList; + private String imageStr; private String specificationId; private String specificationItemId; private String specificationName; @@ -396,6 +398,22 @@ this.id = id; } + public List getImageList() { + return imageList; + } + + public void setImageList(List imageList) { + this.imageList = imageList; + } + + public String getImageStr() { + return imageStr; + } + + public void setImageStr(String imageStr) { + this.imageStr = imageStr; + } + public String getSpecificationId() { return specificationId; } diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt index 496175c..2109114 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestDetailActivity.kt @@ -1,12 +1,22 @@ package com.casic.br.app.view import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityCheckManifestDetailBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.CheckManifestDetailModel import com.casic.br.app.vm.CheckManifestViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState @@ -15,6 +25,7 @@ class CheckManifestDetailActivity : KotlinBaseActivity() { + private val context = this private lateinit var checkManifestViewModel: CheckManifestViewModel override fun initEvent() { @@ -23,6 +34,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String + + val viewWidth = getScreenWidth() - 75.dp2px(this) + checkManifestViewModel = ViewModelProvider(this)[CheckManifestViewModel::class.java] checkManifestViewModel.getCheckManifestDetailById(this, id) checkManifestViewModel.manifestDetailResult.observe(this) { @@ -33,19 +47,33 @@ binding.checkMethodView.text = it.data.checkMethod //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_check_manifest_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: CheckManifestDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } binding.remarkView.text = it.data.remark diff --git a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt index d76781b..956394d 100644 --- a/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/HiddenTroubleDetailActivity.kt @@ -2,13 +2,17 @@ import android.os.Bundle import android.widget.AdapterView +import android.widget.GridView import androidx.lifecycle.ViewModelProvider import com.casic.br.app.R import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.databinding.ActivityHiddenTroubleDetailBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.vm.HiddenTroubleViewModel +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.getScreenWidth @@ -31,7 +35,7 @@ override fun initOnCreate(savedInstanceState: Bundle?) { val id = intent.getStringExtra(Constant.INTENT_PARAM) as String - val viewWidth = getScreenWidth() - 75.dp2px(context) + val viewWidth = getScreenWidth() - 75.dp2px(this) hiddenTroubleViewModel = ViewModelProvider(this)[HiddenTroubleViewModel::class.java] hiddenTroubleViewModel.getHiddenTroubleDetail(this, id) @@ -43,19 +47,33 @@ binding.troubleContentView.text = it.data.content //依据 - if (it.data.basisList.isNullOrEmpty()) { - binding.basisView.text = "暂无" - } else { - val stringBuilder = StringBuilder() - it.data.basisList.forEachIndexed { index, base -> - val line = "《${base.specificationName}》-${base.chapter}-${base.content}" - if (index == it.data.basisList.size - 1) { - stringBuilder.append(line) - } else { - stringBuilder.append(line).append("\r\n") + if (it.data.basisList.isNotEmpty()) { + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l, it.data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + val imageAdapter = ImageGridAdapter(context, images, viewWidth, 3) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) } } - binding.basisView.text = stringBuilder + binding.basisRecyclerView.adapter = baseAdapter } val alarmImageList = it.data.alarmImageList 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 dbf6c4b..ffcf8b7 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 @@ -139,11 +139,6 @@ override fun initEvent() { binding.stopButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "巡检任务创建中,请稍后再结束任务".show(this) - return@setOnClickListener - } - Intent(this, CheckResultActivity::class.java).also { stopTaskLauncher.launch(it) } @@ -168,10 +163,6 @@ * 根据场景查看检查清单 * */ binding.listButton.setOnClickListener { - if (RuntimeCache.inspectionId.isBlank()) { - "请先选择场景或者识别出场景再试".show(this) - return@setOnClickListener - } navigatePageTo() } } @@ -269,7 +260,6 @@ ) { Log.d(kTag, "onSegmentation: ") if (segmentationOutput.isEmpty() || detectOutput.isEmpty()) { - weakReferenceHandler.sendEmptyMessage(2024083001) binding.detectView.updateTargetPosition() } else { val segmentationResults = ArrayList() @@ -550,10 +540,6 @@ }).show() } } - - 2024083001 -> { -// detectResultDialog.dismiss() - } } return true } diff --git a/app/src/main/res/layout/activity_check_manifest_detail.xml b/app/src/main/res/layout/activity_check_manifest_detail.xml index 2540b6b..5559160 100644 --- a/app/src/main/res/layout/activity_check_manifest_detail.xml +++ b/app/src/main/res/layout/activity_check_manifest_detail.xml @@ -140,15 +140,13 @@ android:textColor="@color/black" android:textSize="@dimen/sp_16" /> - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
- + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_hidden_trouble_base_rule_l.xml b/app/src/main/res/layout/item_hidden_trouble_base_rule_l.xml new file mode 100644 index 0000000..60fab11 --- /dev/null +++ b/app/src/main/res/layout/item_hidden_trouble_base_rule_l.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + \ No newline at end of file