Julian Steenbakker

bug: fixed hot reload not working

... ... @@ -24,7 +24,6 @@ import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.PluginRegistry
import io.flutter.view.TextureRegistry
import java.io.File
import java.net.URI
class MobileScanner(private val activity: Activity, private val textureRegistry: TextureRegistry)
... ... @@ -39,6 +38,7 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
private var cameraProvider: ProcessCameraProvider? = null
private var camera: Camera? = null
private var preview: Preview? = null
private var textureEntry: TextureRegistry.SurfaceTextureEntry? = null
// @AnalyzeMode
... ... @@ -120,11 +120,15 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
@ExperimentalGetImage
private fun start(call: MethodCall, result: MethodChannel.Result) {
if (camera != null) {
result.error(TAG, "Called start() while already started!", null)
return
}
if (camera != null && preview != null) {
val resolution = preview!!.resolutionInfo!!.resolution
val portrait = camera!!.cameraInfo.sensorRotationDegrees % 180 == 0
val width = resolution.width.toDouble()
val height = resolution.height.toDouble()
val size = if (portrait) mapOf("width" to width, "height" to height) else mapOf("width" to height, "height" to width)
val answer = mapOf("textureId" to textureEntry!!.id(), "size" to size, "torchable" to camera!!.cameraInfo.hasFlashUnit())
result.success(answer)
} else {
val facing: Int = call.argument<Int>("facing") ?: 0
val ratio: Int? = call.argument<Int>("ratio")
val torch: Boolean = call.argument<Boolean>("torch") ?: false
... ... @@ -136,9 +140,9 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
formatsList.add(BarcodeFormats.values()[index].intValue)
}
scanner = if (formatsList.size == 1) {
BarcodeScanning.getClient( BarcodeScannerOptions.Builder().setBarcodeFormats(formatsList.first()).build());
BarcodeScanning.getClient(BarcodeScannerOptions.Builder().setBarcodeFormats(formatsList.first()).build())
} else {
BarcodeScanning.getClient( BarcodeScannerOptions.Builder().setBarcodeFormats(formatsList.first(), *formatsList.subList(1, formatsList.size).toIntArray() ).build());
BarcodeScanning.getClient(BarcodeScannerOptions.Builder().setBarcodeFormats(formatsList.first(), *formatsList.subList(1, formatsList.size).toIntArray()).build())
}
}
... ... @@ -163,7 +167,7 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
if (ratio != null) {
previewBuilder.setTargetAspectRatio(ratio)
}
val preview = previewBuilder.build().apply { setSurfaceProvider(surfaceProvider) }
preview = previewBuilder.build().apply { setSurfaceProvider(surfaceProvider) }
// Build the analyzer to be passed on to MLKit
val analysisBuilder = ImageAnalysis.Builder()
... ... @@ -179,7 +183,7 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
camera = cameraProvider!!.bindToLifecycle(activity as LifecycleOwner, selector, preview, analysis)
val analysisSize = analysis.resolutionInfo?.resolution ?: Size(0, 0)
val previewSize = preview.resolutionInfo?.resolution ?: Size(0, 0)
val previewSize = preview!!.resolutionInfo?.resolution ?: Size(0, 0)
Log.i("LOG", "Analyzer: $analysisSize")
Log.i("LOG", "Preview: $previewSize")
... ... @@ -192,7 +196,7 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
// Enable torch if provided
camera!!.cameraControl.enableTorch(torch)
val resolution = preview.resolutionInfo!!.resolution
val resolution = preview!!.resolutionInfo!!.resolution
val portrait = camera!!.cameraInfo.sensorRotationDegrees % 180 == 0
val width = resolution.width.toDouble()
val height = resolution.height.toDouble()
... ... @@ -201,6 +205,7 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
result.success(answer)
}, executor)
}
}
private fun toggleTorch(call: MethodCall, result: MethodChannel.Result) {
if (camera == null) {
... ... @@ -235,18 +240,19 @@ class MobileScanner(private val activity: Activity, private val textureRegistry:
}
private fun stop(result: MethodChannel.Result) {
if (camera == null) {
if (camera == null && preview == null) {
result.error(TAG,"Called stop() while already stopped!", null)
return
}
val owner = activity as LifecycleOwner
camera!!.cameraInfo.torchState.removeObservers(owner)
cameraProvider!!.unbindAll()
textureEntry!!.release()
camera?.cameraInfo?.torchState?.removeObservers(owner)
cameraProvider?.unbindAll()
textureEntry?.release()
// analyzeMode = AnalyzeMode.NONE
camera = null
preview = null
textureEntry = null
cameraProvider = null
... ...