diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index 28124050d..d0da88770 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -111,7 +111,7 @@ class EntryEditActivity : LockingHideActivity(), // Create a copy to modify mNewEntry = EntryVersioned(entry).also { newEntry -> // WARNING Remove the parent to keep memory with parcelable - newEntry.parent = null + newEntry.removeParent() } } } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt index 54836e296..0e345e0bb 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -749,11 +749,15 @@ class GroupActivity : LockingActivity(), // If update add new elements mOldGroupToUpdate?.let { oldGroupToUpdate -> GroupVersioned(oldGroupToUpdate).let { updateGroup -> - updateGroup.title = name - // TODO custom icon - updateGroup.icon = icon + updateGroup.apply { + // WARNING remove parent and children to keep memory + removeParent() + removeChildren() + + title = name + this.icon = icon // TODO custom icon + } - mListNodesFragment?.removeNode(oldGroupToUpdate) // If group updated save it in the database progressDialogThread?.startDatabaseUpdateGroup( oldGroupToUpdate, updateGroup, !mReadOnly) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt index a6529a969..b96ccfdfc 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateEntryRunnable.kt @@ -38,7 +38,7 @@ class UpdateEntryRunnable constructor( override fun nodeAction() { // WARNING : Re attribute parent removed in entry edit activity to save memory - mNewEntry.parent = mOldEntry.parent + mNewEntry.addParentFrom(mOldEntry) // Update entry with new values mOldEntry.updateWith(mNewEntry) @@ -46,10 +46,9 @@ class UpdateEntryRunnable constructor( // Create an entry history (an entry history don't have history) mOldEntry.addEntryToHistory(EntryVersioned(mBackupEntryHistory, copyHistory = false)) - database.removeOldestHistory(mOldEntry) - // Only change data un index + // Only change data in index database.updateEntry(mOldEntry) } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateGroupRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateGroupRunnable.kt index 60cab4804..ed270b7cd 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateGroupRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/node/UpdateGroupRunnable.kt @@ -37,11 +37,15 @@ class UpdateGroupRunnable constructor( private val mBackupGroup: GroupVersioned = GroupVersioned(mOldGroup) override fun nodeAction() { + // WARNING : Re attribute parent and children removed in group activity to save memory + mNewGroup.addParentFrom(mOldGroup) + mNewGroup.addChildrenFrom(mOldGroup) + // Update group with new values mOldGroup.updateWith(mNewGroup) mOldGroup.touch(modified = true, touchParents = true) - // Only change data un index + // Only change data in index database.updateGroup(mOldGroup) } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/GroupVersioned.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/GroupVersioned.kt index acefc0bfc..5737738a4 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/GroupVersioned.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/GroupVersioned.kt @@ -114,6 +114,38 @@ class GroupVersioned : NodeVersioned, PwGroupInterface + pwGroupV3?.addChildEntry(entryToAdd) + } + group.pwGroupV3?.getChildGroups()?.forEach { groupToAdd -> + pwGroupV3?.addChildGroup(groupToAdd) + } + + group.pwGroupV4?.getChildEntries()?.forEach { entryToAdd -> + pwGroupV4?.addChildEntry(entryToAdd) + } + group.pwGroupV4?.getChildGroups()?.forEach { groupToAdd -> + pwGroupV4?.addChildGroup(groupToAdd) + } + } + + fun removeChildren() { + pwGroupV3?.getChildEntries()?.forEach { entryToRemove -> + pwGroupV3?.removeChildEntry(entryToRemove) + } + pwGroupV3?.getChildGroups()?.forEach { groupToRemove -> + pwGroupV3?.removeChildGroup(groupToRemove) + } + + pwGroupV4?.getChildEntries()?.forEach { entryToRemove -> + pwGroupV4?.removeChildEntry(entryToRemove) + } + pwGroupV4?.getChildGroups()?.forEach { groupToRemove -> + pwGroupV4?.removeChildGroup(groupToRemove) + } + } + override fun touch(modified: Boolean, touchParents: Boolean) { pwGroupV3?.touch(modified, touchParents) pwGroupV4?.touch(modified, touchParents) diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/NodeVersioned.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/NodeVersioned.kt index ad9ef6d74..f231245f8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/NodeVersioned.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/NodeVersioned.kt @@ -14,6 +14,14 @@ interface NodeVersioned: PwNodeInterface { } return -1 } + + fun addParentFrom(node: NodeVersioned) { + parent = node.parent + } + + fun removeParent() { + parent = null + } } /**