diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7abaec4..b33483c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,14 +1,14 @@ [versions] -scan-engine = "2.0.1" +scan-engine = "2.0.2" kotlin = "2.2.0" agp = "8.11.1" compose = "1.8.1" atomicfu = "0.28.0" -camera-core = "1.4.2" -camera-extensions = "1.4.2" -camera-lifecycle = "1.4.2" -camera-view = "1.4.2" +camera-core = "1.5.0" +camera-extensions = "1.5.0" +camera-lifecycle = "1.5.0" +camera-view = "1.5.0" mlKit = "17.3.0" playServicesMlkit = "18.3.1" diff --git a/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/CameraController.android.kt b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/CameraController.android.kt index 4c3b6e4..85095ac 100644 --- a/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/CameraController.android.kt +++ b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/CameraController.android.kt @@ -19,6 +19,7 @@ import com.google.mlkit.vision.barcode.BarcodeScanning import com.google.mlkit.vision.barcode.common.Barcode import com.google.mlkit.vision.common.InputImage import de.tillhub.scanengine.camera.common.CameraProvider +import de.tillhub.scanengine.camera.common.Manufacturer import java.util.concurrent.Executor /** @@ -87,6 +88,12 @@ internal actual class CameraController( .setResolutionSelector(createResolutionSelector()) .build() .also { + previewView.apply { + if (Manufacturer.matches(Manufacturer.VERIFONE)) { + scaleX = -1f + scaleY = -1f + } + } it.surfaceProvider = previewView.surfaceProvider } diff --git a/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/common/Manufacturer.kt b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/common/Manufacturer.kt new file mode 100644 index 0000000..df743c5 --- /dev/null +++ b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/common/Manufacturer.kt @@ -0,0 +1,14 @@ +package de.tillhub.scanengine.camera.common + +import android.os.Build + +internal enum class Manufacturer(open val value: String) { + VERIFONE("Verifone"), + OTHER("OTHER"), + ; + + companion object { + fun get(): Manufacturer = entries.firstOrNull { it.value == Build.MANUFACTURER } ?: OTHER + fun matches(value: Manufacturer): Boolean = get() == value + } +} diff --git a/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/contract/legacy/CameraScanContract.kt b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/contract/legacy/CameraScanContract.kt new file mode 100644 index 0000000..b644035 --- /dev/null +++ b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/contract/legacy/CameraScanContract.kt @@ -0,0 +1,36 @@ +package de.tillhub.scanengine.camera.contract.legacy + +import android.app.Activity +import android.content.Context +import android.content.Intent +import androidx.activity.result.contract.ActivityResultContract +import de.tillhub.scanengine.camera.ui.CameraScanActivity +import de.tillhub.scanengine.data.ScannerEvent + +class CameraScanContract : ActivityResultContract() { + override fun createIntent( + context: Context, + input: String?, + ): Intent = Intent(context, CameraScanActivity::class.java).apply { + input?.let { + putExtra(CameraScanActivity.SCAN_KEY, it) + } + } + + override fun parseResult( + resultCode: Int, + intent: Intent?, + ): ScannerEvent { + val resultData = intent?.extras?.getString(CameraScanActivity.DATA_KEY) + val scanKey = intent?.extras?.getString(CameraScanActivity.SCAN_KEY) + + return if (resultCode == Activity.RESULT_OK && !resultData.isNullOrEmpty()) { + ScannerEvent.ScanResult( + value = resultData, + scanKey = scanKey, + ) + } else { + ScannerEvent.Camera.Canceled + } + } +} diff --git a/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/ui/CameraScanActivity.kt b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/ui/CameraScanActivity.kt index 4ba4e24..6426ace 100644 --- a/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/ui/CameraScanActivity.kt +++ b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/ui/CameraScanActivity.kt @@ -14,6 +14,9 @@ class CameraScanActivity : ComponentActivity() { val resultIntent = Intent().apply { putExtra(DATA_KEY, barcode) + intent.getStringExtra(SCAN_KEY)?.let { + putExtra(SCAN_KEY, barcode) + } } setResult(RESULT_OK, resultIntent) finish() @@ -28,5 +31,6 @@ class CameraScanActivity : ComponentActivity() { companion object { const val DATA_KEY = "scanned_data" + const val SCAN_KEY = "scan_key" } }