From: tobiasKaminsky Date: Mon, 15 Sep 2014 14:04:46 +0000 (+0200) Subject: - Only three orders: A-Z, Big-Small, New-Old. X-Git-Tag: oc-android-1.7.0_signed~134^2~5^2~2 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/a622b1dcfb1084c8fd487f34b147a817e189a637?ds=inline;hp=--cc - Only three orders: A-Z, Big-Small, New-Old. - Folder size is computed locally (therefore only downloaded files are obeyed) --- a622b1dcfb1084c8fd487f34b147a817e189a637 diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index bc9313d2..3dd6a5a7 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -14,12 +14,9 @@ Sortieren Sortieren nach - Dateiname - aufsteigend - Dateiname - absteigend - Datum - aufsteigend - Datum - absteigend - Dateigröße - aufsteigend - Dateigröße - absteigend + A-Z + Neu - Alt + Groß - Klein Allgemein Mehr diff --git a/res/values/strings.xml b/res/values/strings.xml index 16fe78db..c4bea810 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -15,12 +15,9 @@ Sort Sort by - Filename - A-Z - Filename - Z-A - Date - oldest first - Date - newest first - Filesize - smallest first - Filesize - biggest first + A-Z + Newest - Oldest + Biggest - Smallest General More diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index c86380d6..58da14b9 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -153,6 +153,8 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { private String DIALOG_UNTRUSTED_CERT; private OCFile mWaitingToSend; + + private Integer sortItemChecked = 0; @Override protected void onCreate(Bundle savedInstanceState) { @@ -494,33 +496,27 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { case R.id.action_sort: { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(R.string.actionbar_sort_title) - .setItems(R.array.actionbar_sortby, new DialogInterface.OnClickListener() { + .setSingleChoiceItems(R.array.actionbar_sortby, sortItemChecked , new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - Log_OC.d("default view", " number " + which + "clicked"); + sortItemChecked = which; + switch (which){ case 0: sortByName(true); break; case 1: - sortByName(false); - break; - case 2: - sortByDate(true); - break; - case 3: sortByDate(false); break; - case 4: - sortBySize(true); - break; - case 5: + case 2: sortBySize(false); break; } + + dialog.dismiss(); + } }); - builder.create(); - builder.show(); + builder.create().show(); break; } default: diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 07cd4772..4878c66d 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -17,6 +17,7 @@ */ package com.owncloud.android.ui.adapter; +import java.io.File; import java.util.Collections; import java.util.Comparator; import java.util.Vector; @@ -41,6 +42,8 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; 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; +import com.owncloud.android.utils.Log_OC; /** @@ -183,9 +186,13 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } } else { + if (FileStorageUtils.getDefaultSavePathFor(mAccount.name, file) != null){ + fileSizeV.setVisibility(View.VISIBLE); + fileSizeV.setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file))); + } else { + fileSizeV.setVisibility(View.INVISIBLE); + } - fileSizeV.setVisibility(View.INVISIBLE); - //fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); lastModV.setVisibility(View.VISIBLE); lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); checkBoxV.setVisibility(View.GONE); @@ -214,6 +221,48 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { 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); + if (bytes < 1024) return bytes + " B"; + int exp = (int) (Math.log(bytes) / Math.log(1024)); + String pre = ("KMGTPE").charAt(exp-1) + ""; + + return String.format("%.1f %sB", bytes / Math.pow(1024, exp), pre); + } + + 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() { @@ -305,6 +354,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { && 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){ @@ -331,6 +384,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { }); } + /** + * Sorts list by Size + * @param sortAscending true: ascending, false: descending + */ private void sortBySize(boolean sortAscending){ final Integer val; if (sortAscending){ @@ -342,7 +399,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { Collections.sort(mFiles, new Comparator() { public int compare(OCFile o1, OCFile o2) { if (o1.isFolder() && o2.isFolder()) { - return o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase()); + return val * Long.compare(getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o1))), + getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o2)))); } else if (o1.isFolder()) { return -1; @@ -357,6 +415,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { }); } + /** + * Sorts list by Name + * @param sortAscending true: ascending, false: descending + */ private void sortByName(boolean sortAscending){ final Integer val; if (sortAscending){