aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java')
-rwxr-xr-xsrc/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java184
1 files changed, 146 insertions, 38 deletions
diff --git a/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java b/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
index 94d91564..14381de7 100755
--- a/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
+++ b/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
@@ -24,11 +24,22 @@ import android.os.storage.StorageVolume;
import android.support.design.widget.NavigationView;
import android.text.TextUtils;
import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
import com.cyanogenmod.filemanager.FileManagerApplication;
-
import com.cyanogenmod.filemanager.R;
+import com.cyanogenmod.filemanager.activities.MainActivity;
+import com.cyanogenmod.filemanager.adapters.NavigationDrawerAdapter;
+import com.cyanogenmod.filemanager.console.VirtualMountPointConsole;
import com.cyanogenmod.filemanager.model.Bookmark;
+import com.cyanogenmod.filemanager.model.Bookmark.BOOKMARK_TYPE;
+import com.cyanogenmod.filemanager.model.MountPoint;
+import com.cyanogenmod.filemanager.model.NavigationDrawerItem;
+import com.cyanogenmod.filemanager.model.NavigationDrawerItem.NavigationDrawerItemType;
import com.cyanogenmod.filemanager.preferences.AccessMode;
+import com.cyanogenmod.filemanager.util.FileHelper;
import com.cyanogenmod.filemanager.util.StorageHelper;
import java.util.ArrayList;
@@ -50,49 +61,111 @@ public class NavigationDrawerController {
private static final String STR_USB = "usb"; // $NON-NLS-1$
- int[][] color_states = new int[][] {
- new int[] {android.R.attr.state_checked}, // checked
- new int[0] // default
- };
-
- // TODO: Replace with legitimate colors per item.
- int[] colors = new int[] {
- R.color.favorites_primary,
- Color.BLACK
- };
-
private Context mCtx;
private NavigationView mNavigationDrawer;
+ private NavigationDrawerAdapter mAdapter;
+ private List<NavigationDrawerItem> mNavigationDrawerItemList;
+ private int mLastRoot;
+ private int mCurrentSelection;
private Map<Integer, Bookmark> mStorageBookmarks;
public NavigationDrawerController(Context ctx, NavigationView navigationView) {
mCtx = ctx;
mNavigationDrawer = navigationView;
mStorageBookmarks = new HashMap<Integer, Bookmark>();
-
- ColorStateList colorStateList = new ColorStateList(color_states, colors);
- // TODO: Figure out why the following doesn't work correctly...
- mNavigationDrawer.setItemTextColor(colorStateList);
- mNavigationDrawer.setItemIconTintList(colorStateList);
+ mNavigationDrawerItemList = new ArrayList<NavigationDrawerItem>();
+ mLastRoot = 0;
+ mCurrentSelection = -1;
+ ListView listView = (ListView)mNavigationDrawer.findViewById(R.id.navigation_view_listview);
+ listView.setOnItemClickListener(((MainActivity)mCtx));
+ mAdapter = new NavigationDrawerAdapter(mCtx, mNavigationDrawerItemList);
+ listView.setAdapter(mAdapter);
}
public void loadNavigationDrawerItems() {
// clear current special nav drawer items
- removeAllDynamicMenuItemsFromDrawer();
+ removeAllItemsFromDrawer();
- // Show/hide root
+ mLastRoot = 0;
+ String title = null;
+ String summary = null;
+ int color;
+
+ // Determine display mode
boolean showRoot = FileManagerApplication.getAccessMode().compareTo(AccessMode.SAFE) != 0;
- mNavigationDrawer.getMenu().findItem(R.id.navigation_item_root_d).setVisible(showRoot);
+ NavigationDrawerItemType itemType = showRoot ?
+ NavigationDrawerItemType.DOUBLE : NavigationDrawerItemType.SINGLE;
+
+ // Load Header
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(0, NavigationDrawerItemType.HEADER,
+ null, null, 0, 0));
+
+ // Load Home and Favorites
+ title = mCtx.getResources().getString(R.string.navigation_item_title_home);
+ summary = null;
+ color = mCtx.getResources().getColor(R.color.default_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(R.id.navigation_item_home,
+ NavigationDrawerItemType.SINGLE, title, summary, R.drawable.ic_home, color));
+ // TODO: Re-enable Favorites once we have a fragment for it
+ //title = mCtx.getResources().getString(R.string.navigation_item_title_favorites);
+ //summary = null;
+ //color = mCtx.getResources().getColor(R.color.favorites_primary);
+ //mNavigationDrawerItemList.add(new NavigationDrawerItem(R.id.navigation_item_favorites,
+ // NavigationDrawerItemType.SINGLE, title, summary, R.drawable.ic_favorite_on, color));
+
+ // Divider
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(0, NavigationDrawerItemType.DIVIDER,
+ null, null, 0, 0));
+
+ // Load Local Storage
+ title = mCtx.getResources().getString(R.string.navigation_item_title_local);
+ summary = StorageHelper.getLocalStoragePath(mCtx);
+ color = mCtx.getResources().getColor(R.color.default_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(R.id.navigation_item_internal,
+ itemType, title, summary, R.drawable.ic_source_internal, color));
+
+ // Show/hide root
+ if (showRoot) {
+ title = mCtx.getResources().getString(R.string.navigation_item_title_root);
+ summary = FileHelper.ROOT_DIRECTORY;
+ color = mCtx.getResources().getColor(R.color.root_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(R.id.navigation_item_root_d,
+ itemType, title, summary, R.drawable.ic_source_root_d, color));
+ }
+
+ loadExternalStorageItems(itemType);
+
+ // Grab storageapi providers insertion spot in list.
+ mLastRoot = mNavigationDrawerItemList.size();
+
+ loadSecureStorage();
+
+ // Divider
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(0, NavigationDrawerItemType.DIVIDER,
+ null, null, 0, 0));
+
+ // Load manage storage and settings
+ title = mCtx.getResources().getString(R.string.navigation_item_title_manage);
+ summary = null;
+ color = mCtx.getResources().getColor(R.color.misc_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(R.id.navigation_item_manage,
+ NavigationDrawerItemType.SINGLE, title, summary, R.drawable.ic_storage_sources,
+ color));
+ title = mCtx.getResources().getString(R.string.navigation_item_title_settings);
+ summary = null;
+ color = mCtx.getResources().getColor(R.color.misc_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(R.id.navigation_item_settings,
+ NavigationDrawerItemType.SINGLE, title, summary, R.drawable.ic_settings, color));
+
+ // Notify dataset changed here because we aren't sure when/if storage providers will return.
+ mAdapter.notifyDataSetChanged();
- loadExternalStorageItems();
}
/**
* Method that loads the secure digital card and usb storage menu items from the system.
- *
- * @return List<MenuItem> The storage items to be displayed
*/
- private void loadExternalStorageItems() {
+ private void loadExternalStorageItems(NavigationDrawerItemType itemType) {
List<Bookmark> sdBookmarks = new ArrayList<Bookmark>();
List<Bookmark> usbBookmarks = new ArrayList<Bookmark>();
@@ -134,12 +207,16 @@ public class NavigationDrawerController {
for (Bookmark b : sdBookmarks) {
if (TextUtils.equals(b.getPath(), localStorage)) continue;
int hash = b.hashCode();
- addMenuItemToDrawer(hash, b.getName(), R.drawable.ic_sdcard_drawable);
+ int color = mCtx.getResources().getColor(R.color.sdcard_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(hash, itemType, b.getName(),
+ b.getPath(), R.drawable.ic_source_sd_card, color));
mStorageBookmarks.put(hash, b);
}
for (Bookmark b : usbBookmarks) {
int hash = b.hashCode();
- addMenuItemToDrawer(hash, b.getName(), R.drawable.ic_usb_drawable);
+ int color = mCtx.getResources().getColor(R.color.usb_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(hash, itemType, b.getName(),
+ b.getPath(), R.drawable.ic_source_usb, color));
mStorageBookmarks.put(hash, b);
}
}
@@ -148,22 +225,36 @@ public class NavigationDrawerController {
}
}
- private void addMenuItemToDrawer(int hash, String title, int iconDrawable) {
- if (mNavigationDrawer.getMenu().findItem(hash) == null) {
- mNavigationDrawer.getMenu()
- .add(R.id.navigation_group_roots, hash, 0, title)
- .setIcon(iconDrawable);
+ /**
+ * Method that loads the secure storage mount point.
+ */
+ private void loadSecureStorage() {
+ List<MountPoint> mps = VirtualMountPointConsole.getVirtualMountPoints();
+ for (MountPoint mp : mps) {
+ BOOKMARK_TYPE type = null;
+ String name = null;
+ if (mp.isSecure()) {
+ type = BOOKMARK_TYPE.SECURE;
+ name = mCtx.getResources().getString(R.string.navigation_item_title_protected);
+ Bookmark b = new Bookmark(type, name, mp.getMountPoint());
+
+ int hash = b.hashCode();
+ int color = mCtx.getResources().getColor(R.color.protected_primary);
+ mNavigationDrawerItemList.add(new NavigationDrawerItem(hash,
+ NavigationDrawerItemType.SINGLE, b.getName(), b.getPath(),
+ R.drawable.ic_source_protected, color));
+ mStorageBookmarks.put(hash, b);
+ break;
+ } else {
+ continue;
+ }
}
}
- public void removeMenuItemFromDrawer(int hash) {
- mNavigationDrawer.getMenu().removeItem(hash);
- }
+ public void removeAllItemsFromDrawer() {
+ // reset menu list
+ mNavigationDrawerItemList.clear();
- public void removeAllDynamicMenuItemsFromDrawer() {
- for (int key : mStorageBookmarks.keySet()) {
- removeMenuItemFromDrawer(key);
- }
// reset hashmaps
mStorageBookmarks.clear();
}
@@ -171,4 +262,21 @@ public class NavigationDrawerController {
public Bookmark getBookmarkFromMenuItem(int key) {
return mStorageBookmarks.get(key);
}
+
+ public void setSelected(int position) {
+ // Unset old selection
+ if (mCurrentSelection >= 0 && mCurrentSelection < mNavigationDrawerItemList.size()) {
+ NavigationDrawerItem item = mNavigationDrawerItemList.get(mCurrentSelection);
+ item.setSelected(false);
+ }
+
+ // Set new selection
+ if (position > 0 && position < mNavigationDrawerItemList.size()) {
+ NavigationDrawerItem item = mNavigationDrawerItemList.get(position);
+ item.setSelected(true);
+ }
+
+ mCurrentSelection = position;
+ mAdapter.notifyDataSetChanged();
+ }
}