Issue 338

git-svn-id: https://zxing.googlecode.com/svn/trunk@1206 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2010-02-09 13:58:58 +00:00
parent 146c4e096f
commit aa1a7cace4
4 changed files with 25 additions and 17 deletions

View file

@ -141,6 +141,7 @@ public final class CaptureActivity extends Activity implements SurfaceHolder.Cal
private Source source;
private String sourceUrl;
private Vector<BarcodeFormat> 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);
}
}

View file

@ -47,9 +47,10 @@ public final class CaptureActivityHandler extends Handler {
CaptureActivityHandler(CaptureActivity activity,
Vector<BarcodeFormat> 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;

View file

@ -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<BarcodeFormat> decodeFormats,
String characterSet,
ResultPointCallback resultPointCallback) {
this.activity = activity;
multiFormatReader = new MultiFormatReader();
this.resultPointCallback = resultPointCallback;
Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(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<BarcodeFormat> vector) {
Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>(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.

View file

@ -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.