From 9497553ad4f6e6ab4d5ee8f3db7865ef895e6d9d Mon Sep 17 00:00:00 2001 From: srowen Date: Tue, 9 Feb 2010 13:58:58 +0000 Subject: [PATCH] Issue 338 git-svn-id: http://zxing.googlecode.com/svn/trunk@1206 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- .../zxing/client/android/CaptureActivity.java | 5 +++- .../android/CaptureActivityHandler.java | 3 +- .../zxing/client/android/DecodeThread.java | 29 +++++++++---------- .../google/zxing/client/android/Intents.java | 5 ++++ 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/android/src/com/google/zxing/client/android/CaptureActivity.java b/android/src/com/google/zxing/client/android/CaptureActivity.java index 0dbf3366..64fa050d 100755 --- a/android/src/com/google/zxing/client/android/CaptureActivity.java +++ b/android/src/com/google/zxing/client/android/CaptureActivity.java @@ -141,6 +141,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal private Source source; private String sourceUrl; private Vector decodeFormats; + private String characterSet; private String versionName; private HistoryManager historyManager; @@ -228,9 +229,11 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal decodeFormats = null; resetStatusView(); } + characterSet = intent.getStringExtra(Intents.Scan.CHARACTER_SET); } else { source = Source.NONE; decodeFormats = null; + characterSet = null; if (lastResult == null) { resetStatusView(); } @@ -615,7 +618,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal } if (handler == null) { boolean beginScanning = lastResult == null; - handler = new CaptureActivityHandler(this, decodeFormats, beginScanning); + handler = new CaptureActivityHandler(this, decodeFormats, characterSet, beginScanning); } } diff --git a/android/src/com/google/zxing/client/android/CaptureActivityHandler.java b/android/src/com/google/zxing/client/android/CaptureActivityHandler.java index f3595ede..c9d85fe9 100755 --- a/android/src/com/google/zxing/client/android/CaptureActivityHandler.java +++ b/android/src/com/google/zxing/client/android/CaptureActivityHandler.java @@ -47,9 +47,10 @@ public final class CaptureActivityHandler extends Handler { CaptureActivityHandler(CaptureActivity activity, Vector decodeFormats, + String characterSet, boolean beginScanning) { this.activity = activity; - decodeThread = new DecodeThread(activity, decodeFormats, + decodeThread = new DecodeThread(activity, decodeFormats, characterSet, new ViewfinderResultPointCallback(activity.getViewfinderView())); decodeThread.start(); state = State.SUCCESS; diff --git a/android/src/com/google/zxing/client/android/DecodeThread.java b/android/src/com/google/zxing/client/android/DecodeThread.java index a7242ec6..b63fc219 100755 --- a/android/src/com/google/zxing/client/android/DecodeThread.java +++ b/android/src/com/google/zxing/client/android/DecodeThread.java @@ -49,14 +49,14 @@ final class DecodeThread extends Thread { private Handler handler; private final CaptureActivity activity; private final MultiFormatReader multiFormatReader; - private final ResultPointCallback resultPointCallback; DecodeThread(CaptureActivity activity, Vector decodeFormats, + String characterSet, ResultPointCallback resultPointCallback) { this.activity = activity; multiFormatReader = new MultiFormatReader(); - this.resultPointCallback = resultPointCallback; + Hashtable hints = new Hashtable(3); // The prefs can't change while the thread is running, so pick them up once here. if (decodeFormats == null || decodeFormats.isEmpty()) { @@ -64,15 +64,23 @@ final class DecodeThread extends Thread { boolean decode1D = prefs.getBoolean(PreferencesActivity.KEY_DECODE_1D, true); boolean decodeQR = prefs.getBoolean(PreferencesActivity.KEY_DECODE_QR, true); if (decode1D && decodeQR) { - doSetDecodeMode(CaptureActivity.ALL_FORMATS); + hints.put(DecodeHintType.POSSIBLE_FORMATS, CaptureActivity.ALL_FORMATS); } else if (decode1D) { - doSetDecodeMode(CaptureActivity.ONE_D_FORMATS); + hints.put(DecodeHintType.POSSIBLE_FORMATS, CaptureActivity.ONE_D_FORMATS); } else if (decodeQR) { - doSetDecodeMode(CaptureActivity.QR_CODE_FORMATS); + hints.put(DecodeHintType.POSSIBLE_FORMATS, CaptureActivity.QR_CODE_FORMATS); } } else { - doSetDecodeMode(decodeFormats); + hints.put(DecodeHintType.POSSIBLE_FORMATS, decodeFormats); + } + + if (characterSet != null) { + hints.put(DecodeHintType.CHARACTER_SET, characterSet); } + + hints.put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, resultPointCallback); + + multiFormatReader.setHints(hints); } Handler getHandler() { @@ -98,15 +106,6 @@ final class DecodeThread extends Thread { Looper.loop(); } - private void doSetDecodeMode(Vector vector) { - Hashtable hints = new Hashtable(3); - if (vector != null) { - hints.put(DecodeHintType.POSSIBLE_FORMATS, vector); - } - hints.put(DecodeHintType.NEED_RESULT_POINT_CALLBACK, resultPointCallback); - multiFormatReader.setHints(hints); - } - /** * Decode the data within the viewfinder rectangle, and time how long it took. For efficiency, * reuse the same reader objects from one decode to the next. diff --git a/android/src/com/google/zxing/client/android/Intents.java b/android/src/com/google/zxing/client/android/Intents.java index 39fc9159..0830ba4a 100755 --- a/android/src/com/google/zxing/client/android/Intents.java +++ b/android/src/com/google/zxing/client/android/Intents.java @@ -53,6 +53,11 @@ public final class Intents { */ public static final String SCAN_FORMATS = "SCAN_FORMATS"; + /** + * @see com.google.zxing.DecodeHintType#CHARACTER_SET + */ + public static final String CHARACTER_SET = "CHARACTER_SET"; + /** * Decode only UPC and EAN barcodes. This is the right choice for shopping apps which get * prices, reviews, etc. for products. -- 2.20.1