diff --git a/CHANGELOG b/CHANGELOG index fbf1229e7..cb39b64e0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +KeepassDX (2.5.0.0beta20) + * Fix nested groups no longer visible in V1 databases + KeepassDX (2.5.0.0beta20) * Fix a major bug that displays an entry history diff --git a/app/build.gradle b/app/build.gradle index f1eed1aeb..b0b10d4f7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "com.kunzisoft.keepass" minSdkVersion 14 targetSdkVersion 27 - versionCode = 20 - versionName = "2.5.0.0beta20" + versionCode = 21 + versionName = "2.5.0.0beta21" multiDexEnabled true testApplicationId = "com.kunzisoft.keepass.tests" diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/PwDatabaseV3.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/PwDatabaseV3.kt index cd56208c7..c1e68a3b4 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/PwDatabaseV3.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/PwDatabaseV3.kt @@ -27,7 +27,6 @@ import java.io.InputStream import java.security.DigestOutputStream import java.security.MessageDigest import java.security.NoSuchAlgorithmException -import java.util.* /** * @author Naomaru Itoi @phoneid.org> @@ -76,50 +75,44 @@ class PwDatabaseV3 : PwDatabase() { numKeyEncRounds = DEFAULT_ENCRYPTION_ROUNDS } - private fun assignGroupsChildren(parent: PwGroupV3) { - val levelToCheck = parent.level + 1 - var startFromParentPosition = false - for (groupToCheck in getGroupIndexes()) { - rootGroup?.let { root -> - if (root.nodeId == parent.nodeId || groupToCheck.nodeId == parent.nodeId) { - startFromParentPosition = true - } - } - if (startFromParentPosition) { - if (groupToCheck.level < levelToCheck) - break - else if (groupToCheck.level == levelToCheck) - parent.addChildGroup(groupToCheck) - } + private fun buildTreeGroups(previousGroup: PwGroupV3, currentGroup: PwGroupV3, groupIterator: Iterator) { + + if (currentGroup.parent == null && (previousGroup.level + 1) == currentGroup.level) { + // Current group has an increment level compare to the previous, current group is a child + previousGroup.addChildGroup(currentGroup) + currentGroup.parent = previousGroup + } else if (previousGroup.parent != null && previousGroup.level == currentGroup.level) { + // In the same level, previous parent is the same as previous group + previousGroup.parent!!.addChildGroup(currentGroup) + currentGroup.parent = previousGroup.parent + } else if (previousGroup.parent != null) { + // Previous group has a higher level than the current group, check it's parent + buildTreeGroups(previousGroup.parent!!, currentGroup, groupIterator) } - } - private fun assignEntriesChildren(parent: PwGroupV3) { - for (entry in getEntryIndexes()) { - if (entry.parent!!.nodeId == parent.nodeId) - parent.addChildEntry(entry) - } - } - - private fun constructTreeFromIndex(currentGroup: PwGroupV3) { - - assignGroupsChildren(currentGroup) - assignEntriesChildren(currentGroup) - - // set parent in child entries (normally useless but to be sure or to update parent metadata) - for (childEntry in currentGroup.getChildEntries()) { - childEntry.parent = currentGroup - } - // recursively construct child groups - for (childGroup in currentGroup.getChildGroups()) { - childGroup.parent = currentGroup - constructTreeFromIndex(childGroup) + // Next current group + if (groupIterator.hasNext()){ + buildTreeGroups(currentGroup, groupIterator.next(), groupIterator) } } fun constructTreeFromIndex() { rootGroup?.let { - constructTreeFromIndex(it) + + // add each group + val groupIterator = getGroupIndexes().iterator() + if (groupIterator.hasNext()) + buildTreeGroups(it, groupIterator.next(), groupIterator) + + // add each child + for (currentEntry in getEntryIndexes()) { + if (currentEntry.parent != null) { + // Only the parent id is known so complete the info + val parentGroupRetrieve = getGroupById(currentEntry.parent!!.nodeId) + parentGroupRetrieve?.addChildEntry(currentEntry) + currentEntry.parent = parentGroupRetrieve + } + } } } diff --git a/fastlane/metadata/android/en-US/changelogs/21.txt b/fastlane/metadata/android/en-US/changelogs/21.txt new file mode 100644 index 000000000..6cf34ea25 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/21.txt @@ -0,0 +1,9 @@ + * Add lock button always visible + * New connection workflow + * Code refactored in Kotlin + * Better notification implementation + * Better views for large screen + * Magikeyboard enhancement + * Fix Recycle Bin + * Fix memory when load database + * Fix bugs that displays bad entries and groups (2.5.0.0beta19-20) \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/21.txt b/fastlane/metadata/android/fr-FR/changelogs/21.txt new file mode 100644 index 000000000..f703e3393 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/21.txt @@ -0,0 +1,9 @@ + * Ajout du bouton de lock toujours visible + * Nouveau workflow de connexion + * Code refactorisé en Kotlin + * Meilleure implementation des notifications + * Meilleures vues pour les écrans larges + * Amélioration du Magikeyboard + * Correction de la Corbeille + * Correction de la mémoire lors du chargement de base de données + * Correction de bugs d'affichage des entrée et groupes (2.5.0.0beta19-20) \ No newline at end of file