X-Git-Url: http://git.rot13.org/?p=zxing.git;a=blobdiff_plain;f=android%2Fsrc%2Fcom%2Fgoogle%2Fzxing%2Fclient%2Fandroid%2FCaptureActivityHandler.java;h=525e83c244e9a8f6c842759db4e26ae72806e301;hp=1552f169137f44f0cbca1b8205bf2e4db7cd4724;hb=b4f959c37f0d6d2ce55d5e79e893f306aafcea13;hpb=c60d6347dbffd33e6c89b51a0388e48c3e06d153 diff --git a/android/src/com/google/zxing/client/android/CaptureActivityHandler.java b/android/src/com/google/zxing/client/android/CaptureActivityHandler.java index 1552f169..525e83c2 100755 --- a/android/src/com/google/zxing/client/android/CaptureActivityHandler.java +++ b/android/src/com/google/zxing/client/android/CaptureActivityHandler.java @@ -16,7 +16,9 @@ package com.google.zxing.client.android; +import com.google.zxing.BarcodeFormat; import com.google.zxing.Result; +import com.google.zxing.client.android.camera.CameraManager; import android.app.Activity; import android.content.Intent; @@ -25,6 +27,9 @@ import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.util.Log; + +import java.util.Vector; /** * This class handles all the messaging which comprises the state machine for capture. @@ -32,6 +37,9 @@ import android.os.Message; * @author dswitkin@google.com (Daniel Switkin) */ public final class CaptureActivityHandler extends Handler { + + private static final String TAG = CaptureActivityHandler.class.getSimpleName(); + private final CaptureActivity activity; private final DecodeThread decodeThread; private State state; @@ -42,24 +50,24 @@ public final class CaptureActivityHandler extends Handler { DONE } - CaptureActivityHandler(CaptureActivity activity, String decodeMode, - boolean beginScanning) { + CaptureActivityHandler(CaptureActivity activity, Vector decodeFormats, + String characterSet) { this.activity = activity; - decodeThread = new DecodeThread(activity, decodeMode); + decodeThread = new DecodeThread(activity, decodeFormats, characterSet, + new ViewfinderResultPointCallback(activity.getViewfinderView())); decodeThread.start(); state = State.SUCCESS; // Start ourselves capturing previews and decoding. CameraManager.get().startPreview(); - if (beginScanning) { - restartPreviewAndDecode(); - } + restartPreviewAndDecode(); } @Override public void handleMessage(Message message) { switch (message.what) { case R.id.auto_focus: + //Log.d(TAG, "Got auto-focus message"); // When one auto focus pass finishes, start another. This is the closest thing to // continuous AF. It does seem to hunt a bit, but I'm not sure what else to do. if (state == State.PREVIEW) { @@ -67,26 +75,33 @@ public final class CaptureActivityHandler extends Handler { } break; case R.id.restart_preview: + Log.d(TAG, "Got restart preview message"); restartPreviewAndDecode(); break; case R.id.decode_succeeded: + Log.d(TAG, "Got decode succeeded message"); state = State.SUCCESS; Bundle bundle = message.getData(); - Bitmap barcode = bundle.getParcelable(DecodeThread.BARCODE_BITMAP); + Bitmap barcode = bundle == null ? null : + (Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP); activity.handleDecode((Result) message.obj, barcode); break; case R.id.decode_failed: // We're decoding as fast as possible, so when one decode fails, start another. state = State.PREVIEW; - CameraManager.get().requestPreviewFrame(decodeThread.handler, R.id.decode); + CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode); break; case R.id.return_scan_result: + Log.d(TAG, "Got return scan result message"); activity.setResult(Activity.RESULT_OK, (Intent) message.obj); activity.finish(); break; case R.id.launch_product_query: + Log.d(TAG, "Got product query message"); String url = (String) message.obj; - activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); + activity.startActivity(intent); break; } } @@ -94,11 +109,12 @@ public final class CaptureActivityHandler extends Handler { public void quitSynchronously() { state = State.DONE; CameraManager.get().stopPreview(); - Message quit = Message.obtain(decodeThread.handler, R.id.quit); + Message quit = Message.obtain(decodeThread.getHandler(), R.id.quit); quit.sendToTarget(); try { decodeThread.join(); } catch (InterruptedException e) { + // continue } // Be absolutely sure we don't send any queued up messages @@ -109,9 +125,10 @@ public final class CaptureActivityHandler extends Handler { private void restartPreviewAndDecode() { if (state == State.SUCCESS) { state = State.PREVIEW; - CameraManager.get().requestPreviewFrame(decodeThread.handler, R.id.decode); + CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode); CameraManager.get().requestAutoFocus(this, R.id.auto_focus); activity.drawViewfinder(); } } + }