@Override
 public void onPause() {
   super.onPause();
   isRun = false;
   thread.interrupt();
   thread = null;
   if (mOpenCvCameraView != null) mOpenCvCameraView.disableView();
 }
 @Override
 public void onManagerConnected(int status) {
   switch (status) {
     case LoaderCallbackInterface.SUCCESS:
       {
         Log.i(TAG, "OpenCV loaded successfully");
         mOpenCvCameraView.enableView();
         mOpenCvCameraView.setOnTouchListener(Tutorial3Activity.this);
       }
       break;
     default:
       {
         super.onManagerConnected(status);
       }
       break;
   }
 }
  /** Called when the activity is first created. */
  @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.tutorial3_surface_view);

    mOpenCvCameraView = (Tutorial3View) findViewById(R.id.tutorial3_activity_java_surface_view);

    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);

    mOpenCvCameraView.setCvCameraViewListener(this);

    reentrantReadWriteLock = new ReentrantReadWriteLock();
    readLock = reentrantReadWriteLock.readLock();
    writeLock = reentrantReadWriteLock.writeLock();
  }
  public boolean onOptionsItemSelected(MenuItem item) {
    Log.i(TAG, "called onOptionsItemSelected; selected item: " + item);
    if (item.getGroupId() == 1) {
      mOpenCvCameraView.setEffect((String) item.getTitle());
      Toast.makeText(this, mOpenCvCameraView.getEffect(), Toast.LENGTH_SHORT).show();
    } else if (item.getGroupId() == 2) {
      int id = item.getItemId();
      Size resolution = mResolutionList.get(id);
      mOpenCvCameraView.setResolution(resolution);
      resolution = mOpenCvCameraView.getResolution();
      String caption =
          Integer.valueOf(resolution.width).toString()
              + "x"
              + Integer.valueOf(resolution.height).toString();
      Toast.makeText(this, caption, Toast.LENGTH_SHORT).show();
    }

    return true;
  }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    List<String> effects = mOpenCvCameraView.getEffectList();

    if (effects == null) {
      Log.e(TAG, "Color effects are not supported by device!");
      return true;
    }

    mColorEffectsMenu = menu.addSubMenu("Color Effect");
    mEffectMenuItems = new MenuItem[effects.size()];

    int idx = 0;
    ListIterator<String> effectItr = effects.listIterator();
    while (effectItr.hasNext()) {
      String element = effectItr.next();
      mEffectMenuItems[idx] = mColorEffectsMenu.add(1, idx, Menu.NONE, element);
      idx++;
    }

    mResolutionMenu = menu.addSubMenu("Resolution");
    mResolutionList = mOpenCvCameraView.getResolutionList();
    mResolutionMenuItems = new MenuItem[mResolutionList.size()];

    ListIterator<Size> resolutionItr = mResolutionList.listIterator();
    idx = 0;
    while (resolutionItr.hasNext()) {
      Size element = resolutionItr.next();
      mResolutionMenuItems[idx] =
          mResolutionMenu.add(
              2,
              idx,
              Menu.NONE,
              Integer.valueOf(element.width).toString()
                  + "x"
                  + Integer.valueOf(element.height).toString());
      idx++;
    }

    return true;
  }
 @SuppressLint("SimpleDateFormat")
 @Override
 public boolean onTouch(View v, MotionEvent event) {
   Log.i(TAG, "onTouch event");
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
   String currentDateandTime = sdf.format(new Date());
   String fileName =
       Environment.getExternalStorageDirectory().getPath()
           + "/sample_picture_"
           + currentDateandTime
           + ".jpg";
   mOpenCvCameraView.takePicture(fileName);
   Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show();
   return false;
 }
 public void onDestroy() {
   super.onDestroy();
   if (mOpenCvCameraView != null) mOpenCvCameraView.disableView();
 }