- private final static String PERMISSION_SHARED_WITH_ME = "S";\r
-\r
- private Context mContext;\r
- private OCFile mFile = null;\r
- private Vector<OCFile> mFiles = null;\r
- private boolean mJustFolders;\r
-\r
- private FileDataStorageManager mStorageManager;
- private Account mAccount;
- private ComponentsGetter mTransferServiceGetter;\r
- private Integer sortOrder;\r
- private Boolean sortAscending;\r
- private SharedPreferences appPreferences;\r
- \r
- public FileListListAdapter(\r
- boolean justFolders, \r
- Context context, \r
- ComponentsGetter transferServiceGetter\r
- ) {\r
- mJustFolders = justFolders;\r
- mContext = context;\r
- mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
- mTransferServiceGetter = transferServiceGetter;\r
- \r
- appPreferences = PreferenceManager\r
- .getDefaultSharedPreferences(mContext);\r
- \r
- // Read sorting order, default to sort by name ascending\r
- sortOrder = appPreferences\r
- .getInt("sortOrder", 0);\r
- sortAscending = appPreferences.getBoolean("sortAscending", true);\r
- \r
- }
-\r
- @Override\r
- public boolean areAllItemsEnabled() {\r
- return true;\r
- }\r
-\r
- @Override\r
- public boolean isEnabled(int position) {\r
- return true;\r
- }\r
-\r
- @Override\r
- public int getCount() {\r
- return mFiles != null ? mFiles.size() : 0;\r
- }\r
-\r
- @Override\r
- public Object getItem(int position) {\r
- if (mFiles == null || mFiles.size() <= position)\r
- return null;\r
- return mFiles.get(position);\r
- }\r
-\r
- @Override\r
- public long getItemId(int position) {\r
- if (mFiles == null || mFiles.size() <= position)\r
- return 0;\r
- return mFiles.get(position).getFileId();\r
- }\r
-\r
- @Override\r
- public int getItemViewType(int position) {\r
- return 0;\r
- }\r
-\r
- @Override\r
- public View getView(int position, View convertView, ViewGroup parent) {\r
- View view = convertView;\r
- if (view == null) {\r
- LayoutInflater inflator = (LayoutInflater) mContext\r
- .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
- view = inflator.inflate(R.layout.list_item, null);\r
- }\r
- \r
- if (mFiles != null && mFiles.size() > position) {\r
- OCFile file = mFiles.get(position);\r
- TextView fileName = (TextView) view.findViewById(R.id.Filename);\r
- String name = file.getFileName();\r
-\r
- fileName.setText(name);\r
- ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
- ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
- ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
- sharedWithMeIconV.setVisibility(View.GONE);\r
-\r
- ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
- localStateView.bringToFront();\r
- FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
- FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
- if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
- localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
- localStateView.setVisibility(View.VISIBLE);\r
- } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
- localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
- localStateView.setVisibility(View.VISIBLE);\r
- } else if (file.isDown()) {\r
- localStateView.setImageResource(R.drawable.local_file_indicator);\r
- localStateView.setVisibility(View.VISIBLE);\r
- } else {\r
- localStateView.setVisibility(View.INVISIBLE);\r
- }\r
- \r
- TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
- TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
- ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
- \r
- if (!file.isFolder()) {\r
- fileSizeV.setVisibility(View.VISIBLE);\r
- fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
- lastModV.setVisibility(View.VISIBLE);\r
- lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
- // this if-else is needed even thoe fav icon is visible by default\r
- // because android reuses views in listview\r
- if (!file.keepInSync()) {\r
- view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
- } else {\r
- view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
- }\r
- \r
- ListView parentList = (ListView)parent;\r
- if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { \r
- checkBoxV.setVisibility(View.GONE);\r
- } else {\r
- if (parentList.isItemChecked(position)) {\r
- checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
- } else {\r
- checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
- }\r
- checkBoxV.setVisibility(View.VISIBLE);\r
- }\r
-\r
- fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
-\r
- if (checkIfFileIsSharedWithMe(file)) {\r
- sharedWithMeIconV.setVisibility(View.VISIBLE);\r
- }\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
- lastModV.setVisibility(View.VISIBLE);\r
- lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
- checkBoxV.setVisibility(View.GONE);\r
- view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
-\r
- if (checkIfFileIsSharedWithMe(file)) {\r
- fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
- sharedWithMeIconV.setVisibility(View.VISIBLE);\r
- } else {\r
- fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
- }\r
-\r
- // If folder is sharedByLink, icon folder must be changed to\r
- // folder-public one\r
- if (file.isShareByLink()) {\r
- fileIcon.setImageResource(R.drawable.folder_public);\r
- }\r
- }\r
-\r
- if (file.isShareByLink()) {\r
- sharedIconV.setVisibility(View.VISIBLE);\r
- } else {\r
- sharedIconV.setVisibility(View.GONE);\r
- }\r
- }\r
-\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
- return 1;\r
- }\r
-\r
- @Override\r
- public boolean hasStableIds() {\r
- return true;\r
- }\r
-\r
- @Override\r
- public boolean isEmpty() {\r
- return (mFiles == null || mFiles.isEmpty());\r
- }\r
-\r
- /**\r
- * Change the adapted directory for a new one\r
- * @param directory New file to adapt. Can be NULL, meaning "no content to adapt".\r
- * @param updatedStorageManager Optional updated storage manager; used to replace mStorageManager if is different (and not NULL)\r
- */\r
- public void swapDirectory(OCFile directory, FileDataStorageManager updatedStorageManager) {\r
- mFile = directory;\r
- if (updatedStorageManager != null && updatedStorageManager != mStorageManager) {\r
- mStorageManager = updatedStorageManager;\r
- mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
- }\r
- if (mStorageManager != null) {\r
- mFiles = mStorageManager.getFolderContent(mFile);\r
- if (mJustFolders) {\r
- mFiles = getFolders(mFiles);\r
- }\r
- } else {\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 (sortOrder){\r
- case 0:\r
- sortByName(sortAscending);\r
- break;\r
- case 1:\r
- sortByDate(sortAscending);\r
- break;\r
- case 2: \r
- sortBySize(sortAscending);\r
- break;\r
- }\r
- \r
- notifyDataSetChanged();\r
- }\r
- \r
- \r
- /**\r
- * Filter for getting only the folders\r
- * @param files\r
- * @return Vector<OCFile>\r
- */\r
- public Vector<OCFile> getFolders(Vector<OCFile> files) {\r
- Vector<OCFile> ret = new Vector<OCFile>(); \r
- OCFile current = null; \r
- for (int i=0; i<files.size(); i++) {\r
- current = files.get(i);\r
- if (current.isFolder()) {\r
- ret.add(current);\r
- }\r
- }\r
- return ret;\r
- }\r
- \r
- \r
- /**\r
- * Check if parent folder does not include 'S' permission and if file/folder\r
- * is shared with me\r
- * \r
- * @param file: OCFile\r
- * @return boolean: True if it is shared with me and false if it is not\r
- */\r
- private boolean checkIfFileIsSharedWithMe(OCFile file) {\r
- return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
- && 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
- 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 * Long.compare(o1.getModificationTimestamp(), 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
- return val * Long.compare(o1.getModificationTimestamp(), 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
- 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
- } else if (o2.isFolder()) {\r
- return 1;\r
- } else if (o1.getFileLength() == 0 || o2.getFileLength() == 0){\r
- return 0;\r
- } else {\r
- return val * Long.compare(o1.getFileLength(), 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 = appPreferences.edit();\r
- editor.putInt("sortOrder", order);\r
- editor.putBoolean("sortAscending", ascending);\r
- editor.commit();\r
- \r
- sortOrder = order;\r
- sortAscending = ascending;\r
- \r
- sortDirectory();\r
- } \r
+ private final static String PERMISSION_SHARED_WITH_ME = "S";\r
+\r
+ private final Context mContext;\r
+ private OCFile mFile = null;\r
+ private Vector<OCFile> mFiles = null;\r
+ private final boolean mJustFolders;\r
+\r
+ private FileDataStorageManager mStorageManager;\r
+ private Account mAccount;\r
+ private final ComponentsGetter mTransferServiceGetter;\r
+ private Integer mSortOrder;\r
+ public static final Integer mSortName = 0;\r
+ public static final Integer mSortDate = 1;\r
+ public static final Integer mSortSize = 2;\r
+ private Boolean mSortAscending;\r
+ private final SharedPreferences mAppPreferences;\r
+\r
+ public FileListListAdapter(boolean justFolders, Context context, ComponentsGetter transferServiceGetter) {\r
+ mJustFolders = justFolders;\r
+ mContext = context;\r
+ mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
+ mTransferServiceGetter = transferServiceGetter;\r
+\r
+ mAppPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);\r
+\r
+ // Read sorting order, default to sort by name ascending\r
+ mSortOrder = mAppPreferences.getInt("sortOrder", mSortName);\r
+ mSortAscending = mAppPreferences.getBoolean("sortAscending", true);\r
+\r
+ }\r
+\r
+ @Override\r
+ public boolean areAllItemsEnabled() {\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public boolean isEnabled(int position) {\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public int getCount() {\r
+ return mFiles != null ? mFiles.size() : 0;\r
+ }\r
+\r
+ @Override\r
+ public Object getItem(int position) {\r
+ if (mFiles == null || mFiles.size() <= position)\r
+ return null;\r
+ return mFiles.get(position);\r
+ }\r
+\r
+ @Override\r
+ public long getItemId(int position) {\r
+ if (mFiles == null || mFiles.size() <= position)\r
+ return 0;\r
+ return mFiles.get(position).getFileId();\r
+ }\r
+\r
+ @Override\r
+ public int getItemViewType(int position) {\r
+ return 0;\r
+ }\r
+\r
+ @Override\r
+ public View getView(int position, View convertView, ViewGroup parent) {\r
+ View view = convertView;\r
+ if (view == null) {\r
+ LayoutInflater inflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+ view = inflator.inflate(R.layout.list_item, null);\r
+ }\r
+\r
+ if (mFiles != null && mFiles.size() > position) {\r
+ OCFile file = mFiles.get(position);\r
+ TextView fileName = (TextView) view.findViewById(R.id.Filename);\r
+ String name = file.getFileName();\r
+\r
+ fileName.setText(name);\r
+ ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
+ ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
+ ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
+ sharedWithMeIconV.setVisibility(View.GONE);\r
+\r
+ ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
+ localStateView.bringToFront();\r
+ FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
+ FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
+ if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
+ localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
+ localStateView.setVisibility(View.VISIBLE);\r
+ } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
+ localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
+ localStateView.setVisibility(View.VISIBLE);\r
+ } else if (file.isDown()) {\r
+ localStateView.setImageResource(R.drawable.local_file_indicator);\r
+ localStateView.setVisibility(View.VISIBLE);\r
+ } else {\r
+ localStateView.setVisibility(View.INVISIBLE);\r
+ }\r
+\r
+ TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
+ TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
+ ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
+\r
+ if (!file.isFolder()) {\r
+ fileSizeV.setVisibility(View.VISIBLE);\r
+ fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
+ lastModV.setVisibility(View.VISIBLE);\r
+ lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
+ // this if-else is needed even thoe fav icon is visible by\r
+ // default\r
+ // because android reuses views in listview\r
+ if (!file.keepInSync()) {\r
+ view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
+ } else {\r
+ view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
+ }\r
+\r
+ ListView parentList = (ListView) parent;\r
+ if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) {\r
+ checkBoxV.setVisibility(View.GONE);\r
+ } else {\r
+ if (parentList.isItemChecked(position)) {\r
+ checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
+ } else {\r
+ checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
+ }\r
+ checkBoxV.setVisibility(View.VISIBLE);\r
+ }\r
+\r
+ fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+\r
+ if (checkIfFileIsSharedWithMe(file)) {\r
+ sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+ }\r
+ } else {\r
+ // TODO Re-enable when server supports folder-size calculation\r
+ // if (FileStorageUtils.getDefaultSavePathFor(mAccount.name,\r
+ // file) != null) {\r
+ // fileSizeV.setVisibility(View.VISIBLE);\r
+ // fileSizeV\r
+ // .setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name,\r
+ // file)));\r
+ // } else {\r
+ fileSizeV.setVisibility(View.INVISIBLE);\r
+ // }\r
+\r
+ lastModV.setVisibility(View.VISIBLE);\r
+ lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
+ checkBoxV.setVisibility(View.GONE);\r
+ view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
+\r
+ if (checkIfFileIsSharedWithMe(file)) {\r
+ fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
+ sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+ } else {\r
+ fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+ }\r
+\r
+ // If folder is sharedByLink, icon folder must be changed to\r
+ // folder-public one\r
+ if (file.isShareByLink()) {\r
+ fileIcon.setImageResource(R.drawable.folder_public);\r
+ }\r
+ }\r
+\r
+ if (file.isShareByLink()) {\r
+ sharedIconV.setVisibility(View.VISIBLE);\r
+ } else {\r
+ sharedIconV.setVisibility(View.GONE);\r
+ }\r
+ }\r
+\r
+ return view;\r
+ }\r
+\r
+ /**\r
+ * Local Folder size in human readable format\r
+ * \r
+ * @param path\r
+ * 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
+ return DisplayUtils.bytesToHumanReadable(bytes);\r
+ }\r
+\r
+ return "0 B";\r
+ }\r
+\r
+ /**\r
+ * Local Folder size\r
+ * \r
+ * @param dir\r
+ * 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
+ }\r
+\r
+ @Override\r
+ public boolean hasStableIds() {\r
+ return true;\r
+ }\r
+\r
+ @Override\r
+ public boolean isEmpty() {\r
+ return (mFiles == null || mFiles.isEmpty());\r
+ }\r
+\r
+ /**\r
+ * Change the adapted directory for a new one\r
+ * \r
+ * @param directory\r
+ * New file to adapt. Can be NULL, meaning "no content to adapt".\r
+ * @param updatedStorageManager\r
+ * Optional updated storage manager; used to replace\r
+ * mStorageManager if is different (and not NULL)\r
+ */\r
+ public void swapDirectory(OCFile directory, FileDataStorageManager updatedStorageManager) {\r
+ mFile = directory;\r
+ if (updatedStorageManager != null && updatedStorageManager != mStorageManager) {\r
+ mStorageManager = updatedStorageManager;\r
+ mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
+ }\r
+ if (mStorageManager != null) {\r
+ mFiles = mStorageManager.getFolderContent(mFile);\r
+ if (mJustFolders) {\r
+ mFiles = getFolders(mFiles);\r
+ }\r
+ } else {\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
+ notifyDataSetChanged();\r
+ }\r
+\r
+ /**\r
+ * Filter for getting only the folders\r
+ * \r
+ * @param files\r
+ * @return Vector<OCFile>\r
+ */\r
+ public Vector<OCFile> getFolders(Vector<OCFile> files) {\r
+ Vector<OCFile> ret = new Vector<OCFile>();\r
+ OCFile current = null;\r
+ for (int i = 0; i < files.size(); i++) {\r
+ current = files.get(i);\r
+ if (current.isFolder()) {\r
+ ret.add(current);\r
+ }\r
+ }\r
+ return ret;\r
+ }\r
+\r
+ /**\r
+ * Check if parent folder does not include 'S' permission and if file/folder\r
+ * is shared with me\r
+ * \r
+ * @param file\r
+ * : OCFile\r
+ * @return boolean: True if it is shared with me and false if it is not\r
+ */\r
+ private boolean checkIfFileIsSharedWithMe(OCFile file) {\r
+ return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
+ && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
+ }\r
+\r
+ /**\r
+ * Sorts list by Date\r
+ * \r
+ * @param sortAscending\r
+ * 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
+ @Override\r
+ public int compare(OCFile o1, OCFile o2) {\r
+ if (o1.isFolder() && o2.isFolder()) {\r
+ return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\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
+ return val * Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ /**\r
+ * Sorts list by Size\r
+ * \r
+ * @param sortAscending\r
+ * 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
+ @Override\r
+ public int compare(OCFile o1, OCFile o2) {\r
+ if (o1.isFolder() && o2.isFolder()) {\r
+ return val\r
+ * Long.compare(\r
+ getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o1))),\r
+ getFolderSize(new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, o2))));\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
+ return val * Long.compare(o1.getFileLength(), o2.getFileLength());\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ /**\r
+ * Sorts list by Name\r
+ * \r
+ * @param sortAscending\r
+ * 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
+ @Override\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
+\r
+ sortDirectory();\r
+ }\r