aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
diff options
context:
space:
mode:
authorRichard MacGregor <rmacgregor@cyngn.com>2015-06-30 16:44:21 -0700
committerSteve Kondik <steve@cyngn.com>2016-11-02 18:12:44 -0700
commit1b5cca923058fa4f87a32f991582fc596121ab16 (patch)
treed8b8d5579c626af773cc32a6f780a225cbca534e /src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
parente5cdfc13fd98c003a17bd417abbb0e9094eb7ae0 (diff)
downloadandroid_packages_apps_CMFileManager-1b5cca923058fa4f87a32f991582fc596121ab16.tar.gz
android_packages_apps_CMFileManager-1b5cca923058fa4f87a32f991582fc596121ab16.tar.bz2
android_packages_apps_CMFileManager-1b5cca923058fa4f87a32f991582fc596121ab16.zip
Update NavigationDrawer
Replace android.support.design NavigationView header and menu components with a list view containing the header and menu items. This allows for better control over item layouts. Specifically MenuItems does not support colors per item, and subtitle (summary). Rewire secure storage. Fix cancel and bad password behavior when navigating to protected storage. Change-Id: I708a7b8e5e8352e4846195480d91fb97c8c2e67b
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();
+ }
}