Skip to content

Commit 3fe34bf

Browse files
authored
Merge pull request #17 from tillhub/develop
v1.4.5
2 parents 77e0342 + b9bc79e commit 3fe34bf

File tree

10 files changed

+67
-225
lines changed

10 files changed

+67
-225
lines changed

sample/src/main/java/de/tillhub/scanengine/sample/MainActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ class MainActivity : ComponentActivity() {
2828
private val scanEngine by lazy { ScanEngine.getInstance(applicationContext) }
2929
private lateinit var scanner: Scanner
3030
private var scanCode = mutableStateOf("")
31+
3132
override fun onCreate(savedInstanceState: Bundle?) {
3233
super.onCreate(savedInstanceState)
33-
scanner = scanEngine.newCameraScanner(this).build(this.lifecycle, this.savedStateRegistry)
34+
scanner = scanEngine.newCameraScanner(this)
3435
setContent {
3536
TillhubScanEngineTheme {
3637
Surface(

scan-engine/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ afterEvaluate {
8080
create<MavenPublication>("scan-engine") {
8181
groupId = "de.tillhub.scanengine"
8282
artifactId = "scan-engine"
83-
version = "1.4.4"
83+
version = "1.4.5"
8484

8585
from(components.getByName("release"))
8686
}

scan-engine/src/main/java/de/tillhub/scanengine/ScanEngine.kt

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,34 @@ package de.tillhub.scanengine
22

33
import SingletonHolder
44
import android.content.Context
5-
import androidx.activity.ComponentActivity
6-
import androidx.lifecycle.Lifecycle
7-
import androidx.savedstate.SavedStateRegistry
5+
import androidx.activity.result.ActivityResultCaller
86
import de.tillhub.scanengine.barcode.BarcodeScanner
97
import de.tillhub.scanengine.barcode.DefaultBarcodeScanner
108
import de.tillhub.scanengine.barcode.SunmiBarcodeScanner
119
import de.tillhub.scanengine.default.DefaultScanner
12-
import de.tillhub.scanengine.helper.ManagerBuilder
1310
import de.tillhub.scanengine.sunmi.SunmiScanner
14-
import kotlinx.coroutines.flow.MutableSharedFlow
15-
import kotlinx.coroutines.flow.SharedFlow
11+
import kotlinx.coroutines.flow.Flow
12+
import kotlinx.coroutines.flow.MutableStateFlow
13+
import kotlinx.coroutines.flow.drop
1614

1715
class ScanEngine private constructor(context: Context) {
1816

19-
private val mutableScanEvents = MutableSharedFlow<ScanEvent>(extraBufferCapacity = 1)
20-
21-
fun observeScannerResults(): SharedFlow<ScanEvent> = mutableScanEvents
22-
23-
fun newCameraScanner(activity: ComponentActivity): ManagerBuilder<Scanner> {
24-
return object : ManagerBuilder<Scanner> {
25-
override fun build(lifecycle: Lifecycle, savedStateRegistry: SavedStateRegistry): Scanner {
26-
return when (ScannerManufacturer.get()) {
27-
ScannerManufacturer.SUNMI -> SunmiScanner(
28-
activity.activityResultRegistry,
29-
savedStateRegistry,
30-
mutableScanEvents
31-
)
32-
33-
ScannerManufacturer.OTHER -> DefaultScanner(
34-
activity.activityResultRegistry,
35-
savedStateRegistry,
36-
mutableScanEvents
37-
)
38-
}.also {
39-
lifecycle.addObserver(it)
40-
}
41-
}
17+
private val mutableScanEvents = MutableStateFlow<ScanEvent>(ScanEvent.Idle)
18+
fun observeScannerResults(): Flow<ScanEvent> = mutableScanEvents.drop(1)
19+
20+
fun newCameraScanner(
21+
resultCaller: ActivityResultCaller,
22+
): Scanner {
23+
return when (ScannerManufacturer.get()) {
24+
ScannerManufacturer.SUNMI -> SunmiScanner(
25+
resultCaller,
26+
mutableScanEvents
27+
)
28+
29+
ScannerManufacturer.OTHER -> DefaultScanner(
30+
resultCaller,
31+
mutableScanEvents
32+
)
4233
}
4334
}
4435

@@ -48,6 +39,5 @@ class ScanEngine private constructor(context: Context) {
4839
ScannerManufacturer.OTHER -> DefaultBarcodeScanner(context, mutableScanEvents)
4940
}
5041
}
51-
5242
companion object : SingletonHolder<ScanEngine, Context>(::ScanEngine)
5343
}

scan-engine/src/main/java/de/tillhub/scanengine/ScanEvent.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ sealed class ScanEvent {
66
val scanKey: String? = null
77
) : ScanEvent()
88

9-
data object InProgress : ScanEvent()
9+
data class InProgress(val scanKey: String?) : ScanEvent()
1010

1111
data object Canceled : ScanEvent()
12+
13+
data object Idle : ScanEvent()
1214
}
Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
11
package de.tillhub.scanengine
22

3-
import androidx.lifecycle.DefaultLifecycleObserver
4-
import androidx.savedstate.SavedStateRegistry
53
import kotlinx.coroutines.flow.SharedFlow
64

7-
interface Scanner : DefaultLifecycleObserver, SavedStateRegistry.SavedStateProvider {
5+
interface Scanner {
86
fun observeScannerResults(): SharedFlow<ScanEvent>
97

108
fun startCameraScanner(scanKey: String? = null)
11-
12-
companion object {
13-
const val PROVIDER = "scanner"
14-
const val SCAN_KEY = "scan_key"
15-
const val CAMERA_SCANNER_KEY = "CAMERA_SCANNER_KEY"
16-
}
179
}

scan-engine/src/main/java/de/tillhub/scanengine/ScannerImpl.kt

Lines changed: 0 additions & 37 deletions
This file was deleted.
Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,36 @@
11
package de.tillhub.scanengine.default
22

33
import DefaultScannerActivityContract
4+
import androidx.activity.result.ActivityResultCaller
45
import androidx.activity.result.ActivityResultLauncher
5-
import androidx.activity.result.ActivityResultRegistry
6-
import androidx.lifecycle.LifecycleOwner
7-
import androidx.savedstate.SavedStateRegistry
86
import de.tillhub.scanengine.ScanEvent
97
import de.tillhub.scanengine.Scanner
10-
import de.tillhub.scanengine.ScannerImpl
11-
import kotlinx.coroutines.flow.MutableSharedFlow
8+
import kotlinx.coroutines.flow.MutableStateFlow
9+
import kotlinx.coroutines.flow.SharedFlow
1210

1311
class DefaultScanner(
14-
private val activityResultRegistry: ActivityResultRegistry,
15-
savedStateRegistry: SavedStateRegistry,
16-
mutableScanEvents: MutableSharedFlow<ScanEvent>,
17-
) : ScannerImpl(savedStateRegistry, mutableScanEvents) {
12+
resultCaller: ActivityResultCaller,
13+
private val mutableScanEvents: MutableStateFlow<ScanEvent>,
14+
) : Scanner {
1815

19-
private lateinit var scannerLauncher: ActivityResultLauncher<String>
16+
private val scannerLauncher: ActivityResultLauncher<String> =
17+
resultCaller.registerForActivityResult(DefaultScannerActivityContract()) { result ->
18+
when (result) {
19+
ScanEvent.Canceled -> mutableScanEvents.tryEmit(result)
20+
is ScanEvent.Success -> {
21+
val scanKey = (mutableScanEvents.value as? ScanEvent.InProgress)?.scanKey
22+
mutableScanEvents.tryEmit(result.copy(scanKey = scanKey))
23+
}
2024

21-
override fun onCreate(owner: LifecycleOwner) {
22-
super.onCreate(owner)
23-
scannerLauncher = activityResultRegistry.register(
24-
Scanner.CAMERA_SCANNER_KEY,
25-
owner,
26-
DefaultScannerActivityContract()
27-
) {
28-
when (it) {
29-
ScanEvent.Canceled -> mutableScanEvents.tryEmit(it)
30-
is ScanEvent.Success -> mutableScanEvents.tryEmit(it.copy(scanKey = scanKey))
31-
ScanEvent.InProgress -> Unit
25+
is ScanEvent.InProgress,
26+
ScanEvent.Idle -> Unit
3227
}
3328
}
34-
}
3529

3630
override fun startCameraScanner(scanKey: String?) {
37-
mutableScanEvents.tryEmit(ScanEvent.InProgress)
38-
this.scanKey = scanKey
31+
mutableScanEvents.tryEmit(ScanEvent.InProgress(scanKey))
3932
scannerLauncher.launch(scanKey)
4033
}
34+
35+
override fun observeScannerResults(): SharedFlow<ScanEvent> = mutableScanEvents
4136
}

scan-engine/src/main/java/de/tillhub/scanengine/helper/ManagerBuilder.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

scan-engine/src/main/java/de/tillhub/scanengine/sunmi/SunmiScanner.kt

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,41 @@
11
package de.tillhub.scanengine.sunmi
22

33
import android.content.Intent
4+
import androidx.activity.result.ActivityResultCaller
45
import androidx.activity.result.ActivityResultLauncher
5-
import androidx.activity.result.ActivityResultRegistry
6-
import androidx.lifecycle.LifecycleOwner
7-
import androidx.savedstate.SavedStateRegistry
86
import de.tillhub.scanengine.ScanEvent
9-
import de.tillhub.scanengine.Scanner.Companion.CAMERA_SCANNER_KEY
10-
import de.tillhub.scanengine.ScannerImpl
11-
import kotlinx.coroutines.flow.MutableSharedFlow
7+
import de.tillhub.scanengine.Scanner
8+
import kotlinx.coroutines.flow.MutableStateFlow
9+
import kotlinx.coroutines.flow.SharedFlow
1210

1311
class SunmiScanner(
14-
private val activityResultRegistry: ActivityResultRegistry,
15-
savedStateRegistry: SavedStateRegistry,
16-
mutableScanEvents: MutableSharedFlow<ScanEvent>,
17-
) : ScannerImpl(savedStateRegistry, mutableScanEvents) {
12+
resultCaller: ActivityResultCaller,
13+
private val mutableScanEvents: MutableStateFlow<ScanEvent>,
14+
) : Scanner {
1815

19-
private lateinit var scannerLauncher: ActivityResultLauncher<Intent>
16+
private val scannerLauncher: ActivityResultLauncher<Intent> =
17+
resultCaller.registerForActivityResult(SunmiScannerActivityContract()) { result ->
18+
result.map { event ->
19+
when (event) {
20+
ScanEvent.Canceled -> mutableScanEvents.tryEmit(event)
21+
is ScanEvent.Success -> {
22+
val scanKey = (mutableScanEvents.value as? ScanEvent.InProgress)?.scanKey
23+
mutableScanEvents.tryEmit(event.copy(scanKey = scanKey))
24+
}
2025

21-
override fun onCreate(owner: LifecycleOwner) {
22-
super.onCreate(owner)
23-
scannerLauncher = activityResultRegistry.register(
24-
CAMERA_SCANNER_KEY,
25-
owner,
26-
SunmiScannerActivityContract()
27-
) { result ->
28-
result.map {
29-
when (it) {
30-
ScanEvent.Canceled -> mutableScanEvents.tryEmit(it)
31-
is ScanEvent.Success -> mutableScanEvents.tryEmit(it.copy(scanKey = scanKey))
32-
ScanEvent.InProgress -> Unit
26+
is ScanEvent.InProgress,
27+
ScanEvent.Idle -> Unit
3328
}
3429
}
3530
}
36-
}
3731

3832
override fun startCameraScanner(scanKey: String?) {
39-
mutableScanEvents.tryEmit(ScanEvent.InProgress)
40-
this.scanKey = scanKey
33+
mutableScanEvents.tryEmit(ScanEvent.InProgress(scanKey))
4134
scannerLauncher.launch(scanIntent())
4235
}
4336

37+
override fun observeScannerResults(): SharedFlow<ScanEvent> = mutableScanEvents
38+
4439
sealed class ScanCodeType {
4540
data class Type(val code: String) : ScanCodeType()
4641
data object Unknown : ScanCodeType()

scan-engine/src/test/java/de/tillhub/scanengine/DefaultScannerTest.kt

Lines changed: 0 additions & 88 deletions
This file was deleted.

0 commit comments

Comments
 (0)