com.sanparks.sanscan.WizardEntryActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.sanparks.sanscan.WizardEntryActivity.java

Source

package com.sanparks.sanscan;

import java.io.File;

import com.abbyy.mobile.ocr4.License;
import com.abbyy.sanparks.mobile.ocr4.ActivityBase;
import com.abbyy.sanparks.mobile.ocr4.PickImageActivity;
import com.abbyy.sanparks.mobile.ocr4.RecognitionActivity;
import com.abbyy.sanparks.mobile.ocr4.RecognitionContext;
import com.abbyy.sanparks.mobile.ocr4.RecognitionContext.RecognitionTarget;
import com.sanparks.scanDB.tblXavia;
import com.sanparks.sanscan.util.SystemUiHider;

import android.annotation.TargetApi;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.MenuItem;
import android.widget.ImageView;
import android.support.v4.app.NavUtils;

/**
 * An example full-screen activity that shows and hides the system UI (i.e.
 * status bar and navigation/system bar) with user interaction.
 * 
 * @see SystemUiHider
 */
public class WizardEntryActivity extends ActivityBase {
    protected final String TAG = WizardEntryActivity.class.getName();

    protected static enum ImageSource {
        RESOURCES, GALLERY, CAMERA
    }

    public static final String KEY_IMAGE_URI = "com.abbyy.sanparks.mobile.ocr4.IMAGE_URI";
    private static final String KEY_IMAGE_SOURCE = "com.abbyy.sanparks.mobile.ocr4.IMAGE_SOURCE";

    private static final int DIALOG_ERROR_LOADING_IMAGE = 0;
    private static final int DIALOG_SELECT_IMAGE_SOURCE = 1;

    protected static final int REQUEST_CODE_PICK_IMAGE = 1;
    protected static final int REQUEST_CODE_RECOGNISE_BARCODE = 2;
    protected static final int REQUEST_CODE_RECOGNISE_TEXT = 3;

    private ImageSource _imageSource = ImageSource.CAMERA;

    protected Uri _imageUri;
    protected Bitmap _image;
    protected AsyncTask<Void, Void, Bitmap> _imageLoadTask;

    /** Preview for recognized image. */
    protected ImageView _imagePreview;
    /** Button for showing recognized image source dialog. */
    //   private View _sourceButton;

    /**
     * Whether or not the system UI should be auto-hidden after
     * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
     */
    //   private static final boolean   AUTO_HIDE            = true;

    /**
     * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
     * user interaction before hiding the system UI.
     */
    //   private static final int      AUTO_HIDE_DELAY_MILLIS   = 1000;

    /**
     * If set, will toggle the system UI visibility upon interaction. Otherwise,
     * will show the system UI visibility upon interaction.
     */
    //   private static final boolean   TOGGLE_ON_CLICK         = true;

    /**
     * The flags to pass to {@link SystemUiHider#getInstance}.
     */
    //   private static final int      HIDER_FLAGS            = SystemUiHider.FLAG_HIDE_NAVIGATION;

    /**
     * The instance of the {@link SystemUiHider} for this activity.
     */
    //   private SystemUiHider         mSystemUiHider;

    public WizardEntryActivity() {
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setupActionBar();

        if (License.isLoaded()) {
            if (!initialize(savedInstanceState)) {
                Log.w(TAG, "Failed to initialize Imaging");
                finish();
                return;
            }
        }

        //      _imagePreview = (ImageView) findViewById( R.id.image_ );
        //      if( _imageUri == null ) 
        //         {
        //         // On first boot we get image from resources.
        //         _imageUri = ;
        //         }

        //      final View controlsView = findViewById(R.id.fullscreen_content_controls);
        //      final View contentView = findViewById(R.id.activity_entry_wizard_page1);

        // Set up an instance of SystemUiHider to control the system UI for
        // this activity.
        //      mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS);
        //      mSystemUiHider.setup();
        //
        //      mSystemUiHider.setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener()
        //         {
        //         // Cached values.
        //         int   mControlsHeight;
        //         int   mShortAnimTime;
        //         
        //         @Override
        //         @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
        //         public void onVisibilityChange(boolean visible)
        //            {
        //            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
        //               {
        //               // If the ViewPropertyAnimator API is available
        //               // (Honeycomb MR2 and later), use it to animate
        //               // the in-layout UI controls at the bottom of the
        //               // screen.
        //               if (mControlsHeight == 0)
        //                  {
        //                  mControlsHeight = controlsView.getHeight();
        //                  }
        //               if (mShortAnimTime == 0)
        //                  {
        //                  mShortAnimTime = getResources().getInteger(android.R.integer.config_longAnimTime);
        //                  }
        //
        //               controlsView
        //                     .animate()
        //                     .translationY(visible ? 0 : mControlsHeight)
        //                     .setDuration(mShortAnimTime);
        //               }
        //            else
        //               {
        //               // If the ViewPropertyAnimator APIs aren't
        //               // available, simply show or hide the in-layout
        //               // UI
        //               // controls.
        //               controlsView
        //                     .setVisibility(visible ? View.VISIBLE
        //                           : View.GONE);
        //               }
        //            
        //            if (visible && AUTO_HIDE)
        //               {
        //               // Schedule a hide().
        //               delayedHide(AUTO_HIDE_DELAY_MILLIS);
        //               }
        //            }
        //         });
        //   
        //      // Set up the user interaction to manually show or hide the system UI.
        //      
        //      contentView.setOnClickListener(new View.OnClickListener()
        //         {
        //         @Override
        //         public void onClick(View view)
        //            {
        //            if (TOGGLE_ON_CLICK)
        //               {
        //               mSystemUiHider.toggle();
        //               }
        //            else
        //               {
        //               mSystemUiHider.show();
        //               }
        //            }
        //         });
        //      
        //      // Upon interacting with UI controls, delay any scheduled hide()
        //      // operations to prevent the jarring behavior of controls going away
        //      // while interacting with the UI.
        //
        //      findViewById(R.id.buttonWizardNext).setOnTouchListener(mDelayHideTouchListener);
    }

    void dispatchImageSourceSelected() {
        switch (_imageSource) {
        case RESOURCES:
            // We use special URI to load image from resources.
            _imageUri = Uri.parse(String.format("%s://%s/%d", ContentResolver.SCHEME_ANDROID_RESOURCE,
                    getPackageName(), R.drawable.apple_touch_icon));
            loadImage();
            break;
        case GALLERY: {
            final Intent intent = new Intent(this, PickImageActivity.class)
                    .putExtra(PickImageActivity.KEY_FROM_CAMERA, false);

            this.startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
            break;
        }
        case CAMERA: {
            final Intent intent = new Intent(this, PickImageActivity.class)
                    .putExtra(PickImageActivity.KEY_FROM_CAMERA, true);
            this.startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
            break;
        }
        default:
            return;
        }
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        //      // Trigger the initial hide() shortly after the activity has been
        //      // created, to briefly hint to the user that UI controls
        //      // are available.
        //      delayedHide(100);

        tblXavia.registerXaviaUnit(this);
    }

    @Override
    public void onDestroy() {
        if (License.isLoaded()) {
            unloadData();
        }

        Log.v(TAG, "onDestroy()");
        super.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();

        loadData();

        // enableRecognitionButtons();
    }

    void loadData() {
        if (this._imageUri != null && _image == null) {
            loadImage();
        }
    }

    void unloadData() {

        if (_imagePreview != null)
            _imagePreview.setImageBitmap(null);

        RecognitionContext.cancelGetImage();

        if (this._imageLoadTask != null) {
            this._imageLoadTask.cancel(true);
        }
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        Log.v(TAG, "onRetainNonConfigurationInstance()");
        return this._image;
    }

    /**
     * Set up the {@link android.app.ActionBar}, if the API is available.
     */
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    private void setupActionBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            // Show the Up button in the action bar.
            getActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
            // This ID represents the Home or Up button. In the case of this
            // activity, the Up button is shown. Use NavUtils to allow users
            // to navigate up one level in the application structure. For
            // more details, see the Navigation pattern on Android Design:
            //
            // http://developer.android.com/design/patterns/navigation.html#up-vs-back
            //
            // TODO: If Settings has multiple levels, Up should navigate up
            // that hierarchy.
            NavUtils.navigateUpFromSameTask(this);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * Touch listener to use for in-layout UI controls to delay hiding the
     * system UI. This is to prevent the jarring behavior of controls going away
     * while interacting with activity UI.
     */
    //   View.OnTouchListener   mDelayHideTouchListener   = new View.OnTouchListener()
    //      {
    //      @Override
    //      public boolean onTouch(View view, MotionEvent motionEvent)
    //         {
    //         if (AUTO_HIDE)
    //            delayedHide(AUTO_HIDE_DELAY_MILLIS);
    //
    //         return false;
    //         }
    //      };
    //   
    //   Handler    mHideHandler  = new Handler();
    //   Runnable mHideRunnable = new Runnable() { @Override public void run() { mSystemUiHider.hide(); }};
    //
    //   /**
    //    * Schedules a call to hide() in [delay] milliseconds, canceling any
    //    * previously scheduled calls.
    //    */
    //   private void delayedHide(int delayMillis)
    //      {
    //      mHideHandler.removeCallbacks(mHideRunnable);
    //      mHideHandler.postDelayed(mHideRunnable, delayMillis);
    //      }
    //

    @Override
    protected void onSaveInstanceState(final Bundle outState) {
        Log.v(TAG, "onSaveInstanceState()");
        super.onSaveInstanceState(outState);

        outState.putParcelable(KEY_IMAGE_URI, _imageUri);
        outState.putSerializable(KEY_IMAGE_SOURCE, _imageSource);
    }

    private boolean initialize(final Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            _imageUri = savedInstanceState.getParcelable(KEY_IMAGE_URI);
            _image = (Bitmap) getLastNonConfigurationInstance();
            _imageSource = (ImageSource) savedInstanceState.getSerializable(KEY_IMAGE_SOURCE);

            if (_image != null && _imageUri == null) {
                return false;
            }
        }
        return true;
    }

    private void startRecognition(Uri uri) {
        RecognitionActivity.start(this, uri);
    }

    private void takePhoto() {
        // We must specify a destination path for an image.
        final File photo = new File(Environment.getExternalStorageDirectory(), genPhotoFileName());

        _imageUri = Uri.fromFile(photo);

        final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE).putExtra(MediaStore.EXTRA_OUTPUT,
                _imageUri);

        startActivityForResult(intent, PickImageActivity.REQUEST_CODE_TAKE_PHOTO);
    }

    private String genPhotoFileName() {
        return "photo.jpg";
    }

    void dispatchRecognizeClick(final RecognitionTarget recognitionTarget) {
        //   disableRecognitionButtons();

        RecognitionContext.setRecognitionTarget(recognitionTarget);

        startRecognition();
    }

    /**
     * Start recognition process for an image with given URI.
     * 
     * @param imageUri
     *            URI of the image to recognize.
     */
    private void startRecognition() {
        RecognitionActivity.start(this, _imageUri);
    }

    private void loadImage() {
        //  disableRecognitionButtons();
        _imagePreview.setImageBitmap(null);

        final Uri uri = this._imageUri;

        if (this._imageLoadTask != null) {
            this._imageLoadTask.cancel(true);
        }

        this._imageLoadTask = new AsyncTask<Void, Void, Bitmap>() {
            @Override
            protected Bitmap doInBackground(final Void... params) {
                return RecognitionContext.getImage(uri);
            }

            @Override
            protected void onPostExecute(final Bitmap result) {
                dispatchImageLoaded(result);
            }
        };

        this._imageLoadTask.execute();
    }

    void dispatchImageLoaded(final Bitmap image) {
        Log.v(TAG, "dispatchImageLoaded()");

        if (image != null) {
            _imagePreview.setImageBitmap(image);
        }

        //      dispatchRecognizeClick (RecognitionTarget.TEXT);
    }
}