package org.intermine.app.adapter;
/*
* Copyright (C) 2015 InterMine
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. See the LICENSE file for more
* information or http://www.gnu.org/copyleft/lesser.html.
*
*/
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import org.intermine.app.R;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import butterknife.ButterKnife;
/**
* @author Daria Komkova <Daria_Komkova @ hotmail.com>
*/
public class ExpandableMenuListAdapter extends BaseExpandableListAdapter {
private final Context mContext;
private final LayoutInflater mInflater;
private Map<String, List<String>> mGroups;
private List<String> mMenus;
public ExpandableMenuListAdapter(Context context) {
mContext = context;
mInflater = LayoutInflater.from(context);
}
public void updateMenuList(Map<String, List<String>> groups) {
mGroups = groups;
mMenus = new ArrayList<>(groups.keySet());
notifyDataSetChanged();
}
@Override
public int getGroupCount() {
return mGroups.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mGroups.get(mMenus.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return mGroups.get(mMenus.get(groupPosition));
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mGroups.get(mMenus.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView menuItem;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.menu_list_item, parent, false);
menuItem = ButterKnife.findById(convertView, R.id.menu_item);
convertView.setTag(R.id.menu_item, menuItem);
} else {
menuItem = (TextView) convertView.getTag(R.id.menu_item);
}
final int childrenCount = getChildrenCount(groupPosition);
if (0 == childrenCount) {
menuItem.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
} else {
if (isExpanded) {
menuItem.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_expand_less_grey, 0);
} else {
menuItem.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_expand_more_grey, 0);
}
}
String menuTitle = mMenus.get(groupPosition);
menuItem.setText(menuTitle);
return convertView;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView submenuItem;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.submenu_list_item, parent, false);
submenuItem = ButterKnife.findById(convertView, R.id.submenu_item);
convertView.setTag(R.id.submenu_item, submenuItem);
} else {
submenuItem = (TextView) convertView.getTag(R.id.submenu_item);
}
String submenuTitle = (String) getChild(groupPosition, childPosition);
submenuItem.setText(submenuTitle);
return convertView;
}
}