Android Open Source - esr-scanner Capture Activity Handler






From Project

Back to project page esr-scanner.

License

The source code is released under:

Apache License

If you think the Android project esr-scanner listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2008 ZXing authors/* w  w w.java2s  .c  om*/
 * Copyright 2011 Robert Theis
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ch.luklanis.esscan;

import android.os.Handler;
import android.os.Message;
import android.util.Log;

import com.googlecode.tesseract.android.TessBaseAPI;

import ch.luklanis.esscan.camera.CameraManager;
import ch.luklanis.esscan.paymentslip.PsResult;
import ch.luklanis.esscan.paymentslip.PsValidation;

/**
 * This class handles all the messaging which comprises the state machine for capture.
 * <p/>
 * The code for this class was adapted from the ZXing project: http://code.google.com/p/zxing/
 */
public final class CaptureActivityHandler extends Handler {

    private static final String TAG = CaptureActivityHandler.class.getSimpleName();

    private static final long OCR_INIT_DELAY = 200;

    private static State state;
    private final IBase base;
    private final CameraManager cameraManager;
    private DecodeThread decodeThread;

    private enum State {
        PREVIEW,
        SUCCESS,
        DONE
    }

    public CaptureActivityHandler(IBase base, CameraManager cameraManager) {
        this.base = base;
        this.cameraManager = cameraManager;

        decodeThread = null;

        state = State.SUCCESS;

        // Start ourselves capturing previews and decode.
        restartOcrPreviewAndDecode();
    }

    @Override
    public void handleMessage(Message message) {

        switch (message.what) {
            case R.id.restart_decode:
                Log.d(TAG, "Got restart decode message");
                state = State.PREVIEW;
                requestOcrDecodeWhenThreadReady();
                break;
            case R.id.decode_succeeded:
                Log.d(TAG, "Got decode succeeded message");
                if (state != State.DONE) {
                    state = State.SUCCESS;
                    try {
                        base.presentOcrDecodeResult((OcrResult) message.obj);
                    } catch (NullPointerException e) {
                        // Continue
                    }
                    requestOcrDecodeWhenThreadReady();
                    base.drawViewfinder();
                }
                break;
            case R.id.decode_failed:
                if (state != State.DONE) {
                    state = State.PREVIEW;
                    requestOcrDecodeWhenThreadReady();
                }
                break;
            case R.id.es_decode_succeeded:
                state = State.DONE;
                PsResult result = (PsResult) message.obj;

                base.showResult(result);
                break;
            case R.id.es_change_ps_type:
                base.setValidation((PsValidation) message.obj);
                break;
            case R.id.es_send_succeeded:
                base.showDialogAndRestartScan(R.string.msg_coderow_sent);
                break;
            case R.id.es_send_failed:
                base.showDialogAndRestartScan(R.string.msg_coderow_not_sent);
                break;
        }
    }

    public void startDecode(TessBaseAPI baseApi) {
        if (this.decodeThread == null) {
            this.decodeThread = new DecodeThread(this.base, baseApi);
            this.decodeThread.start();
        }
    }

    public void quitSynchronously() {
        state = State.DONE;

        if (decodeThread != null) {
            try {
                Message message = Message.obtain(decodeThread.getHandler(), R.id.quit);
                message.sendToTarget();

                // Wait at most half a second; should be enough time, and onPause() will timeout quickly
                decodeThread.join(500L);
            } catch (InterruptedException e) {
                // continue
            }
        }

        decodeThread = null;

        // Be absolutely sure we don't send any queued up messages
        removeMessages(R.id.restart_decode);
        removeMessages(R.id.decode_failed);
        removeMessages(R.id.decode_succeeded);

        if (cameraManager != null) {
            cameraManager.stopPreview();
        }
    }

    /**
     * Send a decode request for realtime OCR mode
     */
    private void restartOcrPreviewAndDecode() {
        if (state == State.SUCCESS) {
            state = State.PREVIEW;
            // Continue capturing camera frames
            cameraManager.startPreview();

            requestOcrDecodeWhenThreadReady();
            base.drawViewfinder();
        }
    }

    private void requestOcrDecodeWhenThreadReady() {
        if (this.decodeThread != null) {
            // Continue requesting decode of images
            cameraManager.requestOcrDecode(decodeThread.getHandler(), R.id.decode);
        } else {
            this.sendEmptyMessageDelayed(R.id.decode_failed, OCR_INIT_DELAY);
            Log.w(TAG, "Skipping decode because OCR isn't initialized yet");
        }
    }
}




Java Source Code List

ch.luklanis.android.common.PlatformSupportManager.java
ch.luklanis.android.common.executor.AsyncTaskExecInterface.java
ch.luklanis.android.common.executor.AsyncTaskExecManager.java
ch.luklanis.android.common.executor.DefaultAsyncTaskExecInterface.java
ch.luklanis.android.common.executor.HoneycombAsyncTaskExecInterface.java
ch.luklanis.esscan.BeepManager.java
ch.luklanis.esscan.CaptureActivityHandler.java
ch.luklanis.esscan.CaptureActivity.java
ch.luklanis.esscan.DecodeHandler.java
ch.luklanis.esscan.DecodeThread.java
ch.luklanis.esscan.EsrBaseActivity.java
ch.luklanis.esscan.FinishListener.java
ch.luklanis.esscan.HelpActivity.java
ch.luklanis.esscan.IBase.java
ch.luklanis.esscan.Intents.java
ch.luklanis.esscan.LuminanceSource.java
ch.luklanis.esscan.OcrCharacterHelper.java
ch.luklanis.esscan.OcrInitAsyncTask.java
ch.luklanis.esscan.OcrRecognizeAsyncTask.java
ch.luklanis.esscan.OcrResultFailure.java
ch.luklanis.esscan.OcrResultText.java
ch.luklanis.esscan.OcrResult.java
ch.luklanis.esscan.PlanarYUVLuminanceSource.java
ch.luklanis.esscan.PreferencesActivity.java
ch.luklanis.esscan.ViewfinderView.java
ch.luklanis.esscan.camera.AutoFocusManager.java
ch.luklanis.esscan.camera.CameraConfigurationManager.java
ch.luklanis.esscan.camera.CameraManager.java
ch.luklanis.esscan.camera.PreviewCallback.java
ch.luklanis.esscan.camera.exposure.DefaultExposureInterface.java
ch.luklanis.esscan.camera.exposure.ExposureInterface.java
ch.luklanis.esscan.camera.exposure.ExposureManager.java
ch.luklanis.esscan.camera.exposure.FroyoExposureInterface.java
ch.luklanis.esscan.camera.open.DefaultOpenCameraInterface.java
ch.luklanis.esscan.camera.open.GingerbreadOpenCameraInterface.java
ch.luklanis.esscan.camera.open.OpenCameraInterface.java
ch.luklanis.esscan.camera.open.OpenCameraManager.java
ch.luklanis.esscan.codesend.Crypto.java
ch.luklanis.esscan.codesend.ESRSenderHttp.java
ch.luklanis.esscan.codesend.IEsrSender.java
ch.luklanis.esscan.dialogs.BankProfileDialogFragment.java
ch.luklanis.esscan.dialogs.BankProfileListDialog.java
ch.luklanis.esscan.dialogs.CancelOkDialog.java
ch.luklanis.esscan.dialogs.OkDialog.java
ch.luklanis.esscan.dialogs.OptionalOkDialog.java
ch.luklanis.esscan.history.BankProfile.java
ch.luklanis.esscan.history.DBHelper.java
ch.luklanis.esscan.history.GetHistoryAsyncTask.java
ch.luklanis.esscan.history.HistoryActivity.java
ch.luklanis.esscan.history.HistoryExportUpdateAsyncTask.java
ch.luklanis.esscan.history.HistoryFragment.java
ch.luklanis.esscan.history.HistoryItemAdapter.java
ch.luklanis.esscan.history.HistoryItem.java
ch.luklanis.esscan.history.HistoryManager.java
ch.luklanis.esscan.history.PsDetailActivity.java
ch.luklanis.esscan.history.PsDetailFragment.java
ch.luklanis.esscan.ime.ScannerIME.java
ch.luklanis.esscan.paymentslip.DTAFileCreator.java
ch.luklanis.esscan.paymentslip.EsIbanResult.java
ch.luklanis.esscan.paymentslip.EsIbanValidation.java
ch.luklanis.esscan.paymentslip.EsrResult.java
ch.luklanis.esscan.paymentslip.EsrValidation.java
ch.luklanis.esscan.paymentslip.PsResult.java
ch.luklanis.esscan.paymentslip.PsValidation.java