Implement backspace support.

Pressing backspace pops the user up a directory level if they aren't at
the root directory of the current root.

BUG=27123794

Change-Id: I8f0a88a1194bf8f082d0b057a288a0c3da3068f6
diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
index 4a55906..69d4bb9 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java
@@ -284,7 +284,7 @@
                 if (dir != null) {
                     dir.pasteFromClipboard();
                 }
-              return true;
+                return true;
 
             case R.id.menu_advanced:
                 setDisplayAdvancedDevices(!LocalPreferences.getDisplayAdvancedDevices(this));
@@ -456,7 +456,7 @@
         DirectoryFragment dir = getDirectoryFragment();
         if (dir != null) {
             dir.onSortOrderChanged();
-        };
+        }
     }
 
     /**
@@ -474,7 +474,7 @@
         DirectoryFragment dir = getDirectoryFragment();
         if (dir != null) {
             dir.onViewModeChanged();
-        };
+        }
     }
 
     public void setPending(boolean pending) {
@@ -562,9 +562,7 @@
             }
         }
 
-        if (size > 1) {
-            mState.stack.pop();
-            refreshCurrentRootAndDirectory(ANIM_LEAVE);
+        if (popDir()) {
             return;
         }
 
@@ -604,8 +602,12 @@
                 return true;
             }
         } else if (keyCode == KeyEvent.KEYCODE_TAB) {
+            // Tab toggles focus on the navigation drawer.
             toggleNavDrawerFocus();
             return true;
+        } else if (keyCode == KeyEvent.KEYCODE_DEL) {
+            popDir();
+            return true;
         }
         return super.onKeyDown(keyCode, event);
     }
@@ -642,6 +644,21 @@
         }
     }
 
+    /**
+     * Pops the top entry off the directory stack, and returns the user to the previous directory.
+     * If the directory stack only contains one item, this method does nothing.
+     *
+     * @return Whether the stack was popped.
+     */
+    private boolean popDir() {
+        if (mState.stack.size() > 1) {
+            mState.stack.pop();
+            refreshCurrentRootAndDirectory(ANIM_LEAVE);
+            return true;
+        }
+        return false;
+    }
+
     private static final class PickRootTask extends PairedTask<BaseActivity, Void, DocumentInfo> {
         private RootInfo mRoot;