package net.ggelardi.flucso.data; import net.ggelardi.flucso.R; import net.ggelardi.flucso.R.id; import net.ggelardi.flucso.R.layout; import net.ggelardi.flucso.serv.FFAPI; import net.ggelardi.flucso.serv.FFSession; import net.ggelardi.flucso.serv.FFAPI.FeedList; import net.ggelardi.flucso.serv.FFAPI.FeedList.Section; import net.ggelardi.flucso.serv.FFAPI.FeedList.SectionItem; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class DrawerAdapter extends BaseAdapter { private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; private FFSession session; private LayoutInflater inflater; public DrawerAdapter(Context context) { super(); session = FFSession.getInstance(context); inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return getItem(position) instanceof SectionItem; } @Override public int getCount() { int total = 0; if (session.hasProfile() && session.getNavigation().sections != null) { for (Section sec : session.getNavigation().sections) total += sec.feeds.length + 1; } return total; } @Override public Object getItem(int position) { if (position >= 0 && session.hasProfile() && session.getNavigation().sections != null) { int offset = 0; int index = -1; for (Section sec : session.getNavigation().sections) { if (position <= (offset + sec.feeds.length)) { index = position - offset - 1; return index < 0 ? sec : sec.feeds[index]; // a Section or a SectionItem } else offset += sec.feeds.length + 1; } } return null; } @Override public long getItemId(int position) { return position; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { return getItem(position) instanceof Section ? TYPE_HEADER : TYPE_ITEM; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { if (getItemViewType(position) == TYPE_HEADER) convertView = inflater.inflate(R.layout.header_drawer, parent, false); else convertView = inflater.inflate(R.layout.item_drawer, parent, false); holder = new ViewHolder(); holder.textView = (TextView) convertView.findViewById(R.id.txtLabel); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Object item = getItem(position); holder.textView.setText(item instanceof Section ? ((Section) item).name : ((SectionItem) item).name); return convertView; } public static class ViewHolder { public TextView textView; } }