[multi-part] Enable bidrectional sorting

* Wire new sort model to existing sorting logic
* Add sort by menu item to sort controller
* Enable sorting in Recents
* Add tests for SortModel

Bug: 22823056
Change-Id: I864e79e711bf18f3018abd9db90bcf267f0ed390
diff --git a/src/com/android/documentsui/MenuManager.java b/src/com/android/documentsui/MenuManager.java
index 0edd18e..3249183 100644
--- a/src/com/android/documentsui/MenuManager.java
+++ b/src/com/android/documentsui/MenuManager.java
@@ -53,9 +53,7 @@
         updateFileSize(menu.findItem(R.id.menu_file_size), directoryDetails);
         updateModePicker(menu.findItem(
                 R.id.menu_grid), menu.findItem(R.id.menu_list), directoryDetails);
-        updateSort(menu.findItem(R.id.menu_sort),
-                menu.findItem(R.id.menu_sort_size),
-                directoryDetails);
+        // Sort menu item is managed by SortMenuManager
         updateAdvanced(menu.findItem(R.id.menu_advanced), directoryDetails);
 
         Menus.disableHiddenItems(menu);
@@ -115,13 +113,6 @@
                 ? R.string.menu_file_size_hide : R.string.menu_file_size_show);
     }
 
-    void updateSort(MenuItem sort, MenuItem sortSize, DirectoryDetails directoryDetails) {
-        // Search uses backend ranking; no sorting, recents doesn't support sort.
-        sort.setEnabled(!directoryDetails.isInRecents() && !mSearchManager.isSearching());
-        sort.setVisible(true);
-        sortSize.setVisible(mState.getShowSize()); // Only sort by size when file sizes are visible
-    }
-
     void updateAdvanced(MenuItem advanced, DirectoryDetails directoryDetails) {
         advanced.setVisible(mState.showAdvancedOption);
         advanced.setTitle(mState.showAdvancedOption && mState.showAdvanced