package com.rec.photoeditor.editoractivity;
import static com.rec.photoeditor.editoractivity.EditorSaveConstants.RESTORE_PREVIEW_BITMAP;
import static com.rec.photoeditor.editoractivity.EditorSaveConstants.RESTORE_SAVED_BITMAP;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import com.rec.photoeditor.R;
import com.rec.photoeditor.graphics.ImageProcessor;
import com.rec.photoeditor.graphics.ImageProcessorListener;
import com.rec.photoeditor.graphics.commands.CropCommand;
public class CropActivity extends Activity implements ImageProcessorListener {
private ImageProcessor imageProcessor;
private CropImageView imageView;
private ImageButton okButton;
private ImageButton cancelButton;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.crop_editor);
initializeComponents();
}
private void initializeComponents() {
imageProcessor = ImageProcessor.getInstance();
imageView = (CropImageView) findViewById(R.id.image_view);
okButton = (ImageButton) findViewById(R.id.ok_button);
okButton.setOnClickListener(okButtonListener);
cancelButton = (ImageButton) findViewById(R.id.cancel_button);
cancelButton.setOnClickListener(cancelButtonListener);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
initializeValues();
}
private void initializeValues() {
final Object data = getLastNonConfigurationInstance();
if (data == null) {
imageView.setImageBitmap(imageProcessor.getBitmap());
} else {
restoreSavedValues(data);
}
}
private void restoreSavedValues(Object data) {
Bundle savedValues = (Bundle) data;
int bitmapToRead = savedValues.getInt("BITMAP");
boolean isRunning = savedValues.getBoolean("IS_RUNNING");
Rect roi = Rect.unflattenFromString(savedValues
.getString("FLATTEN_ROI"));
if (bitmapToRead == RESTORE_PREVIEW_BITMAP) {
imageView.setImageBitmap(imageProcessor.getLastResultBitmap());
} else {
imageView.setImageBitmap(imageProcessor.getBitmap());
}
imageView.setRegionOfInterest(roi);
if (isRunning) {
onProcessStart();
imageProcessor.setProcessListener(this);
}
}
@Override
public Object onRetainNonConfigurationInstance() {
Bundle saveObject = new Bundle();
if (imageProcessor.getLastResultBitmap() == null) {
saveObject.putInt("BITMAP", RESTORE_SAVED_BITMAP);
} else {
saveObject.putInt("BITMAP", RESTORE_PREVIEW_BITMAP);
}
saveObject.putString("FLATTEN_ROI", imageView.getRegionOfInterest()
.flattenToString());
saveObject.putBoolean("IS_RUNNING", isProgressBarVisible());
return saveObject;
}
private boolean isProgressBarVisible() {
return progressBar.getVisibility() == View.VISIBLE ? true : false;
}
private OnClickListener okButtonListener = new OnClickListener() {
public void onClick(View v) {
setResult(RESULT_OK);
runImageProcessor();
}
};
private void runImageProcessor() {
CropCommand command = new CropCommand(imageView.getRegionOfInterest());
imageProcessor.setProcessListener(this);
imageProcessor.runCommand(command);
}
private OnClickListener cancelButtonListener = new OnClickListener() {
public void onClick(View v) {
setResult(RESULT_CANCELED);
finish();
}
};
public void onProcessStart() {
// turn off buttons and show "processing" animation
Log.i("Crop", "Start Processing");
okButton.setEnabled(false);
cancelButton.setEnabled(false);
progressBar.setVisibility(View.VISIBLE);
}
public void onProcessEnd(Bitmap result) {
Log.i("Crop", "Start Processing");
okButton.setEnabled(true);
cancelButton.setEnabled(true);
progressBar.setVisibility(View.INVISIBLE);
imageView.setImageBitmap(result);
imageView.invalidate();
imageProcessor.save();
finish();
}
}