package com.example.asamles.app.paint;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.MenuItemCompat;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SeekBar;
import com.example.asamles.app.R;
import com.example.asamles.app.actionprovider.SeekbarActionProvider;
import com.example.asamles.app.actionprovider.SizeAdapter;
import com.example.asamles.app.constants.Constants;
import com.example.asamles.app.dialog.BlurredAlertDialog;
import com.example.asamles.app.dialog.BlurredColorPickerDialog;
import com.example.asamles.app.saveload.SaveLoadFile;
import com.joanzapata.android.iconify.IconDrawable;
import com.joanzapata.android.iconify.Iconify;
public class PaintMain extends Fragment implements SizeAdapter.SizeListener {
private DrawingView drawView;
private float smallBrush = 10;
private int oldColor = Color.BLACK;
private IconDrawable pencilIcon;
private IconDrawable eraserIcon;
private IconDrawable pencilIconSelected;
private IconDrawable eraserIconSelected;
private SeekbarActionProvider seekbarActionProvider;
private boolean erase = false;
private String imageFromGallery = null;
public static PaintMain newInstance() {
return new PaintMain();
}
public PaintMain() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
View rootView = inflater.inflate(R.layout.fragment_paint, container, false);
if (rootView != null) {
drawView = (DrawingView) rootView.findViewById(R.id.drawing);
}
drawView.setColor(oldColor);
drawView.setBrushSize(smallBrush);
BitmapDrawable bitmapDrawable;
if (imageFromGallery != null) {
bitmapDrawable = new BitmapDrawable(getActivity().getResources(), SaveLoadFile.loadImageFromPublicStorage(Constants.PAINT_GALLERY, imageFromGallery));
if(bitmapDrawable.getBitmap() != null){
if (android.os.Build.VERSION.SDK_INT >= 16) {
drawView.setBackground(bitmapDrawable);
} else {
drawView.setBackgroundDrawable(bitmapDrawable);
}
} else {
imageFromGallery = null;
}
}
return rootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.paint_menu, menu);
pencilIcon = new IconDrawable(getActivity(), Iconify.IconValue.icon_pencil)
.colorRes(R.color.grey_light)
.actionBarSize();
eraserIcon = new IconDrawable(getActivity(), Iconify.IconValue.icon_eraser)
.colorRes(R.color.grey_light)
.actionBarSize();
pencilIconSelected = new IconDrawable(getActivity(), Iconify.IconValue.icon_pencil)
.colorRes(R.color.green)
.actionBarSize();
eraserIconSelected = new IconDrawable(getActivity(), Iconify.IconValue.icon_eraser)
.colorRes(R.color.green)
.actionBarSize();
IconDrawable saveIcon = new IconDrawable(getActivity(), Iconify.IconValue.icon_save)
.colorRes(R.color.grey_light)
.actionBarSize();
IconDrawable loadIcon = new IconDrawable(getActivity(), Iconify.IconValue.icon_down_o)
.colorRes(R.color.grey_light)
.actionBarSize();
IconDrawable clearIcon = new IconDrawable(getActivity(), Iconify.IconValue.icon_trash)
.colorRes(R.color.grey_light)
.actionBarSize();
menu.findItem(R.id.action_save).setIcon(saveIcon);
menu.findItem(R.id.action_load).setIcon(loadIcon);
menu.findItem(R.id.action_clear).setIcon(clearIcon);
GradientDrawable drawable = (GradientDrawable) getActivity().getResources().getDrawable(R.drawable.action_colorpicker);
if (drawable != null) {
drawable.setColor(oldColor);
}
menu.findItem(R.id.action_color).setIcon(drawable);
MenuItem seekbarItem = menu.findItem(R.id.action_size);
seekbarActionProvider = (SeekbarActionProvider) MenuItemCompat.getActionProvider(seekbarItem);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
seekbarActionProvider.setSeekbarActionProvider(this, (int) smallBrush);
if (erase) {
menu.findItem(R.id.action_erase).setIcon(eraserIconSelected);
menu.findItem(R.id.action_pencil).setIcon(pencilIcon);
} else {
menu.findItem(R.id.action_erase).setIcon(eraserIcon);
menu.findItem(R.id.action_pencil).setIcon(pencilIconSelected);
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser, int positionInList) {
smallBrush = progress;
drawView.setBrushSize((float) smallBrush);
// getActivity().supportInvalidateOptionsMenu();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar, int positionInList) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar, int positionInList) {
getActivity().supportInvalidateOptionsMenu();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_erase:
erase = true;
drawView.setErase(true);
getActivity().supportInvalidateOptionsMenu();
break;
case R.id.action_save:
if (imageFromGallery == null) {
checkDialog(this.getString(R.string.save_title), this.getString(R.string.save_message), saveAsNew);
} else {
saveDialog(this.getString(R.string.save_title), this.getString(R.string.save_new_message), this.getString(R.string.save_new_button), this.getString(R.string.save_ok_button));
}
break;
case R.id.action_pencil:
erase = false;
drawView.setErase(false);
getActivity().supportInvalidateOptionsMenu();
break;
case R.id.action_clear:
checkDialog(this.getString(R.string.clear_title), this.getString(R.string.clear_paint_message), clear);
break;
case R.id.action_color:
showColorPicker(item);
break;
case R.id.action_load:
checkDialog(this.getString(R.string.load_paint_title), this.getString(R.string.load_paint_message), load);
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
Runnable clear = new Runnable() {
@Override
public void run() {
drawView.clear();
drawView.setBackgroundColor(Color.WHITE);
}
};
Runnable saveAsNew = new Runnable() {
@Override
public void run() {
drawView.setDrawingCacheEnabled(true);
drawView.buildDrawingCache(true);
Bitmap bitmap = drawView.getDrawingCache();
SaveLoadFile.saveToPublicGallery(getActivity(), bitmap, Constants.PAINT_GALLERY, null, false);
drawView.setDrawingCacheEnabled(false);
}
};
Runnable saveCurrent = new Runnable() {
@Override
public void run() {
drawView.setDrawingCacheEnabled(true);
drawView.buildDrawingCache(true);
Bitmap bitmap = drawView.getDrawingCache();
SaveLoadFile.saveToPublicGallery(getActivity(), bitmap, Constants.PAINT_GALLERY, imageFromGallery, false);
drawView.setDrawingCacheEnabled(false);
}
};
Runnable load = new Runnable() {
@Override
public void run() {
loadFromGallery(SaveLoadFile.loadAllPublicFiles(Constants.PAINT_GALLERY));
}
};
private void loadFromGallery(String[] image) {
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
PaintGallery paintGallery = PaintGallery.newInstance(image);
paintGallery.setOkFragmentListener(new PaintGallery.DoneFragmentListener() {
@Override
public void onDone(String tag, String image) {
if (image != null) {
imageFromGallery = image;
}
getActivity().getSupportFragmentManager().popBackStack();
}
});
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.container, paintGallery).addToBackStack("Paint").commit();
}
public void showColorPicker(final MenuItem item) {
View v = getActivity().getWindow().getDecorView();
v.setId(1);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
BlurredColorPickerDialog newFragment = BlurredColorPickerDialog.newInstance(this.getString(R.string.colorpicker_title), oldColor);
newFragment.setBlurredColorPickerDialogListener(new BlurredColorPickerDialog.BlurredColorPickerDialogListener() {
@Override
public void onBlurredAlertDialogPositiveClick(DialogFragment dialog, int color) {
oldColor = color;
drawView.setColor(oldColor);
GradientDrawable drawable = (GradientDrawable) getActivity().getResources().getDrawable(R.drawable.action_colorpicker);
if (drawable != null) {
drawable.setColor(oldColor);
}
item.setIcon(drawable);
dialog.dismiss();
getActivity().supportInvalidateOptionsMenu();
}
@Override
public void onBlurredAlertDialogNegativeClick(DialogFragment dialog) {
dialog.dismiss();
}
@Override
public void onBlurredAlertDialogCancel(DialogFragment dialog) {
dialog.dismiss();
}
});
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(1, newFragment).commit();
}
public void checkDialog(String title, String message, final Runnable type) {
View v = getActivity().getWindow().getDecorView();
v.setId(1);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
BlurredAlertDialog newFragment = BlurredAlertDialog.newInstance(title, message);
newFragment.setBlurredAlertDialogListener(new BlurredAlertDialog.BlurredAlertDialogListener() {
@Override
public void onBlurredAlertDialogPositiveClick(DialogFragment dialog) {
type.run();
dialog.dismiss();
}
@Override
public void onBlurredAlertDialogNegativeClick(DialogFragment dialog) {
dialog.dismiss();
}
@Override
public void onBlurredAlertDialogCancel(DialogFragment dialog) {
dialog.dismiss();
}
});
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(1, newFragment).commit();
}
public void saveDialog(String title, String message, String okButton, String cancelButton) {
View v = getActivity().getWindow().getDecorView();
v.setId(1);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
BlurredAlertDialog newFragment = BlurredAlertDialog.newInstance(title, message, okButton, cancelButton);
newFragment.setBlurredAlertDialogListener(new BlurredAlertDialog.BlurredAlertDialogListener() {
@Override
public void onBlurredAlertDialogPositiveClick(DialogFragment dialog) {
saveAsNew.run();
dialog.dismiss();
}
@Override
public void onBlurredAlertDialogNegativeClick(DialogFragment dialog) {
saveCurrent.run();
dialog.dismiss();
}
@Override
public void onBlurredAlertDialogCancel(DialogFragment dialog) {
dialog.dismiss();
}
});
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(1, newFragment).commit();
}
// public void showProgressDialogFragment() {
// View v = getActivity().getWindow().getDecorView();
// v.setId(1);
// FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
// BlurredProgressDialog newFragment = BlurredProgressDialog.newInstance(this.getString(R.string.progress_save_message), false);
// FragmentTransaction transaction = fragmentManager.beginTransaction();
// transaction.add(1, newFragment).commit();
// }
}