Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -1349,6 +1349,11 @@ class MainActivity : SimpleActivity() {
doDeleteNote(mCurrentNote, deleteFile)
}
}

val noteId = note.id
if (note.type == NoteType.TYPE_CHECKLIST && noteId != null) {
config.removeOwnSorting(noteId)
}
}

private fun doDeleteNote(note: Note, deleteFile: Boolean) {
Expand Down Expand Up @@ -1552,7 +1557,7 @@ class MainActivity : SimpleActivity() {
}

private fun displaySortChecklistDialog() {
SortChecklistDialog(this) {
SortChecklistDialog(this, mCurrentNote.id) {
getPagerAdapter().refreshChecklist(binding.viewPager.currentItem)
updateWidgets()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ class SettingsActivity : SimpleActivity() {
setupMonospacedFont()
setupShowKeyboard()
setupShowNotePicker()
setupMoveUndoneChecklistItems()
setupShowWordCount()
setupEnableLineWrap()
setupFontSize()
Expand Down Expand Up @@ -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 {
Expand Down
17 changes: 7 additions & 10 deletions app/src/main/kotlin/org/fossify/notes/adapters/OpenNoteAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -125,19 +125,16 @@ class OpenNoteAdapter(
val taskType = object : TypeToken<List<Task>>() {}.type
var items = Gson().fromJson<List<Task>>(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.moveDoneChecklistItems) {
it.sortedBy { it.isDone }
} else {
it
}
}
} else {
it
result = result.sorted()
}
if (context.config.moveDoneChecklistItems) {
result = result.sortedBy { it.isDone }
}
result
}

val linePrefix = "• "
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,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.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.moveDoneChecklistItems
menu.findItem(R.id.cab_move_to_bottom).isVisible = selectedItems.none { it.isDone }
|| !activity.config.moveDoneChecklistItems
}

override fun getItemViewType(position: Int): Int {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,12 +129,13 @@ 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<Task>
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) {
tasks.sortBy { it.isDone }
}
}
if (context.config.moveDoneChecklistItems) {
tasks.sortBy { it.isDone }
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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, callback: (titles: ArrayList<String>) -> Unit) {
class NewChecklistItemDialog(
val activity: Activity,
private val noteId: Long,
callback: (titles: ArrayList<String>) -> Unit
) {
private val titles = mutableListOf<AppCompatEditText>()
private val binding = DialogNewChecklistItemBinding.inflate(activity.layoutInflater)
private val view = binding.root
Expand All @@ -32,7 +36,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
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -12,16 +13,19 @@ import org.fossify.notes.activities.SimpleActivity
import org.fossify.notes.databinding.DialogSortChecklistBinding
import org.fossify.notes.extensions.config

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()
setupOrderRadio()
setupMoveUndoneChecklistItems()

activity.getAlertDialogBuilder()
.setPositiveButton(org.fossify.commons.R.string.ok) { _, _ -> dialogConfirmed() }
Expand Down Expand Up @@ -49,6 +53,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
}

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

private fun setupMoveUndoneChecklistItems() {
binding.settingsMoveUndoneChecklistItems.isChecked = config.moveDoneChecklistItems
binding.settingsMoveUndoneChecklistItemsHolder.setOnClickListener {
binding.settingsMoveUndoneChecklistItems.toggle()
}
}

private fun dialogConfirmed() {
val sortingRadio = binding.sortingDialogRadioSorting
var sorting = when (sortingRadio.checkedRadioButtonId) {
Expand All @@ -83,11 +86,15 @@ class SortChecklistDialog(private val activity: SimpleActivity, private val call
sorting = sorting or SORT_DESCENDING
}

if (currSorting != sorting) {
if (binding.sortingDialogUseForThisChecklist.isChecked) {
config.saveOwnSorting(noteId!!, sorting)
} else {
if (noteId != null) {
config.removeOwnSorting(noteId)
}
config.sorting = sorting
}

config.moveDoneChecklistItems = binding.settingsMoveUndoneChecklistItems.isChecked
callback()
}
}
25 changes: 19 additions & 6 deletions app/src/main/kotlin/org/fossify/notes/fragments/TasksFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<Task>()

Expand Down Expand Up @@ -201,7 +201,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()
}
Expand Down Expand Up @@ -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)
Expand All @@ -297,12 +297,16 @@ class TasksFragment : NoteFragment(), TasksActionListener {
setupAdapter()
}

override fun moveTasksToTop(taskIds: List<Int>) = moveTasks(taskIds.reversed(), targetPosition = 0)
override fun moveTasksToTop(taskIds: List<Int>) {
moveTasks(taskIds.reversed(), targetPosition = 0)
}

override fun moveTasksToBottom(taskIds: List<Int>) = moveTasks(taskIds, targetPosition = tasks.lastIndex)
override fun moveTasksToBottom(taskIds: List<Int>) {
moveTasks(taskIds, targetPosition = tasks.lastIndex)
}

private fun moveTasks(taskIds: List<Int>, targetPosition: Int) {
activity?.config?.sorting = SORT_BY_CUSTOM
switchToCustomSorting()
taskIds.forEach { id ->
val position = tasks.indexOfFirst { it.id == id }
if (position != -1) {
Expand All @@ -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
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/kotlin/org/fossify/notes/helpers/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,14 @@ 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?): Int {
return 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())
}
15 changes: 15 additions & 0 deletions app/src/main/res/layout/activity_settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,21 @@

</RelativeLayout>

<RelativeLayout
android:id="@+id/settings_move_undone_checklist_items_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<org.fossify.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_move_undone_checklist_items"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/move_done_checklist_items" />

</RelativeLayout>

<RelativeLayout
android:id="@+id/settings_gravity_holder"
style="@style/SettingsHolderTextViewStyle"
Expand Down
19 changes: 4 additions & 15 deletions app/src/main/res/layout/dialog_sort_checklist.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,22 +75,11 @@
android:id="@+id/move_undone_checklist_items_divider"
layout="@layout/divider" />

<RelativeLayout
android:id="@+id/settings_move_undone_checklist_items_holder"
<org.fossify.commons.views.MyAppCompatCheckbox
android:id="@+id/sorting_dialog_use_for_this_checklist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingTop="@dimen/medium_margin"
android:paddingBottom="@dimen/medium_margin">

<org.fossify.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_move_undone_checklist_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:text="@string/move_done_checklist_items" />
android:minHeight="@dimen/min_radio_checkbox_height"
android:text="@string/use_for_this_checklist" />

</RelativeLayout>
</LinearLayout>
1 change: 1 addition & 0 deletions app/src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
<string name="checklist_is_empty">Lista kontrolna jest pusta</string>
<string name="delete_checked_items">Usuń odhaczone elementy</string>
<string name="add_to_the_top">Dodaj na górze</string>
<string name="use_for_this_checklist">Tylko w tej liście kontrolnej</string>
<plurals name="num_checked_items">
<item quantity="one">%d odhaczony element</item>
<item quantity="few">%d odhaczone elementy</item>
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<string name="checklist_is_empty">The checklist is empty</string>
<string name="delete_checked_items">Delete checked items</string>
<string name="add_to_the_top">Add to the top</string>
<string name="use_for_this_checklist">Use for this checklist only</string>
<plurals name="num_checked_items">
<item quantity="one">%d checked item</item>
<item quantity="other">%d checked items</item>
Expand Down
Loading