diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e70302fc2e..2b6d68b3f9 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -254,7 +254,7 @@ public class FileStorageUtils { Collections.sort(files, new Comparator() { public int compare(OCFile o1, OCFile o2) { if (o1.isFolder() && o2.isFolder()) { - return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase()); + return val * new AlphanumComparator().compare(o1, o2); } else if (o1.isFolder()) { return -1; } else if (o2.isFolder()) { diff --git a/src/third_parties/daveKoeller/AlphanumComparator.java b/src/third_parties/daveKoeller/AlphanumComparator.java index e6bd6f3824..e86c3c4791 100644 --- a/src/third_parties/daveKoeller/AlphanumComparator.java +++ b/src/third_parties/daveKoeller/AlphanumComparator.java @@ -23,6 +23,7 @@ */ package third_parties.daveKoeller; +import java.text.Collator; import java.util.Comparator; import com.owncloud.android.datamodel.OCFile; @@ -48,14 +49,12 @@ public class AlphanumComparator implements Comparator } /** Length of string is passed in for improved efficiency (only need to calculate it once) **/ - private final String getChunk(String s, int slength, int marker) - { + private final String getChunk(String s, int slength, int marker){ StringBuilder chunk = new StringBuilder(); char c = s.charAt(marker); chunk.append(c); marker++; - if (isDigit(c)) - { + if (isDigit(c)){ while (marker < slength) { c = s.charAt(marker); @@ -64,8 +63,7 @@ public class AlphanumComparator implements Comparator chunk.append(c); marker++; } - } else - { + } else { while (marker < slength) { c = s.charAt(marker); @@ -78,8 +76,7 @@ public class AlphanumComparator implements Comparator return chunk.toString(); } - public int compare(OCFile o1, OCFile o2) - { + public int compare(OCFile o1, OCFile o2){ String s1 = (String)o1.getRemotePath().toLowerCase(); String s2 = (String)o2.getRemotePath().toLowerCase(); @@ -88,8 +85,7 @@ public class AlphanumComparator implements Comparator int s1Length = s1.length(); int s2Length = s2.length(); - while (thisMarker < s1Length && thatMarker < s2Length) - { + while (thisMarker < s1Length && thatMarker < s2Length) { String thisChunk = getChunk(s1, s1Length, thisMarker); thisMarker += thisChunk.length(); @@ -98,26 +94,24 @@ public class AlphanumComparator implements Comparator // If both chunks contain numeric characters, sort them numerically int result = 0; - if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) - { + if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) { // Simple chunk comparison by length. int thisChunkLength = thisChunk.length(); result = thisChunkLength - thatChunk.length(); // If equal, the first different number counts - if (result == 0) - { - for (int i = 0; i < thisChunkLength; i++) - { + if (result == 0) { + for (int i = 0; i < thisChunkLength; i++) { result = thisChunk.charAt(i) - thatChunk.charAt(i); - if (result != 0) - { + if (result != 0) { return result; } } } - } else - { - result = thisChunk.compareTo(thatChunk); + } else { + Collator collator = Collator.getInstance(); + collator.setStrength(Collator.PRIMARY); + result = collator.compare(thisChunk, thatChunk); +// result = thisChunk.compareTo(thatChunk); } if (result != 0)