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() } }