package org.androad.ui.camera;
import java.lang.reflect.Method;
import org.androad.R;
import org.androad.ui.common.CommonDialogFactory;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class CameraFavorite extends Activity{
// ===========================================================
// Final Fields
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
Camera camera;
Button buttonClick;
SurfaceHolder previewHolder;
String name;
// ===========================================================
// Constructors
// ===========================================================
@Override
public void onCreate(final Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.camerafavorite);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
name = this.getIntent().getStringExtra(CommonDialogFactory.class.getName());
SurfaceView preview=(SurfaceView)findViewById(R.id.cameraPreview);
previewHolder=preview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
buttonClick = (Button) findViewById(R.id.cameraButtonClick);
buttonClick.setOnClickListener( new OnClickListener() {
public void onClick(View v) {
camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
});
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods from SuperClass/Interfaces
// ===========================================================
SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
camera=Camera.open();
try {
camera.setPreviewDisplay(previewHolder);
}
catch (Throwable t) {
Toast
.makeText(CameraFavorite.this, t.getMessage(), Toast.LENGTH_LONG)
.show();
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters parameters=camera.getParameters();
parameters.setPreviewSize(width, height);
parameters.setPictureFormat(PixelFormat.JPEG);
try {
String flash = (String) Camera.Parameters.class.getField("FLASH_MODE_AUTO").get(parameters);
String focus = (String) Camera.Parameters.class.getField("FOCUS_MODE_AUTO").get(parameters);
Method setFlash = Camera.Parameters.class.getMethod("setFlashMode", new Class[] { String.class });
Method setFocus = Camera.Parameters.class.getMethod("setFocusMode", new Class[] { String.class });
} catch (final Exception e) {}
camera.setParameters(parameters);
camera.startPreview();
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera=null;
}
};
// ===========================================================
// Methods
// ===========================================================
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
}
};
/** Handles data for raw picture */
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
}
};
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
Intent d = new Intent();
d.putExtra(CommonDialogFactory.class.getName(), name);
d.putExtra(CameraFavorite.class.getName(), data);
CameraFavorite.this.setResult(Activity.RESULT_OK, d);
CameraFavorite.this.finish();
}
};
}