diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f889b88..a1082f36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- Option to uncheck all checked items ([#156]) ## [1.3.1] - 2025-07-12 ### Changed @@ -61,6 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [#83]: https://github.com/FossifyOrg/Notes/issues/83 [#99]: https://github.com/FossifyOrg/Notes/issues/99 [#110]: https://github.com/FossifyOrg/Notes/issues/110 +[#156]: https://github.com/FossifyOrg/Notes/issues/156 [#164]: https://github.com/FossifyOrg/Notes/issues/164 [#178]: https://github.com/FossifyOrg/Notes/issues/178 diff --git a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt index 4b3a8ad8..fc936b84 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -269,6 +269,7 @@ class MainActivity : SimpleActivity() { findItem(R.id.delete_note).isVisible = multipleNotesExist findItem(R.id.open_search).isVisible = !isCurrentItemChecklist findItem(R.id.remove_done_items).isVisible = isCurrentItemChecklist + findItem(R.id.uncheck_all_items).isVisible = isCurrentItemChecklist findItem(R.id.sort_checklist).isVisible = isCurrentItemChecklist findItem(R.id.import_folder).isVisible = !isQPlus() findItem(R.id.lock_note).isVisible = @@ -316,6 +317,7 @@ class MainActivity : SimpleActivity() { R.id.settings -> launchSettings() R.id.about -> launchAbout() R.id.remove_done_items -> fragment?.handleUnlocking { removeDoneItems() } + R.id.uncheck_all_items -> fragment?.handleUnlocking { uncheckAllItems() } R.id.sort_checklist -> fragment?.handleUnlocking { displaySortChecklistDialog() } else -> return@setOnMenuItemClickListener false } @@ -1555,6 +1557,10 @@ class MainActivity : SimpleActivity() { getPagerAdapter().removeDoneCheckListItems(binding.viewPager.currentItem) } + private fun uncheckAllItems() { + getPagerAdapter().uncheckAllItems(binding.viewPager.currentItem) + } + private fun displaySortChecklistDialog() { SortChecklistDialog(this, mCurrentNote.id) { getPagerAdapter().refreshChecklist(binding.viewPager.currentItem) diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/NotesPagerAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/NotesPagerAdapter.kt index 5e247c5e..12646219 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/NotesPagerAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/NotesPagerAdapter.kt @@ -96,6 +96,10 @@ class NotesPagerAdapter(fm: FragmentManager, val notes: List, val activity (fragments[position] as? TasksFragment)?.removeCheckedItems() } + fun uncheckAllItems(position: Int) { + (fragments[position] as? TasksFragment)?.uncheckAllItems() + } + fun refreshChecklist(position: Int) { (fragments[position] as? TasksFragment)?.saveAndReload() } diff --git a/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt b/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt index 5d14c8e6..11117e10 100644 --- a/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt +++ b/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt @@ -256,6 +256,11 @@ class TasksFragment : NoteFragment(), TasksActionListener { setupAdapter() } + fun uncheckAllItems() { + tasks = tasks.map { it.copy(isDone = false) }.toMutableList() + saveAndReload() + } + private fun updateUIVisibility() { binding.apply { fragmentPlaceholder.beVisibleIf(tasks.isEmpty()) diff --git a/app/src/main/res/menu/menu.xml b/app/src/main/res/menu/menu.xml index b9b161f3..3e026684 100644 --- a/app/src/main/res/menu/menu.xml +++ b/app/src/main/res/menu/menu.xml @@ -40,6 +40,10 @@ android:id="@+id/remove_done_items" android:title="@string/delete_checked_items" app:showAsAction="never" /> + Add new checklist items The checklist is empty Delete checked items + Uncheck all items Add to the top Use for this checklist only