mirror of
https://github.com/SimpleMobileTools/Simple-Notes.git
synced 2025-04-09 13:11:12 +02:00
Persist sort state globally
This commit is contained in:
parent
a90bfb9a0a
commit
17579ac451
@ -7,16 +7,32 @@ import androidx.appcompat.app.AlertDialog
|
|||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
import com.simplemobiletools.notes.pro.R
|
import com.simplemobiletools.notes.pro.R
|
||||||
import com.simplemobiletools.notes.pro.activities.SimpleActivity
|
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.ChecklistSort
|
||||||
import com.simplemobiletools.notes.pro.models.ChecklistSortDirection
|
import com.simplemobiletools.notes.pro.models.ChecklistSortDirection
|
||||||
import com.simplemobiletools.notes.pro.models.ChecklistSortField
|
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.*
|
||||||
import kotlinx.android.synthetic.main.dialog_sort_checklist.view.sort_direction_type
|
|
||||||
import kotlinx.android.synthetic.main.dialog_sort_checklist.view.sort_field_type
|
|
||||||
|
|
||||||
class SortChecklistDialog(private val activity: SimpleActivity, val callback: (ChecklistSort) -> Unit) {
|
class SortChecklistDialog(private val activity: SimpleActivity, val callback: (ChecklistSort) -> Unit) {
|
||||||
init {
|
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)
|
AlertDialog.Builder(activity)
|
||||||
.setPositiveButton(R.string.ok, null)
|
.setPositiveButton(R.string.ok, null)
|
||||||
@ -24,13 +40,13 @@ class SortChecklistDialog(private val activity: SimpleActivity, val callback: (C
|
|||||||
.create().apply {
|
.create().apply {
|
||||||
activity.setupDialogStuff(view, this, R.string.sort_checklist) {
|
activity.setupDialogStuff(view, this, R.string.sort_checklist) {
|
||||||
getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
|
getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener {
|
||||||
callback.invoke(
|
val sortField = getSortField(view)
|
||||||
ChecklistSort(
|
val sortDirection = getSortDirection(view)
|
||||||
field = getSortField(view),
|
val separateDoneFromUndone = view.separate_done_from_undone.isChecked
|
||||||
direction = getSortDirection(view),
|
config.checklistSortField = sortField
|
||||||
separateCheckedFromUnchecked = view.separate_items_checkbox.isChecked
|
config.checklistSortDirection = sortDirection
|
||||||
)
|
config.checklistSeparateDoneFromUndone = separateDoneFromUndone
|
||||||
)
|
callback.invoke(ChecklistSort(sortField, sortDirection, separateDoneFromUndone))
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import android.content.Context
|
|||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import com.simplemobiletools.commons.helpers.BaseConfig
|
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) {
|
class Config(context: Context) : BaseConfig(context) {
|
||||||
companion object {
|
companion object {
|
||||||
@ -93,4 +95,16 @@ class Config(context: Context) : BaseConfig(context) {
|
|||||||
var addNewChecklistItemsTop: Boolean
|
var addNewChecklistItemsTop: Boolean
|
||||||
get() = prefs.getBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, false)
|
get() = prefs.getBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, false)
|
||||||
set(addNewCheckListItemsTop) = prefs.edit().putBoolean(ADD_NEW_CHECKLIST_ITEMS_TOP, addNewCheckListItemsTop).apply()
|
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()
|
||||||
}
|
}
|
||||||
|
@ -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 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 FONT_SIZE_PERCENTAGE = "font_size_percentage"
|
||||||
const val ADD_NEW_CHECKLIST_ITEMS_TOP = "add_new_checklist_items_top"
|
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
|
// gravity
|
||||||
const val GRAVITY_LEFT = 0
|
const val GRAVITY_LEFT = 0
|
||||||
|
@ -3,13 +3,9 @@ package com.simplemobiletools.notes.pro.models
|
|||||||
data class ChecklistSort(
|
data class ChecklistSort(
|
||||||
val field: ChecklistSortField,
|
val field: ChecklistSortField,
|
||||||
val direction: ChecklistSortDirection,
|
val direction: ChecklistSortDirection,
|
||||||
val separateCheckedFromUnchecked: Boolean,
|
val separateDoneFromUndone: Boolean,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
companion object {
|
|
||||||
val DEFAULT = ChecklistSort(ChecklistSortField.TITLE, ChecklistSortDirection.ASCENDING, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun getSortComparator(): Comparator<ChecklistItem> {
|
fun getSortComparator(): Comparator<ChecklistItem> {
|
||||||
return when (field) {
|
return when (field) {
|
||||||
ChecklistSortField.TITLE -> compareWithSortDirection { it.title }
|
ChecklistSortField.TITLE -> compareWithSortDirection { it.title }
|
||||||
@ -19,8 +15,10 @@ data class ChecklistSort(
|
|||||||
|
|
||||||
private fun compareWithSortDirection(compareFunc: (ChecklistItem) -> Comparable<*>): Comparator<ChecklistItem> {
|
private fun compareWithSortDirection(compareFunc: (ChecklistItem) -> Comparable<*>): Comparator<ChecklistItem> {
|
||||||
return when (direction) {
|
return when (direction) {
|
||||||
ChecklistSortDirection.ASCENDING -> if(separateCheckedFromUnchecked) compareBy<ChecklistItem> { it.isDone }.thenBy(compareFunc) else compareBy(compareFunc)
|
ChecklistSortDirection.ASCENDING -> if (separateDoneFromUndone) compareBy({ it.isDone }, compareFunc) else compareBy(compareFunc)
|
||||||
ChecklistSortDirection.DESCENDING -> if(separateCheckedFromUnchecked) compareByDescending<ChecklistItem> { it.isDone }.thenByDescending(compareFunc) else compareByDescending(compareFunc)
|
ChecklistSortDirection.DESCENDING -> if (separateDoneFromUndone) compareByDescending<ChecklistItem> { it.isDone }.thenByDescending(compareFunc) else compareByDescending(
|
||||||
|
compareFunc
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,10 +72,10 @@
|
|||||||
</RadioGroup>
|
</RadioGroup>
|
||||||
|
|
||||||
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
<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_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/medium_margin"
|
android:layout_marginTop="@dimen/medium_margin"
|
||||||
android:text="@string/sort_separate_checked_from_unchecked" />
|
android:text="@string/sort_separate_done_from_undone" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -63,6 +63,9 @@
|
|||||||
<string name="add_new_checklist_items">Add new checklist items</string>
|
<string name="add_new_checklist_items">Add new checklist items</string>
|
||||||
<string name="checklist_is_empty">The checklist is empty</string>
|
<string name="checklist_is_empty">The checklist is empty</string>
|
||||||
<string name="remove_done_items">Remove done items</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 -->
|
<!-- Import / Export -->
|
||||||
<string name="export_all_notes">Export all notes as files</string>
|
<string name="export_all_notes">Export all notes as files</string>
|
||||||
@ -109,9 +112,6 @@
|
|||||||
<b>Reddit:</b>
|
<b>Reddit:</b>
|
||||||
https://www.reddit.com/r/SimpleMobileTools
|
https://www.reddit.com/r/SimpleMobileTools
|
||||||
</string>
|
</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
|
Haven't found some strings? There's more at
|
||||||
|
Loading…
x
Reference in New Issue
Block a user