@@ -6,6 +6,8 @@ import android.graphics.Bitmap
6
6
import android.os.Bundle
7
7
import android.provider.MediaStore
8
8
import android.view.View
9
+ import androidx.activity.result.ActivityResultLauncher
10
+ import androidx.activity.result.contract.ActivityResultContracts
9
11
import androidx.appcompat.app.AppCompatActivity
10
12
import androidx.core.content.ContextCompat
11
13
import androidx.core.view.isVisible
@@ -17,22 +19,19 @@ import io.scanbot.example.sdk.barcode.ui.dialog.ErrorFragment
17
19
import io.scanbot.sap.Status
18
20
import io.scanbot.sdk.barcode.ScanbotBarcodeDetector
19
21
import io.scanbot.sdk.barcode.entity.BarcodeFormat
20
- import io.scanbot.sdk.barcode.entity.BarcodeScanningResult
21
22
import io.scanbot.sdk.barcode_scanner.ScanbotBarcodeScannerSDK
22
23
import io.scanbot.sdk.ui.barcode_scanner.view.barcode.BarcodeScannerActivity
23
24
import io.scanbot.sdk.ui.barcode_scanner.view.barcode.batch.BatchBarcodeScannerActivity
25
+ import io.scanbot.sdk.ui.registerForActivityResultOk
24
26
import io.scanbot.sdk.ui.view.barcode.batch.configuration.BatchBarcodeScannerConfiguration
25
27
import io.scanbot.sdk.ui.view.barcode.configuration.BarcodeImageGenerationType
26
28
import io.scanbot.sdk.ui.view.barcode.configuration.BarcodeScannerConfiguration
27
29
import io.scanbot.sdk.ui.view.base.configuration.CameraOrientationMode
28
30
import kotlinx.android.synthetic.main.activity_main.*
31
+ import kotlinx.android.synthetic.main.activity_qr_camera_view.*
29
32
import java.io.IOException
30
33
31
34
class MainActivity : AppCompatActivity () {
32
- companion object {
33
- private const val BARCODE_DEFAULT_UI_REQUEST_CODE = 910
34
- private const val IMPORT_IMAGE_REQUEST_CODE = 911
35
- }
36
35
37
36
private lateinit var barcodeDetector: ScanbotBarcodeDetector
38
37
@@ -62,9 +61,9 @@ class MainActivity : AppCompatActivity() {
62
61
)
63
62
})
64
63
barcodeCameraConfiguration.setBarcodeImageGenerationType(BarcodeImageGenerationType .NONE )
65
- val intent = BarcodeScannerActivity .newIntent(this @MainActivity, barcodeCameraConfiguration)
66
- startActivityForResult(intent, BARCODE_DEFAULT_UI_REQUEST_CODE )
64
+ barcodeResultLauncher.launch(barcodeCameraConfiguration)
67
65
}
66
+
68
67
findViewById<View >(R .id.rtu_ui_image).setOnClickListener {
69
68
val barcodeCameraConfiguration = BarcodeScannerConfiguration ()
70
69
barcodeCameraConfiguration.setBarcodeFormatsFilter(arrayListOf<BarcodeFormat >().also {
@@ -73,9 +72,7 @@ class MainActivity : AppCompatActivity() {
73
72
)
74
73
})
75
74
barcodeCameraConfiguration.setBarcodeImageGenerationType(BarcodeImageGenerationType .VIDEO_FRAME )
76
- val intent =
77
- BarcodeScannerActivity .newIntent(this @MainActivity, barcodeCameraConfiguration)
78
- startActivityForResult(intent, BARCODE_DEFAULT_UI_REQUEST_CODE )
75
+ barcodeResultLauncher.launch(barcodeCameraConfiguration)
79
76
}
80
77
81
78
findViewById<View >(R .id.rtu_ui_import).setOnClickListener {
@@ -85,15 +82,10 @@ class MainActivity : AppCompatActivity() {
85
82
imageIntent.action = Intent .ACTION_GET_CONTENT
86
83
imageIntent.putExtra(Intent .EXTRA_LOCAL_ONLY , false )
87
84
imageIntent.putExtra(Intent .EXTRA_ALLOW_MULTIPLE , false )
88
- startActivityForResult(
89
- Intent .createChooser(
90
- imageIntent,
91
- getString(R .string.share_title)
92
- ), IMPORT_IMAGE_REQUEST_CODE
93
- )
85
+ val wrappedIntent = Intent .createChooser(imageIntent, getString(R .string.share_title))
86
+ importImageResultLauncher.launch(wrappedIntent)
94
87
}
95
88
96
-
97
89
findViewById<View >(R .id.rtu_ui_batch_mode).setOnClickListener {
98
90
val barcodeCameraConfiguration = BatchBarcodeScannerConfiguration ()
99
91
@@ -107,9 +99,16 @@ class MainActivity : AppCompatActivity() {
107
99
barcodeCameraConfiguration.setDetailsPrimaryColor(ContextCompat .getColor(this , android.R .color.white))
108
100
barcodeCameraConfiguration.setBarcodesCountTextColor(ContextCompat .getColor(this , android.R .color.white))
109
101
barcodeCameraConfiguration.setOrientationLockMode(CameraOrientationMode .PORTRAIT )
102
+ barcodeCameraConfiguration.setBarcodeFormatsFilter(arrayListOf<BarcodeFormat >().also {
103
+ it.addAll(
104
+ BarcodeTypeRepository .selectedTypes
105
+ )
106
+ })
110
107
111
- val intent = BatchBarcodeScannerActivity .newIntent(this @MainActivity, barcodeCameraConfiguration)
112
- startActivityForResult(intent, BARCODE_DEFAULT_UI_REQUEST_CODE )
108
+ val rtuInput = BatchBarcodeScannerActivity .InputParams (
109
+ barcodeCameraConfiguration
110
+ )
111
+ batchBarcodeResultLauncher.launch(rtuInput)
113
112
}
114
113
115
114
findViewById<View >(R .id.settings).setOnClickListener {
@@ -118,40 +117,46 @@ class MainActivity : AppCompatActivity() {
118
117
}
119
118
}
120
119
121
- override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {
122
- super .onActivityResult(requestCode, resultCode, data)
123
- if (requestCode == BARCODE_DEFAULT_UI_REQUEST_CODE && resultCode == Activity .RESULT_OK ) {
124
- data?.getParcelableExtra<BarcodeScanningResult >(BarcodeScannerActivity .SCANNED_BARCODE_EXTRA )
125
- ?.let {
126
- val imagePath =
127
- data.getStringExtra(BarcodeScannerActivity .SCANNED_BARCODE_IMAGE_PATH_EXTRA )
128
- val previewPath =
129
- data.getStringExtra(BarcodeScannerActivity .SCANNED_BARCODE_PREVIEW_FRAME_PATH_EXTRA )
130
-
131
- BarcodeResultRepository .barcodeResultBundle =
132
- BarcodeResultBundle (it, imagePath, previewPath)
133
-
134
- val intent = Intent (this , BarcodeResultActivity ::class .java)
135
- startActivity(intent)
136
- }
137
- } else if (requestCode == IMPORT_IMAGE_REQUEST_CODE && resultCode == Activity .RESULT_OK ) {
138
- val sdk = ScanbotBarcodeScannerSDK (this )
139
- if (! sdk.licenseInfo.isValid) {
140
- showLicenseDialog()
141
- } else {
142
- processGalleryResult(data!! )?.let { bitmap ->
143
- barcodeDetector.modifyConfig { setBarcodeFormats(BarcodeTypeRepository .selectedTypes.toList()) }
144
- val result = barcodeDetector.detectFromBitmap(bitmap, 0 )
145
-
146
- BarcodeResultRepository .barcodeResultBundle =
147
- result?.let { BarcodeResultBundle (it, null , null ) }
148
-
149
- startActivity(Intent (this , BarcodeResultActivity ::class .java))
120
+ private val barcodeResultLauncher: ActivityResultLauncher <BarcodeScannerConfiguration > =
121
+ registerForActivityResultOk(BarcodeScannerActivity .ResultContract ()) { resultEntity ->
122
+ val imagePath = resultEntity.barcodeImagePath
123
+ val previewPath = resultEntity.barcodePreviewFramePath
124
+
125
+ BarcodeResultRepository .barcodeResultBundle =
126
+ BarcodeResultBundle (resultEntity.result!! , imagePath, previewPath)
127
+
128
+ val intent = Intent (this , BarcodeResultActivity ::class .java)
129
+ startActivity(intent)
130
+ }
131
+
132
+ private val batchBarcodeResultLauncher: ActivityResultLauncher <BatchBarcodeScannerActivity .InputParams > =
133
+ registerForActivityResultOk(BatchBarcodeScannerActivity .ResultContract ()) { resultEntity ->
134
+ BarcodeResultRepository .barcodeResultBundle =
135
+ BarcodeResultBundle (resultEntity.result!! )
136
+
137
+ val intent = Intent (this , BarcodeResultActivity ::class .java)
138
+ startActivity(intent)
139
+ }
140
+
141
+ private val importImageResultLauncher: ActivityResultLauncher <Intent > =
142
+ registerForActivityResult(ActivityResultContracts .StartActivityForResult ()) { activityResult ->
143
+ if (activityResult.resultCode == Activity .RESULT_OK ) {
144
+ val sdk = ScanbotBarcodeScannerSDK (this )
145
+ if (! sdk.licenseInfo.isValid) {
146
+ showLicenseDialog()
147
+ } else {
148
+ processGalleryResult(activityResult.data!! )?.let { bitmap ->
149
+ barcodeDetector.modifyConfig { setBarcodeFormats(BarcodeTypeRepository .selectedTypes.toList()) }
150
+ val result = barcodeDetector.detectFromBitmap(bitmap, 0 )
151
+
152
+ BarcodeResultRepository .barcodeResultBundle =
153
+ result?.let { BarcodeResultBundle (it, null , null ) }
154
+
155
+ startActivity(Intent (this , BarcodeResultActivity ::class .java))
156
+ }
150
157
}
151
158
}
152
159
}
153
- }
154
-
155
160
156
161
private fun showLicenseDialog () {
157
162
if (supportFragmentManager.findFragmentByTag(ErrorFragment .NAME ) == null ) {
@@ -171,5 +176,4 @@ class MainActivity : AppCompatActivity() {
171
176
}
172
177
return bitmap
173
178
}
174
-
175
179
}
0 commit comments