From e397b92c362efa9b1bcacdbed8a75435a25cdfd3 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 24 Jul 2025 21:29:43 +0200 Subject: [PATCH] fix: Search and allow empty query #2096 --- .../kunzisoft/keepass/database/element/Database.kt | 1 + .../keepass/database/search/SearchHelper.kt | 12 +++++++----- .../keepass/database/search/SearchParameters.kt | 3 +++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/database/src/main/java/com/kunzisoft/keepass/database/element/Database.kt b/database/src/main/java/com/kunzisoft/keepass/database/element/Database.kt index 8e19954a6..ead4c25d1 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/element/Database.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/element/Database.kt @@ -892,6 +892,7 @@ open class Database { return mSearchHelper.createVirtualGroupWithSearchResult(this, SearchParameters().apply { searchQuery = searchInfoString + allowEmptyQuery = false searchInTitles = true searchInUsernames = false searchInPasswords = false diff --git a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt index d4d5b00ae..6aef4c393 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt @@ -123,11 +123,9 @@ class SearchHelper { */ fun searchInEntry(entry: Entry, searchParameters: SearchParameters): Boolean { - val searchQuery = searchParameters.searchQuery - // Not found if the search string is empty - if (searchQuery.isEmpty()) - return false + if (searchParameters.searchQuery.isEmpty()) + return searchParameters.allowEmptyQuery // Exclude entry expired if (!searchParameters.searchInExpired) { @@ -206,8 +204,12 @@ class SearchHelper { regex.matches(stringToCheck) } else { searchParameters.searchQuery.split(" ").any { word -> - specialComparison?.invoke(stringToCheck, word) + if (word.isEmpty()) { + false + } else { + specialComparison?.invoke(stringToCheck, word) ?: stringToCheck.contains(word, !searchParameters.caseSensitive) + } } } } diff --git a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchParameters.kt b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchParameters.kt index 8b23a2857..e8bea1c25 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchParameters.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchParameters.kt @@ -27,6 +27,7 @@ import android.os.Parcelable */ class SearchParameters() : Parcelable{ var searchQuery: String = "" + var allowEmptyQuery = true var caseSensitive = false var isRegex = false @@ -49,6 +50,7 @@ class SearchParameters() : Parcelable{ constructor(parcel: Parcel) : this() { searchQuery = parcel.readString() ?: searchQuery + allowEmptyQuery = parcel.readByte() != 0.toByte() caseSensitive = parcel.readByte() != 0.toByte() isRegex = parcel.readByte() != 0.toByte() searchInTitles = parcel.readByte() != 0.toByte() @@ -69,6 +71,7 @@ class SearchParameters() : Parcelable{ override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(searchQuery) + parcel.writeByte(if (allowEmptyQuery) 1 else 0) parcel.writeByte(if (caseSensitive) 1 else 0) parcel.writeByte(if (isRegex) 1 else 0) parcel.writeByte(if (searchInTitles) 1 else 0)