diff --git a/app/src/main/java/com/nova/brain/glass/helper/GlassMediaServiceHelper.kt b/app/src/main/java/com/nova/brain/glass/helper/GlassMediaServiceHelper.kt new file mode 100644 index 0000000..9d89f1c --- /dev/null +++ b/app/src/main/java/com/nova/brain/glass/helper/GlassMediaServiceHelper.kt @@ -0,0 +1,37 @@ +package com.nova.brain.glass.helper + +import com.rokid.security.glass3.open.sdk.GlassSdk +import com.rokid.security.system.server.media.callback.PhotoFileCallback + +object GlassMediaServiceHelper { + @Volatile + private var mediaService: Any? = null + + private fun service(): Any? { + val cached = mediaService + if (cached != null) { + return cached + } + return GlassSdk.getGlassMediaService()?.also { + mediaService = it + } + } + + fun takePhoto(resolution: Int, path: String) { + val service = service() ?: return + service.javaClass.getMethod("takePhoto", Int::class.javaPrimitiveType, String::class.java) + .invoke(service, resolution, path) + } + + fun addPhotoCallback(callback: PhotoFileCallback) { + val service = service() ?: return + service.javaClass.getMethod("addPhotoCallback", PhotoFileCallback::class.java) + .invoke(service, callback) + } + + fun removePhotoCallback(callback: PhotoFileCallback) { + val service = service() ?: return + service.javaClass.getMethod("removePhotoCallback", PhotoFileCallback::class.java) + .invoke(service, callback) + } +} diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingActivity.kt index 67f9e42..b517ecd 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingActivity.kt @@ -5,12 +5,12 @@ import android.os.Environment import androidx.recyclerview.widget.RecyclerView import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivitySprayingBinding +import com.nova.brain.glass.helper.GlassMediaServiceHelper import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.helper.SprayingPhotoManager import com.nova.brain.glass.model.ItemItem import com.nova.brain.glass.viewmodel.SprayingVM -import com.rokid.security.glass3.open.sdk.GlassSdk import com.rokid.security.glass3.sdk.base.data.media.PhotoResolution import com.rokid.security.system.server.media.callback.PhotoFileCallback import com.xuqm.base.adapter.BasePagedAdapter @@ -56,8 +56,7 @@ class SprayingActivity : val publicPicturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) val file = File(publicPicturesDir, fileName) - GlassSdk.getGlassMediaService() - ?.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath) + GlassMediaServiceHelper.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath) } private val photoCallbackId = UUID.randomUUID().toString() @@ -105,14 +104,14 @@ class SprayingActivity : override fun onResume() { super.onResume() - GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback) + GlassMediaServiceHelper.addPhotoCallback(mPhotoFileCallback) OfflineCmdServiceHelper.addOnLineListener(listener) } override fun onPause() { super.onPause() OfflineCmdServiceHelper.removeOnLineListener(listener) - GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback) + GlassMediaServiceHelper.removePhotoCallback(mPhotoFileCallback) } private var isPhoto = false diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt index 50af875..cec6b9d 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingFinishActivity.kt @@ -46,6 +46,9 @@ class SprayingFinishActivity : override fun onDestroy() { super.onDestroy() + binding.photo1.setImageDrawable(null) + binding.photo2.setImageDrawable(null) + binding.photo3.setImageDrawable(null) OfflineCmdServiceHelper.removeOnLineListener(listener) } @@ -59,16 +62,16 @@ class SprayingFinishActivity : imageView.doOnLayout { val targetWidth = imageView.width.coerceAtLeast(1) val targetHeight = imageView.height.coerceAtLeast(1) - imageDecodeExecutor.execute { - val bitmap = BitmapDecodeHelper.decodeSampledBitmap(path, targetWidth, targetHeight) - runOnUiThread { - if (isFinishing || isDestroyed) { - return@runOnUiThread + imageDecodeExecutor.execute { + val bitmap = BitmapDecodeHelper.decodeSampledBitmap(path, targetWidth, targetHeight) + runOnUiThread { + if (isFinishing || isDestroyed) { + return@runOnUiThread + } + imageView.setImageBitmap(bitmap) } - imageView.setImageBitmap(bitmap) } } - } } } } diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt index ff2d047..199308c 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt @@ -9,13 +9,12 @@ import androidx.recyclerview.widget.RecyclerView import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivitySprayingOcrBinding import com.nova.brain.glass.helper.BitmapDecodeHelper +import com.nova.brain.glass.helper.GlassMediaServiceHelper import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.helper.SprayingPhotoManager import com.nova.brain.glass.model.ItemItem import com.nova.brain.glass.viewmodel.SprayingOCRVM -import com.nova.brain.glass.viewmodel.SprayingVM -import com.rokid.security.glass3.open.sdk.GlassSdk import com.rokid.security.glass3.sdk.base.data.media.PhotoResolution import com.rokid.security.system.server.media.callback.PhotoFileCallback import com.xuqm.base.adapter.BasePagedAdapter @@ -61,7 +60,7 @@ class SprayingOCRActivity : val fileName = "test_${System.currentTimeMillis()}.png" val publicPicturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) val file = File(publicPicturesDir, fileName) - GlassSdk.getGlassMediaService()?.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath) + GlassMediaServiceHelper.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath) } private val photoCallbackId = UUID.randomUUID().toString() private var resultCountdown: CountDownTimer? = null @@ -111,13 +110,18 @@ class SprayingOCRActivity : super.onResume() OfflineCmdServiceHelper.addOnLineListener(listener) - GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback) + GlassMediaServiceHelper.addPhotoCallback(mPhotoFileCallback) } override fun onPause() { super.onPause() resultCountdown?.cancel() OfflineCmdServiceHelper.removeOnLineListener(listener) - GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback) + GlassMediaServiceHelper.removePhotoCallback(mPhotoFileCallback) + } + + override fun onDestroy() { + super.onDestroy() + binding.content.setImageDrawable(null) } private var isPhoto = false diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt index d749d5c..783f333 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt @@ -11,12 +11,12 @@ import androidx.recyclerview.widget.RecyclerView import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivitySprayingResultBinding import com.nova.brain.glass.helper.BitmapDecodeHelper +import com.nova.brain.glass.helper.GlassMediaServiceHelper import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.helper.SprayingPhotoManager import com.nova.brain.glass.model.ItemItem import com.nova.brain.glass.viewmodel.SprayingResultVM -import com.rokid.security.glass3.open.sdk.GlassSdk import com.rokid.security.glass3.sdk.base.data.media.PhotoResolution import com.rokid.security.system.server.media.callback.PhotoFileCallback import com.xuqm.base.adapter.BasePagedAdapter @@ -70,6 +70,9 @@ class SprayingResultActivity : SprayingFinishActivity.ACTION_SUBMIT -> { SprayingPhotoManager.clear() + startActivity(Intent(this, TaskListActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP) + }) finish() } } @@ -108,8 +111,7 @@ class SprayingResultActivity : val publicPicturesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) val file = File(publicPicturesDir, fileName) - GlassSdk.getGlassMediaService() - ?.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath) + GlassMediaServiceHelper.takePhoto(PhotoResolution.RESOLUTION_480P, file.absolutePath) } fun rest() { @@ -185,15 +187,16 @@ class SprayingResultActivity : override fun onResume() { super.onResume() OfflineCmdServiceHelper.addOnLineListener(listener) - GlassSdk.getGlassMediaService()?.addPhotoCallback(mPhotoFileCallback) + GlassMediaServiceHelper.addPhotoCallback(mPhotoFileCallback) } override fun onPause() { super.onPause() OfflineCmdServiceHelper.removeOnLineListener(listener) - GlassSdk.getGlassMediaService()?.removePhotoCallback(mPhotoFileCallback) + GlassMediaServiceHelper.removePhotoCallback(mPhotoFileCallback) } override fun onDestroy() { super.onDestroy() + binding.iv.setImageDrawable(null) } private var isPhoto = false