mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Add RecycleBin at Bottom sort option
This commit is contained in:
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user