package com.brew.brewshop.navigation;
import android.content.res.Configuration;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.brew.brewshop.R;
public class NavDrawer {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private ListView mDrawerList;
private NavDrawerConfig mNavConfig;
private boolean mHomePressed;
private FragmentActivity mActivity;
private NavSelectionHandler mSelectionHander;
public NavDrawer(FragmentActivity activity, NavDrawerConfig config, NavSelectionHandler handler) {
mActivity = activity;
mNavConfig = config;
mSelectionHander = handler;
create();
}
private void create() {
mActivity.setContentView(mNavConfig.getMainLayout());
mDrawerLayout = (DrawerLayout) mActivity.findViewById(mNavConfig.getDrawerLayoutId());
mDrawerList = (ListView) mActivity.findViewById(mNavConfig.getLeftDrawerId());
mDrawerList.setAdapter(mNavConfig.getBaseAdapter());
mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
mDrawerLayout.setDrawerShadow(mNavConfig.getDrawerShadow(), GravityCompat.START);
mDrawerToggle = new ActionBarDrawerToggle(
mActivity,
mDrawerLayout,
R.drawable.ic_drawer,
mNavConfig.getDrawerOpenDesc(),
mNavConfig.getDrawerCloseDesc()
) {
public void onDrawerClosed(View view) {
mActivity.supportInvalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
mActivity.supportInvalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
public void onPostCreate() {
}
public void onConfigurationChanged(Configuration newConfig) {
mDrawerToggle.onConfigurationChanged(newConfig);
}
public void onPrepareOptionsMenu(Menu menu) {
boolean invisible = mDrawerLayout.isDrawerOpen(mDrawerList) || mHomePressed;
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setVisible(!invisible);
}
mHomePressed = false;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (!mDrawerLayout.isDrawerOpen(mDrawerList)) {
mHomePressed = true;
mActivity.supportInvalidateOptionsMenu();
}
break;
}
return mDrawerToggle.onOptionsItemSelected(item);
}
public boolean onKeyDown(int keyCode) {
if ( keyCode == KeyEvent.KEYCODE_MENU ) {
if ( this.mDrawerLayout.isDrawerOpen(this.mDrawerList)) {
this.mDrawerLayout.closeDrawer(this.mDrawerList);
}
else {
this.mDrawerLayout.openDrawer(this.mDrawerList);
}
return true;
}
return false;
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectNavItem(position);
}
}
public void selectNavItem(int position) {
NavDrawerItem selectedItem = mNavConfig.getNavItems()[position];
mSelectionHander.onNavItemSelected(selectedItem.getId());
mDrawerList.setItemChecked(position, true);
if ( this.mDrawerLayout.isDrawerOpen(this.mDrawerList)) {
mDrawerLayout.closeDrawer(mDrawerList);
}
}
}