package net.tasksnow.view.slidingmenu;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import net.tasksnow.view.reuse.GenericListAdapter;
import net.tasksnow.view.reuse.GenericListAdapter.ListItem;
import net.tasksnow.view.slidingmenu.MenuContent.MenuCategory;
import com.luma.android.andrologger.Logger;
import java.util.ArrayList;
import java.util.List;
/**
* @author D056943
* @since 01:21:10 - 29.12.2012
* @project cFoldersDemo
*/
public class SlidingMenuListView extends ListView implements AdapterView.OnItemClickListener, OnListItemStateChangeListener {
// ===========================================================
// Listener
// ===========================================================
public interface OnCategorySelectListener {
public void onCategorySelected(Object executeObject);
}
private OnCategorySelectListener categorySelectListener;
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private MenuContent menuContent;
private GenericListAdapter listAdapter;
// ===========================================================
// Constructors
// ===========================================================
public SlidingMenuListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.setOnItemClickListener(this);
if (this.getAdapter() == null) {
this.listAdapter = new GenericListAdapter(this.getContext(), 3);
}
}
public SlidingMenuListView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public SlidingMenuListView(Context context) {
this(context, null);
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void onItemClick(AdapterView<?> adapter, View view, int pos, long id) {
Object item = this.getAdapter().getItem(pos);
if (item instanceof MenuItem) {
MenuItem menuItem = (MenuItem) item;
if (menuItem.isEnabled()) {
this.menuContent.cleanSelection(menuItem);
Object executeObject = this.menuContent.getSelectedItem().onExecuteAction();
this.invalidateViews();
if (this.categorySelectListener != null) {
this.categorySelectListener.onCategorySelected(executeObject);
}
}
}
}
// ===========================================================
// Methods
// ===========================================================
public void setMenuContent(MenuContent content) {
content.setOnListItemStateChangeListener(this);
this.menuContent = content;
}
public MenuContent getMenuContent() {
return this.menuContent;
}
public void updateListAdapter() {
this.listAdapter.clear();
Logger.i("updateListAdadpter");
List<ListItem> items = new ArrayList<ListItem>();
for (MenuCategory category : this.menuContent.getCategories()) {
//Project specific Code
if (category.getItems().size() > 0) {
((MenuSectionItem) category.getCategoryItem()).setExpandable(true); //TODO auslagern
}
items.add(category.getCategoryItem());
if (((MenuSectionItem) category.getCategoryItem()).isExpanded())
items.addAll(category.getItems());
}
this.listAdapter.addAll(items);
if (this.getAdapter() == null)
this.setAdapter(this.listAdapter);
this.listAdapter.notifyDataSetChanged();
}
// ===========================================================
// Getter & Setter
// ===========================================================
public void setOnCategorySelectListener(OnCategorySelectListener categorySelectListener) {
this.categorySelectListener = categorySelectListener;
}
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
public interface MenuItem extends ListItem {
public void setSelected(boolean selected);
public void setOnListItemStateChangeListener(OnListItemStateChangeListener listItemStateChangeListener);
public boolean isSelected();
public Object onExecuteAction();
}
@Override
public void onListItemStateChange(ListItem listItem) {
this.updateListAdapter();
}
}