package org.awesomeapp.messenger.ui.widgets;
import info.guardianproject.iocipher.File;
import info.guardianproject.iocipher.FileInputStream;
import info.guardianproject.iocipher.FileOutputStream;
import im.zom.messenger.R;
import java.io.BufferedOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.os.Bundle;
public class SecureCameraActivity extends SurfaceGrabberActivity {
private final static String TAG = SecureCameraActivity.class.getSimpleName();
public static final String FILENAME = "filename";
public static final String THUMBNAIL = "thumbnail";
public static final String MIMETYPE = "mimeType";
private String filename = null;
private String thumbnail = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
filename = getIntent().getStringExtra(FILENAME);
thumbnail = getIntent().getStringExtra(THUMBNAIL);
}
@Override
protected int getLayout() {
return R.layout.secure_camera;
}
@Override
protected int getCameraDirection() {
//return CameraInfo.CAMERA_FACING_FRONT;
return CameraInfo.CAMERA_FACING_BACK;
}
@Override
public void onPictureTaken(final byte[] data, Camera camera) {
try {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(filename)));
out.write(data);
out.flush();
out.close();
if (thumbnail != null) {
Bitmap thumbnailBitmap = getThumbnail(getContentResolver(), filename);
FileOutputStream fos = new FileOutputStream(thumbnail);
thumbnailBitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);
}
Intent intent = new Intent();
intent.putExtra(FILENAME, filename);
intent.putExtra(THUMBNAIL, thumbnail);
intent.putExtra(MIMETYPE, "image/*");
setResult(Activity.RESULT_OK, intent);
finish();
} catch (Exception e) {
e.printStackTrace();
setResult(Activity.RESULT_CANCELED);
finish();
}
finish();
}
public final static int THUMBNAIL_SIZE = 800;
public Bitmap getThumbnail(ContentResolver cr, String filename) throws IOException {
File file = new File(filename);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
options.inInputShareable = true;
options.inPurgeable = true;
FileInputStream fis = new FileInputStream(file);
BitmapFactory.decodeStream(fis, null, options);
fis.close();
if ((options.outWidth == -1) || (options.outHeight == -1))
throw new IOException("Bad image " + file);
int originalSize = (options.outHeight > options.outWidth) ? options.outHeight : options.outWidth;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = originalSize / THUMBNAIL_SIZE;
fis = new FileInputStream(file);
Bitmap scaledBitmap = BitmapFactory.decodeStream(fis, null, opts);
return scaledBitmap;
}
}