Skip to content

Commit 6785932

Browse files
committed
Added possibility to set own sorting for each checklist (#81)
1 parent a2283f8 commit 6785932

File tree

13 files changed

+76
-22
lines changed

13 files changed

+76
-22
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ class MainActivity : SimpleActivity() {
9191
super.onCreate(savedInstanceState)
9292
setContentView(binding.root)
9393
appLaunched(BuildConfig.APPLICATION_ID)
94+
config.migrateMoveDoneChecklistItems()
9495
setupOptionsMenu()
9596
refreshMenuItems()
9697

@@ -1117,6 +1118,9 @@ class MainActivity : SimpleActivity() {
11171118
doDeleteNote(mCurrentNote, deleteFile)
11181119
}
11191120
}
1121+
if (note.type == NoteType.TYPE_CHECKLIST) {
1122+
config.removeCustomSorting(note.id.toString())
1123+
}
11201124
}
11211125

11221126
private fun doDeleteNote(note: Note, deleteFile: Boolean) {
@@ -1306,7 +1310,7 @@ class MainActivity : SimpleActivity() {
13061310
}
13071311

13081312
private fun displaySortChecklistDialog() {
1309-
SortChecklistDialog(this) {
1313+
SortChecklistDialog(this, mCurrentNote.id) {
13101314
getPagerAdapter().refreshChecklist(binding.viewPager.currentItem)
13111315
updateWidgets()
13121316
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class WidgetConfigureActivity : SimpleActivity() {
171171
}
172172
}
173173

174-
TasksAdapter(this, null, binding.checklistNoteView).apply {
174+
TasksAdapter(this, null, binding.checklistNoteView, mCurrentNoteId).apply {
175175
updateTextColor(mTextColor)
176176
binding.checklistNoteView.adapter = this
177177
submitList(items.toList())

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ class OpenNoteAdapter(
129129
Task.sorting = sorting
130130
if (Task.sorting and SORT_BY_CUSTOM == 0) {
131131
it.sorted().let {
132-
if (context.config.moveDoneChecklistItems) {
132+
if (context.config.getMoveDoneChecklistItems(null)) {
133133
it.sortedBy { it.isDone }
134134
} else {
135135
it

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class TasksAdapter(
3838
activity: BaseSimpleActivity,
3939
val listener: TasksActionListener?,
4040
recyclerView: MyRecyclerView,
41+
val noteId: Long,
4142
itemClick: (Any) -> Unit = {},
4243
) : MyRecyclerViewListAdapter<NoteItem>(
4344
activity = activity, recyclerView = recyclerView, diffUtil = TaskDiffCallback(), itemClick = itemClick
@@ -98,8 +99,8 @@ class TasksAdapter(
9899
}
99100

100101
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
102+
menu.findItem(R.id.cab_move_to_top).isVisible = selectedItems.none { it.isDone } || !activity.config.getMoveDoneChecklistItems(noteId)
103+
menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone } || !activity.config.getMoveDoneChecklistItems(noteId)
103104
}
104105

105106
override fun getItemViewType(position: Int): Int {
@@ -174,7 +175,7 @@ class TasksAdapter(
174175
checklistCheckbox.isChecked = task.isDone
175176
checklistHolder.isSelected = isSelected
176177

177-
val canMoveTask = !task.isDone || !activity.config.moveDoneChecklistItems
178+
val canMoveTask = !task.isDone || !activity.config.getMoveDoneChecklistItems(noteId)
178179
checklistDragHandle.beVisibleIf(beVisible = canMoveTask && selectedKeys.isNotEmpty())
179180
checklistDragHandle.applyColorFilter(textColor)
180181
checklistDragHandle.setOnTouchListener { _, event ->

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,11 @@ 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+
if (context.config.getMoveDoneChecklistItems(noteId)) {
136137
tasks.sortBy { it.isDone }
137138
}
138139
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ 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(val activity: Activity, private val noteId: Long, callback: (titles: ArrayList<String>) -> Unit) {
1818
private val titles = mutableListOf<AppCompatEditText>()
1919
private val binding = DialogNewChecklistItemBinding.inflate(activity.layoutInflater)
2020
private val view = binding.root
@@ -32,7 +32,7 @@ class NewChecklistItemDialog(val activity: Activity, callback: (titles: ArrayLis
3232
addItem.setOnClickListener {
3333
addNewEditText()
3434
}
35-
settingsAddChecklistTop.beVisibleIf(activity.config.sorting == SORT_BY_CUSTOM)
35+
settingsAddChecklistTop.beVisibleIf(activity.config.getSorting(noteId) == SORT_BY_CUSTOM)
3636
settingsAddChecklistTop.isChecked = activity.config.addNewChecklistItemsTop
3737
}
3838

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

Lines changed: 21 additions & 5 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
@@ -11,12 +12,13 @@ import org.fossify.notes.R
1112
import org.fossify.notes.activities.SimpleActivity
1213
import org.fossify.notes.databinding.DialogSortChecklistBinding
1314
import org.fossify.notes.extensions.config
15+
import org.fossify.notes.helpers.SORT_MOVE_DONE_ITEMS
1416

15-
class SortChecklistDialog(private val activity: SimpleActivity, private val callback: () -> Unit) {
17+
class SortChecklistDialog(private val activity: SimpleActivity, private val noteId: Long?, private val callback: () -> Unit) {
1618
private val binding = DialogSortChecklistBinding.inflate(activity.layoutInflater)
1719
private val view = binding.root
1820
private val config = activity.config
19-
private var currSorting = config.sorting
21+
private var currSorting = config.getSorting(noteId)
2022

2123
init {
2224
setupSortRadio()
@@ -49,6 +51,12 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call
4951
fieldBtn = binding.sortingDialogRadioCustom
5052
}
5153

54+
if (noteId == null) {
55+
binding.sortingDialogUseForThisChecklist.beGone()
56+
} else {
57+
binding.sortingDialogUseForThisChecklist.isChecked = config.hasOwnSorting(noteId)
58+
}
59+
5260
fieldBtn.isChecked = true
5361
}
5462

@@ -63,7 +71,7 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call
6371
}
6472

6573
private fun setupMoveUndoneChecklistItems() {
66-
binding.settingsMoveUndoneChecklistItems.isChecked = config.moveDoneChecklistItems
74+
binding.settingsMoveUndoneChecklistItems.isChecked = config.getMoveDoneChecklistItems(noteId)
6775
binding.settingsMoveUndoneChecklistItemsHolder.setOnClickListener {
6876
binding.settingsMoveUndoneChecklistItems.toggle()
6977
}
@@ -83,11 +91,19 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call
8391
sorting = sorting or SORT_DESCENDING
8492
}
8593

86-
if (currSorting != sorting) {
94+
if (binding.settingsMoveUndoneChecklistItems.isChecked) {
95+
sorting = sorting or SORT_MOVE_DONE_ITEMS
96+
}
97+
98+
if (binding.sortingDialogUseForThisChecklist.isChecked) {
99+
config.saveOwnSorting(noteId!!, sorting)
100+
} else {
101+
if (noteId != null) {
102+
config.removeOwnSorting(noteId)
103+
}
87104
config.sorting = sorting
88105
}
89106

90-
config.moveDoneChecklistItems = binding.settingsMoveUndoneChecklistItems.isChecked
91107
callback()
92108
}
93109
}

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

Lines changed: 4 additions & 3 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

@@ -162,7 +162,7 @@ class TasksFragment : NoteFragment(), TasksActionListener {
162162
}
163163

164164
private fun prepareTaskItems(): List<NoteItem> {
165-
return if (config?.moveDoneChecklistItems == true) {
165+
return if (config?.getMoveDoneChecklistItems(noteId) == true) {
166166
mutableListOf<NoteItem>().apply {
167167
val (checked, unchecked) = tasks.partition { it.isDone }
168168
this += unchecked
@@ -191,6 +191,7 @@ class TasksFragment : NoteFragment(), TasksActionListener {
191191
activity = activity as SimpleActivity,
192192
listener = this,
193193
recyclerView = binding.checklistList,
194+
noteId = noteId,
194195
itemClick = ::itemClicked
195196
)
196197
binding.checklistList.adapter = adapter
@@ -201,7 +202,7 @@ class TasksFragment : NoteFragment(), TasksActionListener {
201202

202203
private fun setupAdapter() {
203204
updateUIVisibility()
204-
Task.sorting = requireContext().config.sorting
205+
Task.sorting = requireContext().config.getSorting(noteId)
205206
if (Task.sorting and SORT_BY_CUSTOM == 0) {
206207
tasks.sort()
207208
}

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,6 @@ class Config(context: Context) : BaseConfig(context) {
7575
get() = prefs.getInt(LAST_CREATED_NOTE_TYPE, NoteType.TYPE_TEXT.value)
7676
set(lastCreatedNoteType) = prefs.edit().putInt(LAST_CREATED_NOTE_TYPE, lastCreatedNoteType).apply()
7777

78-
var moveDoneChecklistItems: Boolean
79-
get() = prefs.getBoolean(MOVE_DONE_CHECKLIST_ITEMS, true)
80-
set(moveDoneChecklistItems) = prefs.edit().putBoolean(MOVE_DONE_CHECKLIST_ITEMS, moveDoneChecklistItems).apply()
81-
8278
fun getTextGravity() = when (gravity) {
8379
GRAVITY_CENTER -> Gravity.CENTER_HORIZONTAL
8480
GRAVITY_END -> Gravity.END
@@ -92,4 +88,26 @@ class Config(context: Context) : BaseConfig(context) {
9288
var addNewChecklistItemsTop: Boolean
9389
get() = prefs.getBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, false)
9490
set(addNewCheckListItemsTop) = prefs.edit().putBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, addNewCheckListItemsTop).apply()
91+
92+
fun getSorting(noteId: Long?) = if (noteId == null) sorting else getFolderSorting(noteId.toString())
93+
94+
fun hasOwnSorting(noteId: Long?) = noteId != null && hasCustomSorting(noteId.toString())
95+
96+
fun saveOwnSorting(noteId: Long, sorting: Int) = saveCustomSorting(noteId.toString(), sorting)
97+
98+
fun removeOwnSorting(noteId: Long) = removeCustomSorting(noteId.toString())
99+
100+
fun getMoveDoneChecklistItems(noteId: Long?): Boolean = getSorting(noteId) and SORT_MOVE_DONE_ITEMS != 0
101+
102+
fun migrateMoveDoneChecklistItems() {
103+
val isMigrated = prefs.getBoolean(MIGRATED_MOVE_DONE_CHECKLIST_ITEMS, false)
104+
if (isMigrated) {
105+
return
106+
}
107+
val oldValue = prefs.getBoolean(MOVE_DONE_CHECKLIST_ITEMS, true)
108+
if (oldValue) {
109+
sorting = sorting or SORT_MOVE_DONE_ITEMS
110+
}
111+
prefs.edit().putBoolean(MIGRATED_MOVE_DONE_CHECKLIST_ITEMS, true).apply()
112+
}
95113
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const val MOVE_DONE_CHECKLIST_ITEMS = "move_undone_checklist_items" // it ha
3939
const val FONT_SIZE_PERCENTAGE = "font_size_percentage"
4040
const val EXPORT_MIME_TYPE = "text/plain"
4141
const val ADD_NEW_CHECKLIST_ITEMS_TOP = "add_new_checklist_items_top"
42+
const val MIGRATED_MOVE_DONE_CHECKLIST_ITEMS = "migrated_move_undone_checklist_items"
4243

4344
// auto backups
4445
const val AUTOMATIC_BACKUP_REQUEST_CODE = 10001
@@ -80,3 +81,5 @@ const val FONT_SIZE_175_PERCENT = 175
8081
const val FONT_SIZE_200_PERCENT = 200
8182
const val FONT_SIZE_250_PERCENT = 250
8283
const val FONT_SIZE_300_PERCENT = 300
84+
85+
const val SORT_MOVE_DONE_ITEMS = 524288

0 commit comments

Comments
 (0)