package me.ccrama.redditslide.Activities; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.PorterDuff; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; import android.support.v4.content.FileProvider; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import com.afollestad.materialdialogs.color.ColorChooserDialog; import com.theartofdev.edmodo.cropper.CropImage; import com.theartofdev.edmodo.cropper.CropImageView; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import me.ccrama.redditslide.R; import me.ccrama.redditslide.Reddit; import me.ccrama.redditslide.Views.CanvasView; import me.ccrama.redditslide.Views.DoEditorActions; import me.ccrama.redditslide.Visuals.Palette; /** * Created by ccrama on 5/27/2015. */ public class Draw extends BaseActivity implements ColorChooserDialog.ColorCallback { CanvasView drawView; View color; Bitmap bitmap; public static Uri uri; public static DoEditorActions editor; @Override public void onCreate(Bundle savedInstance) { overrideSwipeFromAnywhere(); disableSwipeBackLayout(); super.onCreate(savedInstance); applyColorTheme(""); setContentView(R.layout.activity_draw); drawView = (CanvasView) findViewById(R.id.paintView); drawView.setBaseColor(Color.parseColor("#303030")); color = findViewById(R.id.color); CropImage.activity(uri).setGuidelines(CropImageView.Guidelines.ON).start(this); setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); setupAppBar(R.id.toolbar, "", true, Color.parseColor("#212121"), R.id.toolbar); } public int getLastColor() { return Reddit.colors.getInt("drawColor", Palette.getDefaultAccent()); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { onBackPressed(); } if(id == R.id.done && enabled){ File image; //image to share //check to see if the cache/shared_images directory is present final File imagesDir = new File( Draw.this.getCacheDir().toString() + File.separator + "shared_image"); if (!imagesDir.exists()) { imagesDir.mkdir(); //create the folder if it doesn't exist } else { deleteFilesInDir(imagesDir); } try { //creates a file in the cache; filename will be prefixed with "img" and end with ".png" image = File.createTempFile("img", ".png", imagesDir); FileOutputStream out = null; try { //convert image to png out = new FileOutputStream(image); Bitmap.createBitmap(drawView.getBitmap(), 0, (int) drawView.height, (int) drawView.right, (int) (drawView.bottom - drawView.height)) .compress(Bitmap.CompressFormat.JPEG, 100, out); } finally { if (out != null) { out.close(); /** * If a user has both a debug build and a release build installed, the authority name needs to be unique */ final String authority = (Draw.this.getPackageName()).concat(".") .concat(MediaView.class.getSimpleName()); final Uri contentUri = FileProvider.getUriForFile(Draw.this, authority, image); if (contentUri != null) { Intent intent = new Intent(); intent.setData(contentUri); setResult(RESULT_OK, intent); } else { //todo error Toast.makeText(this, getString(R.string.err_share_image), Toast.LENGTH_LONG).show(); } finish(); } } } catch (IOException | NullPointerException e) { e.printStackTrace(); //todo error Toast.makeText(this, getString(R.string.err_share_image), Toast.LENGTH_LONG).show(); } } if (id == R.id.undo) { drawView.undo(); } return super.onOptionsItemSelected(item); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.draw_menu, menu); return true; } boolean enabled ; @Override protected void onActivityResult(int code, int resultC, Intent data) { super.onActivityResult(code, resultC, data); if (code == 10001 && data != null) { Uri selectedImageUri = data.getData(); CropImage.activity(selectedImageUri) .setGuidelines(CropImageView.Guidelines.ON) .start(this); } else if (data != null) { CropImage.ActivityResult result = CropImage.getActivityResult(data); Uri selectedImageUri = result.getUri(); try { bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), selectedImageUri) .copy(Bitmap.Config.RGB_565, true); color.getBackground().setColorFilter(getLastColor(), PorterDuff.Mode.MULTIPLY); color.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new ColorChooserDialog.Builder(Draw.this, R.string.choose_color_title).allowUserColorInput(true).show(); } }); drawView.drawBitmap(bitmap); drawView.setPaintStrokeColor(getLastColor()); drawView.setPaintStrokeWidth(20f); enabled = true; } catch (IOException e) { e.printStackTrace(); } } else { finish(); } } private void deleteFilesInDir(File dir) { for (File child : dir.listFiles()) { child.delete(); } } @Override public void onColorSelection(@NonNull ColorChooserDialog dialog, @ColorInt int selectedColor) { drawView.setPaintStrokeColor(selectedColor); color.getBackground().setColorFilter(selectedColor, PorterDuff.Mode.MULTIPLY); Reddit.colors.edit().putInt("drawColor", selectedColor).commit(); } }