Skip to content

Commit b9416a8

Browse files
Aga-Cnaveensingh
andauthored
feat: added possibility to set own sorting for each checklist (#81)
* Added possibility to set own sorting for each checklist (#81) * Fixed too long lines * Added support for own sorting in OpenNoteDialog * Made moveDoneChecklistItems a global setting * refactor: remove unused parameter from TasksAdapter * refactor: remove unused constant for migrated move checklist items * refactor: replace `removeCustomSorting` usage with `removeOwnSorting` * fix: properly switch to custom sorting when order is modified --------- Co-authored-by: Naveen Singh <[email protected]> Co-authored-by: Naveen Singh <[email protected]>
1 parent ea52819 commit b9416a8

File tree

13 files changed

+106
-52
lines changed

13 files changed

+106
-52
lines changed

app/src/main/kotlin/org/fossify/notes/activities/MainActivity.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1349,6 +1349,11 @@ class MainActivity : SimpleActivity() {
13491349
doDeleteNote(mCurrentNote, deleteFile)
13501350
}
13511351
}
1352+
1353+
val noteId = note.id
1354+
if (note.type == NoteType.TYPE_CHECKLIST && noteId != null) {
1355+
config.removeOwnSorting(noteId)
1356+
}
13521357
}
13531358

13541359
private fun doDeleteNote(note: Note, deleteFile: Boolean) {
@@ -1552,7 +1557,7 @@ class MainActivity : SimpleActivity() {
15521557
}
15531558

15541559
private fun displaySortChecklistDialog() {
1555-
SortChecklistDialog(this) {
1560+
SortChecklistDialog(this, mCurrentNote.id) {
15561561
getPagerAdapter().refreshChecklist(binding.viewPager.currentItem)
15571562
updateWidgets()
15581563
}

app/src/main/kotlin/org/fossify/notes/activities/SettingsActivity.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ class SettingsActivity : SimpleActivity() {
111111
setupMonospacedFont()
112112
setupShowKeyboard()
113113
setupShowNotePicker()
114+
setupMoveUndoneChecklistItems()
114115
setupShowWordCount()
115116
setupEnableLineWrap()
116117
setupFontSize()
@@ -247,6 +248,14 @@ class SettingsActivity : SimpleActivity() {
247248
}
248249
}
249250

251+
private fun setupMoveUndoneChecklistItems() {
252+
binding.settingsMoveUndoneChecklistItems.isChecked = config.moveDoneChecklistItems
253+
binding.settingsMoveUndoneChecklistItemsHolder.setOnClickListener {
254+
binding.settingsMoveUndoneChecklistItems.toggle()
255+
config.moveDoneChecklistItems = binding.settingsMoveUndoneChecklistItems.isChecked
256+
}
257+
}
258+
250259
private fun setupShowWordCount() {
251260
binding.settingsShowWordCount.isChecked = config.showWordCount
252261
binding.settingsShowWordCountHolder.setOnClickListener {

app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,19 +125,16 @@ class OpenNoteAdapter(
125125
val taskType = object : TypeToken<List<Task>>() {}.type
126126
var items = Gson().fromJson<List<Task>>(getNoteStoredValue(context), taskType) ?: listOf()
127127
items = items.let {
128-
val sorting = context.config.sorting
128+
val sorting = context.config.getSorting(id)
129129
Task.sorting = sorting
130+
var result = it
130131
if (Task.sorting and SORT_BY_CUSTOM == 0) {
131-
it.sorted().let {
132-
if (context.config.moveDoneChecklistItems) {
133-
it.sortedBy { it.isDone }
134-
} else {
135-
it
136-
}
137-
}
138-
} else {
139-
it
132+
result = result.sorted()
133+
}
134+
if (context.config.moveDoneChecklistItems) {
135+
result = result.sortedBy { it.isDone }
140136
}
137+
result
141138
}
142139

143140
val linePrefix = ""

app/src/main/kotlin/org/fossify/notes/adapters/TasksAdapter.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,10 @@ class TasksAdapter(
9898
}
9999

100100
menu.findItem(R.id.cab_rename).isVisible = isOneItemSelected()
101-
menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone } || !activity.config.moveDoneChecklistItems
102-
menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone } || !activity.config.moveDoneChecklistItems
101+
menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone }
102+
|| !activity.config.moveDoneChecklistItems
103+
menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone }
104+
|| !activity.config.moveDoneChecklistItems
103105
}
104106

105107
override fun getItemViewType(position: Int): Int {

app/src/main/kotlin/org/fossify/notes/adapters/WidgetAdapter.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,12 +129,13 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi
129129

130130
// checklist title can be null only because of the glitch in upgrade to 6.6.0, remove this check in the future
131131
tasks = tasks.toMutableList() as ArrayList<Task>
132-
val sorting = context.config.sorting
132+
val sorting = context.config.getSorting(noteId)
133133
if (sorting and SORT_BY_CUSTOM == 0) {
134+
Task.sorting = sorting
134135
tasks.sort()
135-
if (context.config.moveDoneChecklistItems) {
136-
tasks.sortBy { it.isDone }
137-
}
136+
}
137+
if (context.config.moveDoneChecklistItems) {
138+
tasks.sortBy { it.isDone }
138139
}
139140
}
140141
}

app/src/main/kotlin/org/fossify/notes/dialogs/NewChecklistItemDialog.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ import org.fossify.notes.databinding.DialogNewChecklistItemBinding
1414
import org.fossify.notes.databinding.ItemAddChecklistBinding
1515
import org.fossify.notes.extensions.config
1616

17-
class NewChecklistItemDialog(val activity: Activity, callback: (titles: ArrayList<String>) -> Unit) {
17+
class NewChecklistItemDialog(
18+
val activity: Activity,
19+
private val noteId: Long,
20+
callback: (titles: ArrayList<String>) -> Unit
21+
) {
1822
private val titles = mutableListOf<AppCompatEditText>()
1923
private val binding = DialogNewChecklistItemBinding.inflate(activity.layoutInflater)
2024
private val view = binding.root
@@ -32,7 +36,7 @@ class NewChecklistItemDialog(val activity: Activity, callback: (titles: ArrayLis
3236
addItem.setOnClickListener {
3337
addNewEditText()
3438
}
35-
settingsAddChecklistTop.beVisibleIf(activity.config.sorting == SORT_BY_CUSTOM)
39+
settingsAddChecklistTop.beVisibleIf(activity.config.getSorting(noteId) == SORT_BY_CUSTOM)
3640
settingsAddChecklistTop.isChecked = activity.config.addNewChecklistItemsTop
3741
}
3842

app/src/main/kotlin/org/fossify/notes/dialogs/SortChecklistDialog.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.fossify.notes.dialogs
22

3+
import org.fossify.commons.extensions.beGone
34
import org.fossify.commons.extensions.beGoneIf
45
import org.fossify.commons.extensions.getAlertDialogBuilder
56
import org.fossify.commons.extensions.setupDialogStuff
@@ -12,16 +13,19 @@ import org.fossify.notes.activities.SimpleActivity
1213
import org.fossify.notes.databinding.DialogSortChecklistBinding
1314
import org.fossify.notes.extensions.config
1415

15-
class SortChecklistDialog(private val activity: SimpleActivity, private val callback: () -> Unit) {
16+
class SortChecklistDialog(
17+
private val activity: SimpleActivity,
18+
private val noteId: Long?,
19+
private val callback: () -> Unit
20+
) {
1621
private val binding = DialogSortChecklistBinding.inflate(activity.layoutInflater)
1722
private val view = binding.root
1823
private val config = activity.config
19-
private var currSorting = config.sorting
24+
private var currSorting = config.getSorting(noteId)
2025

2126
init {
2227
setupSortRadio()
2328
setupOrderRadio()
24-
setupMoveUndoneChecklistItems()
2529

2630
activity.getAlertDialogBuilder()
2731
.setPositiveButton(org.fossify.commons.R.string.ok) { _, _ -> dialogConfirmed() }
@@ -49,6 +53,12 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call
4953
fieldBtn = binding.sortingDialogRadioCustom
5054
}
5155

56+
if (noteId == null) {
57+
binding.sortingDialogUseForThisChecklist.beGone()
58+
} else {
59+
binding.sortingDialogUseForThisChecklist.isChecked = config.hasOwnSorting(noteId)
60+
}
61+
5262
fieldBtn.isChecked = true
5363
}
5464

@@ -62,13 +72,6 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call
6272
orderBtn.isChecked = true
6373
}
6474

65-
private fun setupMoveUndoneChecklistItems() {
66-
binding.settingsMoveUndoneChecklistItems.isChecked = config.moveDoneChecklistItems
67-
binding.settingsMoveUndoneChecklistItemsHolder.setOnClickListener {
68-
binding.settingsMoveUndoneChecklistItems.toggle()
69-
}
70-
}
71-
7275
private fun dialogConfirmed() {
7376
val sortingRadio = binding.sortingDialogRadioSorting
7477
var sorting = when (sortingRadio.checkedRadioButtonId) {
@@ -83,11 +86,15 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call
8386
sorting = sorting or SORT_DESCENDING
8487
}
8588

86-
if (currSorting != sorting) {
89+
if (binding.sortingDialogUseForThisChecklist.isChecked) {
90+
config.saveOwnSorting(noteId!!, sorting)
91+
} else {
92+
if (noteId != null) {
93+
config.removeOwnSorting(noteId)
94+
}
8795
config.sorting = sorting
8896
}
8997

90-
config.moveDoneChecklistItems = binding.settingsMoveUndoneChecklistItems.isChecked
9198
callback()
9299
}
93100
}

app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class TasksFragment : NoteFragment(), TasksActionListener {
139139
}
140140

141141
private fun showNewItemDialog() {
142-
NewChecklistItemDialog(activity as SimpleActivity) { titles ->
142+
NewChecklistItemDialog(activity as SimpleActivity, noteId) { titles ->
143143
var currentMaxId = tasks.maxByOrNull { item -> item.id }?.id ?: 0
144144
val newItems = ArrayList<Task>()
145145

@@ -201,7 +201,7 @@ class TasksFragment : NoteFragment(), TasksActionListener {
201201

202202
private fun setupAdapter() {
203203
updateUIVisibility()
204-
Task.sorting = requireContext().config.sorting
204+
Task.sorting = requireContext().config.getSorting(noteId)
205205
if (Task.sorting and SORT_BY_CUSTOM == 0) {
206206
tasks.sort()
207207
}
@@ -282,7 +282,7 @@ class TasksFragment : NoteFragment(), TasksActionListener {
282282
}
283283

284284
override fun moveTask(fromPosition: Int, toPosition: Int) {
285-
activity?.config?.sorting = SORT_BY_CUSTOM
285+
switchToCustomSorting()
286286
if (fromPosition < toPosition) {
287287
for (i in fromPosition until toPosition) {
288288
tasks.swap(i, i + 1)
@@ -297,12 +297,16 @@ class TasksFragment : NoteFragment(), TasksActionListener {
297297
setupAdapter()
298298
}
299299

300-
override fun moveTasksToTop(taskIds: List<Int>) = moveTasks(taskIds.reversed(), targetPosition = 0)
300+
override fun moveTasksToTop(taskIds: List<Int>) {
301+
moveTasks(taskIds.reversed(), targetPosition = 0)
302+
}
301303

302-
override fun moveTasksToBottom(taskIds: List<Int>) = moveTasks(taskIds, targetPosition = tasks.lastIndex)
304+
override fun moveTasksToBottom(taskIds: List<Int>) {
305+
moveTasks(taskIds, targetPosition = tasks.lastIndex)
306+
}
303307

304308
private fun moveTasks(taskIds: List<Int>, targetPosition: Int) {
305-
activity?.config?.sorting = SORT_BY_CUSTOM
309+
switchToCustomSorting()
306310
taskIds.forEach { id ->
307311
val position = tasks.indexOfFirst { it.id == id }
308312
if (position != -1) {
@@ -319,6 +323,15 @@ class TasksFragment : NoteFragment(), TasksActionListener {
319323
}
320324
}
321325

326+
private fun switchToCustomSorting() {
327+
val config = activity?.config ?: return
328+
if (config.hasOwnSorting(noteId) == true) {
329+
config.saveOwnSorting(noteId, SORT_BY_CUSTOM)
330+
} else {
331+
config.sorting = SORT_BY_CUSTOM
332+
}
333+
}
334+
322335
private fun FragmentChecklistBinding.toCommonBinding(): CommonNoteBinding = this.let {
323336
object : CommonNoteBinding {
324337
override val root: View = it.root

app/src/main/kotlin/org/fossify/notes/helpers/Config.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,14 @@ class Config(context: Context) : BaseConfig(context) {
9292
var addNewChecklistItemsTop: Boolean
9393
get() = prefs.getBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, false)
9494
set(addNewCheckListItemsTop) = prefs.edit().putBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, addNewCheckListItemsTop).apply()
95+
96+
fun getSorting(noteId: Long?): Int {
97+
return if (noteId == null) sorting else getFolderSorting(noteId.toString())
98+
}
99+
100+
fun hasOwnSorting(noteId: Long?) = noteId != null && hasCustomSorting(noteId.toString())
101+
102+
fun saveOwnSorting(noteId: Long, sorting: Int) = saveCustomSorting(noteId.toString(), sorting)
103+
104+
fun removeOwnSorting(noteId: Long) = removeCustomSorting(noteId.toString())
95105
}

app/src/main/res/layout/activity_settings.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,21 @@
227227

228228
</RelativeLayout>
229229

230+
<RelativeLayout
231+
android:id="@+id/settings_move_undone_checklist_items_holder"
232+
style="@style/SettingsHolderCheckboxStyle"
233+
android:layout_width="match_parent"
234+
android:layout_height="wrap_content">
235+
236+
<org.fossify.commons.views.MyAppCompatCheckbox
237+
android:id="@+id/settings_move_undone_checklist_items"
238+
style="@style/SettingsCheckboxStyle"
239+
android:layout_width="match_parent"
240+
android:layout_height="wrap_content"
241+
android:text="@string/move_done_checklist_items" />
242+
243+
</RelativeLayout>
244+
230245
<RelativeLayout
231246
android:id="@+id/settings_gravity_holder"
232247
style="@style/SettingsHolderTextViewStyle"

0 commit comments

Comments
 (0)