package com.fastaccess.ui.modules.apps.folders.create;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat;
import android.text.Editable;
import android.view.Gravity;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import com.amulyakhare.textdrawable.TextDrawable;
import com.fastaccess.R;
import com.fastaccess.data.dao.FolderModel;
import com.fastaccess.helper.Bundler;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.ViewHelper;
import com.fastaccess.ui.base.BaseBottomSheetDialog;
import com.fastaccess.ui.modules.apps.folders.create.CreateFolderMvp.OnNotifyFoldersAdapter;
import com.fastaccess.ui.widgets.FontButton;
import org.xdty.preference.colorpicker.ColorPickerDialog;
import java.util.Date;
import butterknife.BindView;
import butterknife.OnClick;
import butterknife.OnTextChanged;
import icepick.State;
/**
* Created by Kosh on 11 Oct 2016, 8:27 PM
*/
public class CreateFolderView extends BaseBottomSheetDialog implements CreateFolderMvp.View {
private long folderId;
@State int selectedColor = Color.parseColor("#FF2A456B");
@State String fName;
@BindView(R.id.folderImage) ImageView folderImage;
@BindView(R.id.folderName) TextInputLayout folderName;
@BindView(R.id.cancel) FontButton cancel;
@BindView(R.id.save) FontButton save;
@BindView(R.id.folderNameEditText) EditText folderNameEditText;
private FolderModel folderModel;
private OnNotifyFoldersAdapter callback;
private CreateFolderPresenter presenter;
public static CreateFolderView newInstance(long folderId) {
CreateFolderView view = new CreateFolderView();
view.setArguments(Bundler.start().put("folderId", folderId).end());
return view;
}
@OnClick(R.id.cancel) void onCancel() {
dismiss();
}
@OnClick(R.id.save) void onSave() {
boolean isEmpty = InputHelper.isEmpty(folderName);
folderName.setError(isEmpty ? getString(R.string.required_field) : null);
if (!isEmpty) {
FolderModel draft = FolderModel.getFolder(fName);
if (draft != null) {
draft.setColor(selectedColor);
draft.setFolderName(fName);
draft.save();
} else {
getFolderModel().setColor(selectedColor);
getFolderModel().setFolderName(fName);
getFolderModel().setCreatedDate(new Date().getTime());
getFolderModel().save();
}
callback.onNotifyChanges();
dismiss();
}
}
@OnClick(R.id.folderImage) void onChooseColor() {
ColorPickerDialog.newInstance(R.string.color_picker_default_title,
getResources().getIntArray(R.array.colors_primary),
selectedColor != 0 ? selectedColor : ContextCompat.getColor(getContext(), R.color.primary),
(getResources().getInteger(R.integer.num_columns) + 1), ColorPickerDialog.SIZE_SMALL)
.show(getChildFragmentManager(), "ColorPickerDialog");
}
@OnTextChanged(value = R.id.folderNameEditText, callback = OnTextChanged.Callback.AFTER_TEXT_CHANGED) void onTextChanged(Editable editable) {
boolean isEmpty = InputHelper.isEmpty(editable);
if (!isEmpty) {
setupDrawable(editable.toString());
}
folderName.setError(isEmpty ? getString(R.string.required_field) : null);
fName = InputHelper.toString(editable);
}
@Override public void onAttach(Context context) {
super.onAttach(context);
if (getParentFragment() != null && getParentFragment() instanceof OnNotifyFoldersAdapter) {
callback = (OnNotifyFoldersAdapter) getParentFragment();
} else if (context instanceof OnNotifyFoldersAdapter) {
callback = (OnNotifyFoldersAdapter) context;
} else {
throw new RuntimeException("Activity/Fragment must implement OnNotifyFoldersAdapter");
}
}
@Override public void onDetach() {
super.onDetach();
}
@Override protected int layoutRes() {
return R.layout.create_edit_folder;
}
@Override public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
folderId = getArguments().getLong("folderId", -1);
if (savedInstanceState == null) {
selectedColor = getFolderModel().getColor() != 0 ? getFolderModel().getColor() : selectedColor;
fName = getFolderModel().getFolderName();
}
}
@Override protected void onViewCreated(@NonNull View view) {
folderNameEditText.setText(fName);
setupDrawable(fName);
ViewHelper.showTooltip(folderImage, R.string.color_picker_hint_folder, Gravity.TOP, null);
}
@Override public void onColorSelected(int color) {
selectedColor = color;
setupDrawable(InputHelper.toString(folderNameEditText));
}
@NonNull private FolderModel getFolderModel() {
if (folderModel == null) {
folderModel = FolderModel.findById(FolderModel.class, folderId);
if (folderModel == null) {
folderModel = new FolderModel();
}
}
return folderModel;
}
private CreateFolderPresenter getPresenter() {
if (presenter == null) presenter = CreateFolderPresenter.with(this);
return presenter;
}
private void setupDrawable(@NonNull String upDrawable) {
TextDrawable.IBuilder builder = TextDrawable.builder()
.beginConfig()
.endConfig()
.round();
String letter = InputHelper.isEmpty(upDrawable) ? "N/A" : InputHelper.getTwoLetters(upDrawable);
folderImage.setImageDrawable(builder.build(letter.toUpperCase(), selectedColor));
}
}