68 lines
2.4 KiB
Kotlin
68 lines
2.4 KiB
Kotlin
package uts.sdk.modules.masCodeScan
|
|
|
|
import com.google.mlkit.vision.barcode.common.Barcode
|
|
|
|
object SymbologyUtil {
|
|
fun nameOf(format: Int): String = when (format) {
|
|
Barcode.FORMAT_QR_CODE -> "QR_CODE"
|
|
Barcode.FORMAT_EAN_13 -> "EAN_13"
|
|
Barcode.FORMAT_EAN_8 -> "EAN_8"
|
|
Barcode.FORMAT_CODE_128 -> "CODE_128"
|
|
Barcode.FORMAT_CODE_39 -> "CODE_39"
|
|
Barcode.FORMAT_CODE_93 -> "CODE_93"
|
|
Barcode.FORMAT_CODABAR -> "CODABAR"
|
|
Barcode.FORMAT_DATA_MATRIX -> "DATA_MATRIX"
|
|
Barcode.FORMAT_UPC_A -> "UPC_A"
|
|
Barcode.FORMAT_UPC_E -> "UPC_E"
|
|
Barcode.FORMAT_ITF -> "ITF"
|
|
Barcode.FORMAT_PDF417 -> "PDF417"
|
|
Barcode.FORMAT_AZTEC -> "AZTEC"
|
|
else -> "UNKNOWN"
|
|
}
|
|
|
|
fun hasSupportedFormat(csv: String?): Boolean {
|
|
if (csv.isNullOrBlank()) return true
|
|
return csv.split(',').any { tokenToFormat(it.trim().uppercase()) != null }
|
|
}
|
|
|
|
fun parseFormatList(csv: String?): IntArray {
|
|
if (csv.isNullOrBlank()) {
|
|
return intArrayOf(Barcode.FORMAT_ALL_FORMATS)
|
|
}
|
|
val mapped = csv.split(',')
|
|
.map { it.trim().uppercase() }
|
|
.mapNotNull { tokenToFormat(it) }
|
|
.distinct()
|
|
if (mapped.isEmpty()) {
|
|
return intArrayOf(Barcode.FORMAT_ALL_FORMATS)
|
|
}
|
|
// ALL 与具体码制混用时以全格式为准,避免 ML Kit 参数异常
|
|
if (mapped.contains(Barcode.FORMAT_ALL_FORMATS)) {
|
|
return intArrayOf(Barcode.FORMAT_ALL_FORMATS)
|
|
}
|
|
return mapped.toIntArray()
|
|
}
|
|
|
|
private fun tokenToFormat(token: String): Int? = when (token) {
|
|
"QR_CODE", "QR" -> Barcode.FORMAT_QR_CODE
|
|
"EAN_13" -> Barcode.FORMAT_EAN_13
|
|
"EAN_8" -> Barcode.FORMAT_EAN_8
|
|
"CODE_128" -> Barcode.FORMAT_CODE_128
|
|
"CODE_39" -> Barcode.FORMAT_CODE_39
|
|
"CODE_93" -> Barcode.FORMAT_CODE_93
|
|
"CODABAR" -> Barcode.FORMAT_CODABAR
|
|
"DATA_MATRIX" -> Barcode.FORMAT_DATA_MATRIX
|
|
"UPC_A" -> Barcode.FORMAT_UPC_A
|
|
"UPC_E" -> Barcode.FORMAT_UPC_E
|
|
"ITF" -> Barcode.FORMAT_ITF
|
|
"PDF417" -> Barcode.FORMAT_PDF417
|
|
"AZTEC" -> Barcode.FORMAT_AZTEC
|
|
"ALL", "FORMAT_ALL_FORMATS" -> Barcode.FORMAT_ALL_FORMATS
|
|
else -> null
|
|
}
|
|
|
|
fun isDecodedText(barcode: Barcode): Boolean {
|
|
return !barcode.rawValue.isNullOrBlank()
|
|
}
|
|
}
|