- Only three orders: A-Z, Big-Small, New-Old.
authortobiasKaminsky <tobias@kaminsky.me>
Mon, 15 Sep 2014 14:04:46 +0000 (16:04 +0200)
committertobiasKaminsky <tobias@kaminsky.me>
Mon, 15 Sep 2014 14:04:46 +0000 (16:04 +0200)
- Folder size is computed locally (therefore only downloaded files are
obeyed)

res/values-de/strings.xml
res/values/strings.xml
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

index bc9313d..3dd6a5a 100644 (file)
   <string name="actionbar_sort">Sortieren</string>
   <string name="actionbar_sort_title">Sortieren nach</string>
   <string-array name="actionbar_sortby">
-       <item>Dateiname - aufsteigend</item>
-       <item>Dateiname - absteigend</item>
-       <item>Datum - aufsteigend</item>
-       <item>Datum - absteigend</item>
-       <item>Dateigröße - aufsteigend</item>
-       <item>Dateigröße - absteigend</item>
+       <item>A-Z</item>
+       <item>Neu - Alt</item>
+       <item>Groß - Klein</item>
   </string-array>
   <string name="prefs_category_general">Allgemein</string>
   <string name="prefs_category_more">Mehr</string>
index 16fe78d..c4bea81 100644 (file)
     <string name="actionbar_sort">Sort</string>
     <string name="actionbar_sort_title">Sort by</string>
     <string-array name="actionbar_sortby">
-       <item>Filename - A-Z</item>
-       <item>Filename - Z-A</item>
-       <item>Date - oldest first</item>
-       <item>Date - newest first</item>
-       <item>Filesize - smallest first</item>
-       <item>Filesize - biggest first</item>
+       <item>A-Z</item>
+       <item>Newest - Oldest</item>
+       <item>Biggest - Smallest</item>
     </string-array>
     <string name="prefs_category_general">General</string>
     <string name="prefs_category_more">More</string>
index c86380d..58da14b 100644 (file)
@@ -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:
index 07cd477..4878c66 100644 (file)
@@ -17,6 +17,7 @@
  */\r
 package com.owncloud.android.ui.adapter;\r
 \r
+import java.io.File;\r
 import java.util.Collections;\r
 import java.util.Comparator;\r
 import java.util.Vector;\r
@@ -41,6 +42,8 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;\r
 import com.owncloud.android.ui.activity.ComponentsGetter;\r
 import com.owncloud.android.utils.DisplayUtils;\r
+import com.owncloud.android.utils.FileStorageUtils;\r
+import com.owncloud.android.utils.Log_OC;\r
 \r
 \r
 /**\r
@@ -183,9 +186,13 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 }\r
             } \r
             else {\r
+                if (FileStorageUtils.getDefaultSavePathFor(mAccount.name, file) != null){\r
+                    fileSizeV.setVisibility(View.VISIBLE);\r
+                    fileSizeV.setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file)));\r
+                } else {\r
+                    fileSizeV.setVisibility(View.INVISIBLE);\r
+                }\r
                 \r
-                fileSizeV.setVisibility(View.INVISIBLE);\r
-                //fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
                 lastModV.setVisibility(View.VISIBLE);\r
                 lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
                 checkBoxV.setVisibility(View.GONE);\r
@@ -214,6 +221,48 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
         return view;\r
     }\r
+    \r
+    /**\r
+     * Local Folder size in human readable format\r
+     * @param path String\r
+     * @return Size in human readable format\r
+     */\r
+    private String getFolderSizeHuman(String path) {\r
+\r
+        File dir = new File(path);\r
+\r
+        if(dir.exists()) {\r
+            long bytes = getFolderSize(dir);\r
+            if (bytes < 1024) return bytes + " B";\r
+            int exp = (int) (Math.log(bytes) / Math.log(1024));\r
+            String pre = ("KMGTPE").charAt(exp-1) + "";\r
+\r
+            return String.format("%.1f %sB", bytes / Math.pow(1024, exp), pre);\r
+        }\r
+\r
+        return "0 B";\r
+    }\r
+\r
+    /**\r
+     * Local Folder size\r
+     * @param dir File\r
+     * @return Size in bytes\r
+     */\r
+    private long getFolderSize(File dir) {\r
+        if (dir.exists()) {\r
+            long result = 0;\r
+            File[] fileList = dir.listFiles();\r
+            for(int i = 0; i < fileList.length; i++) {\r
+                if(fileList[i].isDirectory()) {\r
+                    result += getFolderSize(fileList[i]);\r
+                } else {\r
+                    result += fileList[i].length();\r
+                }\r
+            }\r
+            return result;\r
+        }\r
+        return 0;\r
+    } \r
 \r
     @Override\r
     public int getViewTypeCount() {\r
@@ -305,6 +354,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
     }\r
 \r
+    /**\r
+     * Sorts list by Date\r
+     * @param sortAscending true: ascending, false: descending\r
+     */\r
     private void sortByDate(boolean sortAscending){\r
         final Integer val;\r
         if (sortAscending){\r
@@ -331,6 +384,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         });\r
     }\r
 \r
+    /**\r
+     * Sorts list by Size\r
+     * @param sortAscending true: ascending, false: descending\r
+     */\r
     private void sortBySize(boolean sortAscending){\r
         final Integer val;\r
         if (sortAscending){\r
@@ -342,7 +399,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         Collections.sort(mFiles, new Comparator<OCFile>() {\r
             public int compare(OCFile o1, OCFile o2) {\r
                 if (o1.isFolder() && o2.isFolder()) {\r
-                    return o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase());\r
+                    return val * Long.compare(getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o1))), \r
+                                              getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o2))));\r
                 }\r
                 else if (o1.isFolder()) {\r
                     return -1;\r
@@ -357,6 +415,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         });\r
     }\r
 \r
+    /**\r
+     * Sorts list by Name\r
+     * @param sortAscending true: ascending, false: descending\r
+     */\r
     private void sortByName(boolean sortAscending){\r
         final Integer val;\r
         if (sortAscending){\r