package treehou.se.habit.ui.util;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.mikepenz.community_material_typeface_library.CommunityMaterial;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.iconics.typeface.IIcon;
import java.util.ArrayList;
import java.util.List;
import treehou.se.habit.R;
import treehou.se.habit.util.Util;
/**
* Fragment for picking categories of icons.
*/
public class CategoryPickerFragment extends Fragment {
private RecyclerView lstIcons;
private CategoryAdapter adapter;
private ViewGroup container;
public static CategoryPickerFragment newInstance() {
CategoryPickerFragment fragment = new CategoryPickerFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
public CategoryPickerFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_icon_picker, null);
lstIcons = (RecyclerView) rootView.findViewById(R.id.lst_categories);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 1);
lstIcons.setLayoutManager(gridLayoutManager);
lstIcons.setItemAnimator(new DefaultItemAnimator());
// Hookup list of categories
List<CategoryPicker> categoryList = new ArrayList<>();
categoryList.add(new CategoryPicker(null, getString(R.string.empty), Util.IconCategory.EMPTY));
categoryList.add(new CategoryPicker(CommunityMaterial.Icon.cmd_play, getString(R.string.media), Util.IconCategory.MEDIA));
categoryList.add(new CategoryPicker(CommunityMaterial.Icon.cmd_alarm, getString(R.string.sensor), Util.IconCategory.SENSORS));
categoryList.add(new CategoryPicker(CommunityMaterial.Icon.cmd_power, getString(R.string.command), Util.IconCategory.COMMANDS));
categoryList.add(new CategoryPicker(CommunityMaterial.Icon.cmd_arrow_up, getString(R.string.arrows), Util.IconCategory.ARROWS));
categoryList.add(new CategoryPicker(CommunityMaterial.Icon.cmd_view_module, getString(R.string.all), Util.IconCategory.ALL));
adapter = new CategoryAdapter(getActivity(), categoryList);
lstIcons.setAdapter(adapter);
this.container = container;
return rootView;
}
private class CategoryPicker {
private IIcon icon;
private String category;
private Util.IconCategory id;
public CategoryPicker(IIcon icon, String category, Util.IconCategory id) {
this.icon = icon;
this.category = category;
this.id = id;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public IIcon getIcon() {
return icon;
}
public void setIcon(IIcon icon) {
this.icon = icon;
}
public Util.IconCategory getId() {
return id;
}
public void setId(Util.IconCategory id) {
this.id = id;
}
}
private class CategoryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<CategoryPicker> categories = new ArrayList<>();
class CategoryHolder extends RecyclerView.ViewHolder {
public ImageView imgIcon;
public TextView lblCategory;
public CategoryHolder(View itemView) {
super(itemView);
imgIcon = (ImageView) itemView.findViewById(R.id.img_menu);
lblCategory = (TextView) itemView.findViewById(R.id.lbl_label);
}
}
public CategoryAdapter(Context context, List<CategoryPicker> categories) {
this.context = context;
this.categories = categories;
}
public void add(CategoryPicker category){
categories.add(category);
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View itemView = inflater.inflate(R.layout.item_category, null);
return new CategoryHolder(itemView);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final CategoryPicker item = categories.get(position);
CategoryHolder catHolder = (CategoryHolder) holder;
catHolder.lblCategory.setText(item.getCategory());
if(item.getId() != Util.IconCategory.EMPTY) {
IconicsDrawable drawable = new IconicsDrawable(getActivity(), item.getIcon()).color(Color.BLACK).sizeDp(50);
catHolder.imgIcon.setImageDrawable(drawable);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getSupportFragmentManager().beginTransaction()
.replace(container.getId(), IconPickerFragment.newInstance(item.getId()))
.addToBackStack(null)
.commit();
}
});
}
else {
catHolder.imgIcon.setImageDrawable(null);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra(IconPickerFragment.RESULT_ICON, "");
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
}
});
}
}
@Override
public int getItemCount() {
return categories.size();
}
}
}