package com.sivsais.oktyper;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.JavaCameraView;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
public class ProtoActivity2 extends Activity implements CvCameraViewListener2 {
private static final String TAG = "OCVSample::Activity";
private final double SCALE = 1.5;
private Mat mRgba;
private Mat thumb;
private JavaViewWorker mWorker;
private CameraBridgeViewBase mOpenCvCameraView;
private MenuItem debugMode;
private MenuItem handToggle;
private MenuItem flashToggle;
private MenuItem actionToggle;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "called onCreate");
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.java_surface_view);
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.java_activity_surface_view);
mOpenCvCameraView.setCvCameraViewListener(this);
mOpenCvCameraView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Log.i(TAG, "SINGLETAP");
mWorker.onSingleTap(motionEvent);
return true;
}
});
mWorker = new JavaViewWorker(this, 0);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
debugMode = menu.add("Toggle debug mode");
handToggle = menu.add("Left hand");
flashToggle = menu.add("Toggle flash");
actionToggle = menu.add("Toggle action");
return true;
}
@Override
public void onPause() {
super.onPause();
if (mOpenCvCameraView != null)
mOpenCvCameraView.disableView();
}
@Override
public void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
}
public void onDestroy() {
super.onDestroy();
if (mOpenCvCameraView != null) {
mOpenCvCameraView.getHolder().removeCallback(mOpenCvCameraView);
mOpenCvCameraView.disableView();
}
}
public void onCameraViewStarted(int width, int height) {
mRgba = new Mat(height, width, CvType.CV_8UC4);
}
public void onCameraViewStopped() {
mRgba.release();
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_RGBA2RGB);
if (thumb == null) {
thumb = new Mat();
}
Imgproc.resize(mRgba, thumb, new Size(mRgba.cols() / SCALE, mRgba.rows() / SCALE));
mWorker.process(thumb);
Imgproc.resize(thumb, mRgba, mRgba.size());
return mRgba;
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item == debugMode) {
mWorker.toggleDebugMode();
}
if (item == handToggle) {
int hand = mWorker.toggleHand();
if (hand == Recognizer.HAND_LEFT) {
item.setTitle("Right hand");
} else if (hand == Recognizer.HAND_RIGHT) {
item.setTitle("Left hand");
}
}
if (item == flashToggle) {
((JavaCameraView) mOpenCvCameraView).flashToggle();
}
if (item == actionToggle) {
item.setTitle(mWorker.toggleAction());
}
return true;
}
}