Persist sort state globally

This commit is contained in:
darthpaul 2021-09-29 11:38:13 +01:00
parent a90bfb9a0a
commit 17579ac451
6 changed files with 54 additions and 23 deletions

View File

@ -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()
}
}

View File

@ -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()
}

View File

@ -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

View File

@ -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<ChecklistItem> {
return when (field) {
ChecklistSortField.TITLE -> compareWithSortDirection { it.title }
@ -19,8 +15,10 @@ data class ChecklistSort(
private fun compareWithSortDirection(compareFunc: (ChecklistItem) -> Comparable<*>): Comparator<ChecklistItem> {
return when (direction) {
ChecklistSortDirection.ASCENDING -> if(separateCheckedFromUnchecked) compareBy<ChecklistItem> { it.isDone }.thenBy(compareFunc) else compareBy(compareFunc)
ChecklistSortDirection.DESCENDING -> if(separateCheckedFromUnchecked) compareByDescending<ChecklistItem> { it.isDone }.thenByDescending(compareFunc) else compareByDescending(compareFunc)
ChecklistSortDirection.ASCENDING -> if (separateDoneFromUndone) compareBy({ it.isDone }, compareFunc) else compareBy(compareFunc)
ChecklistSortDirection.DESCENDING -> if (separateDoneFromUndone) compareByDescending<ChecklistItem> { it.isDone }.thenByDescending(compareFunc) else compareByDescending(
compareFunc
)
}
}
}

View File

@ -72,10 +72,10 @@
</RadioGroup>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/separate_items_checkbox"
android:id="@+id/separate_done_from_undone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:text="@string/sort_separate_checked_from_unchecked" />
android:text="@string/sort_separate_done_from_undone" />
</LinearLayout>

View File

@ -63,6 +63,9 @@
<string name="add_new_checklist_items">Add new checklist items</string>
<string name="checklist_is_empty">The checklist is empty</string>
<string name="remove_done_items">Remove done items</string>
<string name="sort_direction">Sort direction</string>
<string name="sort_separate_done_from_undone">Separate done items from undone items</string>
<string name="sort_checklist">Sort checklist</string>
<!-- Import / Export -->
<string name="export_all_notes">Export all notes as files</string>
@ -109,9 +112,6 @@
<b>Reddit:</b>
https://www.reddit.com/r/SimpleMobileTools
</string>
<string name="sort_direction">Sort direction</string>
<string name="sort_separate_checked_from_unchecked">Separately sort checked from unchecked items</string>
<string name="sort_checklist">Sort checklist</string>
<!--
Haven't found some strings? There's more at