package com.kedzie.vbox.machine;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import android.app.Dialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import com.actionbarsherlock.app.SherlockDialogFragment;
import com.kedzie.vbox.R;
import com.kedzie.vbox.app.BundleBuilder;
import com.kedzie.vbox.task.ActionBarTask;
/**
* Take a screenshot and save to filesystem
*
* @apiviz.stereotype fragment
*/
public class ScreenshotDialogFragment extends SherlockDialogFragment {
public static final String BUNDLE_BYTES = "bytes";
class SaveScreenshotTask extends ActionBarTask<Bitmap, Void> {
private String filename;
public SaveScreenshotTask() {
super(getSherlockActivity(), null);
filename = "screenshot_"+DateFormat.format("yyyyMMdd_hmmssaa", new Date())+".jpg";
}
@Override
protected Void work(Bitmap... params) throws Exception {
File file = new File(Environment.getExternalStorageDirectory().toString(), filename);
OutputStream fOut = new FileOutputStream(file);
params[0].compress(Bitmap.CompressFormat.JPEG, 85, fOut);
fOut.flush();
fOut.close();
try {
MediaStore.Images.Media.insertImage(getActivity().getContentResolver(),file.getAbsolutePath(),file.getName(),file.getName());
} catch (Exception e) {
Log.e(TAG, "Exception storing in MediaStore", e);
}
return null;
}
}
private View _view;
private Bitmap _bitmap;
public static ScreenshotDialogFragment getInstance(byte[] bytes) {
ScreenshotDialogFragment f = new ScreenshotDialogFragment();
f.setArguments(new BundleBuilder().putByteArray(BUNDLE_BYTES, bytes).create());
return f;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setTitle("Screenshot");
return dialog;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
byte[] bytes = getArguments().getByteArray(BUNDLE_BYTES);
_bitmap = BitmapFactory.decodeStream(new ByteArrayInputStream(bytes));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
_view = inflater.inflate(R.layout.screenshot_dialog, null);
ImageView imageView = (ImageView)_view.findViewById(R.id.imageView);
imageView.setImageBitmap(_bitmap);
((ImageButton)_view.findViewById(R.id.button_save)).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View arg0) {
dismiss();
new SaveScreenshotTask().execute(_bitmap);
}
});
((ImageButton)_view.findViewById(R.id.button_cancel)).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dismiss();
}
});
return _view;
}
}