diff --git a/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt b/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt index ac8c74c53..0a54ac1ba 100644 --- a/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt +++ b/app/src/main/java/com/kunzisoft/keepass/adapters/NodeAdapter.kt @@ -262,7 +262,7 @@ class NodeAdapter (private val context: Context, */ fun notifyChangeSort(sortNodeEnum: SortNodeEnum, sortNodeParameters: SortNodeEnum.SortNodeParameters) { - this.mNodeComparator = sortNodeEnum.getNodeComparator(sortNodeParameters) + this.mNodeComparator = sortNodeEnum.getNodeComparator(database, sortNodeParameters) } override fun getItemViewType(position: Int): Int { diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/SortNodeEnum.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/SortNodeEnum.kt index 739cc0e8f..c854e55d3 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/SortNodeEnum.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/SortNodeEnum.kt @@ -28,15 +28,17 @@ import java.util.* enum class SortNodeEnum { DB, TITLE, USERNAME, CREATION_TIME, LAST_MODIFY_TIME, LAST_ACCESS_TIME; - fun > getNodeComparator(sortNodeParameters: SortNodeParameters) + fun > getNodeComparator( + database: Database, + sortNodeParameters: SortNodeParameters) : Comparator> { return when (this) { - DB -> NodeNaturalComparator(sortNodeParameters) // Force false because natural order contains recycle bin - TITLE -> NodeTitleComparator(sortNodeParameters) - USERNAME -> NodeUsernameComparator(sortNodeParameters) - CREATION_TIME -> NodeCreationComparator(sortNodeParameters) - LAST_MODIFY_TIME -> NodeLastModificationComparator(sortNodeParameters) - LAST_ACCESS_TIME -> NodeLastAccessComparator(sortNodeParameters) + DB -> NodeNaturalComparator(database, sortNodeParameters) // Force false because natural order contains recycle bin + TITLE -> NodeTitleComparator(database, sortNodeParameters) + USERNAME -> NodeUsernameComparator(database, sortNodeParameters) + CREATION_TIME -> NodeCreationComparator(database, sortNodeParameters) + LAST_MODIFY_TIME -> NodeLastModificationComparator(database, sortNodeParameters) + LAST_ACCESS_TIME -> NodeLastAccessComparator(database, sortNodeParameters) } } @@ -48,11 +50,9 @@ enum class SortNodeEnum { < G: GroupVersionedInterface<*, *>, T: NodeVersionedInterface - >(var sortNodeParameters: SortNodeParameters) + >(var database: Database, var sortNodeParameters: SortNodeParameters) : Comparator { - val database = Database.getInstance() - abstract fun compareBySpecificOrder(object1: T, object2: T): Int private fun specificOrderOrHashIfEquals(object1: T, object2: T): Int { @@ -110,8 +110,9 @@ enum class SortNodeEnum { * Comparator of node by natural database placement */ class NodeNaturalComparator, T: NodeVersionedInterface>( + database: Database, sortNodeParameters: SortNodeParameters) - : NodeComparator(sortNodeParameters) { + : NodeComparator(database, sortNodeParameters) { override fun compareBySpecificOrder(object1: T, object2: T): Int { return object1.nodeIndexInParentForNaturalOrder() @@ -123,13 +124,14 @@ enum class SortNodeEnum { * Comparator of Node by Title */ class NodeTitleComparator, T: NodeVersionedInterface>( + database: Database, sortNodeParameters: SortNodeParameters) - : NodeComparator(sortNodeParameters) { + : NodeComparator(database, sortNodeParameters) { override fun compareBySpecificOrder(object1: T, object2: T): Int { val titleCompare = object1.title.compareTo(object2.title, ignoreCase = true) return if (titleCompare == 0) - NodeNaturalComparator(sortNodeParameters) + NodeNaturalComparator(database, sortNodeParameters) .compare(object1, object2) else titleCompare @@ -140,8 +142,9 @@ enum class SortNodeEnum { * Comparator of Node by Username, Groups by title */ class NodeUsernameComparator, T: NodeVersionedInterface>( + database: Database, sortNodeParameters: SortNodeParameters) - : NodeComparator(sortNodeParameters) { + : NodeComparator(database, sortNodeParameters) { override fun compareBySpecificOrder(object1: T, object2: T): Int { return if (object1.type == Type.ENTRY && object2.type == Type.ENTRY) { @@ -150,12 +153,12 @@ enum class SortNodeEnum { .compareTo((object2 as Entry).getEntryInfo(database).username, ignoreCase = true) if (usernameCompare == 0) - NodeTitleComparator(sortNodeParameters) + NodeTitleComparator(database, sortNodeParameters) .compare(object1, object2) else usernameCompare } else { - NodeTitleComparator(sortNodeParameters) + NodeTitleComparator(database, sortNodeParameters) .compare(object1, object2) } } @@ -165,14 +168,15 @@ enum class SortNodeEnum { * Comparator of node by creation */ class NodeCreationComparator, T: NodeVersionedInterface>( + database: Database, sortNodeParameters: SortNodeParameters) - : NodeComparator(sortNodeParameters) { + : NodeComparator(database, sortNodeParameters) { override fun compareBySpecificOrder(object1: T, object2: T): Int { val creationCompare = object1.creationTime.date .compareTo(object2.creationTime.date) return if (creationCompare == 0) - NodeNaturalComparator(sortNodeParameters) + NodeNaturalComparator(database, sortNodeParameters) .compare(object1, object2) else creationCompare @@ -183,14 +187,15 @@ enum class SortNodeEnum { * Comparator of node by last modification */ class NodeLastModificationComparator, T: NodeVersionedInterface>( + database: Database, sortNodeParameters: SortNodeParameters) - : NodeComparator(sortNodeParameters) { + : NodeComparator(database, sortNodeParameters) { override fun compareBySpecificOrder(object1: T, object2: T): Int { val lastModificationCompare = object1.lastModificationTime.date .compareTo(object2.lastModificationTime.date) return if (lastModificationCompare == 0) - NodeNaturalComparator(sortNodeParameters) + NodeNaturalComparator(database, sortNodeParameters) .compare(object1, object2) else lastModificationCompare @@ -201,14 +206,15 @@ enum class SortNodeEnum { * Comparator of node by last access */ class NodeLastAccessComparator, T: NodeVersionedInterface>( + database: Database, sortNodeParameters: SortNodeParameters) - : NodeComparator(sortNodeParameters) { + : NodeComparator(database, sortNodeParameters) { override fun compareBySpecificOrder(object1: T, object2: T): Int { val lastAccessCompare = object1.lastAccessTime.date .compareTo(object2.lastAccessTime.date) return if (lastAccessCompare == 0) - NodeNaturalComparator(sortNodeParameters) + NodeNaturalComparator(database, sortNodeParameters) .compare(object1, object2) else lastAccessCompare diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/SettingsActivity.kt b/app/src/main/java/com/kunzisoft/keepass/settings/SettingsActivity.kt index ad77ee0ff..eae0a823d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/SettingsActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/SettingsActivity.kt @@ -68,7 +68,6 @@ open class SettingsActivity } override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) setContentView(R.layout.activity_toolbar) @@ -160,7 +159,7 @@ open class SettingsActivity } override fun onAssignKeyDialogPositiveClick(mainCredential: MainCredential) { - Database.getInstance().let { database -> + mDatabase?.let { database -> database.fileUri?.let { databaseUri -> // Show the progress dialog now or after dialog confirmation if (database.validatePasswordEncoding(mainCredential)) {