From 3ef6f874b8062ab9534347a610bee2c152ac0eef Mon Sep 17 00:00:00 2001 From: Markus Fisch Date: Mon, 1 Jun 2026 23:55:16 +0200 Subject: [PATCH] Skip parsing data if it's a tracking link If we already know the data contains a tracking link we don't need to parse the data for something else. Unfortunately, the Deutsche Post Matrixcode stamp also parses as an IDL (International Driver License). --- .../binaryeye/activity/DecodeActivity.kt | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/DecodeActivity.kt b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/DecodeActivity.kt index f6e27c2e..7387beea 100644 --- a/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/DecodeActivity.kt +++ b/app/src/main/kotlin/de/markusfisch/android/binaryeye/activity/DecodeActivity.kt @@ -300,8 +300,12 @@ class DecodeActivity : AbstractBaseActivity() { } private fun updateViews(text: String, bytes: ByteArray) { - dataView.fillDataView(text, bytes, text != scan.text) - stampView.setTrackingLink(bytes, format) + dataView.fillDataView( + text, + bytes, + text != scan.text, + stampView.setTrackingLink(bytes, format) + ) characterCountView.text = resources.getQuantityString( R.plurals.character_count, bytes.size, @@ -367,7 +371,8 @@ class DecodeActivity : AbstractBaseActivity() { private fun LinearLayout.fillDataView( text: String, bytes: ByteArray, - isEditing: Boolean + isEditing: Boolean, + isParsed: Boolean ) { val items = mutableListOf() when (prefs.showChecksum) { @@ -377,7 +382,9 @@ class DecodeActivity : AbstractBaseActivity() { "SHA256" -> items.add(Field(R.string.sha256, bytes.sha256().toHexString().fold())) } val count = items.count() - val parsedDataTitleResId = parseData(items, text, bytes) + val parsedDataTitleResId = if (isParsed) 0 else { + parseData(items, text, bytes) + } if (items.count() > count) { lastParsedDataItems = items lastParsedDataTitleResId = parsedDataTitleResId @@ -926,30 +933,35 @@ private fun hexDump(bytes: ByteArray, charsPerLine: Int = 33): String { private fun Int.positiveToString() = if (this > -1) this.toString() else "" -private fun TextView.setTrackingLink(bytes: ByteArray, format: String) { - val trackingLink = generateDpTrackingLink(bytes, format) - if (trackingLink != null) { +private fun TextView.setTrackingLink( + bytes: ByteArray, + format: String +): Boolean { + val trackingLink = bytes.generateDpTrackingLink(format) + return if (trackingLink != null) { visibility = View.VISIBLE text = trackingLink.fromHtml() isClickable = true movementMethod = LinkMovementMethod.getInstance() + true } else { visibility = View.GONE + false } } -private fun generateDpTrackingLink(bytes: ByteArray, format: String): String? { +private fun ByteArray.generateDpTrackingLink(format: String): String? { // Check for Deutsche Post Matrixcode stamp. var isStamp = false - var rawData = bytes + var rawData = this if (format == ZxingCpp.BarcodeFormat.DataMatrix.name && - bytes.toString(Charsets.ISO_8859_1).startsWith("DEA5") + toString(Charsets.ISO_8859_1).startsWith("DEA5") ) { - if (bytes.size == 47) { + if (size == 47) { isStamp = true - } else if (bytes.size > 47) { + } else if (size > 47) { // Transform back to original data. - rawData = bytes.toString(Charsets.UTF_8).toByteArray( + rawData = toString(Charsets.UTF_8).toByteArray( Charsets.ISO_8859_1 ) if (rawData.size == 47) {