feat(inspection): 重构检查页面界面和功能

- 添加了"重新拍摄"和"重新拍照"命令支持
- 将检查活动从基础活动重构为列表表单布局活动
- 集成RecyclerView来显示项目列表,替换原有的静态按钮布局
- 创建适配器来处理列表项点击事件,包括开始任务功能
- 更新语音命令处理逻辑以支持新的重拍命令选项
- 修改UI布局以适应新的列表展示方式并移除旧的相机按钮组
- 调整提示文本的引号显示方式以确保正确渲染
这个提交包含在:
徐勤民 2026-04-21 15:56:43 +08:00
父节点 056302cc10
当前提交 1dd3477810
共有 5 个文件被更改,包括 40 次插入66 次删除

查看文件

@ -68,6 +68,8 @@ object OfflineCmdServiceHelper {
) )
private val CMDS_INSPECTION_RESULT = listOf( private val CMDS_INSPECTION_RESULT = listOf(
OfflineCmdBean("重拍照", "chong pai zhao"), OfflineCmdBean("重拍照", "chong pai zhao"),
OfflineCmdBean("重新拍摄", "chong xin pai she"),
OfflineCmdBean("重新拍照", "chong xin pai zhao"),
OfflineCmdBean("结束任务", "jie shu ren wu"), OfflineCmdBean("结束任务", "jie shu ren wu"),
OfflineCmdBean("继续任务", "ji xu ren wu") OfflineCmdBean("继续任务", "ji xu ren wu")
) )

查看文件

@ -3,24 +3,32 @@ package com.nova.brain.glass.ui
import android.content.Intent import android.content.Intent
import android.os.Environment import android.os.Environment
import android.view.WindowManager import android.view.WindowManager
import androidx.recyclerview.widget.RecyclerView
import com.nova.brain.glass.R import com.nova.brain.glass.R
import com.nova.brain.glass.databinding.ActivityInspectionBinding import com.nova.brain.glass.databinding.ActivityInspectionBinding
import com.nova.brain.glass.helper.GlassMediaServiceHelper import com.nova.brain.glass.helper.GlassMediaServiceHelper
import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdListener
import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.helper.OfflineCmdServiceHelper
import com.nova.brain.glass.helper.SprayingPhotoManager import com.nova.brain.glass.helper.SprayingPhotoManager
import com.nova.brain.glass.model.ItemItem
import com.nova.brain.glass.viewmodel.InspectionVM
import com.rokid.security.glass3.sdk.base.data.media.PhotoResolution import com.rokid.security.glass3.sdk.base.data.media.PhotoResolution
import com.rokid.security.system.server.media.callback.PhotoFileCallback import com.rokid.security.system.server.media.callback.PhotoFileCallback
import com.xuqm.base.adapter.BasePagedAdapter
import com.xuqm.base.adapter.CommonPagedAdapter
import com.xuqm.base.adapter.ViewHolder
import com.xuqm.base.common.LogHelper import com.xuqm.base.common.LogHelper
import com.xuqm.base.extensions.showMessage import com.xuqm.base.extensions.showMessage
import com.xuqm.base.ui.BaseActivity import com.xuqm.base.ui.BaseListFormLayoutNormalActivity
import java.io.File import java.io.File
import java.util.UUID import java.util.UUID
import kotlin.jvm.java
class InspectionActivity : BaseActivity<ActivityInspectionBinding>() { class InspectionActivity :
BaseListFormLayoutNormalActivity<ItemItem, InspectionVM, ActivityInspectionBinding>() {
override fun getLayoutId(): Int = R.layout.activity_inspection override fun getLayoutId(): Int = R.layout.activity_inspection
override fun fullscreen(): Boolean = true override fun fullscreen(): Boolean = true
override fun getRecyclerOrientation(): Int = RecyclerView.VERTICAL
private val listener = object : OfflineCmdListener { private val listener = object : OfflineCmdListener {
override fun onOfflineCmd(cmd: String) { override fun onOfflineCmd(cmd: String) {
@ -37,9 +45,6 @@ class InspectionActivity : BaseActivity<ActivityInspectionBinding>() {
super.initData() super.initData()
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
SprayingPhotoManager.clear() SprayingPhotoManager.clear()
binding.btnCamera.setOnClickListener { startCapture() }
binding.btnPrev.setOnClickListener { /* 切换上一任务(待实现) */ }
binding.btnNext.setOnClickListener { /* 切换下一任务(待实现) */ }
} }
private fun startCapture() { private fun startCapture() {
@ -69,7 +74,7 @@ class InspectionActivity : BaseActivity<ActivityInspectionBinding>() {
override fun onTakePhotoV2(path: String?, width: Int, height: Int) { override fun onTakePhotoV2(path: String?, width: Int, height: Int) {
if (path == null) { if (path == null) {
runOnUiThread { runOnUiThread {
binding.hint.text = "单击或语音输入\u201C开始\u201D,进入下一步\n滑动切换上/下一个任务" binding.hint.text = "单击或语音输入“开始”,进入下一步\n滑动切换上/下一个任务"
} }
"相机异常".showMessage() "相机异常".showMessage()
return return
@ -83,6 +88,20 @@ class InspectionActivity : BaseActivity<ActivityInspectionBinding>() {
} }
} }
private val adapter = object : CommonPagedAdapter<ItemItem>(R.layout.item_photo) {
override fun convert(holder: ViewHolder, item: ItemItem, position: Int) {
holder
.setText(R.id.text, item.text)
.setClickListener(R.id.photo) {
when (item.text) {
"开始任务" -> startCapture()
}
}
}
}
override fun adapter(): BasePagedAdapter<ItemItem> = adapter
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
GlassMediaServiceHelper.addPhotoCallback(mPhotoFileCallback) GlassMediaServiceHelper.addPhotoCallback(mPhotoFileCallback)
@ -99,4 +118,4 @@ class InspectionActivity : BaseActivity<ActivityInspectionBinding>() {
super.onDestroy() super.onDestroy()
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
} }
} }

查看文件

@ -65,7 +65,7 @@ class InspectionResultActivity :
runOnUiThread { runOnUiThread {
when (cmd) { when (cmd) {
"退出", "返回", "退回" -> finish() "退出", "返回", "退回" -> finish()
"重拍照" -> retake() "重拍照","重新拍摄","重新拍照" -> retake()
"继续任务" -> continueTask() "继续任务" -> continueTask()
"结束任务" -> endTask() "结束任务" -> endTask()
} }

查看文件

@ -1,17 +1,16 @@
package com.nova.brain.glass.viewmodel package com.nova.brain.glass.viewmodel
import com.nova.brain.glass.model.ItemItem import com.nova.brain.glass.model.ItemItem
import com.nova.brain.glass.model.TaskItem
import com.xuqm.base.viewmodel.BaseListViewModel import com.xuqm.base.viewmodel.BaseListViewModel
import com.xuqm.base.viewmodel.callback.Response import com.xuqm.base.viewmodel.callback.Response
class InspectionVM: BaseListViewModel<ItemItem>() { class InspectionVM : BaseListViewModel<ItemItem>() {
override fun loadData( override fun loadData(
page: Int, page: Int,
onResponse: Response<ItemItem> onResponse: Response<ItemItem>
) { ) {
onResponse.onResponse(arrayListOf<ItemItem>().apply { onResponse.onResponse(arrayListOf<ItemItem>().apply {
add(ItemItem("拍照")) add(ItemItem("开始任务"))
}) })
} }
} }

查看文件

@ -80,62 +80,16 @@
android:textSize="14sp" /> android:textSize="14sp" />
</LinearLayout> </LinearLayout>
<!-- 拍照区:左箭头 | 相机按钮 | 右箭头 --> <androidx.recyclerview.widget.RecyclerView
<LinearLayout android:id="@+id/baseRecyclerView"
android:id="@+id/cameraRow"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="88dp"
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:gravity="center_vertical" android:clipToPadding="false"
android:orientation="horizontal" android:overScrollMode="never"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/content"> app:layout_constraintTop_toBottomOf="@+id/content" />
<TextView
android:id="@+id/btnPrev"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="◀"
android:textColor="#ff40FF5E"
android:textSize="32sp" />
<LinearLayout
android:id="@+id/btnCamera"
android:layout_width="88dp"
android:layout_height="88dp"
android:background="@drawable/bg_photo"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="30dp"
android:layout_height="24dp"
android:src="@mipmap/paizhao" />
<TextView
android:id="@+id/btnCameraText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center"
android:text="开始任务"
android:textColor="#ff40FF5E"
android:textSize="14sp" />
</LinearLayout>
<TextView
android:id="@+id/btnNext"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="▶"
android:textColor="#ff40FF5E"
android:textSize="32sp" />
</LinearLayout>
<TextView <TextView
android:id="@+id/hint" android:id="@+id/hint"
@ -143,12 +97,12 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="12dp" android:layout_marginTop="12dp"
android:gravity="center" android:gravity="center"
android:text='单击或语音输入"开始",进入下一步\n滑动切换上/下一个任务' android:text="单击或语音输入&#34;开始&#34;,进入下一步&#10;滑动切换上/下一个任务"
android:textColor="#ff40FF5E" android:textColor="#ff40FF5E"
android:textSize="14sp" android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/cameraRow" /> app:layout_constraintTop_toBottomOf="@+id/baseRecyclerView" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>