Directories are always enabled; update assets.

Fix bug where item enabled state depended on FLAG_SUPPORTS_WRITE;
directories are now always enabled.  Also unifies enabled testing.

Bug: 10903210, 10946731
Change-Id: I241533d273dfe4a2146bb322a8bd93066bf4ef55
diff --git a/src/com/android/documentsui/DirectoryFragment.java b/src/com/android/documentsui/DirectoryFragment.java
index 79ab28d..138f523 100644
--- a/src/com/android/documentsui/DirectoryFragment.java
+++ b/src/com/android/documentsui/DirectoryFragment.java
@@ -77,7 +77,6 @@
 import com.android.documentsui.RecentsProvider.StateColumns;
 import com.android.documentsui.model.DocumentInfo;
 import com.android.documentsui.model.RootInfo;
-import com.android.internal.util.Predicate;
 import com.google.android.collect.Lists;
 
 import java.util.ArrayList;
@@ -95,8 +94,6 @@
 
     private AbsListView mCurrentView;
 
-    private Predicate<DocumentInfo> mFilter;
-
     public static final int TYPE_NORMAL = 1;
     public static final int TYPE_SEARCH = 2;
     public static final int TYPE_RECENT_OPEN = 3;
@@ -354,8 +351,6 @@
     private void updateDisplayState() {
         final State state = getDisplayState(this);
 
-        mFilter = new MimePredicate(state.acceptMimes);
-
         if (mLastMode == state.derivedMode && mLastShowSize == state.showSize) return;
         mLastMode = state.derivedMode;
         mLastShowSize = state.showSize;
@@ -399,8 +394,10 @@
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             final Cursor cursor = mAdapter.getItem(position);
             if (cursor != null) {
-                final DocumentInfo doc = DocumentInfo.fromDirectoryCursor(cursor);
-                if (mFilter.apply(doc)) {
+                final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
+                final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
+                if (isDocumentEnabled(docMimeType, docFlags)) {
+                    final DocumentInfo doc = DocumentInfo.fromDirectoryCursor(cursor);
                     ((DocumentsActivity) getActivity()).onDocumentPicked(doc);
                 }
             }
@@ -479,11 +476,10 @@
                 final Cursor cursor = mAdapter.getItem(position);
                 if (cursor != null) {
                     final String docMimeType = getCursorString(cursor, Document.COLUMN_MIME_TYPE);
-
-                    // Only valid if non-directory matches filter
-                    final State state = getDisplayState(DirectoryFragment.this);
-                    valid = !Document.MIME_TYPE_DIR.equals(docMimeType)
-                            && MimePredicate.mimeMatches(state.acceptMimes, docMimeType);
+                    final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS);
+                    if (!Document.MIME_TYPE_DIR.equals(docMimeType)) {
+                        valid = isDocumentEnabled(docMimeType, docFlags);
+                    }
                 }
 
                 if (!valid) {
@@ -896,14 +892,7 @@
                 line2.setVisibility(hasLine2 ? View.VISIBLE : View.GONE);
             }
 
-            boolean enabled = Document.MIME_TYPE_DIR.equals(docMimeType)
-                    || MimePredicate.mimeMatches(state.acceptMimes, docMimeType);
-
-            // Read-only files aren't actually enabled when creating
-            if (state.action == ACTION_CREATE && (docFlags & Document.FLAG_SUPPORTS_WRITE) == 0) {
-                enabled = false;
-            }
-
+            final boolean enabled = isDocumentEnabled(docMimeType, docFlags);
             if (enabled) {
                 setEnabledRecursive(convertView, true);
                 icon.setAlpha(1f);
@@ -1067,4 +1056,20 @@
             }
         }
     }
+
+    private boolean isDocumentEnabled(String docMimeType, int docFlags) {
+        final State state = getDisplayState(DirectoryFragment.this);
+
+        // Read-only files are disabled when creating
+        if (state.action == ACTION_CREATE && (docFlags & Document.FLAG_SUPPORTS_WRITE) == 0) {
+            return false;
+        }
+
+        // Directories are always enabled
+        if (Document.MIME_TYPE_DIR.equals(docMimeType)) {
+            return true;
+        }
+
+        return MimePredicate.mimeMatches(state.acceptMimes, docMimeType);
+    }
 }