X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/2444e4254ccf574d057205640c93d1f2fba740e0..1998cc68d6586c6a0b4bc4c9be42b48d17fa5ba7:/src/com/owncloud/android/utils/FileStorageUtils.java diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e70302fc..757f896c 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -21,8 +21,11 @@ package com.owncloud.android.utils; import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.List; import java.util.Vector; import third_parties.daveKoeller.AlphanumComparator; @@ -46,12 +49,12 @@ import android.webkit.MimeTypeMap; * Static methods to help in access to local file system. */ public class FileStorageUtils { - public static Integer mSortOrder; - public static Boolean mSortAscending; public static final Integer SORT_NAME = 0; public static final Integer SORT_DATE = 1; public static final Integer SORT_SIZE = 2; - + public static Integer mSortOrder = SORT_NAME; + public static Boolean mSortAscending = true; + //private static final String LOG_TAG = "FileStorageUtils"; @@ -155,13 +158,13 @@ public class FileStorageUtils { /** * Sorts all filenames, regarding last user decision */ - public static Vector sortFolder(Vector files){ + public static Vector sortOcFolder(Vector files){ switch (mSortOrder){ case 0: - files = FileStorageUtils.sortByName(files); + files = FileStorageUtils.sortOCFilesByName(files); break; case 1: - files = FileStorageUtils.sortByDate(files); + files = FileStorageUtils.sortOCFilesByDate(files); break; case 2: // mFiles = FileStorageUtils.sortBySize(mSortAscending); @@ -170,12 +173,31 @@ public class FileStorageUtils { return files; } + + /** + * Sorts all filenames, regarding last user decision + */ + public static File[] sortLocalFolder(File[] files){ + switch (mSortOrder){ + case 0: + files = FileStorageUtils.sortLocalFilesByName(files); + break; + case 1: + files = FileStorageUtils.sortLocalFilesByDate(files); + break; + case 2: + // mFiles = FileStorageUtils.sortBySize(mSortAscending); + break; + } + + return files; + } /** * Sorts list by Date * @param files */ - public static Vector sortByDate(Vector files){ + public static Vector sortOCFilesByDate(Vector files){ final Integer val; if (mSortAscending){ val = 1; @@ -205,6 +227,43 @@ public class FileStorageUtils { return files; } + /** + * Sorts list by Date + * @param filesArray + */ + public static File[] sortLocalFilesByDate(File[] filesArray){ + final Integer val; + if (mSortAscending){ + val = 1; + } else { + val = -1; + } + + List files = new ArrayList(Arrays.asList(filesArray)); + + Collections.sort(files, new Comparator() { + public int compare(File o1, File o2) { + if (o1.isDirectory() && o2.isDirectory()) { + Long obj1 = o1.lastModified(); + return val * obj1.compareTo(o2.lastModified()); + } + else if (o1.isDirectory()) { + return -1; + } else if (o2.isDirectory()) { + return 1; + } else if (o1.lastModified() == 0 || o2.lastModified() == 0){ + return 0; + } else { + Long obj1 = o1.lastModified(); + return val * obj1.compareTo(o2.lastModified()); + } + } + }); + + File[] returnArray = new File[1]; + return files.toArray(returnArray); + } + // /** // * Sorts list by Size // * @param sortAscending true: ascending, false: descending @@ -243,7 +302,7 @@ public class FileStorageUtils { * Sorts list by Name * @param files files to sort */ - public static Vector sortByName(Vector files){ + public static Vector sortOCFilesByName(Vector files){ final Integer val; if (mSortAscending){ val = 1; @@ -254,7 +313,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()) { @@ -266,6 +325,38 @@ public class FileStorageUtils { return files; } + + /** + * Sorts list by Name + * @param filesArray files to sort + */ + public static File[] sortLocalFilesByName(File[] filesArray){ + final Integer val; + if (mSortAscending){ + val = 1; + } else { + val = -1; + } + + List files = new ArrayList(Arrays.asList(filesArray)); + + Collections.sort(files, new Comparator() { + public int compare(File o1, File o2) { + if (o1.isDirectory() && o2.isDirectory()) { + return val * o1.getPath().toLowerCase().compareTo(o2.getPath().toLowerCase()); + } else if (o1.isDirectory()) { + return -1; + } else if (o2.isDirectory()) { + return 1; + } + return val * new AlphanumComparator().compare(o1.getPath().toLowerCase(), + o2.getPath().toLowerCase()); + } + }); + + File[] returnArray = new File[1]; + return files.toArray(returnArray); + } /** * Local Folder size