diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt index e604b7fbf..1d960f64d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt @@ -450,8 +450,8 @@ class Database { val isTemplatesEnabled: Boolean get() = mDatabaseKDBX?.isTemplatesGroupEnabled() ?: false - fun enableTemplates(enable: Boolean, resources: Resources) { - mDatabaseKDBX?.enableTemplatesGroup(enable, resources) + fun enableTemplates(enable: Boolean, templatesGroupName: String) { + mDatabaseKDBX?.enableTemplatesGroup(enable, templatesGroupName) } val templatesGroup: Group? diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt index 08b84bb91..e254f20a8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/database/DatabaseKDBX.kt @@ -46,7 +46,6 @@ import com.kunzisoft.keepass.database.element.node.NodeIdUUID import com.kunzisoft.keepass.database.element.node.NodeVersioned import com.kunzisoft.keepass.database.element.security.MemoryProtectionConfig import com.kunzisoft.keepass.database.element.template.Template -import com.kunzisoft.keepass.database.element.template.TemplateEngine import com.kunzisoft.keepass.database.element.template.TemplateEngineCompatible import com.kunzisoft.keepass.database.exception.UnknownKDF import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX.Companion.FILE_VERSION_31 @@ -134,7 +133,7 @@ class DatabaseKDBX : DatabaseVersioned { */ constructor(databaseName: String, rootName: String, - templateGroupName: String? = null) { + templatesGroupName: String? = null) { name = databaseName kdbxVersion = FILE_VERSION_31 val group = createGroup().apply { @@ -142,20 +141,10 @@ class DatabaseKDBX : DatabaseVersioned { icon.standard = getStandardIcon(IconImageStandard.FOLDER_ID) } rootGroup = group - if (templateGroupName != null) { - val templateGroup = createGroup().apply { - title = templateGroupName - icon.standard = getStandardIcon(IconImageStandard.BUILD_ID) - } - addGroupTo(templateGroup, rootGroup) - entryTemplatesGroup = templateGroup.id - - // Build default templates - TemplateEngine.getDefaults().forEach { defaultTemplate -> - mTemplateEngine.createTemplateEntry(defaultTemplate).also { - addEntryTo(it, templateGroup) - } - } + if (templatesGroupName != null) { + val templatesGroup = mTemplateEngine.createNewTemplatesGroup(templatesGroupName) + entryTemplatesGroup = templatesGroup.id + entryTemplatesGroupChanged = templatesGroup.lastModificationTime } } @@ -357,21 +346,16 @@ class DatabaseKDBX : DatabaseVersioned { return entryTemplatesGroup != UUID_ZERO } - fun enableTemplatesGroup(enable: Boolean, resources: Resources) { + fun enableTemplatesGroup(enable: Boolean, templatesGroupName: String) { // Create templates group only if a group with a valid name don't already exists val firstGroupWithValidName = getGroupIndexes().firstOrNull { - it.title == TemplateEngine.getDefaultTemplateGroupName(resources) + it.title == templatesGroupName } if (enable) { - val uuidTemplatesGroup = if (firstGroupWithValidName == null) { - val newUuidTemplatesGroup = mTemplateEngine.createNewTemplatesGroup(resources) - addGroupTo(newUuidTemplatesGroup, rootGroup) - newUuidTemplatesGroup - } else { - firstGroupWithValidName - } - entryTemplatesGroup = uuidTemplatesGroup.id - entryTemplatesGroupChanged = uuidTemplatesGroup.lastModificationTime + val templatesGroup = firstGroupWithValidName + ?: mTemplateEngine.createNewTemplatesGroup(templatesGroupName) + entryTemplatesGroup = templatesGroup.id + entryTemplatesGroupChanged = templatesGroup.lastModificationTime } else { removeTemplatesGroup() } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/template/TemplateEngine.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/template/TemplateEngine.kt index 951a44eca..f9d07c032 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/template/TemplateEngine.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/template/TemplateEngine.kt @@ -42,14 +42,22 @@ abstract class TemplateEngine(private val mDatabase: DatabaseKDBX) { return Template(CREATION) } - fun createNewTemplatesGroup(resources: Resources): GroupKDBX { - return mDatabase.createGroup().apply { - title = getDefaultTemplateGroupName(resources) - icon.standard = mDatabase.getStandardIcon(IconImageStandard.FOLDER_ID) + fun createNewTemplatesGroup(templatesGroupName: String): GroupKDBX { + val newTemplatesGroup = mDatabase.createGroup().apply { + title = templatesGroupName + icon.standard = mDatabase.getStandardIcon(IconImageStandard.BUILD_ID) enableAutoType = false enableSearching = false isExpanded = false } + mDatabase.addGroupTo(newTemplatesGroup, mDatabase.rootGroup) + // Build default templates + getDefaults().forEach { defaultTemplate -> + createTemplateEntry(defaultTemplate).also { + mDatabase.addEntryTo(it, newTemplatesGroup) + } + } + return newTemplatesGroup } fun clearCache() { diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt b/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt index dfbdbb0a1..a276c0c3d 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/NestedDatabaseSettingsFragment.kt @@ -38,6 +38,7 @@ import com.kunzisoft.keepass.database.crypto.kdf.KdfEngine import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Group import com.kunzisoft.keepass.database.element.database.CompressionAlgorithm +import com.kunzisoft.keepass.database.element.template.TemplateEngine import com.kunzisoft.keepass.services.DatabaseTaskNotificationService import com.kunzisoft.keepass.settings.preference.* import com.kunzisoft.keepass.settings.preferencedialogfragment.* @@ -247,7 +248,9 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev isEnabled = if (!mDatabaseReadOnly) { setOnPreferenceChangeListener { _, newValue -> val templatesEnabled = newValue as Boolean - database.enableTemplates(templatesEnabled, resources) + database.enableTemplates(templatesEnabled, + TemplateEngine.getDefaultTemplateGroupName(resources) + ) refreshTemplatesGroup(database) // Save the database if not in readonly mode saveDatabase(mDatabaseAutoSaveEnabled) @@ -258,7 +261,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev false } } - // Recycle Bin group + // Refresh templates group refreshTemplatesGroup(database) } else { templatesGroupPrefCategory?.isVisible = false