From 15b22ddf56fb8a0605165bd0dc695a030407a112 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 7 Oct 2025 11:00:35 +0200 Subject: [PATCH 1/4] [HOTFIX] applyed legacy fix for verifone --- gradle/libs.versions.toml | 8 ++++---- .../scanengine/camera/CameraController.android.kt | 7 +++++++ .../scanengine/camera/common/Manufacturer.kt | 13 +++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/common/Manufacturer.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7abaec4..9246e0f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,10 +5,10 @@ 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..0c896ea --- /dev/null +++ b/scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/common/Manufacturer.kt @@ -0,0 +1,13 @@ +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 + } +} \ No newline at end of file From 7482c6adc8fba8e2d1e2ef5b0f7dd234cebd2922 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 7 Oct 2025 11:12:42 +0200 Subject: [PATCH 2/4] applied spotless fix --- .../de/tillhub/scanengine/camera/common/Manufacturer.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 index 0c896ea..df743c5 100644 --- 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 @@ -4,10 +4,11 @@ import android.os.Build internal enum class Manufacturer(open val value: String) { VERIFONE("Verifone"), - OTHER("OTHER"); + OTHER("OTHER"), + ; companion object { fun get(): Manufacturer = entries.firstOrNull { it.value == Build.MANUFACTURER } ?: OTHER fun matches(value: Manufacturer): Boolean = get() == value } -} \ No newline at end of file +} From 8f75e64bcfaa1aa65c1501a51f2580d9ff729713 Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 17 Feb 2026 12:57:38 +0100 Subject: [PATCH 3/4] added legacy contract to work with old android implementation --- gradle/libs.versions.toml | 2 +- .../contract/legacy/CameraScanContract.kt | 36 +++++++++++++++++++ .../camera/ui/CameraScanActivity.kt | 4 +++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 scan-engine/src/androidMain/kotlin/de/tillhub/scanengine/camera/contract/legacy/CameraScanContract.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9246e0f..b33483c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -scan-engine = "2.0.1" +scan-engine = "2.0.2" kotlin = "2.2.0" agp = "8.11.1" compose = "1.8.1" 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..7cc5d52 --- /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 + } + } +} \ No newline at end of file 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" } } From 68f58583a569c9dd8e1fb533f3570c12cdef2b6b Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 17 Feb 2026 13:07:12 +0100 Subject: [PATCH 4/4] spotless apply --- .../scanengine/camera/contract/legacy/CameraScanContract.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 index 7cc5d52..b644035 100644 --- 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 @@ -10,7 +10,7 @@ import de.tillhub.scanengine.data.ScannerEvent class CameraScanContract : ActivityResultContract() { override fun createIntent( context: Context, - input: String? + input: String?, ): Intent = Intent(context, CameraScanActivity::class.java).apply { input?.let { putExtra(CameraScanActivity.SCAN_KEY, it) @@ -19,7 +19,7 @@ class CameraScanContract : ActivityResultContract() { override fun parseResult( resultCode: Int, - intent: Intent? + intent: Intent?, ): ScannerEvent { val resultData = intent?.extras?.getString(CameraScanActivity.DATA_KEY) val scanKey = intent?.extras?.getString(CameraScanActivity.SCAN_KEY) @@ -33,4 +33,4 @@ class CameraScanContract : ActivityResultContract() { ScannerEvent.Camera.Canceled } } -} \ No newline at end of file +}