public void flipCamera(View view) {
   stopCamera();
   camera.flip();
   viewfinder.invalidate();
   startCamera();
   updateMenu();
 }
  protected void updateMenu() {
    Button flipCameraButton = (Button) findViewById(R.id.flipCameraButton);
    if (camera.getCameraCount() > 1) {
      flipCameraButton.setVisibility(View.VISIBLE);
      if (camera.isFront()) {
        flipCameraButton.setCompoundDrawablesWithIntrinsicBounds(
            R.drawable.ic_camera_front_white_24dp, 0, 0, 0);
        flipCameraButton.setText(getString(R.string.camera_front));
      } else {
        flipCameraButton.setCompoundDrawablesWithIntrinsicBounds(
            R.drawable.ic_camera_rear_white_24dp, 0, 0, 0);
        flipCameraButton.setText(getString(R.string.camera_rear));
      }
    } else {
      flipCameraButton.setVisibility(View.GONE);
    }

    Button thresholdDisplayButton = (Button) findViewById(R.id.thresholdDisplayButton);
    if (detector.shouldDrawThreshold()) {
      thresholdDisplayButton.setText(getString(R.string.threshold_on));
      thresholdDisplayButton.setCompoundDrawablesWithIntrinsicBounds(
          R.drawable.ic_filter_b_and_w_white_24dp, 0, 0, 0);
    } else {
      thresholdDisplayButton.setText(getString(R.string.threshold_off));
      thresholdDisplayButton.setCompoundDrawablesWithIntrinsicBounds(
          R.drawable.ic_filter_b_and_w_off_white_24dp, 0, 0, 0);
    }

    Button markerDisplayButton = (Button) findViewById(R.id.markerDisplayButton);
    if (detector.getMarkerDrawMode() == MarkerDetector.MarkerDrawMode.off) {
      markerDisplayButton.setCompoundDrawablesWithIntrinsicBounds(
          R.drawable.ic_border_clear_white_24dp, 0, 0, 0);
      markerDisplayButton.setText(getString(R.string.marker_off));
    } else if (detector.getMarkerDrawMode() == MarkerDetector.MarkerDrawMode.outline) {
      markerDisplayButton.setCompoundDrawablesWithIntrinsicBounds(
          R.drawable.ic_border_outer_white_24dp, 0, 0, 0);
      markerDisplayButton.setText(getString(R.string.marker_outline));
    } else {
      markerDisplayButton.setCompoundDrawablesWithIntrinsicBounds(
          R.drawable.ic_border_all_white_24dp, 0, 0, 0);
      markerDisplayButton.setText(getString(R.string.marker_on));
    }

    // private ImageView autoOpenIcon;
    // private TextView autoOpenLabel;
  }
 private void startCamera() {
   if (camera != null) {
     try {
       camera.start(holder);
       detector.start();
       layout();
     } catch (Exception e) {
       Log.e(TAG, e.getMessage(), e);
     }
   }
 }
  private void layout() {
    Rect frame = camera.getFrame(viewfinder.getWidth(), viewfinder.getHeight());
    if (frame == null) {
      return;
    }

    Log.i(TAG, "Frame = " + frame + ", " + viewfinder.getWidth());
    ViewGroup.LayoutParams p = bottomView.getLayoutParams();
    SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview);
    p.height = surfaceView.getHeight() - frame.bottom;
    p.width = frame.width();
    bottomView.setLayoutParams(p);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && hasNavBar(this)) {
      // Don't draw over nav bar
      bottomView.setPadding(0, 0, 0, getNavBarHeight());
    }

    bottomView.requestLayout();
    viewfinder.invalidate();
  }
 private void stopCamera() {
   if (camera != null) {
     detector.stop();
     camera.release();
   }
 }