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.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.Toast; import com.rec.photoeditor.R; import com.rec.photoeditor.graphics.CommandsPreset; import com.rec.photoeditor.graphics.ImageProcessor; import com.rec.photoeditor.graphics.ImageProcessorListener; import com.rec.photoeditor.graphics.commands.ImageProcessingCommand; public class FilterActivity extends Activity implements ImageProcessorListener { private ImageView imageView; private ImageButton okButton; private ImageButton cancelButton; private ProgressBar progressBar; private ImageProcessor imageProcessor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.filter_activity); initializeComponents(); } private void initializeComponents() { imageProcessor = ImageProcessor.getInstance(); imageView = (ImageView) 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); gallery = (Gallery) findViewById(R.id.filter_gallery); gallery.setAdapter(new ImageAdapter(this)); gallery.setOnItemClickListener(listener); 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"); int selectedFilterIdx = savedValues.getInt("SELECTED_FILTER_POSITION"); if (bitmapToRead == RESTORE_PREVIEW_BITMAP) { imageView.setImageBitmap(imageProcessor.getLastResultBitmap()); } else { imageView.setImageBitmap(imageProcessor.getBitmap()); } gallery.setSelection(selectedFilterIdx); 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("SELECTED_FILTER_POSITION", gallery.getSelectedItemPosition()); saveObject.putBoolean("IS_RUNNING", isProgressBarVisible()); return saveObject; } private boolean isProgressBarVisible() { return progressBar.getVisibility() == View.VISIBLE ? true : false; } private OnItemClickListener listener = new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { runImageProcessor(position); Toast.makeText( FilterActivity.this, "Processing: " + CommandsPreset.Names.get(position), Toast.LENGTH_SHORT).show(); } }; private void runImageProcessor(int position) { ImageProcessingCommand command = getCommand(position); ImageProcessor.getInstance().setProcessListener(this); ImageProcessor.getInstance().runCommand(command); } private ImageProcessingCommand getCommand(int position) { return CommandsPreset.Preset.get(position); } public class ImageAdapter extends BaseAdapter { int galleryItemBackground; private Context context; private Integer[] mImageIds = CommandsPreset.ImageIds; public ImageAdapter(Context c) { context = c; TypedArray attr = context .obtainStyledAttributes(R.styleable.FiltersGallery); galleryItemBackground = attr .getResourceId( R.styleable.FiltersGallery_android_galleryItemBackground, 0); attr.recycle(); } public int getCount() { return mImageIds.length; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(context); imageView.setImageResource(mImageIds[position]); imageView.setLayoutParams(new Gallery.LayoutParams(150, 150)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setBackgroundResource(galleryItemBackground); return imageView; } } private OnClickListener okButtonListener = new OnClickListener() { public void onClick(View v) { setResult(RESULT_OK); imageProcessor.save(); finish(); } }; private OnClickListener cancelButtonListener = new OnClickListener() { public void onClick(View v) { setResult(RESULT_CANCELED); imageProcessor.clearProcessListener(); finish(); } }; private Gallery gallery; public void onProcessStart() { // turn off buttons and show "processing" animation Log.i("FilterActivity", "Start Processing"); okButton.setEnabled(false); cancelButton.setEnabled(false); progressBar.setVisibility(View.VISIBLE); } public void onProcessEnd(Bitmap result) { Log.i("FilterActivity", "Start Processing"); okButton.setEnabled(true); cancelButton.setEnabled(true); progressBar.setVisibility(View.INVISIBLE); imageView.setImageBitmap(result); imageView.invalidate(); } }