package com.rec.photoeditor; import static com.rec.photoeditor.editoractivity.EditorSaveConstants.RESTORE_SAVED_BITMAP; import java.io.IOException; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.Toast; import com.rec.photoeditor.editoractivity.BrightnessActivity; import com.rec.photoeditor.editoractivity.CropActivity; import com.rec.photoeditor.editoractivity.FilterActivity; import com.rec.photoeditor.editoractivity.RotateActivity; import com.rec.photoeditor.graphics.ImageProcessor; import com.rec.photoeditor.graphics.ImageProcessorListener; import com.rec.photoeditor.graphics.commands.RotateCommand; import com.rec.photoeditor.share.ShareDialog; import com.rec.photoeditor.utils.BitmapScalingUtil; import com.rec.photoeditor.utils.ImageScannerAdapter; import com.rec.photoeditor.utils.SaveToStorageUtil; import com.rec.photoeditor.utils.SendMailUtil; public class EditorActivity extends Activity implements OnClickListener { private static final int EDITOR_FUNCTION = 1; private static final int AUTHORIZE_FACEBOOK = 2; private ImageView imageView; // Top bar buttons private ImageButton brightnessButton; private ImageButton cropButton; private ImageButton rotateButton; private ImageButton filtersButton; // Bottom bar buttons private ImageButton backButton; private ImageButton emailButton; private ImageButton shareButton; private ImageButton saveButton; private String savedImagePath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.editor); initComponents(); initImageView(); } private void initComponents() { brightnessButton = (ImageButton) findViewById(R.id.brightness_button); brightnessButton.setOnClickListener(this); cropButton = (ImageButton) findViewById(R.id.crop_button); cropButton.setOnClickListener(this); rotateButton = (ImageButton) findViewById(R.id.rotate_button); rotateButton.setOnClickListener(this); filtersButton = (ImageButton) findViewById(R.id.filters_button); filtersButton.setOnClickListener(this); backButton = (ImageButton) findViewById(R.id.back_button); backButton.setOnClickListener(this); emailButton = (ImageButton) findViewById(R.id.email_button); emailButton.setOnClickListener(this); shareButton = (ImageButton) findViewById(R.id.share_button); shareButton.setOnClickListener(this); saveButton = (ImageButton) findViewById(R.id.save_button); saveButton.setOnClickListener(this); } private void initImageView() { String imageUri = getIntent().getStringExtra( getString(R.string.image_uri_flag)); Log.i("REC Photo Editor", "Image URI = " + imageUri); imageView = (ImageView) findViewById(R.id.image_view); final Object data = getLastNonConfigurationInstance(); if (data == null) { openBitmap(imageUri); } else { restoreBitmap(); } } @Override public void onResume() { super.onResume(); if (Platform.facebook != null) { if (Platform.facebook.isSessionValid()) { Platform.facebook.extendAccessTokenIfNeeded(this, null); } } } private void restoreBitmap() { Log.i("Photo Editor", "Restore bitmap"); Bitmap b = ImageProcessor.getInstance().getBitmap(); if (b != null) { imageView.setImageBitmap(b); } } @Override public Object onRetainNonConfigurationInstance() { Bundle saveObject = new Bundle(); saveObject.putInt("Bitmap", RESTORE_SAVED_BITMAP); return saveObject; } private void openBitmap(String imageUri) { Log.i("Photo Editor", "Open Bitmap"); Bitmap b; try { b = BitmapScalingUtil.bitmapFromUri(this, Uri.parse(imageUri)); if (b != null) { Log.i("REC Photo Editor", "Opened Bitmap Size: " + b.getWidth() + " " + b.getHeight()); } ImageProcessor.getInstance().setBitmap(b); imageView.setImageBitmap(b); } catch (IOException e) { e.printStackTrace(); } } public void onClick(View v) { switch (v.getId()) { case R.id.brightness_button: brightnessButtonClicked(); break; case R.id.crop_button: cropButtonClicked(); break; case R.id.rotate_button: rotateButtonClicked(); break; case R.id.filters_button: filtersButtonClicked(); break; case R.id.back_button: backButtonClicked(); break; case R.id.email_button: emailButtonClicked(); break; case R.id.share_button: sharedButtonClicked(); break; case R.id.save_button: saveButtonClicked(); break; default: break; } } private void backButtonClicked() { finish(); } private void emailButtonClicked() { if (!imageIsAlreadySaved() || ImageProcessor.getInstance().isModified()) { saveImage(); } SendMailUtil.sendIntent(savedImagePath, this); } private boolean imageIsAlreadySaved() { return savedImagePath != null && !savedImagePath.equals(""); } private void sharedButtonClicked() { if (!imageIsAlreadySaved() || ImageProcessor.getInstance().isModified()) { saveImage(); } ShareDialog share = new ShareDialog(this, this, savedImagePath); share.show(); } private void saveButtonClicked() { saveImage(); Toast.makeText(this, R.string.photo_saved_info, Toast.LENGTH_LONG) .show(); } private void saveImage() { savedImagePath = SaveToStorageUtil.save(ImageProcessor.getInstance() .getBitmap(), this); ImageScannerAdapter adapter = new ImageScannerAdapter(this); adapter.scanImage(savedImagePath); ImageProcessor.getInstance().resetModificationFlag(); } private void deprotateButtonClicked() { } private void cropButtonClicked() { runEditorActivity(CropActivity.class); } private void brightnessButtonClicked() { runEditorActivity(BrightnessActivity.class); } private void filtersButtonClicked() { runEditorActivity(FilterActivity.class); } private void rotateButtonClicked() { runEditorActivity(RotateActivity.class); } private void brightnessButtonLongClick() { Toast.makeText(this, "Brightness long click", Toast.LENGTH_SHORT) .show(); } private void runEditorActivity(Class<?> activityClass) { Intent i = new Intent(this, activityClass); startActivityForResult(i, EDITOR_FUNCTION); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case AUTHORIZE_FACEBOOK: Platform.facebook.authorizeCallback(requestCode, resultCode, data); break; case EDITOR_FUNCTION: if (resultCode == RESULT_OK) { imageView.setImageBitmap(ImageProcessor.getInstance() .getBitmap()); } break; default: break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.application_menu, menu); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.about_us_item: startAboutUsActivity(); return true; default: return super.onOptionsItemSelected(item); } } private Runnable createPostRotateAction() { final Runnable postRotateAction = new Runnable() { public void run() { imageView.setImageBitmap(ImageProcessor.getInstance() .getBitmap()); imageView.invalidate(); } }; return postRotateAction; } private void startAboutUsActivity() { Intent i = new Intent(this, AboutUsActivity.class); startActivity(i); } }