From 67859325121db9b0b41fae0f35781a9215de8ed9 Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Sat, 30 Nov 2024 12:08:27 +0100 Subject: [PATCH 1/8] Added possibility to set own sorting for each checklist (#81) --- .../fossify/notes/activities/MainActivity.kt | 6 ++++- .../activities/WidgetConfigureActivity.kt | 2 +- .../fossify/notes/adapters/OpenNoteAdapter.kt | 2 +- .../fossify/notes/adapters/TasksAdapter.kt | 7 ++--- .../fossify/notes/adapters/WidgetAdapter.kt | 5 ++-- .../notes/dialogs/NewChecklistItemDialog.kt | 4 +-- .../notes/dialogs/SortChecklistDialog.kt | 26 +++++++++++++++---- .../fossify/notes/fragments/TasksFragment.kt | 7 ++--- .../org/fossify/notes/helpers/Config.kt | 26 ++++++++++++++++--- .../org/fossify/notes/helpers/Constants.kt | 3 +++ .../main/res/layout/dialog_sort_checklist.xml | 8 ++++++ app/src/main/res/values-pl/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 13 files changed, 76 insertions(+), 22 deletions(-) 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 aebdb5ebb..23c16033a 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -91,6 +91,7 @@ class MainActivity : SimpleActivity() { super.onCreate(savedInstanceState) setContentView(binding.root) appLaunched(BuildConfig.APPLICATION_ID) + config.migrateMoveDoneChecklistItems() setupOptionsMenu() refreshMenuItems() @@ -1117,6 +1118,9 @@ class MainActivity : SimpleActivity() { doDeleteNote(mCurrentNote, deleteFile) } } + if (note.type == NoteType.TYPE_CHECKLIST) { + config.removeCustomSorting(note.id.toString()) + } } private fun doDeleteNote(note: Note, deleteFile: Boolean) { @@ -1306,7 +1310,7 @@ class MainActivity : SimpleActivity() { } private fun displaySortChecklistDialog() { - SortChecklistDialog(this) { + SortChecklistDialog(this, mCurrentNote.id) { getPagerAdapter().refreshChecklist(binding.viewPager.currentItem) updateWidgets() } diff --git a/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt index 30619b5f6..393945e56 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt @@ -171,7 +171,7 @@ class WidgetConfigureActivity : SimpleActivity() { } } - TasksAdapter(this, null, binding.checklistNoteView).apply { + TasksAdapter(this, null, binding.checklistNoteView, mCurrentNoteId).apply { updateTextColor(mTextColor) binding.checklistNoteView.adapter = this submitList(items.toList()) diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt index ab3332205..38af54c29 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt @@ -129,7 +129,7 @@ class OpenNoteAdapter( Task.sorting = sorting if (Task.sorting and SORT_BY_CUSTOM == 0) { it.sorted().let { - if (context.config.moveDoneChecklistItems) { + if (context.config.getMoveDoneChecklistItems(null)) { it.sortedBy { it.isDone } } else { it diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt index 26c5e4643..afb91d8c4 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt @@ -38,6 +38,7 @@ class TasksAdapter( activity: BaseSimpleActivity, val listener: TasksActionListener?, recyclerView: MyRecyclerView, + val noteId: Long, itemClick: (Any) -> Unit = {}, ) : MyRecyclerViewListAdapter( activity = activity, recyclerView = recyclerView, diffUtil = TaskDiffCallback(), itemClick = itemClick @@ -98,8 +99,8 @@ class TasksAdapter( } menu.findItem(R.id.cab_rename).isVisible = isOneItemSelected() - menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone } || !activity.config.moveDoneChecklistItems - menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone } || !activity.config.moveDoneChecklistItems + menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone } || !activity.config.getMoveDoneChecklistItems(noteId) + menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone } || !activity.config.getMoveDoneChecklistItems(noteId) } override fun getItemViewType(position: Int): Int { @@ -174,7 +175,7 @@ class TasksAdapter( checklistCheckbox.isChecked = task.isDone checklistHolder.isSelected = isSelected - val canMoveTask = !task.isDone || !activity.config.moveDoneChecklistItems + val canMoveTask = !task.isDone || !activity.config.getMoveDoneChecklistItems(noteId) checklistDragHandle.beVisibleIf(beVisible = canMoveTask && selectedKeys.isNotEmpty()) checklistDragHandle.applyColorFilter(textColor) checklistDragHandle.setOnTouchListener { _, event -> diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt index d0510ac5d..c5bbc438b 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt @@ -129,10 +129,11 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi // checklist title can be null only because of the glitch in upgrade to 6.6.0, remove this check in the future tasks = tasks.toMutableList() as ArrayList - val sorting = context.config.sorting + val sorting = context.config.getSorting(noteId) if (sorting and SORT_BY_CUSTOM == 0) { + Task.sorting = sorting tasks.sort() - if (context.config.moveDoneChecklistItems) { + if (context.config.getMoveDoneChecklistItems(noteId)) { tasks.sortBy { it.isDone } } } diff --git a/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt b/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt index 9f57ac2f3..5a302cfd6 100644 --- a/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt +++ b/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt @@ -14,7 +14,7 @@ import org.fossify.notes.databinding.DialogNewChecklistItemBinding import org.fossify.notes.databinding.ItemAddChecklistBinding import org.fossify.notes.extensions.config -class NewChecklistItemDialog(val activity: Activity, callback: (titles: ArrayList) -> Unit) { +class NewChecklistItemDialog(val activity: Activity, private val noteId: Long, callback: (titles: ArrayList) -> Unit) { private val titles = mutableListOf() private val binding = DialogNewChecklistItemBinding.inflate(activity.layoutInflater) private val view = binding.root @@ -32,7 +32,7 @@ class NewChecklistItemDialog(val activity: Activity, callback: (titles: ArrayLis addItem.setOnClickListener { addNewEditText() } - settingsAddChecklistTop.beVisibleIf(activity.config.sorting == SORT_BY_CUSTOM) + settingsAddChecklistTop.beVisibleIf(activity.config.getSorting(noteId) == SORT_BY_CUSTOM) settingsAddChecklistTop.isChecked = activity.config.addNewChecklistItemsTop } diff --git a/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt b/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt index 2e5f95ac7..2361ad626 100644 --- a/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt +++ b/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt @@ -1,5 +1,6 @@ package org.fossify.notes.dialogs +import org.fossify.commons.extensions.beGone import org.fossify.commons.extensions.beGoneIf import org.fossify.commons.extensions.getAlertDialogBuilder import org.fossify.commons.extensions.setupDialogStuff @@ -11,12 +12,13 @@ import org.fossify.notes.R import org.fossify.notes.activities.SimpleActivity import org.fossify.notes.databinding.DialogSortChecklistBinding import org.fossify.notes.extensions.config +import org.fossify.notes.helpers.SORT_MOVE_DONE_ITEMS -class SortChecklistDialog(private val activity: SimpleActivity, private val callback: () -> Unit) { +class SortChecklistDialog(private val activity: SimpleActivity, private val noteId: Long?, private val callback: () -> Unit) { private val binding = DialogSortChecklistBinding.inflate(activity.layoutInflater) private val view = binding.root private val config = activity.config - private var currSorting = config.sorting + private var currSorting = config.getSorting(noteId) init { setupSortRadio() @@ -49,6 +51,12 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call fieldBtn = binding.sortingDialogRadioCustom } + if (noteId == null) { + binding.sortingDialogUseForThisChecklist.beGone() + } else { + binding.sortingDialogUseForThisChecklist.isChecked = config.hasOwnSorting(noteId) + } + fieldBtn.isChecked = true } @@ -63,7 +71,7 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call } private fun setupMoveUndoneChecklistItems() { - binding.settingsMoveUndoneChecklistItems.isChecked = config.moveDoneChecklistItems + binding.settingsMoveUndoneChecklistItems.isChecked = config.getMoveDoneChecklistItems(noteId) binding.settingsMoveUndoneChecklistItemsHolder.setOnClickListener { binding.settingsMoveUndoneChecklistItems.toggle() } @@ -83,11 +91,19 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call sorting = sorting or SORT_DESCENDING } - if (currSorting != sorting) { + if (binding.settingsMoveUndoneChecklistItems.isChecked) { + sorting = sorting or SORT_MOVE_DONE_ITEMS + } + + if (binding.sortingDialogUseForThisChecklist.isChecked) { + config.saveOwnSorting(noteId!!, sorting) + } else { + if (noteId != null) { + config.removeOwnSorting(noteId) + } config.sorting = sorting } - config.moveDoneChecklistItems = binding.settingsMoveUndoneChecklistItems.isChecked callback() } } 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 7f4483ab6..9e39ee1a7 100644 --- a/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt +++ b/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt @@ -139,7 +139,7 @@ class TasksFragment : NoteFragment(), TasksActionListener { } private fun showNewItemDialog() { - NewChecklistItemDialog(activity as SimpleActivity) { titles -> + NewChecklistItemDialog(activity as SimpleActivity, noteId) { titles -> var currentMaxId = tasks.maxByOrNull { item -> item.id }?.id ?: 0 val newItems = ArrayList() @@ -162,7 +162,7 @@ class TasksFragment : NoteFragment(), TasksActionListener { } private fun prepareTaskItems(): List { - return if (config?.moveDoneChecklistItems == true) { + return if (config?.getMoveDoneChecklistItems(noteId) == true) { mutableListOf().apply { val (checked, unchecked) = tasks.partition { it.isDone } this += unchecked @@ -191,6 +191,7 @@ class TasksFragment : NoteFragment(), TasksActionListener { activity = activity as SimpleActivity, listener = this, recyclerView = binding.checklistList, + noteId = noteId, itemClick = ::itemClicked ) binding.checklistList.adapter = adapter @@ -201,7 +202,7 @@ class TasksFragment : NoteFragment(), TasksActionListener { private fun setupAdapter() { updateUIVisibility() - Task.sorting = requireContext().config.sorting + Task.sorting = requireContext().config.getSorting(noteId) if (Task.sorting and SORT_BY_CUSTOM == 0) { tasks.sort() } diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt b/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt index 1a8581d22..92bea13ba 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt @@ -75,10 +75,6 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getInt(LAST_CREATED_NOTE_TYPE, NoteType.TYPE_TEXT.value) set(lastCreatedNoteType) = prefs.edit().putInt(LAST_CREATED_NOTE_TYPE, lastCreatedNoteType).apply() - var moveDoneChecklistItems: Boolean - get() = prefs.getBoolean(MOVE_DONE_CHECKLIST_ITEMS, true) - set(moveDoneChecklistItems) = prefs.edit().putBoolean(MOVE_DONE_CHECKLIST_ITEMS, moveDoneChecklistItems).apply() - fun getTextGravity() = when (gravity) { GRAVITY_CENTER -> Gravity.CENTER_HORIZONTAL GRAVITY_END -> Gravity.END @@ -92,4 +88,26 @@ class Config(context: Context) : BaseConfig(context) { var addNewChecklistItemsTop: Boolean get() = prefs.getBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, false) set(addNewCheckListItemsTop) = prefs.edit().putBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, addNewCheckListItemsTop).apply() + + fun getSorting(noteId: Long?) = if (noteId == null) sorting else getFolderSorting(noteId.toString()) + + fun hasOwnSorting(noteId: Long?) = noteId != null && hasCustomSorting(noteId.toString()) + + fun saveOwnSorting(noteId: Long, sorting: Int) = saveCustomSorting(noteId.toString(), sorting) + + fun removeOwnSorting(noteId: Long) = removeCustomSorting(noteId.toString()) + + fun getMoveDoneChecklistItems(noteId: Long?): Boolean = getSorting(noteId) and SORT_MOVE_DONE_ITEMS != 0 + + fun migrateMoveDoneChecklistItems() { + val isMigrated = prefs.getBoolean(MIGRATED_MOVE_DONE_CHECKLIST_ITEMS, false) + if (isMigrated) { + return + } + val oldValue = prefs.getBoolean(MOVE_DONE_CHECKLIST_ITEMS, true) + if (oldValue) { + sorting = sorting or SORT_MOVE_DONE_ITEMS + } + prefs.edit().putBoolean(MIGRATED_MOVE_DONE_CHECKLIST_ITEMS, true).apply() + } } diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt index ba9e2e9b9..ae5d51041 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt @@ -39,6 +39,7 @@ const val MOVE_DONE_CHECKLIST_ITEMS = "move_undone_checklist_items" // it ha const val FONT_SIZE_PERCENTAGE = "font_size_percentage" const val EXPORT_MIME_TYPE = "text/plain" const val ADD_NEW_CHECKLIST_ITEMS_TOP = "add_new_checklist_items_top" +const val MIGRATED_MOVE_DONE_CHECKLIST_ITEMS = "migrated_move_undone_checklist_items" // auto backups const val AUTOMATIC_BACKUP_REQUEST_CODE = 10001 @@ -80,3 +81,5 @@ const val FONT_SIZE_175_PERCENT = 175 const val FONT_SIZE_200_PERCENT = 200 const val FONT_SIZE_250_PERCENT = 250 const val FONT_SIZE_300_PERCENT = 300 + +const val SORT_MOVE_DONE_ITEMS = 524288 diff --git a/app/src/main/res/layout/dialog_sort_checklist.xml b/app/src/main/res/layout/dialog_sort_checklist.xml index 70e59856b..8b566fc0a 100644 --- a/app/src/main/res/layout/dialog_sort_checklist.xml +++ b/app/src/main/res/layout/dialog_sort_checklist.xml @@ -93,4 +93,12 @@ android:text="@string/move_done_checklist_items" /> + + + diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 0504ba947..1adf7dca2 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -67,6 +67,7 @@ Lista kontrolna jest pusta Usuń odhaczone elementy Dodaj na górze + Tylko w tej liście kontrolnej %d odhaczony element %d odhaczone elementy diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eca147d3d..2d197b134 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -72,6 +72,7 @@ The checklist is empty Delete checked items Add to the top + Use for this checklist only %d checked item %d checked items From dec0498b1272ba12934c984daf5567d8925c6324 Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Sat, 30 Nov 2024 12:32:37 +0100 Subject: [PATCH 2/8] Fixed too long lines --- .../main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt | 6 ++++-- .../org/fossify/notes/dialogs/NewChecklistItemDialog.kt | 6 +++++- .../kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt | 6 +++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt index afb91d8c4..501f1d9d8 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt @@ -99,8 +99,10 @@ class TasksAdapter( } menu.findItem(R.id.cab_rename).isVisible = isOneItemSelected() - menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone } || !activity.config.getMoveDoneChecklistItems(noteId) - menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone } || !activity.config.getMoveDoneChecklistItems(noteId) + menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone } + || !activity.config.getMoveDoneChecklistItems(noteId) + menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone } + || !activity.config.getMoveDoneChecklistItems(noteId) } override fun getItemViewType(position: Int): Int { diff --git a/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt b/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt index 5a302cfd6..34500c44c 100644 --- a/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt +++ b/app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt @@ -14,7 +14,11 @@ import org.fossify.notes.databinding.DialogNewChecklistItemBinding import org.fossify.notes.databinding.ItemAddChecklistBinding import org.fossify.notes.extensions.config -class NewChecklistItemDialog(val activity: Activity, private val noteId: Long, callback: (titles: ArrayList) -> Unit) { +class NewChecklistItemDialog( + val activity: Activity, + private val noteId: Long, + callback: (titles: ArrayList) -> Unit +) { private val titles = mutableListOf() private val binding = DialogNewChecklistItemBinding.inflate(activity.layoutInflater) private val view = binding.root diff --git a/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt b/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt index 2361ad626..2aeb1fc79 100644 --- a/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt +++ b/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt @@ -14,7 +14,11 @@ import org.fossify.notes.databinding.DialogSortChecklistBinding import org.fossify.notes.extensions.config import org.fossify.notes.helpers.SORT_MOVE_DONE_ITEMS -class SortChecklistDialog(private val activity: SimpleActivity, private val noteId: Long?, private val callback: () -> Unit) { +class SortChecklistDialog( + private val activity: SimpleActivity, + private val noteId: Long?, + private val callback: () -> Unit +) { private val binding = DialogSortChecklistBinding.inflate(activity.layoutInflater) private val view = binding.root private val config = activity.config From b57be1b738316501ef9cb4abf5bdf8410a674835 Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Sat, 30 Nov 2024 19:20:12 +0100 Subject: [PATCH 3/8] Added support for own sorting in OpenNoteDialog --- .../fossify/notes/adapters/OpenNoteAdapter.kt | 17 +++++++---------- .../org/fossify/notes/adapters/WidgetAdapter.kt | 6 +++--- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt index 38af54c29..93afd6e18 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt @@ -125,19 +125,16 @@ class OpenNoteAdapter( val taskType = object : TypeToken>() {}.type var items = Gson().fromJson>(getNoteStoredValue(context), taskType) ?: listOf() items = items.let { - val sorting = context.config.sorting + val sorting = context.config.getSorting(id) Task.sorting = sorting + var result = it if (Task.sorting and SORT_BY_CUSTOM == 0) { - it.sorted().let { - if (context.config.getMoveDoneChecklistItems(null)) { - it.sortedBy { it.isDone } - } else { - it - } - } - } else { - it + result = result.sorted() + } + if (context.config.getMoveDoneChecklistItems(id)) { + result = result.sortedBy { it.isDone } } + result } val linePrefix = "• " diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt index c5bbc438b..481a9d974 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt @@ -133,9 +133,9 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi if (sorting and SORT_BY_CUSTOM == 0) { Task.sorting = sorting tasks.sort() - if (context.config.getMoveDoneChecklistItems(noteId)) { - tasks.sortBy { it.isDone } - } + } + if (context.config.getMoveDoneChecklistItems(noteId)) { + tasks.sortBy { it.isDone } } } } From fdf9e452ab11915e86362605d59cfb01911e3a2a Mon Sep 17 00:00:00 2001 From: Agnieszka C <85929121+Aga-C@users.noreply.github.com> Date: Wed, 23 Apr 2025 19:45:56 +0200 Subject: [PATCH 4/8] Made moveDoneChecklistItems a global setting --- .../fossify/notes/activities/MainActivity.kt | 1 - .../notes/activities/SettingsActivity.kt | 9 +++++++++ .../fossify/notes/adapters/OpenNoteAdapter.kt | 2 +- .../fossify/notes/adapters/TasksAdapter.kt | 6 +++--- .../fossify/notes/adapters/WidgetAdapter.kt | 2 +- .../notes/dialogs/SortChecklistDialog.kt | 13 ------------- .../fossify/notes/fragments/TasksFragment.kt | 2 +- .../org/fossify/notes/helpers/Config.kt | 18 ++++-------------- .../org/fossify/notes/helpers/Constants.kt | 2 -- app/src/main/res/layout/activity_settings.xml | 15 +++++++++++++++ .../main/res/layout/dialog_sort_checklist.xml | 19 ------------------- 11 files changed, 34 insertions(+), 55 deletions(-) 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 d539527f2..dfd9549c3 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -161,7 +161,6 @@ class MainActivity : SimpleActivity() { super.onCreate(savedInstanceState) setContentView(binding.root) appLaunched(BuildConfig.APPLICATION_ID) - config.migrateMoveDoneChecklistItems() setupOptionsMenu() refreshMenuItems() diff --git a/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt index 0fa3212be..c70bee568 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt @@ -111,6 +111,7 @@ class SettingsActivity : SimpleActivity() { setupMonospacedFont() setupShowKeyboard() setupShowNotePicker() + setupMoveUndoneChecklistItems() setupShowWordCount() setupEnableLineWrap() setupFontSize() @@ -247,6 +248,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupMoveUndoneChecklistItems() { + binding.settingsMoveUndoneChecklistItems.isChecked = config.moveDoneChecklistItems + binding.settingsMoveUndoneChecklistItemsHolder.setOnClickListener { + binding.settingsMoveUndoneChecklistItems.toggle() + config.moveDoneChecklistItems = binding.settingsMoveUndoneChecklistItems.isChecked + } + } + private fun setupShowWordCount() { binding.settingsShowWordCount.isChecked = config.showWordCount binding.settingsShowWordCountHolder.setOnClickListener { diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt index 7ed2f64c4..ffb8012be 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt @@ -131,7 +131,7 @@ class OpenNoteAdapter( if (Task.sorting and SORT_BY_CUSTOM == 0) { result = result.sorted() } - if (context.config.getMoveDoneChecklistItems(id)) { + if (context.config.moveDoneChecklistItems) { result = result.sortedBy { it.isDone } } result diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt index 501f1d9d8..62a7dab6f 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt @@ -100,9 +100,9 @@ class TasksAdapter( menu.findItem(R.id.cab_rename).isVisible = isOneItemSelected() menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone } - || !activity.config.getMoveDoneChecklistItems(noteId) + || !activity.config.moveDoneChecklistItems menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone } - || !activity.config.getMoveDoneChecklistItems(noteId) + || !activity.config.moveDoneChecklistItems } override fun getItemViewType(position: Int): Int { @@ -177,7 +177,7 @@ class TasksAdapter( checklistCheckbox.isChecked = task.isDone checklistHolder.isSelected = isSelected - val canMoveTask = !task.isDone || !activity.config.getMoveDoneChecklistItems(noteId) + val canMoveTask = !task.isDone || !activity.config.moveDoneChecklistItems checklistDragHandle.beVisibleIf(beVisible = canMoveTask && selectedKeys.isNotEmpty()) checklistDragHandle.applyColorFilter(textColor) checklistDragHandle.setOnTouchListener { _, event -> diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt index 481a9d974..cf5fcf767 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt @@ -134,7 +134,7 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi Task.sorting = sorting tasks.sort() } - if (context.config.getMoveDoneChecklistItems(noteId)) { + if (context.config.moveDoneChecklistItems) { tasks.sortBy { it.isDone } } } diff --git a/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt b/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt index 2aeb1fc79..48bee5771 100644 --- a/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt +++ b/app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt @@ -12,7 +12,6 @@ import org.fossify.notes.R import org.fossify.notes.activities.SimpleActivity import org.fossify.notes.databinding.DialogSortChecklistBinding import org.fossify.notes.extensions.config -import org.fossify.notes.helpers.SORT_MOVE_DONE_ITEMS class SortChecklistDialog( private val activity: SimpleActivity, @@ -27,7 +26,6 @@ class SortChecklistDialog( init { setupSortRadio() setupOrderRadio() - setupMoveUndoneChecklistItems() activity.getAlertDialogBuilder() .setPositiveButton(org.fossify.commons.R.string.ok) { _, _ -> dialogConfirmed() } @@ -74,13 +72,6 @@ class SortChecklistDialog( orderBtn.isChecked = true } - private fun setupMoveUndoneChecklistItems() { - binding.settingsMoveUndoneChecklistItems.isChecked = config.getMoveDoneChecklistItems(noteId) - binding.settingsMoveUndoneChecklistItemsHolder.setOnClickListener { - binding.settingsMoveUndoneChecklistItems.toggle() - } - } - private fun dialogConfirmed() { val sortingRadio = binding.sortingDialogRadioSorting var sorting = when (sortingRadio.checkedRadioButtonId) { @@ -95,10 +86,6 @@ class SortChecklistDialog( sorting = sorting or SORT_DESCENDING } - if (binding.settingsMoveUndoneChecklistItems.isChecked) { - sorting = sorting or SORT_MOVE_DONE_ITEMS - } - if (binding.sortingDialogUseForThisChecklist.isChecked) { config.saveOwnSorting(noteId!!, sorting) } else { 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 9e39ee1a7..7e3cbc0fe 100644 --- a/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt +++ b/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt @@ -162,7 +162,7 @@ class TasksFragment : NoteFragment(), TasksActionListener { } private fun prepareTaskItems(): List { - return if (config?.getMoveDoneChecklistItems(noteId) == true) { + return if (config?.moveDoneChecklistItems == true) { mutableListOf().apply { val (checked, unchecked) = tasks.partition { it.isDone } this += unchecked diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt b/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt index 92bea13ba..7e7eb238e 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt @@ -75,6 +75,10 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getInt(LAST_CREATED_NOTE_TYPE, NoteType.TYPE_TEXT.value) set(lastCreatedNoteType) = prefs.edit().putInt(LAST_CREATED_NOTE_TYPE, lastCreatedNoteType).apply() + var moveDoneChecklistItems: Boolean + get() = prefs.getBoolean(MOVE_DONE_CHECKLIST_ITEMS, true) + set(moveDoneChecklistItems) = prefs.edit().putBoolean(MOVE_DONE_CHECKLIST_ITEMS, moveDoneChecklistItems).apply() + fun getTextGravity() = when (gravity) { GRAVITY_CENTER -> Gravity.CENTER_HORIZONTAL GRAVITY_END -> Gravity.END @@ -96,18 +100,4 @@ class Config(context: Context) : BaseConfig(context) { fun saveOwnSorting(noteId: Long, sorting: Int) = saveCustomSorting(noteId.toString(), sorting) fun removeOwnSorting(noteId: Long) = removeCustomSorting(noteId.toString()) - - fun getMoveDoneChecklistItems(noteId: Long?): Boolean = getSorting(noteId) and SORT_MOVE_DONE_ITEMS != 0 - - fun migrateMoveDoneChecklistItems() { - val isMigrated = prefs.getBoolean(MIGRATED_MOVE_DONE_CHECKLIST_ITEMS, false) - if (isMigrated) { - return - } - val oldValue = prefs.getBoolean(MOVE_DONE_CHECKLIST_ITEMS, true) - if (oldValue) { - sorting = sorting or SORT_MOVE_DONE_ITEMS - } - prefs.edit().putBoolean(MIGRATED_MOVE_DONE_CHECKLIST_ITEMS, true).apply() - } } diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt index ae5d51041..d5f913ce8 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt @@ -81,5 +81,3 @@ const val FONT_SIZE_175_PERCENT = 175 const val FONT_SIZE_200_PERCENT = 200 const val FONT_SIZE_250_PERCENT = 250 const val FONT_SIZE_300_PERCENT = 300 - -const val SORT_MOVE_DONE_ITEMS = 524288 diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 59348ec1a..c17b729d0 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -227,6 +227,21 @@ + + + + + + - - - - - - Date: Tue, 6 May 2025 23:07:49 +0530 Subject: [PATCH 5/8] refactor: remove unused parameter from TasksAdapter --- .../org/fossify/notes/activities/WidgetConfigureActivity.kt | 2 +- app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt | 1 - .../main/kotlin/org/fossify/notes/fragments/TasksFragment.kt | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt b/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt index d5d251090..1b6202f9b 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/WidgetConfigureActivity.kt @@ -171,7 +171,7 @@ class WidgetConfigureActivity : SimpleActivity() { } } - TasksAdapter(this, null, binding.checklistNoteView, mCurrentNoteId).apply { + TasksAdapter(this, null, binding.checklistNoteView).apply { updateTextColor(mTextColor) binding.checklistNoteView.adapter = this submitList(items.toList()) diff --git a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt index 62a7dab6f..466fbe179 100644 --- a/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt +++ b/app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt @@ -38,7 +38,6 @@ class TasksAdapter( activity: BaseSimpleActivity, val listener: TasksActionListener?, recyclerView: MyRecyclerView, - val noteId: Long, itemClick: (Any) -> Unit = {}, ) : MyRecyclerViewListAdapter( activity = activity, recyclerView = recyclerView, diffUtil = TaskDiffCallback(), itemClick = itemClick 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 7e3cbc0fe..f1a4c4485 100644 --- a/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt +++ b/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt @@ -191,7 +191,6 @@ class TasksFragment : NoteFragment(), TasksActionListener { activity = activity as SimpleActivity, listener = this, recyclerView = binding.checklistList, - noteId = noteId, itemClick = ::itemClicked ) binding.checklistList.adapter = adapter From 65e58a54093478aeda5b6fd14b62b8fcdd2edc30 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 6 May 2025 23:35:06 +0530 Subject: [PATCH 6/8] refactor: remove unused constant for migrated move checklist items --- app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt index d5f913ce8..ba9e2e9b9 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/Constants.kt @@ -39,7 +39,6 @@ const val MOVE_DONE_CHECKLIST_ITEMS = "move_undone_checklist_items" // it ha const val FONT_SIZE_PERCENTAGE = "font_size_percentage" const val EXPORT_MIME_TYPE = "text/plain" const val ADD_NEW_CHECKLIST_ITEMS_TOP = "add_new_checklist_items_top" -const val MIGRATED_MOVE_DONE_CHECKLIST_ITEMS = "migrated_move_undone_checklist_items" // auto backups const val AUTOMATIC_BACKUP_REQUEST_CODE = 10001 From 7af5536960fe48166fd4b20079ac447a86793661 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Tue, 6 May 2025 23:45:11 +0530 Subject: [PATCH 7/8] refactor: replace `removeCustomSorting` usage with `removeOwnSorting` --- .../kotlin/org/fossify/notes/activities/MainActivity.kt | 6 ++++-- app/src/main/kotlin/org/fossify/notes/helpers/Config.kt | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) 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 dfd9549c3..12b6381da 100644 --- a/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt +++ b/app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt @@ -1349,8 +1349,10 @@ class MainActivity : SimpleActivity() { doDeleteNote(mCurrentNote, deleteFile) } } - if (note.type == NoteType.TYPE_CHECKLIST) { - config.removeCustomSorting(note.id.toString()) + + val noteId = note.id + if (note.type == NoteType.TYPE_CHECKLIST && noteId != null) { + config.removeOwnSorting(noteId) } } diff --git a/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt b/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt index 7e7eb238e..c18f25b73 100644 --- a/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt +++ b/app/src/main/kotlin/org/fossify/notes/helpers/Config.kt @@ -93,7 +93,9 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, false) set(addNewCheckListItemsTop) = prefs.edit().putBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, addNewCheckListItemsTop).apply() - fun getSorting(noteId: Long?) = if (noteId == null) sorting else getFolderSorting(noteId.toString()) + fun getSorting(noteId: Long?): Int { + return if (noteId == null) sorting else getFolderSorting(noteId.toString()) + } fun hasOwnSorting(noteId: Long?) = noteId != null && hasCustomSorting(noteId.toString()) From 574b671eba6d3ebe76d33bdc04c9dfad17594d67 Mon Sep 17 00:00:00 2001 From: Naveen Singh Date: Wed, 7 May 2025 00:56:05 +0530 Subject: [PATCH 8/8] fix: properly switch to custom sorting when order is modified --- .../fossify/notes/fragments/TasksFragment.kt | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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 f1a4c4485..5d14c8e68 100644 --- a/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt +++ b/app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt @@ -282,7 +282,7 @@ class TasksFragment : NoteFragment(), TasksActionListener { } override fun moveTask(fromPosition: Int, toPosition: Int) { - activity?.config?.sorting = SORT_BY_CUSTOM + switchToCustomSorting() if (fromPosition < toPosition) { for (i in fromPosition until toPosition) { tasks.swap(i, i + 1) @@ -297,12 +297,16 @@ class TasksFragment : NoteFragment(), TasksActionListener { setupAdapter() } - override fun moveTasksToTop(taskIds: List) = moveTasks(taskIds.reversed(), targetPosition = 0) + override fun moveTasksToTop(taskIds: List) { + moveTasks(taskIds.reversed(), targetPosition = 0) + } - override fun moveTasksToBottom(taskIds: List) = moveTasks(taskIds, targetPosition = tasks.lastIndex) + override fun moveTasksToBottom(taskIds: List) { + moveTasks(taskIds, targetPosition = tasks.lastIndex) + } private fun moveTasks(taskIds: List, targetPosition: Int) { - activity?.config?.sorting = SORT_BY_CUSTOM + switchToCustomSorting() taskIds.forEach { id -> val position = tasks.indexOfFirst { it.id == id } if (position != -1) { @@ -319,6 +323,15 @@ class TasksFragment : NoteFragment(), TasksActionListener { } } + private fun switchToCustomSorting() { + val config = activity?.config ?: return + if (config.hasOwnSorting(noteId) == true) { + config.saveOwnSorting(noteId, SORT_BY_CUSTOM) + } else { + config.sorting = SORT_BY_CUSTOM + } + } + private fun FragmentChecklistBinding.toCommonBinding(): CommonNoteBinding = this.let { object : CommonNoteBinding { override val root: View = it.root