Ir a la documentación de este archivo.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00026 package edu.uoc.ocr;
00027
00028 import edu.uoc.ocr.R;
00029 import edu.uoc.ocr.CaptureActivityForOcr;
00030 import edu.uoc.ocr.OcrResult;
00031 import edu.uoc.ocr.camera.CameraManager;
00032
00033 import android.os.Handler;
00034 import android.os.Message;
00035 import android.util.Log;
00036 import android.view.Gravity;
00037 import android.widget.Toast;
00038
00044 final class CaptureActivityHandler extends Handler {
00045
00046 private static final String TAG = CaptureActivityHandler.class
00047 .getSimpleName();
00048
00049 private final CaptureActivityForOcr activity;
00050 private final DecodeThread decodeThread;
00051 private static State state;
00052 private final CameraManager cameraManager;
00053
00054 private enum State {
00055 PREVIEW, PREVIEW_PAUSED, SUCCESS, DONE
00056 }
00057
00058 CaptureActivityHandler(CaptureActivityForOcr activity, CameraManager cameraManager) {
00059 this.activity = activity;
00060 this.cameraManager = cameraManager;
00061
00062
00063
00064 cameraManager.startPreview();
00065
00066 decodeThread = new DecodeThread(activity);
00067 decodeThread.start();
00068
00069 state = State.SUCCESS;
00070
00071
00072 activity.setButtonVisibility(true);
00073
00074 restartOcrPreview();
00075
00076 }
00077
00078 @Override
00079 public void handleMessage(Message message) {
00080
00081 switch (message.what) {
00082 case R.id.restart_preview:
00083 restartOcrPreview();
00084 break;
00085
00086 case R.id.ocr_decode_succeeded:
00087 state = State.SUCCESS;
00088 activity.setShutterButtonClickable(true);
00089 activity.handleOcrDecode((OcrResult) message.obj);
00090 break;
00091 case R.id.ocr_decode_failed:
00092 state = State.PREVIEW;
00093 activity.setShutterButtonClickable(true);
00094 Toast toast = Toast.makeText(activity.getBaseContext(),
00095 activity.getBaseContext().getString(R.string.dialogo_2),
00096 Toast.LENGTH_SHORT);
00097 toast.setGravity(Gravity.TOP, 0, 0);
00098 toast.show();
00099 break;
00100 }
00101 }
00102
00103 void stop() {
00104
00105
00106
00107 Log.d(TAG, "Setting state to CONTINUOUS_PAUSED.");
00108 removeMessages(R.id.ocr_decode);
00109 }
00110
00111
00112 void quitSynchronously() {
00113 state = State.DONE;
00114 if (cameraManager != null) {
00115 cameraManager.stopPreview();
00116 }
00117
00118 try {
00119
00120
00121
00122
00123
00124 decodeThread.join(500L);
00125 } catch (InterruptedException e) {
00126 Log.w(TAG, "Caught InterruptedException in quitSyncronously()", e);
00127
00128 } catch (RuntimeException e) {
00129 Log.w(TAG, "Caught RuntimeException in quitSyncronously()", e);
00130
00131 } catch (Exception e) {
00132 Log.w(TAG, "Caught unknown Exception in quitSynchronously()", e);
00133 }
00134
00135
00136 removeMessages(R.id.ocr_decode);
00137
00138 }
00139
00144 private void restartOcrPreview() {
00145
00146 activity.setButtonVisibility(true);
00147
00148 if (state == State.SUCCESS) {
00149 state = State.PREVIEW;
00150
00151
00152 activity.drawViewfinder();
00153 }
00154 }
00155
00156
00160 private void ocrDecode() {
00161 state = State.PREVIEW_PAUSED;
00162 cameraManager.requestOcrDecode(decodeThread.getHandler(),R.id.ocr_decode);
00163 }
00164
00168 void hardwareShutterButtonClick() {
00169
00170 if (state == State.PREVIEW) {
00171 ocrDecode();
00172 }
00173 }
00174
00179 void shutterButtonClick() {
00180
00181 activity.setShutterButtonClickable(false);
00182 ocrDecode();
00183 }
00184
00185 }