From: Peter Henn Date: Wed, 8 Jul 2015 00:47:05 +0000 (+0000) Subject: Merge branch 'master' into sdcard-save X-Git-Tag: sd-android-1.7.2 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/903aef2ba28cd3e4c31eccb89497fd31a7da502b Merge branch 'master' into sdcard-save need to merge especially changes in: src/com/owncloud/android/utils/FileStorageUtils.java --- 903aef2ba28cd3e4c31eccb89497fd31a7da502b diff --cc src/com/owncloud/android/utils/FileStorageUtils.java index 68f6e278,e70302fc..d7029f17 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@@ -35,45 -44,21 +44,50 @@@ 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; - - - //private static final String LOG_TAG = "FileStorageUtils"; ++ ++ + //private static final String TAG = FileStorageUtils.class.getSimpleName(); + + @SuppressLint("NewApi") + private static final File getBaseStorePath() { + File baseStoragePath = Environment.getExternalStorageDirectory(); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + File[] dirs = MainApp.getAppContext().getExternalFilesDirs(null); + if (dirs.length > 1) { + baseStoragePath = dirs[1]; + } + } + return baseStoragePath; + } + + @SuppressLint("NewApi") + private static final String getBaseStorePathString() { + File baseStoragePath = Environment.getExternalStorageDirectory(); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { + File[] dirs = MainApp.getAppContext().getExternalFilesDirs(null); + if (dirs.length > 1) { + baseStoragePath = dirs[1]; + } + return baseStoragePath.getAbsolutePath(); + } else { + return baseStoragePath.getAbsolutePath() + "/" + MainApp.getDataFolder(); + } + } + public static final String getSavePath(String accountName) { - File sdCard = Environment.getExternalStorageDirectory(); - return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/" + Uri.encode(accountName, "@"); + //File sdCard = Environment.getExternalStorageDirectory(); + //return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/" + Uri.encode(accountName, "@"); // URL encoding is an 'easy fix' to overcome that NTFS and FAT32 don't allow ":" in file names, that can be in the accountName since 0.1.190B + //return getBaseStorePath().getAbsolutePath() + "/" + Uri.encode(accountName, "@"); + return getBaseStorePathString() + "/" + Uri.encode(accountName, "@"); } public static final String getDefaultSavePathFor(String accountName, OCFile file) { @@@ -151,7 -133,7 +165,7 @@@ file.setRemoteId(remote.getRemoteId()); return file; } -- ++ /** * Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}. * @@@ -169,5 -151,156 +183,156 @@@ file.setRemoteId(ocFile.getRemoteId()); return file; } - ++ + /** - * Sorts all filenames, regarding last user decision ++ * Sorts all filenames, regarding last user decision + */ + public static Vector sortFolder(Vector files){ + switch (mSortOrder){ + case 0: + files = FileStorageUtils.sortByName(files); + break; + case 1: + files = FileStorageUtils.sortByDate(files); + break; - case 2: ++ case 2: + // mFiles = FileStorageUtils.sortBySize(mSortAscending); + break; + } - ++ + return files; + } - ++ + /** + * Sorts list by Date + * @param files + */ + public static Vector sortByDate(Vector files){ + final Integer val; + if (mSortAscending){ + val = 1; + } else { + val = -1; + } - ++ + Collections.sort(files, new Comparator() { + public int compare(OCFile o1, OCFile o2) { + if (o1.isFolder() && o2.isFolder()) { + Long obj1 = o1.getModificationTimestamp(); + return val * obj1.compareTo(o2.getModificationTimestamp()); + } + else if (o1.isFolder()) { + return -1; + } else if (o2.isFolder()) { + return 1; + } else if (o1.getModificationTimestamp() == 0 || o2.getModificationTimestamp() == 0){ + return 0; + } else { + Long obj1 = o1.getModificationTimestamp(); + return val * obj1.compareTo(o2.getModificationTimestamp()); + } + } + }); - ++ + return files; + } + + // /** + // * Sorts list by Size + // * @param sortAscending true: ascending, false: descending + // */ + // public static Vector sortBySize(Vector files){ + // final Integer val; + // if (mSortAscending){ + // val = 1; + // } else { + // val = -1; + // } -// ++// + // Collections.sort(files, new Comparator() { + // public int compare(OCFile o1, OCFile o2) { + // if (o1.isFolder() && o2.isFolder()) { + // Long obj1 = getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o1))); + // return val * obj1.compareTo(getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o2)))); + // } + // else if (o1.isFolder()) { + // return -1; + // } else if (o2.isFolder()) { + // return 1; + // } else if (o1.getFileLength() == 0 || o2.getFileLength() == 0){ + // return 0; + // } else { + // Long obj1 = o1.getFileLength(); + // return val * obj1.compareTo(o2.getFileLength()); + // } + // } + // }); -// ++// + // return files; + // } + + /** + * Sorts list by Name + * @param files files to sort + */ + public static Vector sortByName(Vector files){ + final Integer val; + if (mSortAscending){ + val = 1; + } else { + val = -1; + } + + 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()); + } else if (o1.isFolder()) { + return -1; + } else if (o2.isFolder()) { + return 1; + } + return val * new AlphanumComparator().compare(o1, o2); + } + }); - ++ + return files; + } - ++ + /** + * 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 + * @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 : ""; + } }