Merge branch 'develop' into download_folder
authorjabarros <jabarros@solidgear.es>
Mon, 19 Jan 2015 11:49:28 +0000 (12:49 +0100)
committerjabarros <jabarros@solidgear.es>
Mon, 19 Jan 2015 11:49:28 +0000 (12:49 +0100)
1  2 
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@@ -92,7 -92,7 +92,7 @@@ import com.owncloud.android.operations.
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
 -import com.owncloud.android.operations.SynchronizeFolderOperation;
 +import com.owncloud.android.operations.RefreshFolderOperation;
  import com.owncloud.android.operations.UnshareLinkOperation;
  import com.owncloud.android.services.observer.FileObserverService;
  import com.owncloud.android.syncadapter.FileSyncAdapter;
@@@ -109,6 -109,7 +109,7 @@@ import com.owncloud.android.ui.preview.
  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 +520,7 @@@ OnSslUntrustedCertListener, OnEnforceab
              
              // 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)
          IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START);
          syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END);
          syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED);
 -        syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED);
 -        syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED);
 +        syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED);
 +        syncIntentFilter.addAction(RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED);
          mSyncBroadcastReceiver = new SyncBroadcastReceiver();
          registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
          //LocalBroadcastManager.getInstance(this).registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
                              setFile(currentFile);
                          }
                          
 -                        mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event));
 +                        mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !RefreshFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event));
                                  
 -                        if (SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED.
 +                        if (RefreshFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED.
                                      equals(event) &&
                                  /// TODO refactor and make common
                                  synchResult != null && !synchResult.isSuccess() &&  
          mSyncInProgress = true;
                  
          // perform folder synchronization
 -        RemoteOperation synchFolderOp = new SynchronizeFolderOperation( folder,  
 +        RemoteOperation synchFolderOp = new RefreshFolderOperation( folder,
                                                                          currentSyncTime, 
                                                                          false,
                                                                          getFileOperationsHelper().isSharedSupported(),
@@@ -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,14 -44,12 +44,13 @@@ 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.services.OperationsService.OperationsServiceBinder;\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
@@@ -61,7 -59,7 +60,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
-                 .getInt("sortOrder", 0);\r
-         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
              FileDownloaderBinder downloaderBinder = \r
                      mTransferServiceGetter.getFileDownloaderBinder();\r
              FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
 -            if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
 +            OperationsServiceBinder opsBinder = mTransferServiceGetter.getOperationsServiceBinder();\r
 +            if ((downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) ||\r
 +                 (file.isFolder() && opsBinder != null && opsBinder.isSynchronizing(mAccount, file.getRemotePath()))) {\r
                  localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
                  localStateView.setVisibility(View.VISIBLE);\r
              } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\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 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