package com.databases.example.features.categories; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.drawable.GradientDrawable; import android.preference.PreferenceManager; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.databases.example.R; import com.databases.example.database.DatabaseHelper; import java.util.ArrayList; import timber.log.Timber; public class CategoriesListViewAdapter extends BaseExpandableListAdapter { private Cursor category; private final ArrayList<Cursor> subcategory; private final Context context; public CategoriesListViewAdapter(Context context, int textViewResourceId, Cursor cats, ArrayList<Cursor> subcats) { this.context = context; this.subcategory = subcats; } //My method for getting a Category Record at a certain position public Category getCategory(long id) { Cursor group = category; ArrayList<Category> categories = Category.getCategories(group); categories.size(); group.moveToPosition((int) id); int isDefaultColumn = group.getColumnIndex(DatabaseHelper.CATEGORY_IS_DEFAULT); int nameColumn = group.getColumnIndex(DatabaseHelper.CATEGORY_NAME); int noteColumn = group.getColumnIndex(DatabaseHelper.CATEGORY_NOTE); int itemId = group.getInt(0); boolean itemIsDefault = Boolean.parseBoolean(group.getString(isDefaultColumn)); String itemName = group.getString(nameColumn); String itemNote = group.getString(noteColumn); return new Category(itemId, itemIsDefault, itemName, itemNote); } //My method for getting a Category Record at a certain position public Subcategory getSubCategory(int groupId, int childId) { Cursor group = subcategory.get(groupId); ArrayList<Subcategory> subcategories = Subcategory.getSubcategories(group); subcategories.size(); group.moveToPosition(childId); int toIdColumn = group.getColumnIndex(DatabaseHelper.SUBCATEGORY_CAT_ID); int isDefaultColumn = group.getColumnIndex(DatabaseHelper.SUBCATEGORY_IS_DEFAULT); int nameColumn = group.getColumnIndex(DatabaseHelper.SUBCATEGORY_NAME); int noteColumn = group.getColumnIndex(DatabaseHelper.SUBCATEGORY_NOTE); int itemId = group.getInt(0); int itemTo_id = group.getInt(toIdColumn); boolean itemIsDefault = Boolean.parseBoolean(group.getString(isDefaultColumn)); String itemSubname = group.getString(nameColumn); String itemNote = group.getString(noteColumn); return new Subcategory(itemId, itemTo_id, itemIsDefault, itemSubname, itemNote); } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View v = convertView; Cursor user = category; CategoryViewHolder viewHolder; //For Custom View Properties SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean useDefaults = prefs.getBoolean(context.getString(R.string.pref_key_category_default_appearance), true); if (v == null) { LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.category_item, null); viewHolder = new CategoryViewHolder(); viewHolder.tvName = (TextView) v.findViewById(R.id.category_name); viewHolder.tvNote = (TextView) v.findViewById(R.id.category_note); viewHolder.tvIsDefault = (TextView) v.findViewById(R.id.category_is_default); v.setTag(viewHolder); } else { viewHolder = (CategoryViewHolder) v.getTag(); } //Change Background Colors try { if (!useDefaults) { LinearLayout l; l = (LinearLayout) v.findViewById(R.id.category_layout); int startColor = prefs.getInt(context.getString(R.string.pref_key_category_start_background_color), ContextCompat.getColor(context, R.color.white)); int endColor = prefs.getInt(context.getString(R.string.pref_key_category_end_background_color), ContextCompat.getColor(context, R.color.white)); GradientDrawable defaultGradient = new GradientDrawable( GradientDrawable.Orientation.BOTTOM_TOP, new int[]{startColor, endColor}); l.setBackgroundDrawable(defaultGradient); } } catch (Exception e) { Toast.makeText(context, "Could Not Set Custom Background Color", Toast.LENGTH_SHORT).show(); } //Change Size/Color of main field try { String DefaultSize = prefs.getString(context.getString(R.string.pref_key_category_name_size), "24"); if (useDefaults) { viewHolder.tvName.setTextSize(24); } else { viewHolder.tvName.setTextSize(Integer.parseInt(DefaultSize)); } } catch (Exception e) { Toast.makeText(context, "Could Not Set Custom Name Size", Toast.LENGTH_SHORT).show(); } try { int DefaultColor = prefs.getInt(context.getString(R.string.pref_key_category_name_color), ContextCompat.getColor(context, R.color.categories_main_category_default)); if (useDefaults) { viewHolder.tvName.setTextColor(ContextCompat.getColor(context, R.color.categories_main_category_default)); } else { viewHolder.tvName.setTextColor(DefaultColor); } } catch (Exception e) { Toast.makeText(context, "Could Not Set Custom Name Size", Toast.LENGTH_SHORT).show(); } int IsDefaultColumn = user.getColumnIndex(DatabaseHelper.CATEGORY_IS_DEFAULT); int NameColumn = user.getColumnIndex(DatabaseHelper.CATEGORY_NAME); int NoteColumn = user.getColumnIndex(DatabaseHelper.CATEGORY_NOTE); user.moveToPosition(groupPosition); String itemId = user.getString(0); String itemIsDefault = user.getString(IsDefaultColumn); String itemName = user.getString(NameColumn); String itemNote = user.getString(NoteColumn); //Log.d("getGroupView", "Found Category: " + itemName); //For User-Defined Field Visibility if (useDefaults || prefs.getBoolean(context.getString(R.string.pref_key_category_name_show), true)) { viewHolder.tvName.setVisibility(View.VISIBLE); viewHolder.tvName.setText(itemName); } else { viewHolder.tvName.setVisibility(View.GONE); } if (prefs.getBoolean(context.getString(R.string.pref_key_category_note_show), false) && !useDefaults && itemNote != null) { viewHolder.tvNote.setVisibility(View.VISIBLE); viewHolder.tvNote.setText(itemNote); } else { viewHolder.tvNote.setVisibility(View.GONE); } if (prefs.getBoolean(context.getString(R.string.pref_key_category_is_default_show), false) && !useDefaults && itemIsDefault != null) { viewHolder.tvIsDefault.setVisibility(View.VISIBLE); viewHolder.tvIsDefault.setText(itemIsDefault); } else { viewHolder.tvIsDefault.setVisibility(View.GONE); } return v; }//end getView @Override public Object getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return null; } @Override public long getChildId(int groupPosition, int childPosition) { Cursor temp = subcategory.get(groupPosition); temp.moveToPosition(childPosition); String itemId = temp.getString(0); //Log.d("getChildID", "returning " + Long.parseLong(itemId)); return Long.parseLong(itemId); } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // TODO Auto-generated method stub //Log.d("Cagtegories","groupPos: " + groupPosition + " childPos: " + childPosition + " isLastChild: " + isLastChild + " parent: " + parent); View v = convertView; Cursor user = subcategory.get(groupPosition); SubCategoryViewHolder viewHolder; //For Custom View Properties SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean useDefaults = prefs.getBoolean(context.getString(R.string.pref_key_subcategory_default_appearance), true); if (v == null) { LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.subcategory_item, null); viewHolder = new SubCategoryViewHolder(); viewHolder.tvName = (TextView) v.findViewById(R.id.subcategory_name); viewHolder.tvNote = (TextView) v.findViewById(R.id.subcategory_note); viewHolder.tvCategory = (TextView) v.findViewById(R.id.subcategory_parent); viewHolder.tvIsDefault = (TextView) v.findViewById(R.id.subcategory_is_default); v.setTag(viewHolder); } else { viewHolder = (SubCategoryViewHolder) v.getTag(); } //Change Background Colors try { if (!useDefaults) { LinearLayout l; l = (LinearLayout) v.findViewById(R.id.subcategory_item_layout); int startColor = prefs.getInt(context.getString(R.string.pref_key_subcategory_start_background_color), ContextCompat.getColor(context, R.color.white)); int endColor = prefs.getInt(context.getString(R.string.pref_key_subcategory_end_background_color), ContextCompat.getColor(context, R.color.white)); GradientDrawable defaultGradient = new GradientDrawable( GradientDrawable.Orientation.BOTTOM_TOP, new int[]{startColor, endColor}); l.setBackgroundDrawable(defaultGradient); } } catch (Exception e) { Toast.makeText(context, "Could Not Set Custom Background Color", Toast.LENGTH_SHORT).show(); } //Change Size/color of main field try { String DefaultSize = prefs.getString(context.getString(R.string.pref_key_subcategory_name_size), "24"); if (useDefaults) { viewHolder.tvName.setTextSize(24); } else { viewHolder.tvName.setTextSize(Integer.parseInt(DefaultSize)); } } catch (Exception e) { Toast.makeText(context, "Could Not Set Custom Name Size", Toast.LENGTH_SHORT).show(); } try { int DefaultColor = prefs.getInt(context.getString(R.string.pref_key_subcategory_name_color), ContextCompat.getColor(context, R.color.categories_subcategory_default)); if (useDefaults) { viewHolder.tvName.setTextColor(ContextCompat.getColor(context, R.color.categories_subcategory_default)); } else { viewHolder.tvName.setTextColor(DefaultColor); } } catch (Exception e) { Toast.makeText(context, "Could Not Set Custom Name Size", Toast.LENGTH_SHORT).show(); } int ToIDColumn = user.getColumnIndex(DatabaseHelper.SUBCATEGORY_CAT_ID); int IsDefaultIDColumn = user.getColumnIndex(DatabaseHelper.SUBCATEGORY_IS_DEFAULT); int NameColumn = user.getColumnIndex(DatabaseHelper.SUBCATEGORY_NAME); int NoteColumn = user.getColumnIndex(DatabaseHelper.SUBCATEGORY_NOTE); user.moveToPosition(childPosition); String itemId = user.getString(0); String itemTo_id = user.getString(ToIDColumn); String itemIsDefault = user.getString(IsDefaultIDColumn); String itemSubname = user.getString(NameColumn); String itemNote = user.getString(NoteColumn); //Log.d("getChildView", "Found SubCategory: " + itemSubname); if (useDefaults || prefs.getBoolean(context.getString(R.string.pref_key_subcategory_name_show), true)) { viewHolder.tvName.setVisibility(View.VISIBLE); viewHolder.tvName.setText(itemSubname); } else { viewHolder.tvName.setVisibility(View.GONE); } if (prefs.getBoolean(context.getString(R.string.pref_key_subcategory_note_show), false) && !useDefaults && itemNote != null) { viewHolder.tvNote.setVisibility(View.VISIBLE); viewHolder.tvNote.setText(itemNote); } else { viewHolder.tvNote.setVisibility(View.GONE); } if (prefs.getBoolean(context.getString(R.string.pref_key_subcategory_is_default_show), false) && !useDefaults && itemIsDefault != null) { viewHolder.tvIsDefault.setVisibility(View.VISIBLE); viewHolder.tvIsDefault.setText(itemIsDefault); } else { viewHolder.tvIsDefault.setVisibility(View.GONE); } viewHolder.tvCategory.setVisibility(View.GONE); return v; } @Override public int getChildrenCount(int groupPosition) { return subcategory.get(groupPosition).getCount(); } @Override public Object getGroup(int groupPosition) { // TODO Auto-generated method stub return null; } @Override public int getGroupCount() { if (category == null) { return 0; } return category.getCount(); } @Override public long getGroupId(int groupPosition) { // TODO Auto-generated method stub return 0; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public void swapCategoryCursor(Cursor data) { category = data; notifyDataSetChanged(); } public void swapSubCategoryCursor(Cursor data) { Timber.v("Cursor data=" + data + " data size=" + data.getCount()); subcategory.add(data); } } //ViewHolder for CategoriesActivity class CategoryViewHolder { TextView tvName; TextView tvNote; TextView tvIsDefault; } //ViewHolder for SubCategories class SubCategoryViewHolder { TextView tvName; TextView tvCategory; TextView tvNote; TextView tvIsDefault; }