Add RecycleBin at Bottom sort option

This commit is contained in:
J-Jamet
2019-08-17 17:11:06 +02:00
parent 18f8fe7cc3
commit 4a28802b02
3 changed files with 50 additions and 37 deletions

View File

@@ -25,6 +25,7 @@ import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.activities.stylish.StylishFragment import com.kunzisoft.keepass.activities.stylish.StylishFragment
import com.kunzisoft.keepass.activities.helpers.ReadOnlyHelper import com.kunzisoft.keepass.activities.helpers.ReadOnlyHelper
import com.kunzisoft.keepass.database.element.Database
class ListNodesFragment : StylishFragment(), SortDialogFragment.SortSelectionListener { class ListNodesFragment : StylishFragment(), SortDialogFragment.SortSelectionListener {
@@ -205,24 +206,20 @@ class ListNodesFragment : StylishFragment(), SortDialogFragment.SortSelectionLis
R.id.menu_sort -> { R.id.menu_sort -> {
context?.let { context -> context?.let { context ->
val sortDialogFragment: SortDialogFragment val sortDialogFragment: SortDialogFragment =
if (Database.getInstance().isRecycleBinAvailable
/* && Database.getInstance().isRecycleBinEnabled) {
// TODO Recycle bin bottom
if (database.isRecycleBinAvailable() && database.isRecycleBinEnabled()) {
sortDialogFragment =
SortDialogFragment.getInstance( SortDialogFragment.getInstance(
PrefsUtil.getListSort(this), PreferencesUtil.getListSort(context),
PrefsUtil.getAscendingSort(this), PreferencesUtil.getAscendingSort(context),
PrefsUtil.getGroupsBeforeSort(this), PreferencesUtil.getGroupsBeforeSort(context),
PrefsUtil.getRecycleBinBottomSort(this)); PreferencesUtil.getRecycleBinBottomSort(context))
} else { } else {
*/ SortDialogFragment.getInstance(
sortDialogFragment = SortDialogFragment.getInstance( PreferencesUtil.getListSort(context),
PreferencesUtil.getListSort(context), PreferencesUtil.getAscendingSort(context),
PreferencesUtil.getAscendingSort(context), PreferencesUtil.getGroupsBeforeSort(context))
PreferencesUtil.getGroupsBeforeSort(context)) }
//}
sortDialogFragment.show(childFragmentManager, "sortDialog") sortDialogFragment.show(childFragmentManager, "sortDialog")
} }

View File

@@ -48,9 +48,10 @@ class NodeAdapter
private var textSize: Float = 0.toFloat() private var textSize: Float = 0.toFloat()
private var subtextSize: Float = 0.toFloat() private var subtextSize: Float = 0.toFloat()
private var iconSize: Float = 0.toFloat() private var iconSize: Float = 0.toFloat()
private var listSort: SortNodeEnum? = null private var listSort: SortNodeEnum = SortNodeEnum.DB
private var groupsBeforeSort: Boolean = false private var ascendingSort: Boolean = true
private var ascendingSort: Boolean = false private var groupsBeforeSort: Boolean = true
private var recycleBinBottomSort: Boolean = true
private var showUserNames: Boolean = false private var showUserNames: Boolean = false
private var nodeClickCallback: NodeClickCallback? = null private var nodeClickCallback: NodeClickCallback? = null
@@ -79,7 +80,7 @@ class NodeAdapter
this.nodeSortedList = SortedList(NodeVersioned::class.java, object : SortedListAdapterCallback<NodeVersioned>(this) { this.nodeSortedList = SortedList(NodeVersioned::class.java, object : SortedListAdapterCallback<NodeVersioned>(this) {
override fun compare(item1: NodeVersioned, item2: NodeVersioned): Int { override fun compare(item1: NodeVersioned, item2: NodeVersioned): Int {
return listSort?.getNodeComparator(ascendingSort, groupsBeforeSort)?.compare(item1, item2) ?: 0 return listSort.getNodeComparator(ascendingSort, groupsBeforeSort, recycleBinBottomSort).compare(item1, item2)
} }
override fun areContentsTheSame(oldItem: NodeVersioned, newItem: NodeVersioned): Boolean { override fun areContentsTheSame(oldItem: NodeVersioned, newItem: NodeVersioned): Boolean {
@@ -124,8 +125,9 @@ class NodeAdapter
val iconDefaultSize = context.resources.getDimension(R.dimen.list_icon_size_default) val iconDefaultSize = context.resources.getDimension(R.dimen.list_icon_size_default)
this.iconSize = iconDefaultSize * textSize / textSizeDefault this.iconSize = iconDefaultSize * textSize / textSizeDefault
this.listSort = PreferencesUtil.getListSort(context) this.listSort = PreferencesUtil.getListSort(context)
this.groupsBeforeSort = PreferencesUtil.getGroupsBeforeSort(context)
this.ascendingSort = PreferencesUtil.getAscendingSort(context) this.ascendingSort = PreferencesUtil.getAscendingSort(context)
this.groupsBeforeSort = PreferencesUtil.getGroupsBeforeSort(context)
this.recycleBinBottomSort = PreferencesUtil.getRecycleBinBottomSort(context)
this.showUserNames = PreferencesUtil.showUsernamesListEntries(context) this.showUserNames = PreferencesUtil.showUsernamesListEntries(context)
} }

View File

@@ -29,18 +29,18 @@ import java.util.*
enum class SortNodeEnum { enum class SortNodeEnum {
DB, TITLE, USERNAME, CREATION_TIME, LAST_MODIFY_TIME, LAST_ACCESS_TIME; DB, TITLE, USERNAME, CREATION_TIME, LAST_MODIFY_TIME, LAST_ACCESS_TIME;
fun getNodeComparator(ascending: Boolean, groupsBefore: Boolean): Comparator<NodeVersioned> { fun getNodeComparator(ascending: Boolean, groupsBefore: Boolean, recycleBinBottom: Boolean): Comparator<NodeVersioned> {
return when (this) { return when (this) {
DB -> NodeNaturalComparator(ascending, groupsBefore) DB -> NodeNaturalComparator(ascending, groupsBefore, recycleBinBottom)
TITLE -> NodeTitleComparator(ascending, groupsBefore) TITLE -> NodeTitleComparator(ascending, groupsBefore, recycleBinBottom)
USERNAME -> NodeUsernameComparator(ascending, groupsBefore) USERNAME -> NodeUsernameComparator(ascending, groupsBefore, recycleBinBottom)
CREATION_TIME -> NodeCreationComparator(ascending, groupsBefore) CREATION_TIME -> NodeCreationComparator(ascending, groupsBefore, recycleBinBottom)
LAST_MODIFY_TIME -> NodeLastModificationComparator(ascending, groupsBefore) LAST_MODIFY_TIME -> NodeLastModificationComparator(ascending, groupsBefore, recycleBinBottom)
LAST_ACCESS_TIME -> NodeLastAccessComparator(ascending, groupsBefore) LAST_ACCESS_TIME -> NodeLastAccessComparator(ascending, groupsBefore, recycleBinBottom)
} }
} }
abstract class NodeComparator(var ascending: Boolean, var groupsBefore: Boolean) : Comparator<NodeVersioned> { abstract class NodeComparator(var ascending: Boolean, var groupsBefore: Boolean, var recycleBinBottom: Boolean) : Comparator<NodeVersioned> {
abstract fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int abstract fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int
@@ -58,6 +58,14 @@ enum class SortNodeEnum {
if (object1.type == Type.GROUP) { if (object1.type == Type.GROUP) {
return if (object2.type == Type.GROUP) { return if (object2.type == Type.GROUP) {
// RecycleBin at end of groups
if (recycleBinBottom) {
if (Database.getInstance().recycleBin == object1)
return 1
if (Database.getInstance().recycleBin == object2)
return -1
}
specificOrderOrHashIfEquals(object1, object2) specificOrderOrHashIfEquals(object1, object2)
} else if (object2.type == Type.ENTRY) { } else if (object2.type == Type.ENTRY) {
if (groupsBefore) if (groupsBefore)
@@ -88,7 +96,8 @@ enum class SortNodeEnum {
/** /**
* Comparator of node by natural database placement * Comparator of node by natural database placement
*/ */
class NodeNaturalComparator(ascending: Boolean, groupsBefore: Boolean) : NodeComparator(ascending, groupsBefore) { class NodeNaturalComparator(ascending: Boolean, groupsBefore: Boolean, recycleBinBottom: Boolean)
: NodeComparator(ascending, groupsBefore, recycleBinBottom) {
override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int { override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int {
return object1.nodePositionInParent.compareTo(object2.nodePositionInParent) return object1.nodePositionInParent.compareTo(object2.nodePositionInParent)
@@ -98,7 +107,8 @@ enum class SortNodeEnum {
/** /**
* Comparator of Node by Title * Comparator of Node by Title
*/ */
class NodeTitleComparator(ascending: Boolean, groupsBefore: Boolean) : NodeComparator(ascending, groupsBefore) { class NodeTitleComparator(ascending: Boolean, groupsBefore: Boolean, recycleBinBottom: Boolean)
: NodeComparator(ascending, groupsBefore, recycleBinBottom) {
override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int { override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int {
return object1.title.compareTo(object2.title, ignoreCase = true) return object1.title.compareTo(object2.title, ignoreCase = true)
@@ -108,7 +118,8 @@ enum class SortNodeEnum {
/** /**
* Comparator of Node by Username, Groups by title * Comparator of Node by Username, Groups by title
*/ */
class NodeUsernameComparator(ascending: Boolean, groupsBefore: Boolean) : NodeComparator(ascending, groupsBefore) { class NodeUsernameComparator(ascending: Boolean, groupsBefore: Boolean, recycleBinBottom: Boolean)
: NodeComparator(ascending, groupsBefore, recycleBinBottom) {
override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int { override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int {
if (object1.type == Type.ENTRY && object2.type == Type.ENTRY) { if (object1.type == Type.ENTRY && object2.type == Type.ENTRY) {
@@ -117,14 +128,15 @@ enum class SortNodeEnum {
.compareTo((object2 as EntryVersioned).getEntryInfo(Database.getInstance()).username, .compareTo((object2 as EntryVersioned).getEntryInfo(Database.getInstance()).username,
ignoreCase = true) ignoreCase = true)
} }
return NodeTitleComparator(ascending, groupsBefore).compare(object1, object2) return NodeTitleComparator(ascending, groupsBefore, recycleBinBottom).compare(object1, object2)
} }
} }
/** /**
* Comparator of node by creation * Comparator of node by creation
*/ */
class NodeCreationComparator(ascending: Boolean, groupsBefore: Boolean) : NodeComparator(ascending, groupsBefore) { class NodeCreationComparator(ascending: Boolean, groupsBefore: Boolean, recycleBinBottom: Boolean)
: NodeComparator(ascending, groupsBefore, recycleBinBottom) {
override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int { override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int {
return object1.creationTime.date return object1.creationTime.date
@@ -135,7 +147,8 @@ enum class SortNodeEnum {
/** /**
* Comparator of node by last modification * Comparator of node by last modification
*/ */
class NodeLastModificationComparator(ascending: Boolean, groupsBefore: Boolean) : NodeComparator(ascending, groupsBefore) { class NodeLastModificationComparator(ascending: Boolean, groupsBefore: Boolean, recycleBinBottom: Boolean)
: NodeComparator(ascending, groupsBefore, recycleBinBottom) {
override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int { override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int {
return object1.lastModificationTime.date return object1.lastModificationTime.date
@@ -146,7 +159,8 @@ enum class SortNodeEnum {
/** /**
* Comparator of node by last access * Comparator of node by last access
*/ */
class NodeLastAccessComparator(ascending: Boolean, groupsBefore: Boolean) : NodeComparator(ascending, groupsBefore) { class NodeLastAccessComparator(ascending: Boolean, groupsBefore: Boolean, recycleBinBottom: Boolean)
: NodeComparator(ascending, groupsBefore, recycleBinBottom) {
override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int { override fun compareBySpecificOrder(object1: NodeVersioned, object2: NodeVersioned): Int {
return object1.lastAccessTime.date return object1.lastAccessTime.date