Fix exception on event action == CANCEL.

+add New folder shortcut to shortcut display.

Bug: 31857258
Change-Id: Iac542baa418a1c15f66e7034f1a8262dab969921
diff --git a/src/com/android/documentsui/base/Events.java b/src/com/android/documentsui/base/Events.java
index 2231ab5..4ec7dea 100644
--- a/src/com/android/documentsui/base/Events.java
+++ b/src/com/android/documentsui/base/Events.java
@@ -132,6 +132,9 @@
          * or touch. */
         boolean isActionMove();
 
+        /** Returns true if the action is cancel. */
+        boolean isActionCancel();
+
         // Eliminate the checked Exception from Autoclosable.
         @Override
         public void close();
@@ -254,6 +257,11 @@
         }
 
         @Override
+        public boolean isActionCancel() {
+            return mEvent.getActionMasked() == MotionEvent.ACTION_CANCEL;
+        }
+
+        @Override
         public Point getOrigin() {
             return new Point((int) mEvent.getX(), (int) mEvent.getY());
         }
@@ -326,8 +334,8 @@
                     .append(" isPrimaryButtonPressed=").append(isPrimaryButtonPressed())
                     .append(" isSecondaryButtonPressed=").append(isSecondaryButtonPressed())
                     .append(" isShiftKeyDown=").append(isShiftKeyDown())
-                    .append(" isActionDown=").append(isActionDown())
-                    .append(" isActionUp=").append(isActionUp())
+                    .append(" action(decoded)=").append(
+                            MotionEvent.actionToString(mEvent.getActionMasked()))
                     .append(" getOrigin=").append(getOrigin())
                     .append(" isOverItem=").append(isOverItem())
                     .append(" getItemPosition=").append(getItemPosition())
diff --git a/src/com/android/documentsui/dirlist/BandController.java b/src/com/android/documentsui/dirlist/BandController.java
index 57a30e4..91afa23 100644
--- a/src/com/android/documentsui/dirlist/BandController.java
+++ b/src/com/android/documentsui/dirlist/BandController.java
@@ -230,7 +230,7 @@
     public boolean shouldStop(InputEvent input) {
         return isActive()
                 && input.isMouseEvent()
-                && input.isActionUp();
+                && (input.isActionUp() || input.isActionCancel());
     }
 
     /**
diff --git a/src/com/android/documentsui/files/MenuManager.java b/src/com/android/documentsui/files/MenuManager.java
index 62e4ffb..61d57b5 100644
--- a/src/com/android/documentsui/files/MenuManager.java
+++ b/src/com/android/documentsui/files/MenuManager.java
@@ -69,6 +69,9 @@
                 stringSupplier.apply(R.string.menu_paste_from_clipboard), KeyEvent.KEYCODE_V,
                 KeyEvent.META_CTRL_ON));
         group.addItem(new KeyboardShortcutInfo(
+                stringSupplier.apply(R.string.menu_create_dir), KeyEvent.KEYCODE_E,
+                KeyEvent.META_CTRL_ON));
+        group.addItem(new KeyboardShortcutInfo(
                 stringSupplier.apply(R.string.menu_select_all), KeyEvent.KEYCODE_A,
                 KeyEvent.META_CTRL_ON));
         group.addItem(new KeyboardShortcutInfo(
diff --git a/tests/common/com/android/documentsui/testing/TestEvent.java b/tests/common/com/android/documentsui/testing/TestEvent.java
index 9fd6215..c67f514 100644
--- a/tests/common/com/android/documentsui/testing/TestEvent.java
+++ b/tests/common/com/android/documentsui/testing/TestEvent.java
@@ -166,6 +166,11 @@
     }
 
     @Override
+    public boolean isActionCancel() {
+        return mAction == MotionEvent.ACTION_CANCEL;
+    }
+
+    @Override
     public boolean isOverItem() {
         return mDetails.isOverItem();
     }