package com.cradle.iitc_mobile; import android.app.ActionBar; import android.app.ActionBar.OnNavigationListener; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class IITC_NavigationHelper extends ActionBarDrawerToggle implements OnNavigationListener, OnItemClickListener { // Show/hide the up arrow on the very left // getActionBar().setDisplayHomeAsUpEnabled(enabled); // Show/hide the activity icon/logo // getActionBar().setDisplayShowHomeEnabled(enabled); // Show/hide the activity title // getActionBar().setDisplayShowTitleEnabled(enabled); // Makes the icon/title clickable // getActionBar().setHomeButtonEnabled(enabled); private class HighlighterAdapter extends ArrayAdapter { public HighlighterAdapter() { super(mIitc, android.R.layout.simple_list_item_1); clear(); } @Override public void add(String object) { super.remove(object); // to avoid duplicates super.add(object); } @Override public void clear() { super.clear(); add("No Highlights");// Probably must be the same as window._no_highlighter } }; private class NavigationAdapter extends ArrayAdapter { public NavigationAdapter() { super(mIitc, android.R.layout.simple_list_item_1); addAll(Pane.values()); // TODO: remove debug according to preferences } @Override public View getView(int position, View convertView, ViewGroup parent) { /* * LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); * TextView view = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, parent, false); * * ActivityInfo info = getItem(position).activityInfo; * CharSequence label = info.loadLabel(mPackageManager); * Drawable icon = info.loadIcon(mPackageManager); * * view.setText(label); * view.setCompoundDrawablePadding((int) getResources().getDimension(R.dimen.icon_margin)); * view.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); * * return view; */ TextView view = (TextView) super.getView(position, convertView, parent); view.setText(getPaneTitle(getItem(position))); return view; } } public static enum Pane { COMPACT, DEBUG, FACTION, FULL, INFO, MAP, PUBLIC } private IITC_Mobile mIitc; private ActionBar mActionBar; private SharedPreferences mPrefs; private HighlighterAdapter mHighlighters; private NavigationAdapter mNavigationAdapter; private DrawerLayout mDrawerLayout; private ListView mDrawerList; private String mActiveHighlighter = null; private boolean mDesktopMode = false; private boolean mFullscreen = false; private boolean mHideInFullscreen = false; private Pane mPane = Pane.MAP; private boolean mIsLoading; public IITC_NavigationHelper(IITC_Mobile activity, ActionBar bar, ListView drawerList, DrawerLayout drawerLayout) { super(activity, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close); mIitc = activity; mActionBar = bar; mDrawerList = drawerList; mDrawerLayout = drawerLayout; mPrefs = PreferenceManager.getDefaultSharedPreferences(activity); mHighlighters = new HighlighterAdapter(); mActionBar.setDisplayShowHomeEnabled(true); // show icon mActionBar.setListNavigationCallbacks(mHighlighters, this); mNavigationAdapter = new NavigationAdapter(); mDrawerList.setAdapter(mNavigationAdapter); mDrawerList.setOnItemClickListener(this); mDrawerLayout.setDrawerListener(this); onPrefChanged(); // also calls updateActionBar() } private void updateActionBar() { boolean showHighlighter = true; if (mDesktopMode) { mActionBar.setDisplayHomeAsUpEnabled(false); // Hide "up" indicator mActionBar.setHomeButtonEnabled(false); // Make icon unclickable mActionBar.setTitle(mIitc.getString(R.string.app_name)); mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); setDrawerIndicatorEnabled(false); } else { if (mIsLoading) { mActionBar.setDisplayHomeAsUpEnabled(false); // Hide "up" indicator mActionBar.setHomeButtonEnabled(false);// Make icon unclickable mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); setDrawerIndicatorEnabled(false); } else { mActionBar.setDisplayHomeAsUpEnabled(true); // Show "up" indicator mActionBar.setHomeButtonEnabled(true);// Make icon clickable mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); if (mPane != Pane.MAP) setDrawerIndicatorEnabled(false); else setDrawerIndicatorEnabled(true); } if (mPane != Pane.MAP) showHighlighter = false; mActionBar.setTitle(getPaneTitle(mPane)); } if (mHighlighters.getCount() < 2) // there should always be "No Highlights" showHighlighter = false; if (showHighlighter) { mActionBar.setDisplayShowTitleEnabled(false); // Hide title mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); setActiveHighlighter(mActiveHighlighter); } else { mActionBar.setDisplayShowTitleEnabled(true); // Show title mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); } if (mFullscreen && mHideInFullscreen) mActionBar.hide(); else mActionBar.show(); } public void addPortalHighlighter(String name) { mHighlighters.add(name); if (name.equals(mActiveHighlighter)) setActiveHighlighter(name); updateActionBar(); } public String getPaneTitle(Pane pane) { switch (pane) { case INFO: return "Info"; case FULL: return "Full"; case COMPACT: return "Compact"; case PUBLIC: return "Public"; case FACTION: return "Faction"; case DEBUG: return "Debug"; default: return mIitc.getString(R.string.app_name); } } public boolean hideInFullscreen() { return mHideInFullscreen; } @Override public void onDrawerClosed(View drawerView) { // TODO Auto-generated method stub super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { // TODO Auto-generated method stub super.onDrawerOpened(drawerView); } @Override public void onItemClick(AdapterView parent, View view, int position, long id) { Pane item = mNavigationAdapter.getItem(position); mIitc.switchToPane(item); mDrawerLayout.closeDrawer(mDrawerList); } @Override public boolean onNavigationItemSelected(int position, long itemId) { String name = mHighlighters.getItem(position); mIitc.getWebView().loadUrl("javascript: window.changePortalHighlights('" + name + "')"); return true; } public void onPostCreate(Bundle savedInstanceState) { // Sync the toggle state after onRestoreInstanceState has occurred. syncState(); } public void onPrefChanged() { mDesktopMode = mPrefs.getBoolean("pref_force_desktop", false); mHideInFullscreen = mPrefs.getBoolean("pref_fullscreen_actionbar", false); updateActionBar(); } public void reset() { mHighlighters.clear(); mPane = Pane.MAP; updateActionBar(); } public void setActiveHighlighter(String name) { mActiveHighlighter = name; if (mActionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST) { int position = mHighlighters.getPosition(mActiveHighlighter); if (position >= 0 && position < mActionBar.getNavigationItemCount()) mActionBar.setSelectedNavigationItem(position); } } public void setFullscreen(boolean fullscreen) { mFullscreen = fullscreen; if (mFullscreen && mHideInFullscreen) { // show a toast with instructions to exit the fullscreen mode again Toast.makeText(mIitc, "Press back button to exit fullscreen", Toast.LENGTH_SHORT).show(); } updateActionBar(); } public void setLoadingState(boolean isLoading) { mIsLoading = isLoading; updateActionBar(); } public void switchTo(Pane pane) { mPane = pane; updateActionBar(); } }