diff options
Diffstat (limited to 'src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java')
-rwxr-xr-x | src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java | 184 |
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(); + } } |