feat(glass): 添加喷洒检测手动结果修改功能
- 在OfflineCmdServiceHelper中新增合格/不合格相关语音命令 - 将SprayingResultActivity中的离线命令监听器生命周期从onDestroy移至onResume/onPause - 新增SprayingManualResultActivity用于手动选择检测结果 - 新增SprayingManualResultVM作为手动结果页面的数据模型 - 添加activity_spraying_manual_result和item_manual_result_action布局文件 - 实现手动结果选择的Activity Result回调处理逻辑 - 在AndroidManifest.xml中注册新的手动结果Activity
这个提交包含在:
父节点
daa92ba0e1
当前提交
3270625e09
@ -87,6 +87,9 @@
|
||||
<activity
|
||||
android:name=".ui.SprayingResultActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".ui.SprayingManualResultActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".ui.WelcomeActivity"
|
||||
android:exported="true"
|
||||
|
||||
@ -34,6 +34,14 @@ object OfflineCmdServiceHelper {
|
||||
add(OfflineCmdBean("不同意", "bu tong yi"))
|
||||
add(OfflineCmdBean("拒绝", "ju jue"))
|
||||
add(OfflineCmdBean("通过", "tong guo"))
|
||||
add(OfflineCmdBean("合格", "he ge"))
|
||||
add(OfflineCmdBean("不合格", "bu he ge"))
|
||||
add(OfflineCmdBean("改为合格", "gai wei he ge"))
|
||||
add(OfflineCmdBean("改为不合格", "gai wei bu he ge"))
|
||||
add(OfflineCmdBean("设置为合格", "she zhi wei he ge"))
|
||||
add(OfflineCmdBean("设置为不合格", "she zhi wei bu he ge"))
|
||||
add(OfflineCmdBean("取消修改", "qu xiao xiu gai"))
|
||||
add(OfflineCmdBean("取消", "qu xiao"))
|
||||
|
||||
add(OfflineCmdBean("查看第一条任务", "cha kan di yi tiao ren wu"))
|
||||
add(OfflineCmdBean("查看第一项任务", "cha kan di yi xiang ren wu"))
|
||||
|
||||
@ -25,8 +25,9 @@ class FoActivity : BaseActivity<ActivityFoBinding>() {
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
OfflineCmdServiceHelper.removeOnLineListener(listener)
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,11 +38,15 @@ class InspectionActivity : BaseListFormLayoutNormalActivity<ItemItem, ItemListVM
|
||||
override fun initData() {
|
||||
super.initData()
|
||||
window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
OfflineCmdServiceHelper.removeOnLineListener(listener)
|
||||
}
|
||||
|
||||
|
||||
@ -98,12 +98,16 @@ class SprayingActivity :
|
||||
override fun initData() {
|
||||
super.initData()
|
||||
window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
OfflineCmdServiceHelper.removeOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback)
|
||||
}
|
||||
|
||||
@ -0,0 +1,74 @@
|
||||
package com.nova.brain.glass.ui
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.nova.brain.glass.R
|
||||
import com.nova.brain.glass.databinding.ActivitySprayingManualResultBinding
|
||||
import com.nova.brain.glass.helper.OfflineCmdListener
|
||||
import com.nova.brain.glass.helper.OfflineCmdServiceHelper
|
||||
import com.nova.brain.glass.model.ItemItem
|
||||
import com.nova.brain.glass.viewmodel.SprayingManualResultVM
|
||||
import com.xuqm.base.adapter.BasePagedAdapter
|
||||
import com.xuqm.base.adapter.CommonPagedAdapter
|
||||
import com.xuqm.base.adapter.ViewHolder
|
||||
import com.xuqm.base.ui.BaseListFormLayoutNormalActivity
|
||||
|
||||
class SprayingManualResultActivity :
|
||||
BaseListFormLayoutNormalActivity<ItemItem, SprayingManualResultVM, ActivitySprayingManualResultBinding>() {
|
||||
override fun getLayoutId(): Int = R.layout.activity_spraying_manual_result
|
||||
override fun fullscreen(): Boolean = true
|
||||
|
||||
override fun getRecyclerOrientation(): Int = RecyclerView.VERTICAL
|
||||
|
||||
private val listener = object : OfflineCmdListener {
|
||||
override fun onOfflineCmd(cmd: String) {
|
||||
runOnUiThread {
|
||||
when (cmd) {
|
||||
"合格", "改为合格", "设置为合格" -> chooseResult(RESULT_PASS)
|
||||
"不合格", "改为不合格", "设置为不合格" -> chooseResult(RESULT_FAIL)
|
||||
"取消", "取消修改", "返回", "退回", "退出" -> finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun initData() {
|
||||
super.initData()
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
OfflineCmdServiceHelper.removeOnLineListener(listener)
|
||||
}
|
||||
|
||||
private val adapter = object : CommonPagedAdapter<ItemItem>(R.layout.item_manual_result_action) {
|
||||
override fun convert(holder: ViewHolder, item: ItemItem, position: Int) {
|
||||
holder
|
||||
.setText(R.id.text, item.text)
|
||||
.setClickListener(R.id.actionRoot) {
|
||||
when (item.text) {
|
||||
"合格" -> chooseResult(RESULT_PASS)
|
||||
"不合格" -> chooseResult(RESULT_FAIL)
|
||||
"取消" -> finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun adapter(): BasePagedAdapter<ItemItem> = adapter
|
||||
|
||||
private fun chooseResult(result: String) {
|
||||
setResult(Activity.RESULT_OK, Intent().apply {
|
||||
putExtra(EXTRA_MANUAL_RESULT, result)
|
||||
})
|
||||
finish()
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val EXTRA_MANUAL_RESULT = "extra_manual_result"
|
||||
const val RESULT_PASS = "pass"
|
||||
const val RESULT_FAIL = "fail"
|
||||
}
|
||||
}
|
||||
@ -97,15 +97,19 @@ class SprayingOCRActivity :
|
||||
override fun initData() {
|
||||
super.initData()
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
|
||||
intent.getStringExtra("path")?.apply {
|
||||
showPhoto(this)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
|
||||
}
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
resultCountdown?.cancel()
|
||||
OfflineCmdServiceHelper.removeOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback)
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
package com.nova.brain.glass.ui
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Paint
|
||||
import android.os.Environment
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.nova.brain.glass.R
|
||||
import com.nova.brain.glass.databinding.ActivitySprayingResultBinding
|
||||
@ -31,6 +33,24 @@ class SprayingResultActivity :
|
||||
|
||||
override fun getRecyclerOrientation(): Int = RecyclerView.HORIZONTAL
|
||||
private var status = true
|
||||
private val manualResultLauncher =
|
||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
|
||||
if (result.resultCode != Activity.RESULT_OK) {
|
||||
return@registerForActivityResult
|
||||
}
|
||||
when (result.data?.getStringExtra(SprayingManualResultActivity.EXTRA_MANUAL_RESULT)) {
|
||||
SprayingManualResultActivity.RESULT_PASS -> {
|
||||
status = true
|
||||
setStatusImage()
|
||||
}
|
||||
|
||||
SprayingManualResultActivity.RESULT_FAIL -> {
|
||||
status = false
|
||||
setStatusImage()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val listener = object : OfflineCmdListener {
|
||||
override fun onOfflineCmd(cmd: String) {
|
||||
runOnUiThread {
|
||||
@ -66,7 +86,7 @@ class SprayingResultActivity :
|
||||
}
|
||||
|
||||
fun rest() {
|
||||
|
||||
manualResultLauncher.launch(Intent(this, SprayingManualResultActivity::class.java))
|
||||
}
|
||||
|
||||
private val photoCallbackId = UUID.randomUUID().toString()
|
||||
@ -108,31 +128,42 @@ class SprayingResultActivity :
|
||||
override fun initData() {
|
||||
super.initData()
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
|
||||
intent.getStringExtra("path")?.apply {
|
||||
binding.iv.setImageBitmap(BitmapFactory.decodeFile(this))
|
||||
setStatusImage()
|
||||
}
|
||||
}
|
||||
|
||||
fun setStatusImage() {
|
||||
binding.tvTaskHeader.text = if (status) "OCR识别结果:合格" else "OCR识别结果:不合格"
|
||||
binding.status.setImageResource(if (status) R.mipmap.ocr_true else R.mipmap.ocr_false)
|
||||
if (status) {
|
||||
binding.value1.paintFlags = binding.value1.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
||||
binding.value2.paintFlags = binding.value2.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
||||
binding.value3.paintFlags = binding.value3.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
||||
binding.value1.paintFlags =
|
||||
binding.value1.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
||||
binding.value2.paintFlags =
|
||||
binding.value2.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
||||
binding.value3.paintFlags =
|
||||
binding.value3.paintFlags and Paint.STRIKE_THRU_TEXT_FLAG.inv()
|
||||
} else {
|
||||
binding.value1.paintFlags = binding.value1.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
|
||||
binding.value2.paintFlags = binding.value2.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
|
||||
binding.value3.paintFlags = binding.value3.paintFlags or Paint.STRIKE_THRU_TEXT_FLAG
|
||||
}
|
||||
}
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
OfflineCmdServiceHelper.addOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
|
||||
}
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
OfflineCmdServiceHelper.removeOnLineListener(listener)
|
||||
GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback)
|
||||
}
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
private var isPhoto = false
|
||||
private val adapter = object : CommonPagedAdapter<ItemItem>(R.layout.item_menu) {
|
||||
|
||||
@ -172,6 +172,7 @@ class TaskListActivity :
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
LogHelper.d(">>>>>>>>>>>>--------------------")
|
||||
OfflineCmdServiceHelper.addOnLineListener(offlineCmdListener)
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
package com.nova.brain.glass.viewmodel
|
||||
|
||||
import com.nova.brain.glass.model.ItemItem
|
||||
import com.xuqm.base.viewmodel.BaseListViewModel
|
||||
import com.xuqm.base.viewmodel.callback.Response
|
||||
|
||||
class SprayingManualResultVM : BaseListViewModel<ItemItem>() {
|
||||
override fun loadData(
|
||||
page: Int,
|
||||
onResponse: Response<ItemItem>
|
||||
) {
|
||||
onResponse.onResponse(
|
||||
arrayListOf<ItemItem>().apply {
|
||||
add(ItemItem("合格"))
|
||||
add(ItemItem("不合格"))
|
||||
add(ItemItem("取消"))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@color/app_color_black">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="72dp"
|
||||
android:gravity="center"
|
||||
android:text="手动更改结果"
|
||||
android:textColor="#4AFE59"
|
||||
android:textSize="24sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/baseRecyclerView"
|
||||
android:layout_width="230dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="48dp"
|
||||
android:clipToPadding="false"
|
||||
android:overScrollMode="never"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/title" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/hint"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="28dp"
|
||||
android:layout_marginEnd="28dp"
|
||||
android:layout_marginBottom="56dp"
|
||||
android:gravity="center"
|
||||
android:lineSpacingExtra="6dp"
|
||||
android:text="单击或语音输入“合格”,检测结果改为合格 单击或语音输入“不合格”,检测结果改为不合格 单击或语音输入“取消”返回上级页面"
|
||||
android:textColor="#4AFE59"
|
||||
android:textSize="14sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</layout>
|
||||
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/actionRoot"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="64dp"
|
||||
android:layout_marginBottom="18dp"
|
||||
android:background="@drawable/bg_item"
|
||||
android:foreground="?attr/selectableItemBackground"
|
||||
android:paddingHorizontal="16dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center"
|
||||
android:textColor="#4AFE59"
|
||||
android:textSize="20sp" />
|
||||
|
||||
</FrameLayout>
|
||||
正在加载...
在新工单中引用
屏蔽一个用户