@@ -44,6 +44,7 @@ import android.widget.Spinner
4444import androidx.activity.result.PickVisualMediaRequest
4545import androidx.activity.result.contract.ActivityResultContracts
4646import androidx.appcompat.app.AppCompatActivity
47+ import androidx.core.os.BundleCompat
4748import androidx.core.view.ViewCompat
4849import androidx.core.view.WindowCompat
4950import androidx.core.view.WindowInsetsCompat
@@ -59,11 +60,10 @@ import com.google.android.material.snackbar.Snackbar
5960import java.io.File
6061import java.io.FileOutputStream
6162import kotlin.math.floor
63+ import androidx.core.graphics.scale
6264
6365class MainActivity : AppCompatActivity () {
6466 companion object {
65- const val ACTION_IMAGE_CAPTURE_CALLBACK_CODE = 3
66-
6767 private fun imageSize (width : Int , height : Int , maxSize : Int = 384): Size {
6868 val ratio = width.toFloat() / height
6969 if (ratio > 1 ) {
@@ -84,7 +84,7 @@ class MainActivity : AppCompatActivity() {
8484
8585 private fun reduceBitmapSize (image : Bitmap ): Bitmap {
8686 val newSize = imageSize(image.width, image.height)
87- return Bitmap .createScaledBitmap(image, newSize.width, newSize.height, true )
87+ return image.scale( newSize.width, newSize.height)
8888 }
8989 }
9090
@@ -94,7 +94,21 @@ class MainActivity : AppCompatActivity() {
9494
9595 private lateinit var scanApi: ScanApi
9696 private lateinit var generateApi: GenerateApi
97- private val encodeTypes = EncodeBarcodeType .values().map { it.toString() }.sorted()
97+ private val encodeTypes = EncodeBarcodeType .entries.map { it.toString() }.sorted()
98+
99+ private val cameraLauncher =
100+ registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { result ->
101+ if (result.resultCode == Activity .RESULT_OK ) {
102+ val bmpImage = result.data?.extras?.let {
103+ BundleCompat .getParcelable(it, " data" , Bitmap ::class .java)
104+ }
105+ if (bmpImage == null ) {
106+ showErrorMessage(" No photo captured" )
107+ return @registerForActivityResult
108+ }
109+ recognizeBarcode(bmpImage)
110+ }
111+ }
98112
99113 private val photoPickerLauncher =
100114 registerForActivityResult(ActivityResultContracts .PickVisualMedia ()) { uri ->
@@ -150,19 +164,6 @@ class MainActivity : AppCompatActivity() {
150164 barcodeTypeSpinner.setSelection(encodeTypes.indexOf(" QR" ))
151165 }
152166
153- override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {
154- super .onActivityResult(requestCode, resultCode, data)
155-
156- if (requestCode == ACTION_IMAGE_CAPTURE_CALLBACK_CODE && resultCode == Activity .RESULT_OK ) {
157- val bmpImage = data?.extras?.get(" data" ) as ? Bitmap
158- if (bmpImage == null ) {
159- showErrorMessage(" No photo captured" )
160- return
161- }
162- recognizeBarcode(bmpImage)
163- }
164- }
165-
166167 private fun recognizeSelectedImage (uri : Uri ) {
167168 try {
168169 val bytes = contentResolver.openInputStream(uri)?.use { it.readBytes() }
@@ -178,7 +179,7 @@ class MainActivity : AppCompatActivity() {
178179 }
179180
180181 recognizeBarcode(bmpImage)
181- } catch (e : Exception ) {
182+ } catch (_ : Exception ) {
182183 showErrorMessage(" Unable to read selected image" )
183184 }
184185 }
@@ -280,7 +281,7 @@ class MainActivity : AppCompatActivity() {
280281 fun onBtnTakePhotoClick (@Suppress(" UNUSED_PARAMETER" ) view : View ) {
281282 val takePictureIntent = Intent (MediaStore .ACTION_IMAGE_CAPTURE )
282283 if (takePictureIntent.resolveActivity(packageManager) != null ) {
283- startActivityForResult (takePictureIntent, ACTION_IMAGE_CAPTURE_CALLBACK_CODE )
284+ cameraLauncher.launch (takePictureIntent)
284285 }
285286 }
286287
0 commit comments