diff options
4 files changed, 45 insertions, 5 deletions
diff --git a/core/src/main/java/com/google/zxing/common/DecoderResult.java b/core/src/main/java/com/google/zxing/common/DecoderResult.java index db2e7e014..b0c3a66cb 100644 --- a/core/src/main/java/com/google/zxing/common/DecoderResult.java +++ b/core/src/main/java/com/google/zxing/common/DecoderResult.java @@ -38,12 +38,13 @@ public final class DecoderResult { private final int structuredAppendParity; private final int structuredAppendSequenceNumber; private final int symbologyModifier; + private final int version; /* Добавлено: версия QR-кода */ public DecoderResult(byte[] rawBytes, String text, List<byte[]> byteSegments, String ecLevel) { - this(rawBytes, text, byteSegments, ecLevel, -1, -1, 0); + this(rawBytes, text, byteSegments, ecLevel, -1, -1, 0, -1); } public DecoderResult(byte[] rawBytes, @@ -51,7 +52,7 @@ public final class DecoderResult { List<byte[]> byteSegments, String ecLevel, int symbologyModifier) { - this(rawBytes, text, byteSegments, ecLevel, -1, -1, symbologyModifier); + this(rawBytes, text, byteSegments, ecLevel, -1, -1, symbologyModifier, -1); } public DecoderResult(byte[] rawBytes, @@ -60,7 +61,7 @@ public final class DecoderResult { String ecLevel, int saSequence, int saParity) { - this(rawBytes, text, byteSegments, ecLevel, saSequence, saParity, 0); + this(rawBytes, text, byteSegments, ecLevel, saSequence, saParity, 0, -1); } public DecoderResult(byte[] rawBytes, @@ -70,6 +71,17 @@ public final class DecoderResult { int saSequence, int saParity, int symbologyModifier) { + this(rawBytes, text, byteSegments, ecLevel, saSequence, saParity, symbologyModifier, -1); + } + + public DecoderResult(byte[] rawBytes, + String text, + List<byte[]> byteSegments, + String ecLevel, + int saSequence, + int saParity, + int symbologyModifier, + int version) { this.rawBytes = rawBytes; this.numBits = rawBytes == null ? 0 : 8 * rawBytes.length; this.text = text; @@ -78,6 +90,7 @@ public final class DecoderResult { this.structuredAppendParity = saParity; this.structuredAppendSequenceNumber = saSequence; this.symbologyModifier = symbologyModifier; + this.version = version; } /** @@ -173,4 +186,12 @@ public final class DecoderResult { return symbologyModifier; } + /** + * @return QR code version (1-40), or -1 if not applicable + * @since 3.5.4-custom + */ + public int getVersion() { + return version; + } + } diff --git a/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java b/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java index 9a2b649df..a66612bad 100644 --- a/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java +++ b/core/src/main/java/com/google/zxing/qrcode/QRCodeReader.java @@ -101,6 +101,13 @@ public class QRCodeReader implements Reader { } result.putMetadata(ResultMetadataType.ERRORS_CORRECTED, decoderResult.getErrorsCorrected()); result.putMetadata(ResultMetadataType.SYMBOLOGY_IDENTIFIER, "]Q" + decoderResult.getSymbologyModifier()); + + // KXLAB PATCH: Add QR code version to metadata + int qrVersion = decoderResult.getVersion(); + if (qrVersion != -1) { + result.putMetadata(ResultMetadataType.OTHER, decoderResult); // full DecoderResult + } + return result; } diff --git a/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java b/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java index e23ca545b..5f5ee02e5 100644 --- a/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java +++ b/core/src/main/java/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java @@ -166,7 +166,8 @@ final class DecodedBitStreamParser { ecLevel == null ? null : ecLevel.toString(), symbolSequence, parityData, - symbologyModifier); + symbologyModifier, + version.getVersionNumber()); // Добавляем версию } /** diff --git a/core/src/main/java/com/google/zxing/qrcode/decoder/Decoder.java b/core/src/main/java/com/google/zxing/qrcode/decoder/Decoder.java index 65c286853..f39336f5d 100644 --- a/core/src/main/java/com/google/zxing/qrcode/decoder/Decoder.java +++ b/core/src/main/java/com/google/zxing/qrcode/decoder/Decoder.java @@ -159,7 +159,18 @@ public final class Decoder { // Decode the contents of that stream of bytes DecoderResult result = DecodedBitStreamParser.decode(resultBytes, version, ecLevel, hints); result.setErrorsCorrected(errorsCorrected); - return result; + + // Создаем новый DecoderResult с информацией о версии + return new DecoderResult( + resultBytes, + result.getText(), + result.getByteSegments(), + result.getECLevel(), + result.getStructuredAppendSequenceNumber(), + result.getStructuredAppendParity(), + result.getSymbologyModifier(), + version.getVersionNumber() // Добавляем версию + ); } /** |
