Keep folders on top
authortobiasKaminsky <tobias@kaminsky.me>
Mon, 15 Sep 2014 10:00:19 +0000 (12:00 +0200)
committertobiasKaminsky <tobias@kaminsky.me>
Mon, 15 Sep 2014 10:00:19 +0000 (12:00 +0200)
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

index bab3d85..07cd477 100644 (file)
@@ -34,6 +34,7 @@ import android.widget.TextView;
 \r
 import com.owncloud.android.R;\r
 import com.owncloud.android.authentication.AccountUtils;\r
+import com.owncloud.android.datamodel.AlphanumComparator;\r
 import com.owncloud.android.datamodel.FileDataStorageManager;\r
 import com.owncloud.android.datamodel.OCFile;\r
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;\r
@@ -258,22 +259,18 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
     private void sortDirectory(){\r
         switch (sort){\r
         case NAME:\r
-            sortByName();\r
+            sortByName(sortAscending);\r
             break;\r
 \r
         case SIZE:\r
-            sortBySize();\r
+            sortBySize(sortAscending);\r
             break;\r
 \r
         case DATE:\r
-            sortByDate();\r
+            sortByDate(sortAscending);\r
             break;\r
         }\r
 \r
-        if (!sortAscending){\r
-            Collections.reverse(mFiles);\r
-        }\r
-\r
         notifyDataSetChanged();\r
     }\r
     \r
@@ -308,11 +305,18 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
     }\r
 \r
-    private void sortByDate(){\r
+    private void sortByDate(boolean sortAscending){\r
+        final Integer val;\r
+        if (sortAscending){\r
+            val = 1;\r
+        } else {\r
+            val = -1;\r
+        }\r
+        \r
         Collections.sort(mFiles, new Comparator<OCFile>() {\r
             public int compare(OCFile o1, OCFile o2) {\r
                 if (o1.isFolder() && o2.isFolder()) {\r
-                    return Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
+                    return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
                 }\r
                 else if (o1.isFolder()) {\r
                     return -1;\r
@@ -321,13 +325,20 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 } else if (o1.getModificationTimestamp() == 0 || o2.getModificationTimestamp() == 0){\r
                     return 0;\r
                 } else {\r
-                    return Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
+                    return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
                 }\r
             }\r
         });\r
     }\r
 \r
-    private void sortBySize(){\r
+    private void sortBySize(boolean sortAscending){\r
+        final Integer val;\r
+        if (sortAscending){\r
+            val = 1;\r
+        } else {\r
+            val = -1;\r
+        }\r
+        \r
         Collections.sort(mFiles, new Comparator<OCFile>() {\r
             public int compare(OCFile o1, OCFile o2) {\r
                 if (o1.isFolder() && o2.isFolder()) {\r
@@ -340,14 +351,32 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 } else if (o1.getFileLength() == 0 || o2.getFileLength() == 0){\r
                     return 0;\r
                 } else {\r
-                    return Long.compare(o1.getFileLength(), o2.getFileLength());\r
+                    return val * Long.compare(o1.getFileLength(), o2.getFileLength());\r
                 }\r
             }\r
         });\r
     }\r
 \r
-    private void sortByName(){\r
-        Collections.sort(mFiles);\r
+    private void sortByName(boolean sortAscending){\r
+        final Integer val;\r
+        if (sortAscending){\r
+            val = 1;\r
+        } else {\r
+            val = -1;\r
+        }\r
+\r
+        Collections.sort(mFiles, new Comparator<OCFile>() {\r
+            public int compare(OCFile o1, OCFile o2) {\r
+                if (o1.isFolder() && o2.isFolder()) {\r
+                    return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase());\r
+                } else if (o1.isFolder()) {\r
+                    return -1;\r
+                } else if (o2.isFolder()) {\r
+                    return 1;\r
+                }\r
+                return val * new AlphanumComparator().compare(o1, o2);\r
+            }\r
+        });\r
     }\r
 \r
     public void setSortOrder(sortOrders order, boolean descending) {\r