|
@@ -38,9 +38,12 @@ import com.owncloud.android.lib.resources.files.RemoteFile;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
import java.util.Collections;
|
|
|
import java.util.Comparator;
|
|
|
import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
import java.util.Locale;
|
|
|
import java.util.Vector;
|
|
|
|
|
@@ -232,27 +235,46 @@ public class FileStorageUtils {
|
|
|
/**
|
|
|
* Sorts all filenames, regarding last user decision
|
|
|
*/
|
|
|
- public static Vector<OCFile> sortFolder(Vector<OCFile> files){
|
|
|
+ public static Vector<OCFile> sortOcFolder(Vector<OCFile> 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:
|
|
|
- files = FileStorageUtils.sortBySize(files);
|
|
|
+ files = FileStorageUtils.sortOCFilesBySize(files);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
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:
|
|
|
+ files = FileStorageUtils.sortLocalFilesBySize(files);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return files;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* Sorts list by Date
|
|
|
* @param files
|
|
|
*/
|
|
|
- public static Vector<OCFile> sortByDate(Vector<OCFile> files){
|
|
|
+ public static Vector<OCFile> sortOCFilesByDate(Vector<OCFile> files){
|
|
|
final int multiplier = mSortAscending ? 1 : -1;
|
|
|
|
|
|
Collections.sort(files, new Comparator<OCFile>() {
|
|
@@ -277,10 +299,42 @@ public class FileStorageUtils {
|
|
|
return files;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Sorts list by Date
|
|
|
+ * @param filesArray
|
|
|
+ */
|
|
|
+ public static File[] sortLocalFilesByDate(File[] filesArray){
|
|
|
+ final int multiplier = mSortAscending ? 1 : -1;
|
|
|
+
|
|
|
+ List<File> files = new ArrayList<File>(Arrays.asList(filesArray));
|
|
|
+
|
|
|
+ Collections.sort(files, new Comparator<File>() {
|
|
|
+ public int compare(File o1, File o2) {
|
|
|
+ if (o1.isDirectory() && o2.isDirectory()) {
|
|
|
+ Long obj1 = o1.lastModified();
|
|
|
+ return multiplier * 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 multiplier * obj1.compareTo(o2.lastModified());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ File[] returnArray = new File[1];
|
|
|
+ return files.toArray(returnArray);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Sorts list by Size
|
|
|
*/
|
|
|
- public static Vector<OCFile> sortBySize(Vector<OCFile> files){
|
|
|
+ public static Vector<OCFile> sortOCFilesBySize(Vector<OCFile> files){
|
|
|
final int multiplier = mSortAscending ? 1 : -1;
|
|
|
|
|
|
Collections.sort(files, new Comparator<OCFile>() {
|
|
@@ -305,11 +359,42 @@ public class FileStorageUtils {
|
|
|
return files;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Sorts list by Size
|
|
|
+ */
|
|
|
+ public static File[] sortLocalFilesBySize(File[] filesArray) {
|
|
|
+ final int multiplier = mSortAscending ? 1 : -1;
|
|
|
+
|
|
|
+ List<File> files = new ArrayList<File>(Arrays.asList(filesArray));
|
|
|
+
|
|
|
+ Collections.sort(files, new Comparator<File>() {
|
|
|
+ public int compare(File o1, File o2) {
|
|
|
+ if (o1.isDirectory() && o2.isDirectory()) {
|
|
|
+ Long obj1 = getFolderSize(o1);
|
|
|
+ return multiplier * obj1.compareTo(getFolderSize(o2));
|
|
|
+ }
|
|
|
+ else if (o1.isDirectory()) {
|
|
|
+ return -1;
|
|
|
+ } else if (o2.isDirectory()) {
|
|
|
+ return 1;
|
|
|
+ } else if (o1.length() == 0 || o2.length() == 0){
|
|
|
+ return 0;
|
|
|
+ } else {
|
|
|
+ Long obj1 = o1.length();
|
|
|
+ return multiplier * obj1.compareTo(o2.length());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ File[] returnArray = new File[1];
|
|
|
+ return files.toArray(returnArray);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Sorts list by Name
|
|
|
* @param files files to sort
|
|
|
*/
|
|
|
- public static Vector<OCFile> sortByName(Vector<OCFile> files){
|
|
|
+ public static Vector<OCFile> sortOCFilesByName(Vector<OCFile> files){
|
|
|
final int multiplier = mSortAscending ? 1 : -1;
|
|
|
|
|
|
Collections.sort(files, new Comparator<OCFile>() {
|
|
@@ -328,6 +413,54 @@ public class FileStorageUtils {
|
|
|
return files;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Sorts list by Name
|
|
|
+ * @param filesArray files to sort
|
|
|
+ */
|
|
|
+ public static File[] sortLocalFilesByName(File[] filesArray) {
|
|
|
+ final int multiplier = mSortAscending ? 1 : -1;
|
|
|
+
|
|
|
+ List<File> files = new ArrayList<File>(Arrays.asList(filesArray));
|
|
|
+
|
|
|
+ Collections.sort(files, new Comparator<File>() {
|
|
|
+ public int compare(File o1, File o2) {
|
|
|
+ if (o1.isDirectory() && o2.isDirectory()) {
|
|
|
+ return multiplier * o1.getPath().toLowerCase().compareTo(o2.getPath().toLowerCase());
|
|
|
+ } else if (o1.isDirectory()) {
|
|
|
+ return -1;
|
|
|
+ } else if (o2.isDirectory()) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ return multiplier * new AlphanumComparator().compare(o1.getPath().toLowerCase(),
|
|
|
+ o2.getPath().toLowerCase());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ File[] returnArray = new File[1];
|
|
|
+ return files.toArray(returnArray);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Local Folder size
|
|
|
+ * @param dir File
|
|
|
+ * @return Size in bytes
|
|
|
+ */
|
|
|
+ public static long getFolderSize(File dir) {
|
|
|
+ if (dir.exists()) {
|
|
|
+ long result = 0;
|
|
|
+ File[] fileList = dir.listFiles();
|
|
|
+ for(int i = 0; i < fileList.length; i++) {
|
|
|
+ if(fileList[i].isDirectory()) {
|
|
|
+ result += getFolderSize(fileList[i]);
|
|
|
+ } else {
|
|
|
+ result += fileList[i].length();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Mimetype String of a file
|
|
|
* @param path
|