From 45782355dbc189fc3b57247e271ba2e998b5083e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Sat, 5 Sep 2015 22:14:18 -0400 Subject: [PATCH] Update zxing-core to 3.2.1 --- F-Droid/build.gradle | 2 +- extern/zxing-core/.classpath | 9 ----- extern/zxing-core/.project | 33 ------------------- extern/zxing-core/AndroidManifest.xml | 5 --- extern/zxing-core/project.properties | 7 ---- .../com/google/zxing/ChecksumException.java | 17 ++++------ .../java/com/google/zxing/EncodeHintType.java | 3 +- .../com/google/zxing/FormatException.java | 17 ++++------ .../com/google/zxing/NotFoundException.java | 7 ++-- .../com/google/zxing/ReaderException.java | 4 ++- .../google/zxing/aztec/encoder/Encoder.java | 2 +- .../zxing/aztec/encoder/HighLevelEncoder.java | 14 ++++---- .../zxing/client/result/URIParsedResult.java | 8 ++--- .../com/google/zxing/common/BitMatrix.java | 23 +++++++++---- .../zxing/datamatrix/DataMatrixWriter.java | 2 +- .../com/google/zxing/oned/Code93Reader.java | 14 ++++++-- .../java/com/google/zxing/oned/ITFReader.java | 3 -- .../oned/rss/expanded/RSSExpandedReader.java | 12 +++---- .../com/google/zxing/pdf417/PDF417Writer.java | 18 +++++++--- .../zxing/pdf417/decoder/BoundingBox.java | 2 -- .../encoder/PDF417HighLevelEncoder.java | 26 +++++++-------- .../zxing/qrcode/detector/Detector.java | 2 +- 22 files changed, 92 insertions(+), 138 deletions(-) delete mode 100644 extern/zxing-core/.classpath delete mode 100644 extern/zxing-core/.project delete mode 100644 extern/zxing-core/AndroidManifest.xml delete mode 100644 extern/zxing-core/project.properties diff --git a/F-Droid/build.gradle b/F-Droid/build.gradle index 521327aea..cf501109f 100644 --- a/F-Droid/build.gradle +++ b/F-Droid/build.gradle @@ -22,7 +22,7 @@ if ( !hasProperty( 'sourceDeps' ) ) { compile 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4' - compile 'com.google.zxing:core:3.2.0' + compile 'com.google.zxing:core:3.2.1' compile 'eu.chainfire:libsuperuser:1.0.0.201504231659' compile 'cc.mvdan.accesspoint:library:0.1.1' diff --git a/extern/zxing-core/.classpath b/extern/zxing-core/.classpath deleted file mode 100644 index 6fcaabf36..000000000 --- a/extern/zxing-core/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/extern/zxing-core/.project b/extern/zxing-core/.project deleted file mode 100644 index c349cdf5a..000000000 --- a/extern/zxing-core/.project +++ /dev/null @@ -1,33 +0,0 @@ - - - zxing-core - - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/extern/zxing-core/AndroidManifest.xml b/extern/zxing-core/AndroidManifest.xml deleted file mode 100644 index 021edce5a..000000000 --- a/extern/zxing-core/AndroidManifest.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - diff --git a/extern/zxing-core/project.properties b/extern/zxing-core/project.properties deleted file mode 100644 index 9da7c8431..000000000 --- a/extern/zxing-core/project.properties +++ /dev/null @@ -1,7 +0,0 @@ -# Dummy value -target=android-19 -android.library=true - -source.dir=src/main/java -java.target=1.7 -java.source=1.7 diff --git a/extern/zxing-core/src/main/java/com/google/zxing/ChecksumException.java b/extern/zxing-core/src/main/java/com/google/zxing/ChecksumException.java index 77bb908d2..c5acbe3ee 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/ChecksumException.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/ChecksumException.java @@ -24,7 +24,10 @@ package com.google.zxing; */ public final class ChecksumException extends ReaderException { - private static final ChecksumException instance = new ChecksumException(); + private static final ChecksumException INSTANCE = new ChecksumException(); + static { + INSTANCE.setStackTrace(NO_TRACE); // since it's meaningless + } private ChecksumException() { // do nothing @@ -35,18 +38,10 @@ public final class ChecksumException extends ReaderException { } public static ChecksumException getChecksumInstance() { - if (isStackTrace) { - return new ChecksumException(); - } else { - return instance; - } + return isStackTrace ? new ChecksumException() : INSTANCE; } public static ChecksumException getChecksumInstance(Throwable cause) { - if (isStackTrace) { - return new ChecksumException(cause); - } else { - return instance; - } + return isStackTrace ? new ChecksumException(cause) : INSTANCE; } } \ No newline at end of file diff --git a/extern/zxing-core/src/main/java/com/google/zxing/EncodeHintType.java b/extern/zxing-core/src/main/java/com/google/zxing/EncodeHintType.java index b0bbd77a6..ff97b21aa 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/EncodeHintType.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/EncodeHintType.java @@ -27,7 +27,8 @@ public enum EncodeHintType { * Specifies what degree of error correction to use, for example in QR Codes. * Type depends on the encoder. For example for QR codes it's type * {@link com.google.zxing.qrcode.decoder.ErrorCorrectionLevel ErrorCorrectionLevel}. - * For Aztec it is of type {@link Integer}, representing the minimal percentage of error correction words. + * For Aztec it is of type {@link Integer}, representing the minimal percentage of error correction words. + * For PDF417 it is of type {@link Integer}, valid values being 0 to 8. * Note: an Aztec symbol should have a minimum of 25% EC words. */ ERROR_CORRECTION, diff --git a/extern/zxing-core/src/main/java/com/google/zxing/FormatException.java b/extern/zxing-core/src/main/java/com/google/zxing/FormatException.java index b169bbc99..b046b822d 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/FormatException.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/FormatException.java @@ -25,7 +25,10 @@ package com.google.zxing; */ public final class FormatException extends ReaderException { - private static final FormatException instance = new FormatException(); + private static final FormatException INSTANCE = new FormatException(); + static { + INSTANCE.setStackTrace(NO_TRACE); // since it's meaningless + } private FormatException() { } @@ -35,18 +38,10 @@ public final class FormatException extends ReaderException { } public static FormatException getFormatInstance() { - if (isStackTrace) { - return new FormatException(); - } else { - return instance; - } + return isStackTrace ? new FormatException() : INSTANCE; } public static FormatException getFormatInstance(Throwable cause) { - if (isStackTrace) { - return new FormatException(cause); - } else { - return instance; - } + return isStackTrace ? new FormatException(cause) : INSTANCE; } } \ No newline at end of file diff --git a/extern/zxing-core/src/main/java/com/google/zxing/NotFoundException.java b/extern/zxing-core/src/main/java/com/google/zxing/NotFoundException.java index dedab8dfc..863526af4 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/NotFoundException.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/NotFoundException.java @@ -24,14 +24,17 @@ package com.google.zxing; */ public final class NotFoundException extends ReaderException { - private static final NotFoundException instance = new NotFoundException(); + private static final NotFoundException INSTANCE = new NotFoundException(); + static { + INSTANCE.setStackTrace(NO_TRACE); // since it's meaningless + } private NotFoundException() { // do nothing } public static NotFoundException getNotFoundInstance() { - return instance; + return INSTANCE; } } \ No newline at end of file diff --git a/extern/zxing-core/src/main/java/com/google/zxing/ReaderException.java b/extern/zxing-core/src/main/java/com/google/zxing/ReaderException.java index 2253d657d..5f2c12e43 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/ReaderException.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/ReaderException.java @@ -26,7 +26,9 @@ package com.google.zxing; public abstract class ReaderException extends Exception { // disable stack traces when not running inside test units - protected static final boolean isStackTrace = System.getProperty("surefire.test.class.path") != null; + protected static final boolean isStackTrace = + System.getProperty("surefire.test.class.path") != null; + protected static final StackTraceElement[] NO_TRACE = new StackTraceElement[0]; ReaderException() { // do nothing diff --git a/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java b/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java index d4fd24c6e..3a3655411 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/Encoder.java @@ -311,7 +311,7 @@ public final class Encoder { case 12: return GenericGF.AZTEC_DATA_12; default: - return null; + throw new IllegalArgumentException("Unsupported word size " + wordSize); } } diff --git a/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java b/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java index b4a21dd5f..bd867e31c 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/aztec/encoder/HighLevelEncoder.java @@ -230,15 +230,15 @@ public final class HighLevelEncoder { // any other mode except possibly digit (which uses only 4 bits). Any // other latch would be equally successful *after* this character, and // so wouldn't save any bits. - State latch_state = stateNoBinary.latchAndAppend(mode, charInMode); - result.add(latch_state); + State latchState = stateNoBinary.latchAndAppend(mode, charInMode); + result.add(latchState); } // Try generating the character by switching to its mode. if (!charInCurrentTable && SHIFT_TABLE[state.getMode()][mode] >= 0) { // It never makes sense to temporarily shift to another mode if the // character exists in the current mode. That can never save bits. - State shift_state = stateNoBinary.shiftAndAppend(mode, charInMode); - result.add(shift_state); + State shiftState = stateNoBinary.shiftAndAppend(mode, charInMode); + result.add(shiftState); } } } @@ -270,10 +270,10 @@ public final class HighLevelEncoder { } if (pairCode == 3 || pairCode == 4) { // both characters are in DIGITS. Sometimes better to just add two digits - State digit_state = stateNoBinary + State digitState = stateNoBinary .latchAndAppend(MODE_DIGIT, 16 - pairCode) // period or comma in DIGIT .latchAndAppend(MODE_DIGIT, 1); // space in DIGIT - result.add(digit_state); + result.add(digitState); } if (state.getBinaryShiftByteCount() > 0) { // It only makes sense to do the characters as binary if we're already @@ -287,7 +287,7 @@ public final class HighLevelEncoder { List result = new LinkedList<>(); for (State newState : states) { boolean add = true; - for (Iterator iterator = result.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = result.iterator(); iterator.hasNext();) { State oldState = iterator.next(); if (oldState.isBetterThanOrEqualTo(newState)) { add = false; diff --git a/extern/zxing-core/src/main/java/com/google/zxing/client/result/URIParsedResult.java b/extern/zxing-core/src/main/java/com/google/zxing/client/result/URIParsedResult.java index d36c6500b..b360de92e 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/client/result/URIParsedResult.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/client/result/URIParsedResult.java @@ -69,11 +69,9 @@ public final class URIParsedResult extends ParsedResult { private static String massageURI(String uri) { uri = uri.trim(); int protocolEnd = uri.indexOf(':'); - if (protocolEnd < 0) { - // No protocol, assume http - uri = "http://" + uri; - } else if (isColonFollowedByPortNumber(uri, protocolEnd)) { - // Found a colon, but it looks like it is after the host, so the protocol is still missing + if (protocolEnd < 0 || isColonFollowedByPortNumber(uri, protocolEnd)) { + // No protocol, or found a colon, but it looks like it is after the host, so the protocol is still missing, + // so assume http uri = "http://" + uri; } return uri; diff --git a/extern/zxing-core/src/main/java/com/google/zxing/common/BitMatrix.java b/extern/zxing-core/src/main/java/com/google/zxing/common/BitMatrix.java index 0816e4587..30e2358cb 100755 --- a/extern/zxing-core/src/main/java/com/google/zxing/common/BitMatrix.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/common/BitMatrix.java @@ -77,23 +77,20 @@ public final class BitMatrix implements Cloneable { if (stringRepresentation.charAt(pos) == '\n' || stringRepresentation.charAt(pos) == '\r') { if (bitsPos > rowStartPos) { - if(rowLength == -1) { + if (rowLength == -1) { rowLength = bitsPos - rowStartPos; - } - else if (bitsPos - rowStartPos != rowLength) { + } else if (bitsPos - rowStartPos != rowLength) { throw new IllegalArgumentException("row lengths do not match"); } rowStartPos = bitsPos; nRows++; } pos++; - } - else if (stringRepresentation.substring(pos, pos + setString.length()).equals(setString)) { + } else if (stringRepresentation.substring(pos, pos + setString.length()).equals(setString)) { pos += setString.length(); bits[bitsPos] = true; bitsPos++; - } - else if (stringRepresentation.substring(pos, pos + unsetString.length()).equals(unsetString)) { + } else if (stringRepresentation.substring(pos, pos + unsetString.length()).equals(unsetString)) { pos += unsetString.length(); bits[bitsPos] = false; bitsPos++; @@ -408,16 +405,28 @@ public final class BitMatrix implements Cloneable { return hash; } + /** + * @return string representation using "X" for set and " " for unset bits + */ @Override public String toString() { return toString("X ", " "); } + /** + * @param setString representation of a set bit + * @param unsetString representation of an unset bit + * @return string representation of entire matrix utilizing given strings + */ public String toString(String setString, String unsetString) { return toString(setString, unsetString, "\n"); } /** + * @param setString representation of a set bit + * @param unsetString representation of an unset bit + * @param lineSeparator newline character in string representation + * @return string representation of entire matrix utilizing given strings and line separator * @deprecated call {@link #toString(String,String)} only, which uses \n line separator always */ @Deprecated diff --git a/extern/zxing-core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java b/extern/zxing-core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java index 53b4b68d6..32bf3f67a 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/datamatrix/DataMatrixWriter.java @@ -60,7 +60,7 @@ public final class DataMatrixWriter implements Writer { // Try to get force shape & min / max size SymbolShapeHint shape = SymbolShapeHint.FORCE_NONE; - Dimension minSize = new Dimension(width, height); + Dimension minSize = null; Dimension maxSize = null; if (hints != null) { SymbolShapeHint requestedShape = (SymbolShapeHint) hints.get(EncodeHintType.DATA_MATRIX_SHAPE); diff --git a/extern/zxing-core/src/main/java/com/google/zxing/oned/Code93Reader.java b/extern/zxing-core/src/main/java/com/google/zxing/oned/Code93Reader.java index 56b2d78de..0db67ea70 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/oned/Code93Reader.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/oned/Code93Reader.java @@ -223,11 +223,21 @@ public final class Code93Reader extends OneDReader { } break; case 'b': - // %A to %E map to control codes ESC to US if (next >= 'A' && next <= 'E') { + // %A to %E map to control codes ESC to USep decodedChar = (char) (next - 38); - } else if (next >= 'F' && next <= 'W') { + } else if (next >= 'F' && next <= 'J') { + // %F to %J map to ; < = > ? decodedChar = (char) (next - 11); + } else if (next >= 'K' && next <= 'O') { + // %K to %O map to [ \ ] ^ _ + decodedChar = (char) (next + 16); + } else if (next >= 'P' && next <= 'S') { + // %P to %S map to { | } ~ + decodedChar = (char) (next + 43); + } else if (next >= 'T' && next <= 'Z') { + // %T to %Z all map to DEL (127) + decodedChar = 127; } else { throw FormatException.getFormatInstance(); } diff --git a/extern/zxing-core/src/main/java/com/google/zxing/oned/ITFReader.java b/extern/zxing-core/src/main/java/com/google/zxing/oned/ITFReader.java index e57d5a1e1..d9e586412 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/oned/ITFReader.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/oned/ITFReader.java @@ -294,9 +294,6 @@ public final class ITFReader extends OneDReader { private static int[] findGuardPattern(BitArray row, int rowOffset, int[] pattern) throws NotFoundException { - - // TODO: This is very similar to implementation in UPCEANReader. Consider if they can be - // merged to a single method. int patternLength = pattern.length; int[] counters = new int[patternLength]; int width = row.getSize(); diff --git a/extern/zxing-core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java b/extern/zxing-core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java index 3f89e4b79..e52829e87 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java @@ -110,15 +110,12 @@ public final class RSSExpandedReader extends AbstractRSSReader { { FINDER_PAT_A, FINDER_PAT_A, FINDER_PAT_B, FINDER_PAT_B, FINDER_PAT_C, FINDER_PAT_D, FINDER_PAT_D, FINDER_PAT_E, FINDER_PAT_E, FINDER_PAT_F, FINDER_PAT_F }, }; - //private static final int LONGEST_SEQUENCE_SIZE = FINDER_PATTERN_SEQUENCES[FINDER_PATTERN_SEQUENCES.length - 1].length; - private static final int MAX_PAIRS = 11; private final List pairs = new ArrayList<>(MAX_PAIRS); private final List rows = new ArrayList<>(); private final int [] startEnd = new int[2]; - //private final int [] currentSequence = new int[LONGEST_SEQUENCE_SIZE]; - private boolean startFromEven = false; + private boolean startFromEven; @Override public Result decodeRow(int rowNumber, @@ -153,7 +150,6 @@ public final class RSSExpandedReader extends AbstractRSSReader { while (true){ ExpandedPair nextPair = retrieveNextPair(row, this.pairs, rowNumber); this.pairs.add(nextPair); - //System.out.println(this.pairs.size()+" pairs found so far on row "+rowNumber+": "+this.pairs); // exit this loop when retrieveNextPair() fails and throws } } catch (NotFoundException nfe) { @@ -171,7 +167,7 @@ public final class RSSExpandedReader extends AbstractRSSReader { boolean wasReversed = false; // TODO: deal with reversed rows storeRow(rowNumber, wasReversed); if (tryStackedDecode) { - // When the image is 180-rotated, then rows are sorted in wrong dirrection. + // When the image is 180-rotated, then rows are sorted in wrong direction. // Try twice with both the directions. List ps = checkRows(false); if (ps != null) { @@ -189,7 +185,7 @@ public final class RSSExpandedReader extends AbstractRSSReader { private List checkRows(boolean reverse) { // Limit number of rows we are checking // We use recursive algorithm with pure complexity and don't want it to take forever - // Stacked barcode can have up to 11 rows, so 25 seems resonable enough + // Stacked barcode can have up to 11 rows, so 25 seems reasonable enough if (this.rows.size() > 25) { this.rows.clear(); // We will never have a chance to get result, so clear it return null; @@ -306,7 +302,7 @@ public final class RSSExpandedReader extends AbstractRSSReader { // Remove all the rows that contains only specified pairs private static void removePartialRows(List pairs, List rows) { - for (Iterator iterator = rows.iterator(); iterator.hasNext(); ) { + for (Iterator iterator = rows.iterator(); iterator.hasNext();) { ExpandedRow r = iterator.next(); if (r.getPairs().size() == pairs.size()) { continue; diff --git a/extern/zxing-core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java b/extern/zxing-core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java index 0b4526c47..cb37884a6 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/pdf417/PDF417Writer.java @@ -39,6 +39,11 @@ public final class PDF417Writer implements Writer { */ static final int WHITE_SPACE = 30; + /** + * default error correction level + */ + static final int DEFAULT_ERROR_CORRECTION_LEVEL = 2; + @Override public BitMatrix encode(String contents, BarcodeFormat format, @@ -51,6 +56,7 @@ public final class PDF417Writer implements Writer { PDF417 encoder = new PDF417(); int margin = WHITE_SPACE; + int errorCorrectionLevel = DEFAULT_ERROR_CORRECTION_LEVEL; if (hints != null) { if (hints.containsKey(EncodeHintType.PDF417_COMPACT)) { @@ -69,13 +75,16 @@ public final class PDF417Writer implements Writer { if (hints.containsKey(EncodeHintType.MARGIN)) { margin = ((Number) hints.get(EncodeHintType.MARGIN)).intValue(); } + if (hints.containsKey(EncodeHintType.ERROR_CORRECTION)) { + errorCorrectionLevel = ((Number) hints.get(EncodeHintType.ERROR_CORRECTION)).intValue(); + } if (hints.containsKey(EncodeHintType.CHARACTER_SET)) { String encoding = (String) hints.get(EncodeHintType.CHARACTER_SET); encoder.setEncoding(Charset.forName(encoding)); } } - return bitMatrixFromEncoder(encoder, contents, width, height, margin); + return bitMatrixFromEncoder(encoder, contents, errorCorrectionLevel, width, height, margin); } @Override @@ -91,15 +100,14 @@ public final class PDF417Writer implements Writer { */ private static BitMatrix bitMatrixFromEncoder(PDF417 encoder, String contents, + int errorCorrectionLevel, int width, int height, int margin) throws WriterException { - int errorCorrectionLevel = 2; encoder.generateBarcodeLogic(contents, errorCorrectionLevel); - int lineThickness = 2; int aspectRatio = 4; - byte[][] originalScale = encoder.getBarcodeMatrix().getScaledMatrix(lineThickness, aspectRatio * lineThickness); + byte[][] originalScale = encoder.getBarcodeMatrix().getScaledMatrix(1, aspectRatio); boolean rotated = false; if ((height > width) ^ (originalScale[0].length < originalScale.length)) { originalScale = rotateArray(originalScale); @@ -118,7 +126,7 @@ public final class PDF417Writer implements Writer { if (scale > 1) { byte[][] scaledMatrix = - encoder.getBarcodeMatrix().getScaledMatrix(scale * lineThickness, scale * aspectRatio * lineThickness); + encoder.getBarcodeMatrix().getScaledMatrix(scale, scale * aspectRatio); if (rotated) { scaledMatrix = rotateArray(scaledMatrix); } diff --git a/extern/zxing-core/src/main/java/com/google/zxing/pdf417/decoder/BoundingBox.java b/extern/zxing-core/src/main/java/com/google/zxing/pdf417/decoder/BoundingBox.java index 7273e0c91..b77314560 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/pdf417/decoder/BoundingBox.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/pdf417/decoder/BoundingBox.java @@ -88,7 +88,6 @@ final class BoundingBox { if (newMinY < 0) { newMinY = 0; } - // TODO use existing points to better interpolate the new x positions ResultPoint newTop = new ResultPoint(top.getX(), newMinY); if (isLeft) { newTopLeft = newTop; @@ -103,7 +102,6 @@ final class BoundingBox { if (newMaxY >= image.getHeight()) { newMaxY = image.getHeight() - 1; } - // TODO use existing points to better interpolate the new x positions ResultPoint newBottom = new ResultPoint(bottom.getX(), newMaxY); if (isLeft) { newBottomLeft = newBottom; diff --git a/extern/zxing-core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java b/extern/zxing-core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java index ba84c3f44..125017c00 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/pdf417/encoder/PDF417HighLevelEncoder.java @@ -25,6 +25,7 @@ import com.google.zxing.common.CharacterSetECI; import java.math.BigInteger; import java.nio.charset.Charset; +import java.nio.charset.CharsetEncoder; import java.util.Arrays; /** @@ -178,12 +179,11 @@ final class PDF417HighLevelEncoder { int textSubMode = SUBMODE_ALPHA; // User selected encoding mode - byte[] bytes = null; //Fill later and only if needed if (compaction == Compaction.TEXT) { encodeText(msg, p, len, sb, textSubMode); } else if (compaction == Compaction.BYTE) { - bytes = msg.getBytes(encoding); + byte[] bytes = msg.getBytes(encoding); encodeBinary(bytes, p, bytes.length, BYTE_COMPACTION, sb); } else if (compaction == Compaction.NUMERIC) { @@ -211,19 +211,17 @@ final class PDF417HighLevelEncoder { textSubMode = encodeText(msg, p, t, sb, textSubMode); p += t; } else { - if (bytes == null) { - bytes = msg.getBytes(encoding); - } - int b = determineConsecutiveBinaryCount(msg, bytes, p); + int b = determineConsecutiveBinaryCount(msg, p, encoding); if (b == 0) { b = 1; } - if (b == 1 && encodingMode == TEXT_COMPACTION) { + byte[] bytes = msg.substring(p, p + b).getBytes(encoding); + if (bytes.length == 1 && encodingMode == TEXT_COMPACTION) { //Switch for one byte (instead of latch) - encodeBinary(bytes, p, 1, TEXT_COMPACTION, sb); + encodeBinary(bytes, 0, 1, TEXT_COMPACTION, sb); } else { //Mode latch performed by encodeBinary() - encodeBinary(bytes, p, b, encodingMode, sb); + encodeBinary(bytes, 0, bytes.length, encodingMode, sb); encodingMode = BYTE_COMPACTION; textSubMode = SUBMODE_ALPHA; //Reset after latch } @@ -530,12 +528,13 @@ final class PDF417HighLevelEncoder { * Determines the number of consecutive characters that are encodable using binary compaction. * * @param msg the message - * @param bytes the message converted to a byte array * @param startpos the start position within the message + * @param encoding the charset used to convert the message to a byte array * @return the requested character count */ - private static int determineConsecutiveBinaryCount(CharSequence msg, byte[] bytes, int startpos) + private static int determineConsecutiveBinaryCount(String msg, int startpos, Charset encoding) throws WriterException { + final CharsetEncoder encoder = encoding.newEncoder(); int len = msg.length(); int idx = startpos; while (idx < len) { @@ -556,10 +555,7 @@ final class PDF417HighLevelEncoder { } ch = msg.charAt(idx); - //Check if character is encodable - //Sun returns a ASCII 63 (?) for a character that cannot be mapped. Let's hope all - //other VMs do the same - if (bytes[idx] == 63 && ch != '?') { + if (!encoder.canEncode(ch)) { throw new WriterException("Non-encodable character detected: " + ch + " (Unicode: " + (int) ch + ')'); } idx++; diff --git a/extern/zxing-core/src/main/java/com/google/zxing/qrcode/detector/Detector.java b/extern/zxing-core/src/main/java/com/google/zxing/qrcode/detector/Detector.java index d802a1359..d3367bac2 100644 --- a/extern/zxing-core/src/main/java/com/google/zxing/qrcode/detector/Detector.java +++ b/extern/zxing-core/src/main/java/com/google/zxing/qrcode/detector/Detector.java @@ -261,7 +261,7 @@ public class Detector { /** * See {@link #sizeOfBlackWhiteBlackRun(int, int, int, int)}; computes the total width of * a finder pattern by looking for a black-white-black run from the center in the direction - * of another point (another finder pattern center), and in the opposite direction too.

+ * of another point (another finder pattern center), and in the opposite direction too. */ private float sizeOfBlackWhiteBlackRunBothWays(int fromX, int fromY, int toX, int toY) {