From 9943eb966298156e3a200d33176bd45e162f3874 Mon Sep 17 00:00:00 2001 From: hanks-zyh Date: Sun, 3 Dec 2023 16:35:29 +0800 Subject: [PATCH] [Feature] Add "Select range" menu to select a continuous subset quickly of files from file lists --- .../android/files/filelist/FileListAdapter.kt | 33 +++++++++++++++++++ .../files/filelist/FileListFragment.kt | 8 +++++ app/src/main/res/menu/file_list_select.xml | 5 +++ app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 5 files changed, 48 insertions(+) diff --git a/app/src/main/java/me/zhanghai/android/files/filelist/FileListAdapter.kt b/app/src/main/java/me/zhanghai/android/files/filelist/FileListAdapter.kt index 8ab0360b6..bd0f1a80a 100644 --- a/app/src/main/java/me/zhanghai/android/files/filelist/FileListAdapter.kt +++ b/app/src/main/java/me/zhanghai/android/files/filelist/FileListAdapter.kt @@ -132,6 +132,39 @@ class FileListAdapter( listener.selectFiles(files, true) } + fun rangeSelectFiles() { + var firstSelectItem = -1 + var lastSelectItem = -1 + for (index in 0..= 0 + && lastSelectItem >= 0 + && lastSelectItem < itemCount + && firstSelectItem < lastSelectItem + ) { + for (index in firstSelectItem..lastSelectItem) { + val file = getItem(index) + if (isFileSelectable(file)) { + files.add(file) + } + } + } + listener.selectFiles(files, true) + } + private fun isFileSelectable(file: FileItem): Boolean { val pickOptions = pickOptions ?: return true return if (pickOptions.pickDirectory) { diff --git a/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt b/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt index 9dc566405..4fc9ac5a4 100644 --- a/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt +++ b/app/src/main/java/me/zhanghai/android/files/filelist/FileListFragment.kt @@ -890,6 +890,10 @@ class FileListFragment : Fragment(), BreadcrumbLayout.Listener, FileListAdapter. selectAllFiles() true } + R.id.action_select_range -> { + rangeSelectFiles() + true + } else -> false } @@ -943,6 +947,10 @@ class FileListFragment : Fragment(), BreadcrumbLayout.Listener, FileListAdapter. adapter.selectAllFiles() } + private fun rangeSelectFiles() { + adapter.rangeSelectFiles() + } + private fun onPasteStateChanged(pasteState: PasteState) { updateBottomToolbar() } diff --git a/app/src/main/res/menu/file_list_select.xml b/app/src/main/res/menu/file_list_select.xml index 65f3f0d11..94154cb02 100644 --- a/app/src/main/res/menu/file_list_select.xml +++ b/app/src/main/res/menu/file_list_select.xml @@ -49,4 +49,9 @@ android:orderInCategory="100" android:title="@string/select_all" app:showAsAction="never" /> + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 44d8225cf..0c71c9405 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -604,4 +604,5 @@ 张海 在 GitHub 上关注 在 Twitter 上关注 + 区间选择 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 713fb8d9b..2cc0882b8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -750,4 +750,5 @@ @string/navigation_standard_directory_downloads @string/ftp_server_title + Select range