1package org.opencv.samples.puzzle15; 2 3import org.opencv.android.BaseLoaderCallback; 4import org.opencv.android.LoaderCallbackInterface; 5import org.opencv.android.OpenCVLoader; 6import org.opencv.core.Mat; 7import org.opencv.android.CameraBridgeViewBase; 8import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener; 9import org.opencv.android.JavaCameraView; 10 11import android.os.Bundle; 12import android.app.Activity; 13import android.util.Log; 14import android.view.Menu; 15import android.view.MenuItem; 16import android.view.MotionEvent; 17import android.view.View; 18import android.view.WindowManager; 19 20public 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