diff --git a/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/FileExplorerFragment.java b/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/FileExplorerFragment.java index ca331efe7..808b31d71 100644 --- a/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/FileExplorerFragment.java +++ b/app/src/main/java/ca/pkay/rcloneexplorer/Fragments/FileExplorerFragment.java @@ -171,6 +171,8 @@ public class FileExplorerFragment extends Fragment implements FileExplorerRecy private String thumbnailServerAuth; private int thumbnailServerPort; private boolean wrapFilenames; + private boolean showHiddenFiles; + private MenuItem menuShowHiddenFiles; private SharedPreferences.OnSharedPreferenceChangeListener prefChangeListener; /** @@ -247,6 +249,7 @@ public void onCreate(@Nullable Bundle savedInstanceState) { }; sharedPreferences.registerOnSharedPreferenceChangeListener(prefChangeListener); wrapFilenames = sharedPreferences.getBoolean(getString(R.string.pref_key_wrap_filenames), true); + showHiddenFiles = sharedPreferences.getBoolean(getString(R.string.pref_key_show_hidden_files), false); if (goToDefaultSet) { startAtRoot = sharedPreferences.getBoolean(getString(R.string.pref_key_start_at_root), false); @@ -295,7 +298,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c fetchDirectoryTask = new FetchDirectoryContent().execute(); swipeRefreshLayout.setRefreshing(true); } else { - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); } } @@ -587,6 +590,8 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menuLink = menu.findItem(R.id.action_link); menuHttpServe = menu.findItem(R.id.action_serve); menuEmptyTrash = menu.findItem(R.id.action_empty_trash); + menuShowHiddenFiles = menu.findItem(R.id.action_show_hidden_files); + menuShowHiddenFiles.setChecked(showHiddenFiles); if (!remote.hasTrashCan()) { menu.findItem(R.id.action_empty_trash).setVisible(false); @@ -654,6 +659,9 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.action_go_to: showSFTPgoToDialog(); return true; + case R.id.action_show_hidden_files: + toggleShowHiddenFiles(); + return true; case android.R.id.home: if (isInMoveMode) { cancelMoveClicked(); @@ -714,6 +722,34 @@ private void emptyTrash() { .show(); } + private void toggleShowHiddenFiles() { + showHiddenFiles = !showHiddenFiles; + menuShowHiddenFiles.setChecked(showHiddenFiles); + + // Save the preference + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); + sharedPreferences.edit().putBoolean(getString(R.string.pref_key_show_hidden_files), showHiddenFiles).apply(); + + // Refresh the current directory view + if (fetchDirectoryTask != null) { + fetchDirectoryTask.cancel(true); + } + fetchDirectoryTask = new FetchDirectoryContent(true).execute(); + } + + private List filterHiddenFiles(List fileItems) { + if (showHiddenFiles || fileItems == null) { + return fileItems; + } + List filteredList = new ArrayList<>(); + for (FileItem item : fileItems) { + if (!item.getName().startsWith(".")) { + filteredList.add(item); + } + } + return filteredList; + } + private void showSFTPgoToDialog() { GoToDialog goToDialog = new GoToDialog(); goToDialog.show(getChildFragmentManager(), "go to dialog"); @@ -865,7 +901,7 @@ public void afterTextChanged(Editable s) { } private void searchDirContent(String search) { - List content = directoryObject.getDirectoryContent(); + List content = filterHiddenFiles(directoryObject.getDirectoryContent()); List currentShown = recyclerViewAdapter.getCurrentContent(); List results = new ArrayList<>(); @@ -910,7 +946,7 @@ private void cancelMoveClicked() { } if (directoryObject.isPathInCache(moveStartPath)) { directoryObject.restoreFromCache(moveStartPath); - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); } else { directoryObject.setPath(moveStartPath); recyclerViewAdapter.clear(); @@ -1039,7 +1075,7 @@ private void sortSelected(int sortById, int sortOrderId) { } recyclerViewAdapter.updateSortedData(sortedSearch); } else { - recyclerViewAdapter.updateSortedData(directoryContent); + recyclerViewAdapter.updateSortedData(filterHiddenFiles(directoryContent)); } if (sortOrder > 0) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); @@ -1152,7 +1188,7 @@ public boolean onBackButtonPressed() { swipeRefreshLayout.setRefreshing(true); directoryObject.restoreFromCache(path); sortDirectory(); - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); if (directoryPosition.containsKey(directoryObject.getCurrentPath())) { int position = directoryPosition.get(directoryObject.getCurrentPath()); recyclerViewLinearLayoutManager.scrollToPositionWithOffset(position, 10); @@ -1161,7 +1197,7 @@ public boolean onBackButtonPressed() { } else if (directoryObject.isPathInCache(path)) { directoryObject.restoreFromCache(path); sortDirectory(); - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); if (directoryPosition.containsKey(directoryObject.getCurrentPath())) { int position = directoryPosition.get(directoryObject.getCurrentPath()); recyclerViewLinearLayoutManager.scrollToPositionWithOffset(position, 10); @@ -1207,12 +1243,12 @@ public void onDirectoryClicked(FileItem fileItem, int position) { swipeRefreshLayout.setRefreshing(true); directoryObject.restoreFromCache(fileItem.getPath()); sortDirectory(); - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); fetchDirectoryTask = new FetchDirectoryContent(true).execute(); } else if (directoryObject.isPathInCache(fileItem.getPath())) { directoryObject.restoreFromCache(fileItem.getPath()); sortDirectory(); - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); swipeRefreshLayout.setRefreshing(false); } else { directoryObject.setPath(fileItem.getPath()); @@ -1386,7 +1422,7 @@ public void onBreadCrumbClicked(String path) { swipeRefreshLayout.setRefreshing(true); directoryObject.restoreFromCache(path); sortDirectory(); - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); if (directoryPosition.containsKey(directoryObject.getCurrentPath())) { int position = directoryPosition.get(directoryObject.getCurrentPath()); recyclerViewLinearLayoutManager.scrollToPositionWithOffset(position, 10); @@ -1395,7 +1431,7 @@ public void onBreadCrumbClicked(String path) { } else if (directoryObject.isPathInCache(path)) { directoryObject.restoreFromCache(path); sortDirectory(); - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(filterHiddenFiles(directoryObject.getDirectoryContent())); if (directoryPosition.containsKey(directoryObject.getCurrentPath())) { int position = directoryPosition.get(directoryObject.getCurrentPath()); recyclerViewLinearLayoutManager.scrollToPositionWithOffset(position, 10); @@ -1667,10 +1703,11 @@ protected void onPostExecute(List fileItems) { searchDirContent(searchString); } else { if (recyclerViewAdapter != null) { + List displayContent = filterHiddenFiles(directoryObject.getDirectoryContent()); if (silentFetch) { - recyclerViewAdapter.updateData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.updateData(displayContent); } else { - recyclerViewAdapter.newData(directoryObject.getDirectoryContent()); + recyclerViewAdapter.newData(displayContent); } } } diff --git a/app/src/main/res/menu/file_explorer_folder_menu.xml b/app/src/main/res/menu/file_explorer_folder_menu.xml index 5ded67169..252cb25a4 100644 --- a/app/src/main/res/menu/file_explorer_folder_menu.xml +++ b/app/src/main/res/menu/file_explorer_folder_menu.xml @@ -34,6 +34,12 @@ android:title="@string/sync" app:showAsAction="never" /> + + remote_name_%1$s local_alias_remotes refresh_local_aliases + pref_key_show_hidden_files \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 685fb6fe1..33e299144 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -199,6 +199,7 @@ Delete remote? Rename Remote Empty trash + Show hidden files Trash emptied Error emptying trash File options