package org.sorz.lab.smallcloudemoji.adapters; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; import org.sorz.lab.smallcloudemoji.R; import org.sorz.lab.smallcloudemoji.db.Category; import org.sorz.lab.smallcloudemoji.db.DaoSession; import org.sorz.lab.smallcloudemoji.db.Entry; import org.sorz.lab.smallcloudemoji.db.FavoriteCategory; import org.sorz.lab.smallcloudemoji.db.Repository; import org.sorz.lab.smallcloudemoji.db.RepositoryDao; import java.util.ArrayList; import java.util.List; /** * The adapter of ExpandableListView on MainApplication. */ public class MainExpandableAdapter extends BaseExpandableListAdapter { final private Context context; final private LayoutInflater inflater; private final boolean showNote; private final boolean showSourceName; private final DaoSession daoSession; private final List<Category> categories = new ArrayList<Category>(); private static class GroupViewHolder { TextView category; TextView repository; } private static class ChildViewHolder { TextView emoticon; TextView description; View star; } public MainExpandableAdapter(Context context, DaoSession daoSession) { super(); this.context = context; this.daoSession = daoSession; inflater = LayoutInflater.from(context); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); showNote = preferences.getBoolean("show_note", true); showSourceName = preferences.getBoolean("show_source_name", true); reloadCategories(); } private void reloadCategories() { categories.clear(); // Load favorites. categories.add(new FavoriteCategory(context, daoSession)); // Load all categories. RepositoryDao repositoryDao = daoSession.getRepositoryDao(); List<Repository> repositories = repositoryDao.queryBuilder() .where(RepositoryDao.Properties.Hidden.eq(false)) .orderAsc(RepositoryDao.Properties.Order) .list(); for (Repository repository : repositories) categories.addAll(repository.getCategories()); } public void notifyDataSetChanged(boolean reloadAllCategories) { if (reloadAllCategories) reloadCategories(); notifyDataSetChanged(); } @Override public void notifyDataSetChanged() { // Reset favorites. categories.get(0).resetEntries(); super.notifyDataSetChanged(); } @Override public int getGroupCount() { return categories.size(); } @Override public int getChildrenCount(int groupPosition) { if (groupPosition == categories.size()) // == Settings group return 1; else return categories.get(groupPosition).getEntries().size(); } @Override public Category getGroup(int groupPosition) { return categories.get(groupPosition); } @Override public Entry getChild(int groupPosition, int childPosition) { return categories.get(groupPosition).getEntries().get(childPosition); } @Override public long getGroupId(int i) { return 0; } @Override public long getChildId(int i, int i2) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupViewHolder viewHolder; if (convertView == null) { convertView = inflater.inflate(R.layout.item_group, parent, false); viewHolder = new GroupViewHolder(); viewHolder.category = (TextView) convertView.findViewById(android.R.id.text1); viewHolder.repository = (TextView) convertView.findViewById(android.R.id.text2); convertView.setTag(R.id.view_holder, viewHolder); } else { viewHolder = (GroupViewHolder) convertView.getTag(R.id.view_holder); } Category category = getGroup(groupPosition); viewHolder.category.setText(category.getName()); String repositoryAlias; if (category instanceof FavoriteCategory || !showSourceName) { repositoryAlias = ""; } else { repositoryAlias = category.getRepository().getAlias(); if (repositoryAlias.equals("Default")) repositoryAlias = ""; } viewHolder.repository.setText(repositoryAlias); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder viewHolder; if (convertView == null) { convertView = inflater.inflate(R.layout.item_child, parent, false); viewHolder = new ChildViewHolder(); viewHolder.emoticon = (TextView) convertView.findViewById(R.id.text1); viewHolder.description = (TextView) convertView.findViewById(R.id.text2); viewHolder.star = convertView.findViewById(R.id.star); convertView.setTag(R.id.view_holder, viewHolder); } else { viewHolder = (ChildViewHolder) convertView.getTag(R.id.view_holder); } Entry entry = getChild(groupPosition, childPosition); convertView.setTag(R.id.entry, entry); viewHolder.emoticon.setText(entry.getEmoticon()); if (showNote && !entry.getDescription().isEmpty()) { viewHolder.description.setText(entry.getDescription()); viewHolder.description.setVisibility(View.VISIBLE); } else { viewHolder.description.setVisibility(View.GONE); } viewHolder.star.setVisibility(entry.getStar() ? View.VISIBLE : View.GONE); return convertView; } @Override public boolean isChildSelectable(int i, int i2) { return true; } }