Selaa lähdekoodia

Hide hidden files in search

Signed-off-by: alperozturk <alper_ozturk@proton.me>
alperozturk 1 vuosi sitten
vanhempi
commit
0106ba3478

+ 4 - 3
app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -1024,7 +1024,8 @@ public class FileDisplayActivity extends FileActivity
                 searchView.clearFocus();
 
                 // Remove the list to the original state
-                listOfFiles.performSearch("", true);
+                ArrayList<String> listOfHiddenFiles =  listOfFiles.getAdapter().listOfHiddenFiles;
+                listOfFiles.performSearch("", listOfHiddenFiles, true);
 
                 hideSearchView(getCurrentDir());
 
@@ -2579,8 +2580,8 @@ public class FileDisplayActivity extends FileActivity
         return null;
     }
 
-    public void performUnifiedSearch(String query) {
-        UnifiedSearchFragment unifiedSearchFragment = UnifiedSearchFragment.Companion.newInstance(query);
+    public void performUnifiedSearch(String query, ArrayList<String> listOfHiddenFiles) {
+        UnifiedSearchFragment unifiedSearchFragment = UnifiedSearchFragment.Companion.newInstance(query, listOfHiddenFiles);
         setLeftFragment(unifiedSearchFragment);
     }
 

+ 13 - 1
app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -92,6 +92,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -116,7 +117,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
     private boolean hideItemOptions;
     private long lastTimestamp;
     private boolean gridView;
-
+    public ArrayList<String> listOfHiddenFiles = new ArrayList<>();
     private FileDataStorageManager mStorageManager;
     private User user;
     private OCFileListFragmentInterface ocFileListFragmentInterface;
@@ -700,6 +701,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
             }
             sortOrder = preferences.getSortOrderByFolder(directory);
             mFiles = sortOrder.sortCloudFiles(mFiles);
+            prepareListOfHiddenFiles();
             mergeOCFilesForLivePhoto();
             mFilesAll.clear();
             mFilesAll.addAll(mFiles);
@@ -944,6 +946,16 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         return mFiles;
     }
 
+    private void prepareListOfHiddenFiles() {
+        listOfHiddenFiles.clear();
+
+        mFiles.forEach(file -> {
+            if (file.getHidden()) {
+                listOfHiddenFiles.add(file.getFileName());
+            }
+        });
+    }
+
     public void resetLastTimestamp() {
         lastTimestamp = -1;
     }

+ 2 - 0
app/src/main/java/com/owncloud/android/ui/adapter/UnifiedSearchListAdapter.kt

@@ -23,6 +23,7 @@
  */
 package com.owncloud.android.ui.adapter
 
+import android.annotation.SuppressLint
 import android.content.Context
 import android.view.LayoutInflater
 import android.view.View
@@ -153,6 +154,7 @@ class UnifiedSearchListAdapter(
         }
     }
 
+    @SuppressLint("NotifyDataSetChanged")
     fun setData(sections: List<UnifiedSearchSection>) {
         this.sections = sections
         notifyDataSetChanged()

+ 16 - 7
app/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -246,11 +246,16 @@ public class ExtendedListFragment extends Fragment implements
 
     @Override
     public boolean onQueryTextSubmit(String query) {
-        performSearch(query, false);
-        return true;
+        RecyclerView.Adapter adapter = getRecyclerView().getAdapter();
+        if (adapter instanceof OCFileListAdapter) {
+            ArrayList<String> listOfHiddenFiles = ((OCFileListAdapter) adapter).listOfHiddenFiles;
+            performSearch(query, listOfHiddenFiles, false);
+            return true;
+        }
+        return false;
     }
 
-    public void performSearch(final String query, boolean isBackPressed) {
+    public void performSearch(final String query, final ArrayList<String> listOfHiddenFiles, boolean isBackPressed) {
         handler.removeCallbacksAndMessages(null);
         RecyclerView.Adapter adapter = getRecyclerView().getAdapter();
         Activity activity = getActivity();
@@ -269,7 +274,7 @@ public class ExtendedListFragment extends Fragment implements
                                 .getVersion()
                                 .isNewerOrEqual(OwnCloudVersion.nextcloud_20)
                             ) {
-                                ((FileDisplayActivity) activity).performUnifiedSearch(query);
+                                ((FileDisplayActivity) activity).performUnifiedSearch(query, listOfHiddenFiles);
                             } else {
                                 EventBus.getDefault().post(
                                     new SearchEvent(query, SearchRemoteOperation.SearchType.FILE_SEARCH)
@@ -297,9 +302,13 @@ public class ExtendedListFragment extends Fragment implements
 
     @Override
     public boolean onClose() {
-        performSearch("", true);
-
-        return false;
+        RecyclerView.Adapter adapter = getRecyclerView().getAdapter();
+        if (adapter instanceof OCFileListAdapter) {
+            ArrayList<String> listOfHiddenFiles = ((OCFileListAdapter) adapter).listOfHiddenFiles;
+            performSearch("", listOfHiddenFiles,true);
+            return false;
+        }
+        return true;
     }
 
     @Override

+ 18 - 2
app/src/main/java/com/owncloud/android/ui/fragment/UnifiedSearchFragment.kt

@@ -86,12 +86,18 @@ class UnifiedSearchFragment : Fragment(), Injectable, UnifiedSearchListInterface
     @Inject
     lateinit var viewThemeUtils: ViewThemeUtils
 
+    private var listOfHiddenFiles = ArrayList<String>()
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         vm = ViewModelProvider(this, vmFactory)[UnifiedSearchViewModel::class.java]
         setUpViewModel()
 
         val query = savedInstanceState?.getString(ARG_QUERY) ?: arguments?.getString(ARG_QUERY)
+        listOfHiddenFiles =
+            savedInstanceState?.getStringArrayList(ARG_HIDDEN_FILES) ?: arguments?.getStringArrayList(ARG_HIDDEN_FILES)
+                ?: ArrayList()
+
         if (!query.isNullOrEmpty()) {
             vm.setQuery(query)
             vm.initialQuery()
@@ -212,7 +218,15 @@ class UnifiedSearchFragment : Fragment(), Injectable, UnifiedSearchListInterface
         Log_OC.d(TAG, "result")
         binding.emptyList.emptyListView.visibility = View.GONE
 
-        adapter.setData(result)
+        val filteredResult = result.map { searchSection ->
+            val entriesWithoutHiddenFiles = searchSection.entries.filterNot { entry ->
+                listOfHiddenFiles.contains(entry.title)
+            }
+
+            searchSection.copy(entries = entriesWithoutHiddenFiles)
+        }.filter { it.entries.isNotEmpty() }
+
+        adapter.setData(filteredResult)
     }
 
     @VisibleForTesting
@@ -241,14 +255,16 @@ class UnifiedSearchFragment : Fragment(), Injectable, UnifiedSearchListInterface
     companion object {
         private const val TAG = "UnifiedSearchFragment"
         const val ARG_QUERY = "ARG_QUERY"
+        const val ARG_HIDDEN_FILES = "ARG_HIDDEN_FILES"
 
         /**
          * Public factory method to get fragment.
          */
-        fun newInstance(query: String?): UnifiedSearchFragment {
+        fun newInstance(query: String?, listOfHiddenFiles: ArrayList<String>): UnifiedSearchFragment {
             val fragment = UnifiedSearchFragment()
             val args = Bundle()
             args.putString(ARG_QUERY, query)
+            args.putStringArrayList(ARG_HIDDEN_FILES, listOfHiddenFiles)
             fragment.arguments = args
             return fragment
         }