Navaron Bracke

use a short lived scanner for analyze image

@@ -443,22 +443,29 @@ class MobileScanner( @@ -443,22 +443,29 @@ class MobileScanner(
443 /** 443 /**
444 * Analyze a single image. 444 * Analyze a single image.
445 */ 445 */
446 - fun analyzeImage(image: Uri, onSuccess: AnalyzerSuccessCallback, onError: AnalyzerErrorCallback) { 446 + fun analyzeImage(
  447 + image: Uri,
  448 + scannerOptions: BarcodeScannerOptions?,
  449 + onSuccess: AnalyzerSuccessCallback,
  450 + onError: AnalyzerErrorCallback) {
447 val inputImage = InputImage.fromFilePath(activity, image) 451 val inputImage = InputImage.fromFilePath(activity, image)
448 452
449 - scanner.process(inputImage)  
450 - .addOnSuccessListener { barcodes ->  
451 - val barcodeMap = barcodes.map { barcode -> barcode.data } 453 + // Use a short lived scanner instance, which is closed when the analysis is done.
  454 + val barcodeScanner: BarcodeScanner = createBarcodeScanner(scannerOptions)
452 455
453 - if (barcodeMap.isNotEmpty()) {  
454 - onSuccess(barcodeMap)  
455 - } else {  
456 - onSuccess(null)  
457 - }  
458 - }  
459 - .addOnFailureListener { e ->  
460 - onError(e.localizedMessage ?: e.toString()) 456 + barcodeScanner.process(inputImage).addOnSuccessListener { barcodes ->
  457 + val barcodeMap = barcodes.map { barcode -> barcode.data }
  458 +
  459 + if (barcodeMap.isEmpty()) {
  460 + onSuccess(null)
  461 + } else {
  462 + onSuccess(barcodeMap)
461 } 463 }
  464 + }.addOnFailureListener { e ->
  465 + onError(e.localizedMessage ?: e.toString())
  466 + }.addOnCompleteListener {
  467 + barcodeScanner.close()
  468 + }
462 } 469 }
463 470
464 /** 471 /**
@@ -243,7 +243,13 @@ class MobileScannerHandler( @@ -243,7 +243,13 @@ class MobileScannerHandler(
243 analyzerResult = result 243 analyzerResult = result
244 val uri = Uri.fromFile(File(call.arguments.toString())) 244 val uri = Uri.fromFile(File(call.arguments.toString()))
245 245
246 - mobileScanner!!.analyzeImage(uri, analyzeImageSuccessCallback, analyzeImageErrorCallback) 246 + // TODO: parse options from the method call
  247 + // See https://github.com/juliansteenbakker/mobile_scanner/issues/1069
  248 + mobileScanner!!.analyzeImage(
  249 + uri,
  250 + null,
  251 + analyzeImageSuccessCallback,
  252 + analyzeImageErrorCallback)
247 } 253 }
248 254
249 private fun toggleTorch(result: MethodChannel.Result) { 255 private fun toggleTorch(result: MethodChannel.Result) {