aboutsummaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/com')
-rwxr-xr-xsrc/com/cyanogenmod/filemanager/activities/MainActivity.java72
-rwxr-xr-xsrc/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java174
-rw-r--r--src/com/cyanogenmod/filemanager/model/Bookmark.java7
-rw-r--r--src/com/cyanogenmod/filemanager/util/StorageHelper.java10
4 files changed, 229 insertions, 34 deletions
diff --git a/src/com/cyanogenmod/filemanager/activities/MainActivity.java b/src/com/cyanogenmod/filemanager/activities/MainActivity.java
index 83d1936c..e1870227 100755
--- a/src/com/cyanogenmod/filemanager/activities/MainActivity.java
+++ b/src/com/cyanogenmod/filemanager/activities/MainActivity.java
@@ -22,8 +22,6 @@ import android.app.Dialog;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.pm.PackageManager;
-import android.content.res.ColorStateList;
-import android.graphics.Color;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.os.Bundle;
@@ -33,7 +31,7 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
-import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.MenuItem;
@@ -44,6 +42,7 @@ import android.view.WindowManager;
import com.cyanogenmod.filemanager.FileManagerApplication;
import com.cyanogenmod.filemanager.R;
import com.cyanogenmod.filemanager.activities.preferences.SettingsPreferences;
+import com.cyanogenmod.filemanager.controllers.NavigationDrawerController;
import com.cyanogenmod.filemanager.model.Bookmark;
import com.cyanogenmod.filemanager.model.FileSystemObject;
import com.cyanogenmod.filemanager.preferences.FileManagerSettings;
@@ -53,6 +52,8 @@ import com.cyanogenmod.filemanager.ui.fragments.HomeFragment;
import com.cyanogenmod.filemanager.ui.fragments.NavigationFragment;
import com.cyanogenmod.filemanager.util.FileHelper;
import com.cyanogenmod.filemanager.util.MimeTypeHelper.MimeTypeCategory;
+import com.cyanogenmod.filemanager.util.StorageHelper;
+
import com.cyngn.uicommon.view.Snackbar;
import java.io.File;
@@ -127,21 +128,9 @@ public class MainActivity extends ActionBarActivity
static String MIME_TYPE_LOCALIZED_NAMES[];
- 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 Toolbar mToolbar;
private Fragment currentFragment;
private DrawerLayout mDrawerLayout;
- private NavigationView mNavigationDrawer;
+ private NavigationDrawerController mNavigationDrawerController;
private boolean mPopBackStack = false;
@@ -254,16 +243,15 @@ public class MainActivity extends ActionBarActivity
private void finishOnCreate() {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
- mNavigationDrawer = (NavigationView) findViewById(R.id.navigation_view);
- mNavigationDrawer.setNavigationItemSelectedListener(this);
- ColorStateList colorStateList = new ColorStateList(color_states, colors);
- // TODO: Figure out why the following doesn't work correctly...
- mNavigationDrawer.setItemTextColor(colorStateList);
- mNavigationDrawer.setItemIconTintList(colorStateList);
+ NavigationView navigationDrawer = (NavigationView) findViewById(R.id.navigation_view);
+ navigationDrawer.setNavigationItemSelectedListener(this);
+ mNavigationDrawerController = new NavigationDrawerController(this, navigationDrawer);
+ mNavigationDrawerController.loadNavigationDrawerItems();
MIME_TYPE_LOCALIZED_NAMES = MimeTypeCategory.getFriendlyLocalizedNames(this);
showWelcomeMsg();
+
setCurrentFragment(FragmentType.HOME);
//Initialize nfc adapter
@@ -339,6 +327,7 @@ public class MainActivity extends ActionBarActivity
*/
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
+ menuItem.setChecked(false);
int id = menuItem.getItemId();
switch (id) {
case R.id.navigation_item_home:
@@ -351,19 +340,13 @@ public class MainActivity extends ActionBarActivity
break;
case R.id.navigation_item_internal:
if (DEBUG) Log.d(TAG, "onNavigationItemSelected::navigation_item_favorites");
+ getIntent().putExtra(EXTRA_NAVIGATE_TO, StorageHelper.getLocalStoragePath(this));
setCurrentFragment(FragmentType.NAVIGATION);
break;
case R.id.navigation_item_root_d:
- // TODO: Implement this path
if (DEBUG) Log.d(TAG, "onNavigationItemSelected::navigation_item_root_d");
- break;
- case R.id.navigation_item_sd_card:
- // TODO: Implement this path
- if (DEBUG) Log.d(TAG, "onNavigationItemSelected::navigation_item_sd_card");
- break;
- case R.id.navigation_item_usb:
- // TODO: Implement this path
- if (DEBUG) Log.d(TAG, "onNavigationItemSelected::navigation_item_usb");
+ getIntent().putExtra(EXTRA_NAVIGATE_TO, FileHelper.ROOT_DIRECTORY);
+ setCurrentFragment(FragmentType.NAVIGATION);
break;
case R.id.navigation_item_protected:
// TODO: Implement this path
@@ -378,9 +361,17 @@ public class MainActivity extends ActionBarActivity
openSettings();
break;
default:
- // TODO: Implement this path
- if (DEBUG) Log.d(TAG, "onNavigationItemSelected::default");
- setCurrentFragment(FragmentType.NAVIGATION); // Temporary...
+ if (DEBUG) Log.d(TAG, String.format("onNavigationItemSelected::default (%d)", id));
+ String path = null;
+ // Check for item id in storage bookmarks
+ Bookmark bookmark = mNavigationDrawerController.getBookmarkFromMenuItem(id);
+ if (bookmark != null) {
+ path = bookmark.getPath();
+ }
+
+ if (TextUtils.isEmpty(path)) {
+ return false;
+ }
break;
}
mDrawerLayout.closeDrawers();
@@ -388,6 +379,19 @@ public class MainActivity extends ActionBarActivity
}
/**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (requestCode == INTENT_REQUEST_SETTINGS) {
+ // reset bookmarks list to default as the user could changed the
+ // root mode which changes the system bookmarks
+ mNavigationDrawerController.loadNavigationDrawerItems();
+ return;
+ }
+ }
+
+ /**
* Method invoked when an action item is clicked.
*
* @param view The button pushed
diff --git a/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java b/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
new file mode 100755
index 00000000..2a7bf612
--- /dev/null
+++ b/src/com/cyanogenmod/filemanager/controllers/NavigationDrawerController.java
@@ -0,0 +1,174 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.cyanogenmod.filemanager.controllers;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.graphics.Color;
+import android.os.Environment;
+import android.os.storage.StorageVolume;
+import android.support.design.widget.NavigationView;
+import android.text.TextUtils;
+import android.util.Log;
+import com.cyanogenmod.filemanager.FileManagerApplication;
+
+import com.cyanogenmod.filemanager.R;
+import com.cyanogenmod.filemanager.model.Bookmark;
+import com.cyanogenmod.filemanager.preferences.AccessMode;
+import com.cyanogenmod.filemanager.util.StorageHelper;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import static com.cyanogenmod.filemanager.model.Bookmark.BOOKMARK_TYPE.SDCARD;
+import static com.cyanogenmod.filemanager.model.Bookmark.BOOKMARK_TYPE.SECURE;
+import static com.cyanogenmod.filemanager.model.Bookmark.BOOKMARK_TYPE.USB;
+
+/**
+ * NavigationDrawerController. This class is contains logic to add/remove and manage items in
+ * the NavigationDrawer which uses android support libraries NavigationView.
+ */
+public class NavigationDrawerController {
+ private static final String TAG = NavigationDrawerController.class.getSimpleName();
+ private static boolean DEBUG = false;
+
+ 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 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);
+ }
+
+ public void loadNavigationDrawerItems() {
+ // clear current special nav drawer items
+ removeAllDynamicMenuItemsFromDrawer();
+
+ // Show/hide root
+ boolean showRoot = FileManagerApplication.getAccessMode().compareTo(AccessMode.SAFE) != 0;
+ mNavigationDrawer.getMenu().findItem(R.id.navigation_item_root_d).setVisible(showRoot);
+
+ 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() {
+ List<Bookmark> sdBookmarks = new ArrayList<Bookmark>();
+ List<Bookmark> usbBookmarks = new ArrayList<Bookmark>();
+
+ try {
+ // Recovery sdcards and usb from storage manager
+ StorageVolume[] volumes =
+ StorageHelper.getStorageVolumes(mCtx, true);
+ for (StorageVolume volume: volumes) {
+ if (volume != null) {
+ String mountedState = volume.getState();
+ String path = volume.getPath();
+ if (!Environment.MEDIA_MOUNTED.equalsIgnoreCase(mountedState) &&
+ !Environment.MEDIA_MOUNTED_READ_ONLY.equalsIgnoreCase(mountedState)) {
+ if (DEBUG) {
+ Log.w(TAG, "Ignoring '" + path + "' with state of '"
+ + mountedState + "'");
+ }
+ continue;
+ }
+ if (!TextUtils.isEmpty(path)) {
+ String lowerPath = path.toLowerCase(Locale.ROOT);
+ Bookmark bookmark;
+ if (lowerPath.contains(STR_USB)) {
+ usbBookmarks.add(new Bookmark(USB, StorageHelper
+ .getStorageVolumeDescription(mCtx,
+ volume), path));
+ } else {
+ sdBookmarks.add(new Bookmark(SDCARD, StorageHelper
+ .getStorageVolumeDescription(mCtx,
+ volume), path));
+ }
+ }
+ }
+ }
+
+ String localStorage = mCtx.getResources().getString(R.string.local_storage_path);
+
+ // Load the bookmarks
+ for (Bookmark b : sdBookmarks) {
+ if (TextUtils.equals(b.getPath(), localStorage)) continue;
+ int hash = b.hashCode();
+ addMenuItemToDrawer(hash, b.getName(), R.drawable.ic_sdcard_drawable);
+ mStorageBookmarks.put(hash, b);
+ }
+ for (Bookmark b : usbBookmarks) {
+ int hash = b.hashCode();
+ addMenuItemToDrawer(hash, b.getName(), R.drawable.ic_usb_drawable);
+ mStorageBookmarks.put(hash, b);
+ }
+ }
+ catch (Throwable ex) {
+ Log.e(TAG, "Load filesystem bookmarks failed", ex); //$NON-NLS-1$
+ }
+ }
+
+ 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);
+ }
+ }
+
+ public void removeMenuItemFromDrawer(int hash) {
+ mNavigationDrawer.getMenu().removeItem(hash);
+ }
+
+ public void removeAllDynamicMenuItemsFromDrawer() {
+ for (int key : mStorageBookmarks.keySet()) {
+ removeMenuItemFromDrawer(key);
+ mStorageBookmarks.remove(key);
+ }
+ }
+
+ public Bookmark getBookmarkFromMenuItem(int key) {
+ return mStorageBookmarks.get(key);
+ }
+}
diff --git a/src/com/cyanogenmod/filemanager/model/Bookmark.java b/src/com/cyanogenmod/filemanager/model/Bookmark.java
index f922a602..a6262d35 100644
--- a/src/com/cyanogenmod/filemanager/model/Bookmark.java
+++ b/src/com/cyanogenmod/filemanager/model/Bookmark.java
@@ -261,4 +261,11 @@ public class Bookmark implements Serializable, Comparable<Bookmark>, Parcelable
", path=" + this.mPath + "]"; //$NON-NLS-1$//$NON-NLS-2$
}
+ public String getName() {
+ return mName;
+ }
+
+ public String getPath() {
+ return mPath;
+ }
}
diff --git a/src/com/cyanogenmod/filemanager/util/StorageHelper.java b/src/com/cyanogenmod/filemanager/util/StorageHelper.java
index ed07fd5e..a1f4b581 100644
--- a/src/com/cyanogenmod/filemanager/util/StorageHelper.java
+++ b/src/com/cyanogenmod/filemanager/util/StorageHelper.java
@@ -186,4 +186,14 @@ public final class StorageHelper {
return null;
}
+ public static String getLocalStoragePath(Context ctx) {
+ String path = null;
+ StorageVolume[] volumes =
+ StorageHelper.getStorageVolumes(ctx, false);
+ if (volumes != null && volumes.length > 0) {
+ //Ensure that initial directory is an absolute directory
+ path = FileHelper.getAbsPath(volumes[0].getPath());
+ }
+ return path;
+ }
}