|
@@ -23,6 +23,8 @@ package com.owncloud.android.ui.adapter;
|
|
|
import android.content.Context;
|
|
|
import android.content.res.Resources;
|
|
|
import android.graphics.Bitmap;
|
|
|
+import android.os.Handler;
|
|
|
+import android.os.Looper;
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
@@ -49,6 +51,7 @@ import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
import java.util.Locale;
|
|
|
import java.util.Set;
|
|
|
+import java.util.concurrent.Executors;
|
|
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
import androidx.recyclerview.widget.RecyclerView;
|
|
@@ -79,9 +82,10 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
this.preferences = preferences;
|
|
|
mContext = context;
|
|
|
mLocalFolderPicker = localFolderPickerMode;
|
|
|
- swapDirectory(directory);
|
|
|
this.localFileListFragmentInterface = localFileListFragmentInterface;
|
|
|
checkedFiles = new HashSet<>();
|
|
|
+
|
|
|
+ swapDirectory(directory);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -313,39 +317,58 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|
|
* @param directory New file to adapt. Can be NULL, meaning "no content to adapt".
|
|
|
*/
|
|
|
public void swapDirectory(final File directory) {
|
|
|
- if (mLocalFolderPicker) {
|
|
|
- if (directory == null) {
|
|
|
- mFiles.clear();
|
|
|
- } else {
|
|
|
- mFiles = getFolders(directory);
|
|
|
- }
|
|
|
- } else {
|
|
|
+ localFileListFragmentInterface.setLoading(true);
|
|
|
+ final Handler uiHandler = new Handler(Looper.getMainLooper());
|
|
|
+ Executors.newSingleThreadExecutor().execute(() -> {
|
|
|
+ List<File> fileList;
|
|
|
if (directory == null) {
|
|
|
- mFiles.clear();
|
|
|
+ fileList = new ArrayList<>();
|
|
|
} else {
|
|
|
- mFiles = getFiles(directory);
|
|
|
+ if (mLocalFolderPicker) {
|
|
|
+ fileList = getFolders(directory);
|
|
|
+ } else {
|
|
|
+ fileList = getFiles(directory);
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- FileSortOrder sortOrder = preferences.getSortOrderByType(FileSortOrder.Type.localFileListView);
|
|
|
- mFiles = sortOrder.sortLocalFiles(mFiles);
|
|
|
+ if (!fileList.isEmpty()) {
|
|
|
+ FileSortOrder sortOrder = preferences.getSortOrderByType(FileSortOrder.Type.localFileListView);
|
|
|
+ fileList = sortOrder.sortLocalFiles(fileList);
|
|
|
|
|
|
- // Fetch preferences for showing hidden files
|
|
|
- boolean showHiddenFiles = preferences.isShowHiddenFilesEnabled();
|
|
|
- if (!showHiddenFiles) {
|
|
|
- mFiles = filterHiddenFiles(mFiles);
|
|
|
- }
|
|
|
+ // Fetch preferences for showing hidden files
|
|
|
+ boolean showHiddenFiles = preferences.isShowHiddenFilesEnabled();
|
|
|
+ if (!showHiddenFiles) {
|
|
|
+ fileList = filterHiddenFiles(fileList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ final List<File> newFiles = fileList;
|
|
|
|
|
|
- mFilesAll.clear();
|
|
|
- mFilesAll.addAll(mFiles);
|
|
|
+ uiHandler.post(() -> {
|
|
|
+ mFiles = newFiles;
|
|
|
+ mFilesAll = new ArrayList<>();
|
|
|
+ mFilesAll.addAll(mFiles);
|
|
|
+
|
|
|
+ notifyDataSetChanged();
|
|
|
+ localFileListFragmentInterface.setLoading(false);
|
|
|
+ });
|
|
|
+ });
|
|
|
|
|
|
- notifyDataSetChanged();
|
|
|
}
|
|
|
|
|
|
public void setSortOrder(FileSortOrder sortOrder) {
|
|
|
- preferences.setSortOrder(FileSortOrder.Type.localFileListView, sortOrder);
|
|
|
- mFiles = sortOrder.sortLocalFiles(mFiles);
|
|
|
- notifyDataSetChanged();
|
|
|
+ localFileListFragmentInterface.setLoading(true);
|
|
|
+ final Handler uiHandler = new Handler(Looper.getMainLooper());
|
|
|
+ Executors.newSingleThreadExecutor().execute(() -> {
|
|
|
+ preferences.setSortOrder(FileSortOrder.Type.localFileListView, sortOrder);
|
|
|
+ mFiles = sortOrder.sortLocalFiles(mFiles);
|
|
|
+
|
|
|
+ uiHandler.post(() -> {
|
|
|
+ notifyDataSetChanged();
|
|
|
+ localFileListFragmentInterface.setLoading(false);
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private List<File> getFolders(final File directory) {
|