Просмотр исходного кода

Natural sorting, for digits use value (01 -> 1), order by leading zeros (1 > 01)
use AlphanumComparator also for folder comparison

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>

tobiasKaminsky 7 лет назад
Родитель
Сommit
d95e8a98a6

+ 3 - 5
src/main/java/com/owncloud/android/datamodel/OCFile.java

@@ -28,6 +28,7 @@ import android.content.Context;
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.support.annotation.NonNull;
 import android.support.v4.content.FileProvider;
 
 import com.owncloud.android.R;
@@ -36,7 +37,6 @@ import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.utils.MimeType;
 
 import java.io.File;
-import java.util.Locale;
 
 import third_parties.daveKoeller.AlphanumComparator;
 
@@ -618,10 +618,8 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
     }
 
     @Override
-    public int compareTo(OCFile another) {
-        if (isFolder() && another.isFolder()) {
-            return getRemotePath().toLowerCase(Locale.ROOT).compareTo(another.getRemotePath().toLowerCase(Locale.ROOT));
-        } else if (isFolder()) {
+    public int compareTo(@NonNull OCFile another) {
+        if (isFolder()) {
             return -1;
         } else if (another.isFolder()) {
             return 1;

+ 2 - 2
src/main/java/third_parties/daveKoeller/AlphanumComparator.java

@@ -88,8 +88,8 @@ public class AlphanumComparator<T> implements Comparator<T>, Serializable {
     }
 
     public int compare(OCFile o1, OCFile o2) {
-        String s1 = o1.getRemotePath().toLowerCase(Locale.ROOT);
-        String s2 = o2.getRemotePath().toLowerCase(Locale.ROOT);
+        String s1 = o1.getFileName().toLowerCase(Locale.ROOT);
+        String s2 = o2.getFileName().toLowerCase(Locale.ROOT);
 
         return compare(s1, s2);
     }

+ 9 - 1
src/test/java/com/owncloud/android/utils/TestSorting.java

@@ -61,13 +61,21 @@ public class TestSorting {
     }
 
     @Test
-    public void testTrailingZeros() {
+    public void testLeadingZeros() {
         String[] unsortedArray = {"T 3 abc", "T 2 abc", "T 03 abc", "T 01 abc", "T 0 abc", "T 02 abc", "T 1 abc", "T 001 abc", "T 000 abc", "T 00 abc"};
         String[] sortedArray = {"T 0 abc", "T 00 abc", "T 000 abc", "T 1 abc", "T 01 abc", "T 001 abc", "T 2 abc", "T 02 abc", "T 3 abc", "T 03 abc"};
 
         assertTrue(sortAndTest(unsortedArray, sortedArray));
     }
 
+    @Test
+    public void testTrailingDigits() {
+        String[] unsortedArray = {"Zeros 2", "Zeros", "T 2", "T", "T 01", "T 003", "A"};
+        String[] sortedArray = {"A", "T", "T 01", "T 2", "T 003", "Zeros", "Zeros 2"};
+
+        assertTrue(sortAndTest(unsortedArray, sortedArray));
+    }
+
     @Test
     public void testNumbers() {
         String[] unsortedArray = {"124.txt", "abc1", "123.txt", "abc", "abc2", "def (2).txt", "ghi 10.txt", "abc12",