Refactor TemplateField and Template name as resource

This commit is contained in:
J-Jamet
2021-06-02 11:40:44 +02:00
parent b6a5f43176
commit c196cdf405
11 changed files with 67 additions and 39 deletions

View File

@@ -50,7 +50,7 @@ import com.kunzisoft.keepass.database.element.node.NodeId
import com.kunzisoft.keepass.database.element.template.TemplateEngine import com.kunzisoft.keepass.database.element.template.TemplateEngine
import com.kunzisoft.keepass.education.EntryActivityEducation import com.kunzisoft.keepass.education.EntryActivityEducation
import com.kunzisoft.keepass.magikeyboard.MagikIME import com.kunzisoft.keepass.magikeyboard.MagikIME
import com.kunzisoft.keepass.database.element.template.TemplatesFields import com.kunzisoft.keepass.database.element.template.TemplateField
import com.kunzisoft.keepass.model.EntryAttachmentState import com.kunzisoft.keepass.model.EntryAttachmentState
import com.kunzisoft.keepass.model.StreamDirection import com.kunzisoft.keepass.model.StreamDirection
import com.kunzisoft.keepass.otp.OtpEntryFields import com.kunzisoft.keepass.otp.OtpEntryFields
@@ -337,7 +337,7 @@ class EntryActivity : LockingActivity() {
clipboardHelper?.timeoutCopyToClipboard( clipboardHelper?.timeoutCopyToClipboard(
value.toString(), value.toString(),
getString(R.string.copy_field, getString(R.string.copy_field,
TemplatesFields.getLocalizedName(applicationContext, field.name)) TemplateField.getLocalizedName(applicationContext, field.name))
) )
} }
} else { } else {

View File

@@ -42,12 +42,12 @@ import com.kunzisoft.keepass.database.element.DateInstant
import com.kunzisoft.keepass.database.element.icon.IconImage import com.kunzisoft.keepass.database.element.icon.IconImage
import com.kunzisoft.keepass.database.element.security.ProtectedString import com.kunzisoft.keepass.database.element.security.ProtectedString
import com.kunzisoft.keepass.database.element.template.* import com.kunzisoft.keepass.database.element.template.*
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_EXPIRATION import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_EXPIRATION
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_NOTES import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_NOTES
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_PASSWORD import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_PASSWORD
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_TITLE import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_TITLE
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_URL import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_URL
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_USERNAME import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_USERNAME
import com.kunzisoft.keepass.education.EntryEditActivityEducation import com.kunzisoft.keepass.education.EntryEditActivityEducation
import com.kunzisoft.keepass.icons.IconDrawableFactory import com.kunzisoft.keepass.icons.IconDrawableFactory
import com.kunzisoft.keepass.model.* import com.kunzisoft.keepass.model.*
@@ -354,7 +354,7 @@ class EntryEditFragment : StylishFragment() {
// Add an action icon if needed // Add an action icon if needed
return context?.let { return context?.let {
EntryEditFieldView(it).apply { EntryEditFieldView(it).apply {
label = TemplatesFields.getLocalizedName(context, field.name) label = TemplateField.getLocalizedName(context, field.name)
setProtection(field.protectedValue.isProtected, mHideProtectedValue) setProtection(field.protectedValue.isProtected, mHideProtectedValue)
setValue(field.protectedValue.toString(), when (templateAttribute.type) { setValue(field.protectedValue.toString(), when (templateAttribute.type) {
TemplateAttributeType.MULTILINE -> EntryEditFieldView.TextType.MULTI_LINE TemplateAttributeType.MULTILINE -> EntryEditFieldView.TextType.MULTI_LINE
@@ -387,7 +387,7 @@ class EntryEditFragment : StylishFragment() {
field: Field): View? { field: Field): View? {
return context?.let { return context?.let {
DateTimeView(it).apply { DateTimeView(it).apply {
label = TemplatesFields.getLocalizedName(context, field.name) label = TemplateField.getLocalizedName(context, field.name)
try { try {
val value = field.protectedValue.toString() val value = field.protectedValue.toString()
activation = value.trim().isNotEmpty() activation = value.trim().isNotEmpty()
@@ -450,7 +450,7 @@ class EntryEditFragment : StylishFragment() {
}.toMutableList().also { customFields -> }.toMutableList().also { customFields ->
// Add template field // Add template field
if (mTemplate != Template.STANDARD) { if (mTemplate != Template.STANDARD) {
TemplatesFields.getTemplateUUIDField(mTemplate)?.let { templateField -> TemplateField.getTemplateUUIDField(mTemplate)?.let { templateField ->
customFields.add(templateField) customFields.add(templateField)
} }
} }
@@ -537,7 +537,7 @@ class EntryEditFragment : StylishFragment() {
private data class FieldId(var viewId: Int, var protected: Boolean) private data class FieldId(var viewId: Int, var protected: Boolean)
private fun isStandardFieldName(name: String): Boolean { private fun isStandardFieldName(name: String): Boolean {
return TemplatesFields.isStandardFieldName(name) return TemplateField.isStandardFieldName(name)
} }
private fun containsCustomFieldName(name: String): Boolean { private fun containsCustomFieldName(name: String): Boolean {

View File

@@ -48,7 +48,7 @@ import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.icon.IconImage import com.kunzisoft.keepass.database.element.icon.IconImage
import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.EntryInfo
import com.kunzisoft.keepass.model.SearchInfo import com.kunzisoft.keepass.model.SearchInfo
import com.kunzisoft.keepass.database.element.template.TemplatesFields import com.kunzisoft.keepass.database.element.template.TemplateField
import com.kunzisoft.keepass.settings.AutofillSettingsActivity import com.kunzisoft.keepass.settings.AutofillSettingsActivity
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import java.util.* import java.util.*
@@ -175,17 +175,17 @@ object AutofillHelper {
} }
} }
for (field in entryInfo.customFields) { for (field in entryInfo.customFields) {
if (field.name == TemplatesFields.CREDIT_CARD_CARDHOLDER) { if (field.name == TemplateField.CREDIT_CARD_CARDHOLDER) {
struct.ccNameId?.let { ccNameId -> struct.ccNameId?.let { ccNameId ->
builder.setValue(ccNameId, AutofillValue.forText(field.protectedValue.stringValue)) builder.setValue(ccNameId, AutofillValue.forText(field.protectedValue.stringValue))
} }
} }
if (field.name == TemplatesFields.CREDIT_CARD_NUMBER) { if (field.name == TemplateField.CREDIT_CARD_NUMBER) {
struct.ccnId?.let { ccnId -> struct.ccnId?.let { ccnId ->
builder.setValue(ccnId, AutofillValue.forText(field.protectedValue.stringValue)) builder.setValue(ccnId, AutofillValue.forText(field.protectedValue.stringValue))
} }
} }
if (field.name == TemplatesFields.CREDIT_CARD_CVV) { if (field.name == TemplateField.CREDIT_CARD_CVV) {
struct.cvvId?.let { cvvId -> struct.cvvId?.let { cvvId ->
builder.setValue(cvvId, AutofillValue.forText(field.protectedValue.stringValue)) builder.setValue(cvvId, AutofillValue.forText(field.protectedValue.stringValue))
} }

View File

@@ -388,8 +388,8 @@ class Database {
val isTemplatesEnabled: Boolean val isTemplatesEnabled: Boolean
get() = mDatabaseKDBX?.isTemplatesGroupEnabled() ?: false get() = mDatabaseKDBX?.isTemplatesGroupEnabled() ?: false
fun enableTemplates(enable: Boolean) { fun enableTemplates(enable: Boolean, resources: Resources) {
mDatabaseKDBX?.enableTemplatesGroup(enable) mDatabaseKDBX?.enableTemplatesGroup(enable, resources)
} }
val templatesGroup: Group? val templatesGroup: Group?

View File

@@ -339,10 +339,9 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
return entryTemplatesGroup != UUID_ZERO return entryTemplatesGroup != UUID_ZERO
} }
fun enableTemplatesGroup(enable: Boolean) { fun enableTemplatesGroup(enable: Boolean, resources: Resources) {
if (enable) { if (enable) {
val uuidTemplatesGroup = mTemplateEngine.createNewTemplatesGroup() val uuidTemplatesGroup = mTemplateEngine.createNewTemplatesGroup(resources)
addGroupTo(uuidTemplatesGroup, rootGroup) addGroupTo(uuidTemplatesGroup, rootGroup)
entryTemplatesGroup = uuidTemplatesGroup.id entryTemplatesGroup = uuidTemplatesGroup.id
entryTemplatesGroupChanged = uuidTemplatesGroup.lastModificationTime entryTemplatesGroupChanged = uuidTemplatesGroup.lastModificationTime

View File

@@ -23,11 +23,11 @@ import android.os.ParcelUuid
import android.os.Parcelable import android.os.Parcelable
import com.kunzisoft.keepass.database.element.database.DatabaseVersioned import com.kunzisoft.keepass.database.element.database.DatabaseVersioned
import com.kunzisoft.keepass.database.element.icon.IconImage import com.kunzisoft.keepass.database.element.icon.IconImage
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_EXPIRATION import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_EXPIRATION
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_NOTES import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_NOTES
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_PASSWORD import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_PASSWORD
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_URL import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_URL
import com.kunzisoft.keepass.database.element.template.TemplatesFields.STANDARD_USERNAME import com.kunzisoft.keepass.database.element.template.TemplateField.STANDARD_USERNAME
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList

View File

@@ -1,6 +1,8 @@
package com.kunzisoft.keepass.database.element.template package com.kunzisoft.keepass.database.element.template
import android.content.res.Resources
import android.util.Log import android.util.Log
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.database.element.database.DatabaseKDBX import com.kunzisoft.keepass.database.element.database.DatabaseKDBX
import com.kunzisoft.keepass.database.element.entry.EntryKDBX import com.kunzisoft.keepass.database.element.entry.EntryKDBX
import com.kunzisoft.keepass.database.element.group.GroupKDBX import com.kunzisoft.keepass.database.element.group.GroupKDBX
@@ -33,9 +35,9 @@ class TemplateEngine(private val databaseKDBX: DatabaseKDBX) {
return templates return templates
} }
fun createNewTemplatesGroup(): GroupKDBX { fun createNewTemplatesGroup(resources: Resources): GroupKDBX {
return databaseKDBX.createGroup().apply { return databaseKDBX.createGroup().apply {
title = TEMPLATE_GROUP_NAME title = getDefaultTemplateGroupName(resources)
icon.standard = databaseKDBX.getStandardIcon(IconImageStandard.FOLDER_ID) icon.standard = databaseKDBX.getStandardIcon(IconImageStandard.FOLDER_ID)
enableAutoType = false enableAutoType = false
enableSearching = false enableSearching = false
@@ -92,7 +94,7 @@ class TemplateEngine(private val databaseKDBX: DatabaseKDBX) {
val attribute = getOrRetrieveAttributeFromName(attributes, attributeName) val attribute = getOrRetrieveAttributeFromName(attributes, attributeName)
var referenceLabel = value.stringValue var referenceLabel = value.stringValue
if (referenceLabel.equals(TEMPLATE_ATTRIBUTE_TITLE_EXPIRATION, true)) { if (referenceLabel.equals(TEMPLATE_ATTRIBUTE_TITLE_EXPIRATION, true)) {
referenceLabel = TemplatesFields.STANDARD_EXPIRATION referenceLabel = TemplateField.STANDARD_EXPIRATION
} }
attribute.attribute.label = referenceLabel attribute.attribute.label = referenceLabel
} catch (e: Exception) { } catch (e: Exception) {
@@ -171,7 +173,6 @@ class TemplateEngine(private val databaseKDBX: DatabaseKDBX) {
private data class TemplateAttributePosition(var position: Int, var attribute: TemplateAttribute) private data class TemplateAttributePosition(var position: Int, var attribute: TemplateAttribute)
private val TAG = TemplateEngine::class.java.name private val TAG = TemplateEngine::class.java.name
private const val TEMPLATE_GROUP_NAME = "Templates"
private const val TEMPLATE_LABEL_VERSION = "_etm_template" private const val TEMPLATE_LABEL_VERSION = "_etm_template"
const val TEMPLATE_ENTRY_UUID = "_etm_template_uuid" const val TEMPLATE_ENTRY_UUID = "_etm_template_uuid"
private const val TEMPLATE_ATTRIBUTE_POSITION_PREFIX = "_etm_position" private const val TEMPLATE_ATTRIBUTE_POSITION_PREFIX = "_etm_position"
@@ -187,5 +188,9 @@ class TemplateEngine(private val databaseKDBX: DatabaseKDBX) {
private const val TEMPLATE_ATTRIBUTE_TYPE_LISTBOX = "Listbox" private const val TEMPLATE_ATTRIBUTE_TYPE_LISTBOX = "Listbox"
private const val TEMPLATE_ATTRIBUTE_TYPE_POPOUT = "Popout" private const val TEMPLATE_ATTRIBUTE_TYPE_POPOUT = "Popout"
private const val TEMPLATE_ATTRIBUTE_TYPE_RICH_TEXTBOX = "Rich Textbox" private const val TEMPLATE_ATTRIBUTE_TYPE_RICH_TEXTBOX = "Rich Textbox"
fun getDefaultTemplateGroupName(resources: Resources): String {
return resources.getString(R.string.templates)
}
} }
} }

View File

@@ -6,7 +6,7 @@ import com.kunzisoft.keepass.database.element.security.ProtectedString
import com.kunzisoft.keepass.model.Field import com.kunzisoft.keepass.model.Field
import com.kunzisoft.keepass.utils.UuidUtil import com.kunzisoft.keepass.utils.UuidUtil
object TemplatesFields { object TemplateField {
const val STANDARD_TITLE = "title" const val STANDARD_TITLE = "title"
const val STANDARD_USERNAME = "username" const val STANDARD_USERNAME = "username"
@@ -15,10 +15,34 @@ object TemplatesFields {
const val STANDARD_EXPIRATION = "expires" const val STANDARD_EXPIRATION = "expires"
const val STANDARD_NOTES = "notes" const val STANDARD_NOTES = "notes"
const val CREDIT_CARD_TITLE = "Credit Card"
const val CREDIT_CARD_CARDHOLDER = "Card holder" const val CREDIT_CARD_CARDHOLDER = "Card holder"
const val CREDIT_CARD_NUMBER = "Number" const val CREDIT_CARD_NUMBER = "Number"
const val CREDIT_CARD_CVV = "CVV" const val CREDIT_CARD_CVV = "CVV"
private const val CREDIT_CARD_PIN = "PIN" const val CREDIT_CARD_PIN = "PIN"
const val ID_CARD_TITLE = "ID Card"
const val ID_CARD_NUMBER = "Number"
const val ID_CARD_NAME = "Name"
const val ID_CARD_PLACE_OF_ISSUE = "Place of issue"
const val ID_CARD_DATE_OF_ISSUE = "Date of issue"
const val EMAIL_TITLE = "E-mail"
const val EMAIL_ADDRESS = "E-mail address"
const val EMAIL_URL = "URL"
const val EMAIL_PASSWORD = "Password"
const val WIRELESS_LAN_TITLE = "Wireless LAN"
const val WIRELESS_LAN_SSID = "SSID"
const val WIRELESS_LAN_PASSWORD = "Password"
const val SECURE_NOTE_TITLE = "Secure Note"
const val SECURE_NOTE_NOTES = "Notes"
const val MEMBERSHIP_TITLE = "Membership"
const val MEMBERSHIP_Number = "Number"
const val MEMBERSHIP_URL = "URL"
const val MEMBERSHIP_EXPIRATION = "@exp_date"
fun isStandardFieldName(name: String): Boolean { fun isStandardFieldName(name: String): Boolean {
return arrayOf( return arrayOf(

View File

@@ -24,7 +24,7 @@ import android.os.Parcelable
import com.kunzisoft.keepass.database.element.Attachment import com.kunzisoft.keepass.database.element.Attachment
import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.element.security.ProtectedString import com.kunzisoft.keepass.database.element.security.ProtectedString
import com.kunzisoft.keepass.database.element.template.TemplatesFields import com.kunzisoft.keepass.database.element.template.TemplateField
import com.kunzisoft.keepass.otp.OtpElement import com.kunzisoft.keepass.otp.OtpElement
import com.kunzisoft.keepass.otp.OtpEntryFields import com.kunzisoft.keepass.otp.OtpEntryFields
import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_TOKEN_FIELD import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_TOKEN_FIELD
@@ -167,7 +167,7 @@ class EntryInfo : NodeInfo {
creditCard?.let { cc -> creditCard?.let { cc ->
cc.cardholder?.let { cc.cardholder?.let {
val v = ProtectedString(false, it) val v = ProtectedString(false, it)
addUniqueField(Field(TemplatesFields.CREDIT_CARD_CARDHOLDER, v)) addUniqueField(Field(TemplateField.CREDIT_CARD_CARDHOLDER, v))
} }
cc.expiration?.let { cc.expiration?.let {
expires = true expires = true
@@ -175,11 +175,11 @@ class EntryInfo : NodeInfo {
} }
cc.number?.let { cc.number?.let {
val v = ProtectedString(false, it) val v = ProtectedString(false, it)
addUniqueField(Field(TemplatesFields.CREDIT_CARD_NUMBER, v)) addUniqueField(Field(TemplateField.CREDIT_CARD_NUMBER, v))
} }
cc.cvv?.let { cc.cvv?.let {
val v = ProtectedString(true, it) val v = ProtectedString(true, it)
addUniqueField(Field(TemplatesFields.CREDIT_CARD_CVV, v)) addUniqueField(Field(TemplateField.CREDIT_CARD_CVV, v))
} }
} }
} }

View File

@@ -187,7 +187,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
isEnabled = if (!mDatabaseReadOnly) { isEnabled = if (!mDatabaseReadOnly) {
setOnPreferenceChangeListener { _, newValue -> setOnPreferenceChangeListener { _, newValue ->
val templatesEnabled = newValue as Boolean val templatesEnabled = newValue as Boolean
mDatabase.enableTemplates(templatesEnabled) mDatabase.enableTemplates(templatesEnabled, resources)
refreshTemplatesGroup() refreshTemplatesGroup()
// Save the database if not in readonly mode // Save the database if not in readonly mode
(context as SettingsActivity?)?. (context as SettingsActivity?)?.

View File

@@ -42,7 +42,7 @@ import com.kunzisoft.keepass.database.element.security.ProtectedString
import com.kunzisoft.keepass.utils.UuidUtil import com.kunzisoft.keepass.utils.UuidUtil
import com.kunzisoft.keepass.model.EntryAttachmentState import com.kunzisoft.keepass.model.EntryAttachmentState
import com.kunzisoft.keepass.model.StreamDirection import com.kunzisoft.keepass.model.StreamDirection
import com.kunzisoft.keepass.database.element.template.TemplatesFields import com.kunzisoft.keepass.database.element.template.TemplateField
import com.kunzisoft.keepass.otp.OtpElement import com.kunzisoft.keepass.otp.OtpElement
import com.kunzisoft.keepass.otp.OtpType import com.kunzisoft.keepass.otp.OtpType
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
@@ -313,7 +313,7 @@ class EntryContentsView @JvmOverloads constructor(context: Context,
onCopyButtonClickListener: OnClickListener?) { onCopyButtonClickListener: OnClickListener?) {
extraFieldsListView.addView(EntryFieldView(context).apply { extraFieldsListView.addView(EntryFieldView(context).apply {
setLabel(TemplatesFields.getLocalizedName(context, title)) setLabel(TemplateField.getLocalizedName(context, title))
setValue(value.toString(), value.isProtected) setValue(value.toString(), value.isProtected)
setAutoLink() setAutoLink()
activateCopyButton(allowCopy) activateCopyButton(allowCopy)