package com.simpleflashlightdemo;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.Toast;
import android.widget.ToggleButton;
public class MainActivity extends Activity implements SurfaceHolder.Callback {
private final static String TAG = "SimpleTorch";
Camera cam;
ToggleButton mTorch;
Parameters camParams;
private Context context;
AlertDialog.Builder builder;
AlertDialog alertDialog;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private final int FLASH_NOT_SUPPORTED = 0;
private final int FLASH_TORCH_NOT_SUPPORTED = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d(TAG, "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = MainActivity.this;
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)){
mTorch = (ToggleButton) findViewById(R.id.toggleButton1);
mTorch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d(TAG, "onCheckedChanged");
try{
if (cam == null){
cam = Camera.open();
}
camParams = cam.getParameters();
List<String> flashModes = camParams.getSupportedFlashModes();
if (isChecked){
if (flashModes.contains(Parameters.FLASH_MODE_TORCH)) {
camParams.setFlashMode(Parameters.FLASH_MODE_TORCH);
}else{
showDialog(MainActivity.this, FLASH_TORCH_NOT_SUPPORTED);
}
} else {
camParams.setFlashMode(Parameters.FLASH_MODE_OFF);
}
cam.setParameters(camParams);
cam.startPreview();
}catch (Exception e) {
Log.d(TAG, "Caught " + e);
Toast.makeText(MainActivity.this,
"Camera/Torch failure: " + e, Toast.LENGTH_SHORT).show();
e.printStackTrace();
if (cam != null) {
cam.stopPreview();
cam.release();
}
}
}
});
surfaceView = (SurfaceView) this.findViewById(R.id.hiddenSurfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceHolder.addCallback(this);
} else {
showDialog(MainActivity.this, FLASH_NOT_SUPPORTED);
}
}
@Override
protected void onResume() {
super.onResume();
if(cam == null){
cam = Camera.open();
}
}
@Override
protected void onStop() {
super.onStop();
cam.release();
}
@Override
protected void onPause() {
super.onPause();
if(cam != null){
cam.release();
}
}
public void showDialog (Context context, int dialogId) {
switch(dialogId){
case FLASH_NOT_SUPPORTED:
builder = new AlertDialog.Builder(context);
builder.setMessage("Sorry, Your phone does not support Camera Flash")
.setCancelable(false)
.setNeutralButton("Close", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alertDialog = builder.create();
alertDialog.show();
break;
case FLASH_TORCH_NOT_SUPPORTED:
builder = new AlertDialog.Builder(context);
builder.setMessage("Sorry, Your camera flash does not support torch feature")
.setCancelable(false)
.setNeutralButton("Close", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
alertDialog = builder.create();
alertDialog.show();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// Empty - required by interface
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
cam.setPreviewDisplay(holder);
} catch (IOException e) {
Log.e(TAG, "Unexpected IO Exception in setPreviewDisplay()", e);
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// Empty - required by interface.
}
}