diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntrySelectionLauncherActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntrySelectionLauncherActivity.kt index 6ea936af1..ccae18280 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntrySelectionLauncherActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntrySelectionLauncherActivity.kt @@ -23,9 +23,7 @@ import android.app.Activity import android.content.Intent import android.net.Uri import android.os.Bundle -import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import com.kunzisoft.keepass.R import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.database.search.SearchHelper @@ -49,9 +47,8 @@ class EntrySelectionLauncherActivity : AppCompatActivity() { if ("text/plain" == intent.type) { // Retrieve web domain intent.getStringExtra(Intent.EXTRA_TEXT)?.let { - sharedWebDomain = Uri.parse(it).authority + sharedWebDomain = Uri.parse(it).host } - } } else -> {} 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 50dd998f8..7952b8474 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/GroupActivity.kt @@ -63,6 +63,7 @@ import com.kunzisoft.keepass.database.element.node.Type import com.kunzisoft.keepass.education.GroupActivityEducation import com.kunzisoft.keepass.icons.assignDatabaseIcon import com.kunzisoft.keepass.model.SearchInfo +import com.kunzisoft.keepass.model.getSearchString import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_COPY_NODES_TASK import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_CREATE_GROUP_TASK import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_DELETE_NODES_TASK @@ -308,7 +309,7 @@ class GroupActivity : LockingActivity(), if (searchInfo != null) { intent.action = Intent.ACTION_SEARCH intent.removeExtra(KEY_SEARCH_INFO) - intent.putExtra(SearchManager.QUERY, searchInfo.toString()) + intent.putExtra(SearchManager.QUERY, searchInfo.getSearchString(this)) return true } return false 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 18357c23b..70f32c332 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 @@ -404,11 +404,9 @@ class Database { return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchQuery, SearchParameters(), max) } - fun createVirtualGroupFromSearch(searchInfo: SearchInfo, - max: Int = Integer.MAX_VALUE): Group? { - if (searchInfo.containsOnlyNullValues()) - return null - return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchInfo.toString(), SearchParameters().apply { + fun createVirtualGroupFromSearchInfo(searchInfoString: String, + max: Int = Integer.MAX_VALUE): Group? { + return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchInfoString, SearchParameters().apply { searchInTitles = false searchInUserNames = false searchInPasswords = false diff --git a/app/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt b/app/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt index 9e94ab4e2..dc57f168f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt @@ -28,6 +28,7 @@ import com.kunzisoft.keepass.database.search.iterator.EntrySearchStringIteratorK import com.kunzisoft.keepass.database.search.iterator.EntrySearchStringIteratorKDBX import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.SearchInfo +import com.kunzisoft.keepass.model.getSearchString import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.timeout.TimeoutHelper @@ -48,9 +49,13 @@ class SearchHelper(private val isOmitBackup: Boolean) { if (database.loaded && TimeoutHelper.checkTime(context)) { var searchWithoutUI = false if (PreferencesUtil.isAutofillAutoSearchEnable(context) - && searchInfo != null) { + && searchInfo != null + && !searchInfo.containsOnlyNullValues()) { // If search provide results - database.createVirtualGroupFromSearch(searchInfo, SearchHelper.MAX_SEARCH_ENTRY)?.let { searchGroup -> + database.createVirtualGroupFromSearchInfo( + searchInfo.getSearchString(context), + MAX_SEARCH_ENTRY + )?.let { searchGroup -> if (searchGroup.getNumberOfChildEntries() > 0) { searchWithoutUI = true onItemsFound.invoke( diff --git a/app/src/main/java/com/kunzisoft/keepass/model/SearchInfo.kt b/app/src/main/java/com/kunzisoft/keepass/model/SearchInfo.kt index e9b21f7b8..707ee97f3 100644 --- a/app/src/main/java/com/kunzisoft/keepass/model/SearchInfo.kt +++ b/app/src/main/java/com/kunzisoft/keepass/model/SearchInfo.kt @@ -1,9 +1,12 @@ package com.kunzisoft.keepass.model +import android.content.Context import android.content.res.Resources import android.os.Parcel import android.os.Parcelable +import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.utils.ObjectNameResource +import com.kunzisoft.keepass.utils.UriUtil class SearchInfo : ObjectNameResource, Parcelable { @@ -88,4 +91,15 @@ class SearchInfo : ObjectNameResource, Parcelable { } } } +} + +fun SearchInfo.getSearchString(context: Context): String { + return run { + if (!PreferencesUtil.searchSubdomains(context)) + UriUtil.getWebDomainWithoutSubDomain(webDomain) + else + webDomain + } + ?: applicationId + ?: "" } \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt b/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt index 9b0773e77..995c56551 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt @@ -97,6 +97,12 @@ object PreferencesUtil { context.resources.getBoolean(R.bool.auto_focus_search_default)) } + fun searchSubdomains(context: Context): Boolean { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + return prefs.getBoolean(context.getString(R.string.subdomain_search_key), + context.resources.getBoolean(R.bool.subdomain_search_default)) + } + fun showUsernamesListEntries(context: Context): Boolean { val prefs = PreferenceManager.getDefaultSharedPreferences(context) return prefs.getBoolean(context.getString(R.string.list_entries_show_username_key), diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt b/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt index 14b17346c..fa0a24625 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/UriUtil.kt @@ -86,6 +86,19 @@ object UriUtil { null } + fun getWebDomainWithoutSubDomain(webDomain: String?): String? { + webDomain?.split(".")?.let { domainArray -> + if (domainArray.isEmpty()) { + return "" + } + if (domainArray.size == 1) { + return domainArray[0]; + } + return domainArray[domainArray.size - 2] + "." + domainArray[domainArray.size - 1] + } + return null + } + fun decode(uri: String?): String { return Uri.decode(uri) ?: "" } diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 136661d38..10b67434b 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -67,6 +67,8 @@ true auto_focus_search_key false + subdomain_search_key + false app_timeout_key lock_database_screen_off_key true diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5de49cfa1..a4f82df2d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -202,6 +202,8 @@ Omits \"Backup\" and \"Recycle bin\" groups from search results Quick search Request a search when opening a database + Subdomain search + Search web domains with subdomains constraints Creating new database… Working… Protection diff --git a/app/src/main/res/xml/preferences_application.xml b/app/src/main/res/xml/preferences_application.xml index ed4599483..9c140c562 100644 --- a/app/src/main/res/xml/preferences_application.xml +++ b/app/src/main/res/xml/preferences_application.xml @@ -59,7 +59,11 @@ android:title="@string/auto_focus_search_title" android:summary="@string/auto_focus_search_summary" android:defaultValue="@bool/auto_focus_search_default"/> - +