mirror of
https://github.com/nextcloud/android.git
synced 2024-11-22 21:25:35 +03:00
Merge pull request #820 from owncloud/obeySortOrder_fixmerge
Obey sort order in gallery of images.
This commit is contained in:
commit
8da1926f02
5 changed files with 175 additions and 146 deletions
|
@ -109,6 +109,7 @@ import com.owncloud.android.ui.preview.PreviewMediaFragment;
|
|||
import com.owncloud.android.ui.preview.PreviewVideoActivity;
|
||||
import com.owncloud.android.utils.DisplayUtils;
|
||||
import com.owncloud.android.utils.ErrorMessageAdapter;
|
||||
import com.owncloud.android.utils.FileStorageUtils;
|
||||
import com.owncloud.android.utils.UriUtils;
|
||||
|
||||
|
||||
|
@ -519,7 +520,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
|
|||
|
||||
// Read sorting order, default to sort by name ascending
|
||||
Integer sortOrder = appPreferences
|
||||
.getInt("sortOrder", FileListListAdapter.SORT_NAME);
|
||||
.getInt("sortOrder", FileStorageUtils.SORT_NAME);
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.actionbar_sort_title)
|
||||
|
|
|
@ -71,11 +71,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
|
|||
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(
|
||||
|
@ -94,9 +90,9 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
|
|||
.getDefaultSharedPreferences(mContext);
|
||||
|
||||
// Read sorting order, default to sort by name ascending
|
||||
mSortOrder = mAppPreferences
|
||||
FileStorageUtils.mSortOrder = mAppPreferences
|
||||
.getInt("sortOrder", 0);
|
||||
mSortAscending = mAppPreferences.getBoolean("sortAscending", true);
|
||||
FileStorageUtils.mSortAscending = mAppPreferences.getBoolean("sortAscending", true);
|
||||
|
||||
// initialise thumbnails cache on background thread
|
||||
new ThumbnailsCacheManager.InitDiskCacheTask().execute();
|
||||
|
@ -294,33 +290,14 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
|
|||
File dir = new File(path);
|
||||
|
||||
if (dir.exists()) {
|
||||
long bytes = getFolderSize(dir);
|
||||
long bytes = FileStorageUtils.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() {
|
||||
|
@ -359,25 +336,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
|
|||
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;
|
||||
}
|
||||
|
||||
mFiles = FileStorageUtils.sortFolder(mFiles);
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
@ -414,110 +373,24 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
|
|||
&& 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<OCFile>() {
|
||||
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<OCFile>() {
|
||||
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<OCFile>() {
|
||||
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;
|
||||
FileStorageUtils.mSortOrder = order;
|
||||
FileStorageUtils.mSortAscending = ascending;
|
||||
|
||||
|
||||
mFiles = FileStorageUtils.sortFolder(mFiles);
|
||||
notifyDataSetChanged();
|
||||
|
||||
sortDirectory();
|
||||
}
|
||||
|
||||
private CharSequence showRelativeTimestamp(OCFile file){
|
||||
return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(),
|
||||
DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@ import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
|
|||
import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
|
||||
import com.owncloud.android.ui.preview.PreviewImageFragment;
|
||||
import com.owncloud.android.ui.preview.PreviewMediaFragment;
|
||||
import com.owncloud.android.utils.FileStorageUtils;
|
||||
|
||||
/**
|
||||
* A Fragment that lists all files and folders in a given path.
|
||||
|
@ -437,15 +438,15 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|||
}
|
||||
|
||||
public void sortByName(boolean descending) {
|
||||
mAdapter.setSortOrder(FileListListAdapter.SORT_NAME, descending);
|
||||
mAdapter.setSortOrder(FileStorageUtils.SORT_NAME, descending);
|
||||
}
|
||||
|
||||
public void sortByDate(boolean descending) {
|
||||
mAdapter.setSortOrder(FileListListAdapter.SORT_DATE, descending);
|
||||
mAdapter.setSortOrder(FileStorageUtils.SORT_DATE, descending);
|
||||
}
|
||||
|
||||
public void sortBySize(boolean descending) {
|
||||
mAdapter.setSortOrder(FileListListAdapter.SORT_SIZE, descending);
|
||||
mAdapter.setSortOrder(FileStorageUtils.SORT_SIZE, descending);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
*/
|
||||
package com.owncloud.android.ui.preview;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
@ -31,7 +33,9 @@ import android.view.ViewGroup;
|
|||
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.ui.adapter.FileListListAdapter;
|
||||
import com.owncloud.android.ui.fragment.FileFragment;
|
||||
import com.owncloud.android.utils.FileStorageUtils;
|
||||
|
||||
/**
|
||||
* Adapter class that provides Fragment instances
|
||||
|
@ -73,6 +77,9 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
|
|||
mAccount = account;
|
||||
mStorageManager = storageManager;
|
||||
mImageFiles = mStorageManager.getFolderImages(parentFolder);
|
||||
|
||||
mImageFiles = FileStorageUtils.sortFolder(mImageFiles);
|
||||
|
||||
mObsoleteFragments = new HashSet<Object>();
|
||||
mObsoletePositions = new HashSet<Integer>();
|
||||
mDownloadErrors = new HashSet<Integer>();
|
||||
|
@ -80,7 +87,6 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter {
|
|||
mCachedFragments = new HashMap<Integer, FileFragment>();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the image files handled by the adapter.
|
||||
*
|
||||
|
|
|
@ -18,6 +18,11 @@
|
|||
package com.owncloud.android.utils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Vector;
|
||||
|
||||
import third_parties.daveKoeller.AlphanumComparator;
|
||||
|
||||
import com.owncloud.android.MainApp;
|
||||
import com.owncloud.android.R;
|
||||
|
@ -39,6 +44,13 @@ import android.os.StatFs;
|
|||
* @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";
|
||||
|
||||
public static final String getSavePath(String accountName) {
|
||||
|
@ -138,4 +150,140 @@ public class FileStorageUtils {
|
|||
return file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts all filenames, regarding last user decision
|
||||
*/
|
||||
public static Vector<OCFile> sortFolder(Vector<OCFile> files){
|
||||
switch (mSortOrder){
|
||||
case 0:
|
||||
files = FileStorageUtils.sortByName(files);
|
||||
break;
|
||||
case 1:
|
||||
files = FileStorageUtils.sortByDate(files);
|
||||
break;
|
||||
case 2:
|
||||
// mFiles = FileStorageUtils.sortBySize(mSortAscending);
|
||||
break;
|
||||
}
|
||||
|
||||
return files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts list by Date
|
||||
* @param sortAscending true: ascending, false: descending
|
||||
*/
|
||||
public static Vector<OCFile> sortByDate(Vector<OCFile> files){
|
||||
final Integer val;
|
||||
if (mSortAscending){
|
||||
val = 1;
|
||||
} else {
|
||||
val = -1;
|
||||
}
|
||||
|
||||
Collections.sort(files, new Comparator<OCFile>() {
|
||||
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<OCFile> sortBySize(Vector<OCFile> files){
|
||||
// final Integer val;
|
||||
// if (mSortAscending){
|
||||
// val = 1;
|
||||
// } else {
|
||||
// val = -1;
|
||||
// }
|
||||
//
|
||||
// Collections.sort(files, new Comparator<OCFile>() {
|
||||
// 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 sortAscending true: ascending, false: descending
|
||||
*/
|
||||
public static Vector<OCFile> sortByName(Vector<OCFile> files){
|
||||
final Integer val;
|
||||
if (mSortAscending){
|
||||
val = 1;
|
||||
} else {
|
||||
val = -1;
|
||||
}
|
||||
|
||||
Collections.sort(files, new Comparator<OCFile>() {
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue