From 69ad7979aeb2e0914f1aa5b41177d5a9b8282bd6 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Sun, 17 Oct 2021 13:40:49 +0200 Subject: [PATCH] Manually add token tags --- .../activities/fragments/EntryEditFragment.kt | 22 +++++++++++-------- .../keepass/database/element/Tags.kt | 9 ++++++-- .../com/kunzisoft/keepass/utils/StringUtil.kt | 2 -- .../keepass/view/TagsCompletionView.kt | 19 ++++++++++++++++ 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/EntryEditFragment.kt b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/EntryEditFragment.kt index bbba28ce2..4fd4b3905 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/fragments/EntryEditFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/fragments/EntryEditFragment.kt @@ -24,7 +24,6 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.appcompat.widget.AppCompatAutoCompleteTextView import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.LinearLayoutManager @@ -42,10 +41,7 @@ import com.kunzisoft.keepass.model.AttachmentState import com.kunzisoft.keepass.model.EntryAttachmentState import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.StreamDirection -import com.kunzisoft.keepass.view.TemplateEditView -import com.kunzisoft.keepass.view.collapse -import com.kunzisoft.keepass.view.expand -import com.kunzisoft.keepass.view.showByFading +import com.kunzisoft.keepass.view.* import com.kunzisoft.keepass.viewmodels.EntryEditViewModel import com.tokenautocomplete.FilteredArrayAdapter @@ -59,7 +55,7 @@ class EntryEditFragment: DatabaseFragment() { private lateinit var attachmentsContainerView: ViewGroup private lateinit var attachmentsListView: RecyclerView private var attachmentsAdapter: EntryAttachmentsItemsAdapter? = null - private lateinit var tagsCompletionView: AppCompatAutoCompleteTextView + private lateinit var tagsCompletionView: TagsCompletionView private var tagsAdapter: FilteredArrayAdapter? = null private var mTemplate: Template? = null @@ -105,8 +101,6 @@ class EntryEditFragment: DatabaseFragment() { // TODO default tags in pool tagsAdapter = TagsProposalAdapter(requireContext(), arrayOf("test")) tagsCompletionView.apply { - //allowCollapse(false) - //setTokenizer(CharacterTokenizer(listOf('.', ','), ",")) threshold = 1 setAdapter(tagsAdapter) } @@ -156,7 +150,8 @@ class EntryEditFragment: DatabaseFragment() { } mEntryEditViewModel.requestEntryInfoUpdate.observe(viewLifecycleOwner) { - mEntryEditViewModel.saveEntryInfo(it.database, it.entry, it.parent, retrieveEntryInfo()) + val entryInfo = retrieveEntryInfo() + mEntryEditViewModel.saveEntryInfo(it.database, it.entry, it.parent, entryInfo) } mEntryEditViewModel.onIconSelected.observe(viewLifecycleOwner) { iconImage -> @@ -285,12 +280,21 @@ class EntryEditFragment: DatabaseFragment() { // Populate entry views templateView.setEntryInfo(entryInfo) + // Set Tags + entryInfo?.tags?.let { tags -> + tagsCompletionView.setText("") + for (i in 0 until tags.size()) { + tagsCompletionView.addObjectSync(tags.get(i)) + } + } + // Manage attachments setAttachments(entryInfo?.attachments ?: listOf()) } private fun retrieveEntryInfo(): EntryInfo { val entryInfo = templateView.getEntryInfo() + entryInfo.tags = tagsCompletionView.getTags() entryInfo.attachments = getAttachments().toMutableList() return entryInfo } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Tags.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Tags.kt index c5e095304..7a16dfaa4 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Tags.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Tags.kt @@ -2,6 +2,7 @@ package com.kunzisoft.keepass.database.element import android.os.Parcel import android.os.Parcelable +import com.kunzisoft.keepass.utils.StringUtil.removeSpaceChars class Tags: Parcelable { @@ -10,7 +11,7 @@ class Tags: Parcelable { constructor() constructor(values: String): this() { - mTags.addAll(values.split(';')) + mTags.addAll(values.removeSpaceChars().split(DELIMITER, DELIMITER1)) } constructor(parcel: Parcel) : this() { @@ -52,10 +53,14 @@ class Tags: Parcelable { } override fun toString(): String { - return mTags.joinToString(";") + return mTags.joinToString(DELIMITER.toString()) } companion object CREATOR : Parcelable.Creator { + const val DELIMITER= ',' + const val DELIMITER1= ';' + val DELIMITERS = listOf(',', ';') + override fun createFromParcel(parcel: Parcel): Tags { return Tags(parcel) } diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/StringUtil.kt b/app/src/main/java/com/kunzisoft/keepass/utils/StringUtil.kt index 5ef84cefc..90aeb12ac 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/StringUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/StringUtil.kt @@ -1,7 +1,5 @@ package com.kunzisoft.keepass.utils -import java.text.Normalizer - object StringUtil { fun String.removeLineChars(): String { diff --git a/app/src/main/java/com/kunzisoft/keepass/view/TagsCompletionView.kt b/app/src/main/java/com/kunzisoft/keepass/view/TagsCompletionView.kt index 229ae520c..7ae5c5119 100644 --- a/app/src/main/java/com/kunzisoft/keepass/view/TagsCompletionView.kt +++ b/app/src/main/java/com/kunzisoft/keepass/view/TagsCompletionView.kt @@ -8,6 +8,8 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import com.kunzisoft.keepass.R +import com.kunzisoft.keepass.database.element.Tags +import com.tokenautocomplete.CharacterTokenizer import com.tokenautocomplete.TokenCompleteTextView @@ -18,6 +20,11 @@ class TagsCompletionView @JvmOverloads constructor( private val layoutInflater = context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE) as? LayoutInflater? + init { + allowCollapse(false) + setTokenizer(CharacterTokenizer(Tags.DELIMITERS, Tags.DELIMITER.toString())) + } + override fun defaultObject(completionText: String): String { return completionText } @@ -30,4 +37,16 @@ class TagsCompletionView @JvmOverloads constructor( } return viewGroup } + + override fun shouldIgnoreToken(token: String): Boolean { + return objects.contains(token) + } + + fun getTags(): Tags { + val tags = Tags() + objects.forEach { tag -> + tags.put(tag) + } + return tags + } } \ No newline at end of file