Merge branch 'develop' into thumbnailForUpload
authorjabarros <jabarros@solidgear.es>
Mon, 12 Jan 2015 13:30:06 +0000 (14:30 +0100)
committerjabarros <jabarros@solidgear.es>
Mon, 12 Jan 2015 13:30:06 +0000 (14:30 +0100)
1  2 
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@@ -17,7 -17,7 +17,7 @@@
   */\r
  package com.owncloud.android.ui.adapter;\r
  \r
 -
 +\r
  import java.io.File;\r
  import java.util.Collections;\r
  import java.util.Comparator;\r
@@@ -44,12 -44,13 +44,12 @@@ import com.owncloud.android.authenticat
  import com.owncloud.android.datamodel.FileDataStorageManager;\r
  import com.owncloud.android.datamodel.OCFile;\r
  import com.owncloud.android.datamodel.ThumbnailsCacheManager;\r
 -import com.owncloud.android.datamodel.ThumbnailsCacheManager.AsyncDrawable;\r
  import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;\r
  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
 -
 +\r
  \r
  /**\r
   * This Adapter populates a ListView with all files and folders in an ownCloud\r
@@@ -59,7 -60,7 +59,7 @@@
   * @author Tobias Kaminsky\r
   * @author David A. Velasco\r
   */\r
 -public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 +public class FileListListAdapter extends BaseAdapter implements ListAdapter {\r
      private final static String PERMISSION_SHARED_WITH_ME = "S";\r
      \r
      private Context mContext;\r
      private Vector<OCFile> mFiles = null;\r
      private boolean mJustFolders;\r
  \r
 -    private FileDataStorageManager mStorageManager;
 -    private Account mAccount;
 +    private FileDataStorageManager mStorageManager;\r
 +    private Account mAccount;\r
      private ComponentsGetter mTransferServiceGetter;\r
-     private Integer mSortOrder;\r
-     public static final Integer SORT_NAME = 0;\r
-     public static final Integer SORT_DATE = 1;\r
-     public static final Integer SORT_SIZE = 2;\r
-     private Boolean mSortAscending;\r
+     \r
      private SharedPreferences mAppPreferences;\r
      \r
      public FileListListAdapter(\r
          mJustFolders = justFolders;\r
          mContext = context;\r
          mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
 -
 -        mTransferServiceGetter = transferServiceGetter;
 +\r
 +        mTransferServiceGetter = transferServiceGetter;\r
          \r
          mAppPreferences = PreferenceManager\r
                  .getDefaultSharedPreferences(mContext);\r
          \r
          // Read sorting order, default to sort by name ascending\r
-         mSortOrder = mAppPreferences\r
 -        FileStorageUtils.mSortOrder = mAppPreferences\r
--                .getInt("sortOrder", 0);\r
-         mSortAscending = mAppPreferences.getBoolean("sortAscending", true);\r
 -        FileStorageUtils.mSortAscending = mAppPreferences.getBoolean("sortAscending", true);
++        FileStorageUtils.mSortOrder = mAppPreferences.getInt("sortOrder", 0);\r
++        FileStorageUtils.mSortAscending = mAppPreferences.getBoolean("sortAscending", true);\r
++\r
          \r
          // initialise thumbnails cache on background thread\r
          new ThumbnailsCacheManager.InitDiskCacheTask().execute();\r
  \r
      }\r
 -    
 +    \r
      @Override\r
      public boolean areAllItemsEnabled() {\r
          return true;\r
                      if (thumbnail != null && !file.needsUpdateThumbnail()){\r
                          fileIcon.setImageBitmap(thumbnail);\r
                      } else {\r
 +\r
                          // generate new Thumbnail\r
                          if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) {\r
 -                            final ThumbnailsCacheManager.ThumbnailGenerationTask task = \r
 +                            final ThumbnailsCacheManager.ThumbnailGenerationTask task =\r
                                      new ThumbnailsCacheManager.ThumbnailGenerationTask(\r
                                              fileIcon, mStorageManager, mAccount\r
                                      );\r
                              if (thumbnail == null) {\r
                                  thumbnail = ThumbnailsCacheManager.mDefaultImg;\r
                              }\r
 -                            final AsyncDrawable asyncDrawable = new AsyncDrawable(\r
 +                            final ThumbnailsCacheManager.AsyncDrawable asyncDrawable =\r
 +                                    new ThumbnailsCacheManager.AsyncDrawable(\r
                                      mContext.getResources(), \r
                                      thumbnail, \r
                                      task\r
                          }\r
                      }\r
                  } else {\r
 -                    fileIcon.setImageResource(\r
 -                            DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
 -                    );\r
 +                    fileIcon.setImageResource(DisplayUtils.getFileTypeIconId(file.getMimetype(), file.getFileName()));\r
                  }\r
 -
 +\r
                  if (checkIfFileIsSharedWithMe(file)) {\r
                      sharedWithMeIconV.setVisibility(View.VISIBLE);\r
                  }\r
  //                } else {\r
                      fileSizeV.setVisibility(View.INVISIBLE);\r
  //                }\r
 -
 +\r
                  lastModV.setVisibility(View.VISIBLE);\r
                  lastModV.setText(showRelativeTimestamp(file));\r
                  checkBoxV.setVisibility(View.GONE);\r
                      sharedWithMeIconV.setVisibility(View.VISIBLE);\r
                  } else {\r
                      fileIcon.setImageResource(\r
 -                            DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
 +                            DisplayUtils.getFileTypeIconId(file.getMimetype(), file.getFileName())\r
                      );\r
                  }\r
  \r
  \r
          return view;\r
      }\r
 -
 +\r
      /**\r
       * Local Folder size in human readable format\r
       * \r
          File dir = new File(path);\r
  \r
          if (dir.exists()) {\r
-             long bytes = getFolderSize(dir);\r
+             long bytes = FileStorageUtils.getFolderSize(dir);\r
              return DisplayUtils.bytesToHumanReadable(bytes);\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
          return 1;\r
              mFiles = null;\r
          }\r
  \r
-         sortDirectory();\r
-     }\r
-     \r
-     /**\r
-      * Sorts all filenames, regarding last user decision \r
-      */\r
-     private void sortDirectory(){\r
-         switch (mSortOrder){\r
-         case 0:\r
-             sortByName(mSortAscending);\r
-             break;\r
-         case 1:\r
-             sortByDate(mSortAscending);\r
-             break;\r
-         case 2: \r
-             sortBySize(mSortAscending);\r
-             break;\r
-         }\r
-         \r
+         mFiles = FileStorageUtils.sortFolder(mFiles);\r
          notifyDataSetChanged();\r
      }\r
      \r
-     \r
\r
      /**\r
       * Filter for getting only the folders\r
       * @param files\r
                  && 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
-             val = 1;\r
-         } else {\r
-             val = -1;\r
-         }\r
-         \r
-         Collections.sort(mFiles, new Comparator<OCFile>() {\r
-             public int compare(OCFile o1, OCFile o2) {\r
-                 if (o1.isFolder() && o2.isFolder()) {\r
-                     Long obj1 = o1.getModificationTimestamp();\r
-                     return val * obj1.compareTo(o2.getModificationTimestamp());\r
-                 }\r
-                 else if (o1.isFolder()) {\r
-                     return -1;\r
-                 } else if (o2.isFolder()) {\r
-                     return 1;\r
-                 } else if (o1.getModificationTimestamp() == 0 || o2.getModificationTimestamp() == 0){\r
-                     return 0;\r
-                 } else {\r
-                     Long obj1 = o1.getModificationTimestamp();\r
-                     return val * obj1.compareTo(o2.getModificationTimestamp());\r
-                 }\r
-             }\r
-         });\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
-             val = 1;\r
-         } else {\r
-             val = -1;\r
-         }\r
-         \r
-         Collections.sort(mFiles, new Comparator<OCFile>() {\r
-             public int compare(OCFile o1, OCFile o2) {\r
-                 if (o1.isFolder() && o2.isFolder()) {\r
-                     Long obj1 = getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o1)));\r
-                     return val * obj1.compareTo(getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o2))));\r
-                 }\r
-                 else if (o1.isFolder()) {\r
-                     return -1;\r
-                 } else if (o2.isFolder()) {\r
-                     return 1;\r
-                 } else if (o1.getFileLength() == 0 || o2.getFileLength() == 0){\r
-                     return 0;\r
-                 } else {\r
-                     Long obj1 = o1.getFileLength();\r
-                     return val * obj1.compareTo(o2.getFileLength());\r
-                 }\r
-             }\r
-         });\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
-             val = 1;\r
-         } else {\r
-             val = -1;\r
-         }\r
\r
-         Collections.sort(mFiles, new Comparator<OCFile>() {\r
-             public int compare(OCFile o1, OCFile o2) {\r
-                 if (o1.isFolder() && o2.isFolder()) {\r
-                     return val * o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase());\r
-                 } else if (o1.isFolder()) {\r
-                     return -1;\r
-                 } else if (o2.isFolder()) {\r
-                     return 1;\r
-                 }\r
-                 return val * new AlphanumComparator().compare(o1, o2);\r
-             }\r
-         });\r
-     }\r
\r
      public void setSortOrder(Integer order, boolean ascending) {\r
          SharedPreferences.Editor editor = mAppPreferences.edit();\r
          editor.putInt("sortOrder", order);\r
          editor.putBoolean("sortAscending", ascending);\r
          editor.commit();\r
          \r
-         mSortOrder = order;\r
-         mSortAscending = ascending;\r
+         FileStorageUtils.mSortOrder = order;\r
+         FileStorageUtils.mSortAscending = ascending;\r
          \r
-         sortDirectory();\r
 -
++\r
+         mFiles = FileStorageUtils.sortFolder(mFiles);\r
+         notifyDataSetChanged();\r
\r
      }    \r
      \r
      private CharSequence showRelativeTimestamp(OCFile file){\r
          return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(),\r
                  DateUtils.SECOND_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, 0);\r
 -    }
 -
 +    }\r
  }\r