package com.doplgangr.secrecy.Views.DummyViews.NavDrawer;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.doplgangr.secrecy.R;
import java.util.ArrayList;
/**
* Created by matthew on 9/18/14.
*/
public class NavListView extends ListView {
public static int mSelectedColour;
public NavAdapter mNavigationAdapter;
private Context mContext;
private ArrayList<NavItem> mNavigationItems = new ArrayList<NavItem>();
private NavigationItemClickListener mCallbacks;
public NavListView(Context _context) {
this(_context, null, 0);
}
public NavListView(Context _context, AttributeSet _attrs) {
this(_context, _attrs, 0);
}
public NavListView(Context _context, AttributeSet _attrs, int _defStyle) {
super(_context, _attrs, _defStyle);
mContext = _context;
init(_attrs);
}
private void init(AttributeSet _attrs) {
mNavigationAdapter = new NavAdapter(mContext, R.layout.drawer_item, mNavigationItems);
mSelectedColour = getResources().getColor(R.color.primary);
setAdapter(mNavigationAdapter);
try {
mCallbacks = (NavigationItemClickListener) mContext;
} catch (ClassCastException e) {
Log.w("L Navigation Drawer", mContext.getClass() + " should implement NavListView.NavigationItemClickListener");
}
setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if (mCallbacks != null) {
mCallbacks.onNavigationItemSelected(mNavigationItems.get(i).getItem(), mNavigationItems, i);
}
for (NavItem ni : mNavigationItems)
ni.setIsSelected(false);
mNavigationItems.get(i).setIsSelected(true);
mNavigationAdapter.notifyDataSetChanged();
}
});
}
public NavListView setNavigationItemClickListener(NavigationItemClickListener _navigationItemClickListener) {
this.mCallbacks = _navigationItemClickListener;
return this;
}
public NavListView setItems(String[] _items) {
for (int i = 0; i < _items.length; i++) {
try {
mNavigationItems.get(i).setItem(_items[i]);
} catch (Exception e) {
mNavigationItems.add(new NavItem(_items[i]));
}
}
if (mNavigationAdapter != null)
mNavigationAdapter.notifyDataSetChanged();
return this;
}
public NavListView setImages(int[] _res) {
for (int i = 0; i < _res.length; i++) {
try {
mNavigationItems.get(i).setImg(_res[i]);
} catch (Exception e) {
mNavigationItems.add(new NavItem("", _res[i]));
}
}
if (mNavigationAdapter != null)
mNavigationAdapter.notifyDataSetChanged();
return this;
}
public NavListView addNavigationItem(NavItem _navigationItem) {
mNavigationItems.add(_navigationItem);
mNavigationAdapter.notifyDataSetChanged();
return this;
}
public NavListView addNavigationItem(String _title, int _res, boolean _isSelected) {
mNavigationItems.add(new NavItem(_title, _res, _isSelected));
mNavigationAdapter.notifyDataSetChanged();
return this;
}
public NavListView setSelectedItem(int _position) {
try {
for (NavItem NavItem : mNavigationItems)
NavItem.setIsSelected(false);
mNavigationItems.get(_position).setIsSelected(true);
mNavigationAdapter.notifyDataSetChanged();
} catch (IndexOutOfBoundsException e) {
Log.e("L Navigation Drawer", "Index specified in setSelectedItem doesn't exist in the list.");
}
return this;
}
public NavListView setSelectedColor(String _colour) {
try {
mSelectedColour = Color.parseColor(_colour);
} catch (Exception e) {
Log.e("L Navigation Drawer", "Invalid hex code " + _colour);
}
if (mNavigationAdapter != null)
mNavigationAdapter.notifyDataSetChanged();
return this;
}
public interface NavigationItemClickListener {
public void onNavigationItemSelected(String item, ArrayList<NavItem> items, int position);
}
}