From: jabarros Date: Mon, 27 Oct 2014 14:12:48 +0000 (+0100) Subject: Merge branch 'develop' into thumbnails_from_server X-Git-Tag: oc-android-1.7.0_signed~121^2~5 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/dcb985481be4b3c4e4e805b4aefebae00f9ad3e9?ds=inline;hp=-c Merge branch 'develop' into thumbnails_from_server Conflicts: src/com/owncloud/android/ui/adapter/FileListListAdapter.java --- dcb985481be4b3c4e4e805b4aefebae00f9ad3e9 diff --combined src/com/owncloud/android/ui/adapter/FileListListAdapter.java index d74bbc5b,9a2a0d3a..048173a9 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@@ -17,11 -17,18 +17,18 @@@ */ package com.owncloud.android.ui.adapter; + + import java.io.File; + import java.util.Collections; + import java.util.Comparator; import java.util.Vector; + import third_parties.daveKoeller.AlphanumComparator; import android.accounts.Account; import android.content.Context; + import android.content.SharedPreferences; import android.graphics.Bitmap; + import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@@ -41,7 -48,8 +48,8 @@@ import com.owncloud.android.files.servi import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.ui.activity.ComponentsGetter; import com.owncloud.android.utils.DisplayUtils; - + import com.owncloud.android.utils.FileStorageUtils; + /** * This Adapter populates a ListView with all files and folders in an ownCloud @@@ -51,7 -59,7 +59,7 @@@ * @author Tobias Kaminsky * @author David A. Velasco */ - public class FileListListAdapter extends BaseAdapter implements ListAdapter { + public class FileListListAdapter extends BaseAdapter implements ListAdapter { private final static String PERMISSION_SHARED_WITH_ME = "S"; private Context mContext; @@@ -62,23 -70,36 +70,38 @@@ private FileDataStorageManager mStorageManager; private Account mAccount; private ComponentsGetter mTransferServiceGetter; + private Integer mSortOrder; + public static final Integer SORT_NAME = 0; + public static final Integer SORT_DATE = 1; + public static final Integer SORT_SIZE = 2; + private Boolean mSortAscending; + private SharedPreferences mAppPreferences; public FileListListAdapter( boolean justFolders, Context context, ComponentsGetter transferServiceGetter ) { - + mJustFolders = justFolders; mContext = context; mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext); - mTransferServiceGetter = transferServiceGetter; - ++ + mTransferServiceGetter = transferServiceGetter; + + mAppPreferences = PreferenceManager + .getDefaultSharedPreferences(mContext); + + // Read sorting order, default to sort by name ascending + mSortOrder = mAppPreferences + .getInt("sortOrder", 0); + mSortAscending = mAppPreferences.getBoolean("sortAscending", true); + // initialise thumbnails cache on background thread - new ThumbnailsCacheManager.InitDiskCacheTask().execute(); + new ThumbnailsCacheManager.InitDiskCacheTask(mAccount, mContext).execute(); + } - + @Override public boolean areAllItemsEnabled() { return true; @@@ -221,8 -242,14 +244,14 @@@ } } else { - fileSizeV.setVisibility(View.INVISIBLE); - //fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); + // TODO Re-enable when server supports folder-size calculation + // if (FileStorageUtils.getDefaultSavePathFor(mAccount.name, file) != null){ + // fileSizeV.setVisibility(View.VISIBLE); + // fileSizeV.setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file))); + // } else { + fileSizeV.setVisibility(View.INVISIBLE); + // } + lastModV.setVisibility(View.VISIBLE); lastModV.setText( DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()) @@@ -255,7 -282,47 +284,47 @@@ return view; } - + + /** + * Local Folder size in human readable format + * + * @param path + * String + * @return Size in human readable format + */ + private String getFolderSizeHuman(String path) { + + File dir = new File(path); + + if (dir.exists()) { + long bytes = getFolderSize(dir); + return DisplayUtils.bytesToHumanReadable(bytes); + } + + return "0 B"; + } + + /** + * Local Folder size + * @param dir File + * @return Size in bytes + */ + private 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; + } + @Override public int getViewTypeCount() { return 1; @@@ -292,6 -359,26 +361,26 @@@ } else { mFiles = null; } + + sortDirectory(); + } + + /** + * Sorts all filenames, regarding last user decision + */ + private void sortDirectory(){ + switch (mSortOrder){ + case 0: + sortByName(mSortAscending); + break; + case 1: + sortByDate(mSortAscending); + break; + case 2: + sortBySize(mSortAscending); + break; + } + notifyDataSetChanged(); } @@@ -327,4 -414,106 +416,106 @@@ && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME)); } + + /** + * Sorts list by Date + * @param sortAscending true: ascending, false: descending + */ + private void sortByDate(boolean sortAscending){ + final Integer val; + if (sortAscending){ + val = 1; + } else { + val = -1; + } + + Collections.sort(mFiles, 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()); + } + } + }); + } + + /** + * Sorts list by Size + * @param sortAscending true: ascending, false: descending + */ + private void sortBySize(boolean sortAscending){ + final Integer val; + if (sortAscending){ + val = 1; + } else { + val = -1; + } + + Collections.sort(mFiles, 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()); + } + } + }); + } + + /** + * Sorts list by Name + * @param sortAscending true: ascending, false: descending + */ + private void sortByName(boolean sortAscending){ + final Integer val; + if (sortAscending){ + val = 1; + } else { + val = -1; + } + + Collections.sort(mFiles, 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); + } + }); + } + + public void setSortOrder(Integer order, boolean ascending) { + SharedPreferences.Editor editor = mAppPreferences.edit(); + editor.putInt("sortOrder", order); + editor.putBoolean("sortAscending", ascending); + editor.commit(); + + mSortOrder = order; + mSortAscending = ascending; + + sortDirectory(); + } }