diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/SortChecklistDialog.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/SortChecklistDialog.kt index 6049706e..1c2609c7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/SortChecklistDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/SortChecklistDialog.kt @@ -7,16 +7,32 @@ import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.notes.pro.R import com.simplemobiletools.notes.pro.activities.SimpleActivity +import com.simplemobiletools.notes.pro.extensions.config import com.simplemobiletools.notes.pro.models.ChecklistSort import com.simplemobiletools.notes.pro.models.ChecklistSortDirection import com.simplemobiletools.notes.pro.models.ChecklistSortField -import kotlinx.android.synthetic.main.dialog_sort_checklist.view.separate_items_checkbox -import kotlinx.android.synthetic.main.dialog_sort_checklist.view.sort_direction_type -import kotlinx.android.synthetic.main.dialog_sort_checklist.view.sort_field_type +import kotlinx.android.synthetic.main.dialog_sort_checklist.view.* class SortChecklistDialog(private val activity: SimpleActivity, val callback: (ChecklistSort) -> Unit) { init { - val view = (activity.layoutInflater.inflate(R.layout.dialog_sort_checklist, null) as ViewGroup) + val config = activity.config + val view = (activity.layoutInflater.inflate(R.layout.dialog_sort_checklist, null) as ViewGroup).apply { + sort_field_type.check( + when (config.checklistSortField) { + ChecklistSortField.TITLE -> sort_field_title.id + ChecklistSortField.DATE_CREATED -> sort_field_date_created.id + } + ) + + sort_direction_type.check( + when (config.checklistSortDirection) { + ChecklistSortDirection.ASCENDING -> sort_direction_asc.id + ChecklistSortDirection.DESCENDING -> sort_direction_desc.id + } + ) + + separate_done_from_undone.isChecked = config.checklistSeparateDoneFromUndone + } AlertDialog.Builder(activity) .setPositiveButton(R.string.ok, null) @@ -24,13 +40,13 @@ class SortChecklistDialog(private val activity: SimpleActivity, val callback: (C .create().apply { activity.setupDialogStuff(view, this, R.string.sort_checklist) { getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener { - callback.invoke( - ChecklistSort( - field = getSortField(view), - direction = getSortDirection(view), - separateCheckedFromUnchecked = view.separate_items_checkbox.isChecked - ) - ) + val sortField = getSortField(view) + val sortDirection = getSortDirection(view) + val separateDoneFromUndone = view.separate_done_from_undone.isChecked + config.checklistSortField = sortField + config.checklistSortDirection = sortDirection + config.checklistSeparateDoneFromUndone = separateDoneFromUndone + callback.invoke(ChecklistSort(sortField, sortDirection, separateDoneFromUndone)) dismiss() } } diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Config.kt index 9f3da2ad..89cb049e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Config.kt @@ -5,6 +5,8 @@ import android.content.Context import android.os.Environment import android.view.Gravity import com.simplemobiletools.commons.helpers.BaseConfig +import com.simplemobiletools.notes.pro.models.ChecklistSortDirection +import com.simplemobiletools.notes.pro.models.ChecklistSortField class Config(context: Context) : BaseConfig(context) { companion object { @@ -93,4 +95,16 @@ 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() + + var checklistSortField: ChecklistSortField + get() = ChecklistSortField.valueOf(prefs.getString(CHECKLIST_SORT_FIELD, ChecklistSortField.TITLE.name)!!) + set(sortField) = prefs.edit().putString(CHECKLIST_SORT_FIELD, sortField.name).apply() + + var checklistSortDirection: ChecklistSortDirection + get() = ChecklistSortDirection.valueOf(prefs.getString(CHECKLIST_SORT_DIRECTION, ChecklistSortDirection.ASCENDING.name)!!) + set(sortDirection) = prefs.edit().putString(CHECKLIST_SORT_DIRECTION, sortDirection.name).apply() + + var checklistSeparateDoneFromUndone: Boolean + get() = prefs.getBoolean(CHECKLIST_SEPARATE_DONE_FROM_UNDONE, false) + set(separate) = prefs.edit().putBoolean(CHECKLIST_SEPARATE_DONE_FROM_UNDONE, separate).apply() } diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Constants.kt index 2a439d41..acfd7e2d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/Constants.kt @@ -32,6 +32,9 @@ const val LAST_CREATED_NOTE_TYPE = "last_created_note_type" const val MOVE_DONE_CHECKLIST_ITEMS = "move_undone_checklist_items" // it has been replaced from moving undone items at the top to moving done to bottom const val FONT_SIZE_PERCENTAGE = "font_size_percentage" const val ADD_NEW_CHECKLIST_ITEMS_TOP = "add_new_checklist_items_top" +const val CHECKLIST_SORT_FIELD = "checklist_sort_field" +const val CHECKLIST_SORT_DIRECTION = "checklist_sort_direction" +const val CHECKLIST_SEPARATE_DONE_FROM_UNDONE = "checklist_done_from_undone" // gravity const val GRAVITY_LEFT = 0 diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/ChecklistSort.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/ChecklistSort.kt index 4d24610b..e93ae04f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/ChecklistSort.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/ChecklistSort.kt @@ -3,13 +3,9 @@ package com.simplemobiletools.notes.pro.models data class ChecklistSort( val field: ChecklistSortField, val direction: ChecklistSortDirection, - val separateCheckedFromUnchecked: Boolean, + val separateDoneFromUndone: Boolean, ) { - companion object { - val DEFAULT = ChecklistSort(ChecklistSortField.TITLE, ChecklistSortDirection.ASCENDING, false) - } - fun getSortComparator(): Comparator { return when (field) { ChecklistSortField.TITLE -> compareWithSortDirection { it.title } @@ -19,8 +15,10 @@ data class ChecklistSort( private fun compareWithSortDirection(compareFunc: (ChecklistItem) -> Comparable<*>): Comparator { return when (direction) { - ChecklistSortDirection.ASCENDING -> if(separateCheckedFromUnchecked) compareBy { it.isDone }.thenBy(compareFunc) else compareBy(compareFunc) - ChecklistSortDirection.DESCENDING -> if(separateCheckedFromUnchecked) compareByDescending { it.isDone }.thenByDescending(compareFunc) else compareByDescending(compareFunc) + ChecklistSortDirection.ASCENDING -> if (separateDoneFromUndone) compareBy({ it.isDone }, compareFunc) else compareBy(compareFunc) + ChecklistSortDirection.DESCENDING -> if (separateDoneFromUndone) compareByDescending { it.isDone }.thenByDescending(compareFunc) else compareByDescending( + compareFunc + ) } } } diff --git a/app/src/main/res/layout/dialog_sort_checklist.xml b/app/src/main/res/layout/dialog_sort_checklist.xml index 77260504..2d077d97 100644 --- a/app/src/main/res/layout/dialog_sort_checklist.xml +++ b/app/src/main/res/layout/dialog_sort_checklist.xml @@ -72,10 +72,10 @@ + android:text="@string/sort_separate_done_from_undone" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 726b3995..c80e63cd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,6 +63,9 @@ Add new checklist items The checklist is empty Remove done items + Sort direction + Separate done items from undone items + Sort checklist Export all notes as files @@ -109,9 +112,6 @@ Reddit: https://www.reddit.com/r/SimpleMobileTools - Sort direction - Separately sort checked from unchecked items - Sort checklist