X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/e23fa3acaa3eb1ab7d77c05c9c3d64b3ce2867c6..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 f17124c1..757f896c 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -1,5 +1,8 @@ -/* ownCloud Android client application - * Copyright (C) 2012-2013 ownCloud Inc. +/** + * ownCloud Android client application + * + * @author David A. Velasco + * Copyright (C) 2015 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -18,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; @@ -36,20 +42,19 @@ import android.preference.PreferenceManager; import android.net.Uri; import android.os.Environment; import android.os.StatFs; +import android.webkit.MimeTypeMap; /** * Static methods to help in access to local file system. - * - * @author David A. Velasco */ 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"; @@ -93,6 +98,20 @@ public class FileStorageUtils { String value = uploadPath + OCFile.PATH_SEPARATOR + (fileName == null ? "" : fileName); return value; } + + /** + * Gets the composed path when video is or must be stored + * @param context + * @param fileName: video file name + * @return String: video file path composed + */ + public static String getInstantVideoUploadFilePath(Context context, String fileName) { + SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); + String uploadVideoPathdef = context.getString(R.string.instant_upload_path); + String uploadVideoPath = pref.getString("instant_video_upload_path", uploadVideoPathdef); + String value = uploadVideoPath + OCFile.PATH_SEPARATOR + (fileName == null ? "" : fileName); + return value; + } public static String getParentPath(String remotePath) { String parentPath = new File(remotePath).getParent(); @@ -121,7 +140,7 @@ public class FileStorageUtils { /** * Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}. * - * @param oCFile OCFile + * @param ocFile OCFile * @return New RemoteFile instance representing the resource described by ocFile. */ public static RemoteFile fillRemoteFile(OCFile ocFile){ @@ -139,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); @@ -154,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 sortAscending true: ascending, false: descending + * @param files */ - public static Vector sortByDate(Vector files){ + public static Vector sortOCFilesByDate(Vector files){ final Integer val; if (mSortAscending){ val = 1; @@ -189,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 @@ -225,9 +300,9 @@ public class FileStorageUtils { /** * Sorts list by Name - * @param sortAscending true: ascending, false: descending + * @param files files to sort */ - public static Vector sortByName(Vector files){ + public static Vector sortOCFilesByName(Vector files){ final Integer val; if (mSortAscending){ val = 1; @@ -238,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()) { @@ -250,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 @@ -270,6 +377,21 @@ public class FileStorageUtils { return result; } return 0; - } + } + + /** + * Mimetype String of a file + * @param path + * @return + */ + public static String getMimeTypeFromName(String path) { + String extension = ""; + int pos = path.lastIndexOf('.'); + if (pos >= 0) { + extension = path.substring(pos + 1); + } + String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase()); + return (result != null) ? result : ""; + } }