SprayingOCRActivity.kt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package com.nova.brain.glass.ui
  2. import android.content.Intent
  3. import android.graphics.BitmapFactory
  4. import android.os.CountDownTimer
  5. import android.os.Environment
  6. import android.view.WindowManager
  7. import androidx.recyclerview.widget.RecyclerView
  8. import com.nova.brain.glass.R
  9. import com.nova.brain.glass.databinding.ActivitySprayingOcrBinding
  10. import com.nova.brain.glass.helper.OfflineCmdListener
  11. import com.nova.brain.glass.helper.OfflineCmdServiceHelper
  12. import com.nova.brain.glass.model.ItemItem
  13. import com.nova.brain.glass.viewmodel.SprayingOCRVM
  14. import com.nova.brain.glass.viewmodel.SprayingVM
  15. import com.rokid.security.glass3.open.sdk.GlassSdk
  16. import com.rokid.security.glass3.sdk.base.data.media.PhotoResolution
  17. import com.rokid.security.system.server.media.callback.PhotoFileCallback
  18. import com.xuqm.base.adapter.BasePagedAdapter
  19. import com.xuqm.base.adapter.CommonPagedAdapter
  20. import com.xuqm.base.adapter.ViewHolder
  21. import com.xuqm.base.common.LogHelper
  22. import com.xuqm.base.extensions.showMessage
  23. import com.xuqm.base.ui.BaseListFormLayoutNormalActivity
  24. import java.io.File
  25. import java.util.UUID
  26. class SprayingOCRActivity :
  27. BaseListFormLayoutNormalActivity<ItemItem, SprayingOCRVM, ActivitySprayingOcrBinding>() {
  28. override fun getLayoutId(): Int = R.layout.activity_spraying_ocr
  29. override fun fullscreen(): Boolean = true
  30. override fun getRecyclerOrientation(): Int = RecyclerView.VERTICAL
  31. private val listener = object : OfflineCmdListener {
  32. override fun onOfflineCmd(cmd: String) {
  33. runOnUiThread {
  34. when (cmd) {
  35. "退出", "返回", "退回" -> {
  36. finish()
  37. }
  38. "开始", "拍照", "开始拍照", "开始任务", "重拍", "重新拍", "在拍一次" -> {
  39. runOnUiThread {
  40. binding.hint.text = "拍照中,请稍后..."
  41. }
  42. isPhoto = true
  43. takePhoto()
  44. }
  45. }
  46. }
  47. }
  48. }
  49. fun takePhoto() {
  50. val fileName = "test_${System.currentTimeMillis()}.png"
  51. val publicPicturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
  52. val file = File(publicPicturesDir, fileName)
  53. GlassSdk.getGlassMediaService()?.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath)
  54. }
  55. private val photoCallbackId = UUID.randomUUID().toString()
  56. private var resultCountdown: CountDownTimer? = null
  57. private val mPhotoFileCallback = object : PhotoFileCallback.Stub() {
  58. override fun onTakePhoto(path: String) {
  59. LogHelper.d("onTakePhoto-->path = $path")
  60. }
  61. override fun getCallbackId(): String {
  62. return photoCallbackId
  63. }
  64. override fun onTakePhotoV2(path: String?, width: Int, height: Int) {
  65. LogHelper.d("width:$width--height:$height")
  66. if (path == null) {
  67. if (isPhoto) {
  68. isPhoto = false
  69. takePhoto()
  70. } else {
  71. runOnUiThread {
  72. binding.hint.text = "单击或语音输入“重拍”,可重新拍摄"
  73. }
  74. "相机异常".showMessage()
  75. }
  76. } else {
  77. runOnUiThread {
  78. binding.hint.text = "单击或语音输入“重拍”,可重新拍摄"
  79. showPhoto(path)
  80. }
  81. }
  82. }
  83. }
  84. override fun initData() {
  85. super.initData()
  86. window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
  87. OfflineCmdServiceHelper.addOnLineListener(listener)
  88. GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback)
  89. intent.getStringExtra("path")?.apply {
  90. showPhoto(this)
  91. }
  92. }
  93. override fun onDestroy() {
  94. super.onDestroy()
  95. resultCountdown?.cancel()
  96. OfflineCmdServiceHelper.removeOnLineListener(listener)
  97. GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback)
  98. }
  99. private var isPhoto = false
  100. private val adapter = object : CommonPagedAdapter<ItemItem>(R.layout.item_photo) {
  101. override fun convert(holder: ViewHolder, item: ItemItem, position: Int) {
  102. holder
  103. .setText(R.id.text, item.text)
  104. .setClickListener(R.id.photo) {
  105. when (item.text) {
  106. "重拍" -> {
  107. runOnUiThread {
  108. binding.hint.text = "拍照中,请稍后..."
  109. }
  110. isPhoto = true
  111. takePhoto()
  112. }
  113. }
  114. }
  115. }
  116. }
  117. override fun adapter(): BasePagedAdapter<ItemItem> = adapter
  118. private fun showPhoto(path: String) {
  119. binding.content.setImageBitmap(BitmapFactory.decodeFile(path))
  120. restartResultCountdown(path)
  121. }
  122. private fun restartResultCountdown(path: String) {
  123. resultCountdown?.cancel()
  124. resultCountdown = object : CountDownTimer(10_000, 1_000) {
  125. override fun onTick(millisUntilFinished: Long) {
  126. }
  127. override fun onFinish() {
  128. startActivity(Intent(this@SprayingOCRActivity, SprayingResultActivity::class.java).apply {
  129. putExtra("path", path)
  130. })
  131. }
  132. }.start()
  133. }
  134. }