Home | History | Annotate | Download | only in puzzle15
      1 package org.opencv.samples.puzzle15;
      2 
      3 import org.opencv.android.BaseLoaderCallback;
      4 import org.opencv.android.LoaderCallbackInterface;
      5 import org.opencv.android.OpenCVLoader;
      6 import org.opencv.core.Mat;
      7 import org.opencv.android.CameraBridgeViewBase;
      8 import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener;
      9 import org.opencv.android.JavaCameraView;
     10 
     11 import android.os.Bundle;
     12 import android.app.Activity;
     13 import android.util.Log;
     14 import android.view.Menu;
     15 import android.view.MenuItem;
     16 import android.view.MotionEvent;
     17 import android.view.View;
     18 import android.view.WindowManager;
     19 
     20 public class Puzzle15Activity extends Activity implements CvCameraViewListener, View.OnTouchListener {
     21 
     22     private static final String  TAG = "Sample::Puzzle15::Activity";
     23 
     24     private CameraBridgeViewBase mOpenCvCameraView;
     25     private Puzzle15Processor    mPuzzle15;
     26     private MenuItem             mItemHideNumbers;
     27     private MenuItem             mItemStartNewGame;
     28 
     29 
     30     private int                  mGameWidth;
     31     private int                  mGameHeight;
     32 
     33     private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
     34 
     35         @Override
     36         public void onManagerConnected(int status) {
     37             switch (status) {
     38                 case LoaderCallbackInterface.SUCCESS:
     39                 {
     40                     Log.i(TAG, "OpenCV loaded successfully");
     41 
     42                     /* Now enable camera view to start receiving frames */
     43                     mOpenCvCameraView.setOnTouchListener(Puzzle15Activity.this);
     44                     mOpenCvCameraView.enableView();
     45                 } break;
     46                 default:
     47                 {
     48                     super.onManagerConnected(status);
     49                 } break;
     50             }
     51         }
     52     };
     53 
     54     @Override
     55     public void onCreate(Bundle savedInstanceState) {
     56         super.onCreate(savedInstanceState);
     57         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
     58 
     59         Log.d(TAG, "Creating and setting view");
     60         mOpenCvCameraView = (CameraBridgeViewBase) new JavaCameraView(this, -1);
     61         setContentView(mOpenCvCameraView);
     62         mOpenCvCameraView.setCvCameraViewListener(this);
     63         mPuzzle15 = new Puzzle15Processor();
     64         mPuzzle15.prepareNewGame();
     65     }
     66 
     67     @Override
     68     public void onPause()
     69     {
     70         super.onPause();
     71         if (mOpenCvCameraView != null)
     72             mOpenCvCameraView.disableView();
     73     }
     74 
     75     @Override
     76     public void onResume()
     77     {
     78         super.onResume();
     79         if (!OpenCVLoader.initDebug()) {
     80             Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
     81             OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
     82         } else {
     83             Log.d(TAG, "OpenCV library found inside package. Using it!");
     84             mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
     85         }
     86     }
     87 
     88     public void onDestroy() {
     89         super.onDestroy();
     90         if (mOpenCvCameraView != null)
     91             mOpenCvCameraView.disableView();
     92     }
     93 
     94     @Override
     95     public boolean onCreateOptionsMenu(Menu menu) {
     96         Log.i(TAG, "called onCreateOptionsMenu");
     97         mItemHideNumbers = menu.add("Show/hide tile numbers");
     98         mItemStartNewGame = menu.add("Start new game");
     99         return true;
    100     }
    101 
    102     @Override
    103     public boolean onOptionsItemSelected(MenuItem item) {
    104         Log.i(TAG, "Menu Item selected " + item);
    105         if (item == mItemStartNewGame) {
    106             /* We need to start new game */
    107             mPuzzle15.prepareNewGame();
    108         } else if (item == mItemHideNumbers) {
    109             /* We need to enable or disable drawing of the tile numbers */
    110             mPuzzle15.toggleTileNumbers();
    111         }
    112         return true;
    113     }
    114 
    115     public void onCameraViewStarted(int width, int height) {
    116         mGameWidth = width;
    117         mGameHeight = height;
    118         mPuzzle15.prepareGameSize(width, height);
    119     }
    120 
    121     public void onCameraViewStopped() {
    122     }
    123 
    124     public boolean onTouch(View view, MotionEvent event) {
    125         int xpos, ypos;
    126 
    127         xpos = (view.getWidth() - mGameWidth) / 2;
    128         xpos = (int)event.getX() - xpos;
    129 
    130         ypos = (view.getHeight() - mGameHeight) / 2;
    131         ypos = (int)event.getY() - ypos;
    132 
    133         if (xpos >=0 && xpos <= mGameWidth && ypos >=0  && ypos <= mGameHeight) {
    134             /* click is inside the picture. Deliver this event to processor */
    135             mPuzzle15.deliverTouchEvent(xpos, ypos);
    136         }
    137 
    138         return false;
    139     }
    140 
    141     public Mat onCameraFrame(Mat inputFrame) {
    142         return mPuzzle15.puzzleFrame(inputFrame);
    143     }
    144 }
    145