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.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import com.rec.photoeditor.R;
import com.rec.photoeditor.graphics.ImageProcessor;
import com.rec.photoeditor.graphics.ImageProcessorListener;
import com.rec.photoeditor.graphics.commands.BrightnessCommand;
public class BrightnessActivity extends Activity implements
ImageProcessorListener {
private ImageProcessor imageProcessor;
private ImageView imageView;
private ImageButton okButton;
private ImageButton cancelButton;
private SeekBar slider;
private View progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.brightness_editor);
initializeComponents();
}
private void initializeComponents() {
imageProcessor = ImageProcessor.getInstance();
imageView = (ImageView) findViewById(R.id.image_view);
slider = (SeekBar) findViewById(R.id.slider);
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();
slider.setOnSeekBarChangeListener(sliderChangeListener);
}
private void initializeValues() {
final Object data = getLastNonConfigurationInstance();
if (data == null) {
imageView.setImageBitmap(imageProcessor.getBitmap());
} else {
restoreSavedValues(data);
}
}
private void restoreSavedValues(final Object data) {
Bundle savedValues = (Bundle)data;
int bitmapToRead = savedValues.getInt("BITMAP");
int progress = savedValues.getInt("SLIDER_STATE");
boolean isRunning = savedValues.getBoolean("IS_RUNNING");
if (bitmapToRead == RESTORE_PREVIEW_BITMAP){
imageView.setImageBitmap(imageProcessor.getLastResultBitmap());
} else {
imageView.setImageBitmap(imageProcessor.getBitmap());
}
slider.setProgress(progress);
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.putInt("SLIDER_STATE", slider.getProgress());
saveObject.putBoolean("IS_RUNNING", isProgressBarVisible());
return saveObject;
}
private boolean isProgressBarVisible() {
return progressBar.getVisibility()==View.VISIBLE?true:false;
}
private void runImageProcessor() {
BrightnessCommand command = new BrightnessCommand(
sliderValueToBrightness(slider.getProgress()));
imageProcessor.setProcessListener(this);
imageProcessor.runCommand(command);
}
public void onProcessStart() {
// turn off buttons and show "processing" animation
Log.i("Brightness", "Start Processing");
okButton.setEnabled(false);
cancelButton.setEnabled(false);
progressBar.setVisibility(View.VISIBLE);
}
public void onProcessEnd(Bitmap result) {
Log.i("Brightness", "End Processing");
okButton.setEnabled(true);
cancelButton.setEnabled(true);
progressBar.setVisibility(View.INVISIBLE);
imageView.setImageBitmap(result);
imageView.invalidate();
}
private OnClickListener okButtonListener = new OnClickListener() {
public void onClick(View v) {
setResult(RESULT_OK);
imageProcessor.save();
finish();
}
};
private int sliderValueToBrightness(int progress) {
return progress - 100;
}
private OnClickListener cancelButtonListener = new OnClickListener() {
public void onClick(View v) {
setResult(RESULT_CANCELED);
imageProcessor.clearProcessListener();
finish();
}
};
private OnSeekBarChangeListener sliderChangeListener = new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
// not used here
}
public void onStartTrackingTouch(SeekBar seekBar) {
// not used here
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if (sliderMovedByUser(seekBar, fromUser)) {
runImageProcessor();
}
}
private boolean sliderMovedByUser(SeekBar seekBar, boolean fromUser) {
return fromUser && seekBar.getId() == slider.getId();
}
};
}