mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Search through subdomains as parameter #584
This commit is contained in:
@@ -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 -> {}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -404,11 +404,9 @@ class Database {
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchQuery, SearchParameters(), max)
|
||||
}
|
||||
|
||||
fun createVirtualGroupFromSearch(searchInfo: SearchInfo,
|
||||
fun createVirtualGroupFromSearchInfo(searchInfoString: String,
|
||||
max: Int = Integer.MAX_VALUE): Group? {
|
||||
if (searchInfo.containsOnlyNullValues())
|
||||
return null
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchInfo.toString(), SearchParameters().apply {
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchInfoString, SearchParameters().apply {
|
||||
searchInTitles = false
|
||||
searchInUserNames = false
|
||||
searchInPasswords = false
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -89,3 +92,14 @@ class SearchInfo : ObjectNameResource, Parcelable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun SearchInfo.getSearchString(context: Context): String {
|
||||
return run {
|
||||
if (!PreferencesUtil.searchSubdomains(context))
|
||||
UriUtil.getWebDomainWithoutSubDomain(webDomain)
|
||||
else
|
||||
webDomain
|
||||
}
|
||||
?: applicationId
|
||||
?: ""
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
@@ -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) ?: ""
|
||||
}
|
||||
|
||||
@@ -67,6 +67,8 @@
|
||||
<bool name="omit_backup_search_default" translatable="false">true</bool>
|
||||
<string name="auto_focus_search_key" translatable="false">auto_focus_search_key</string>
|
||||
<bool name="auto_focus_search_default" translatable="false">false</bool>
|
||||
<string name="subdomain_search_key" translatable="false">subdomain_search_key</string>
|
||||
<bool name="subdomain_search_default" translatable="false">false</bool>
|
||||
<string name="app_timeout_key" translatable="false">app_timeout_key</string>
|
||||
<string name="lock_database_screen_off_key" translatable="false">lock_database_screen_off_key</string>
|
||||
<bool name="lock_database_screen_off_default" translatable="false">true</bool>
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
<string name="omit_backup_search_summary">Omits \"Backup\" and \"Recycle bin\" groups from search results</string>
|
||||
<string name="auto_focus_search_title">Quick search</string>
|
||||
<string name="auto_focus_search_summary">Request a search when opening a database</string>
|
||||
<string name="subdomain_search_title">Subdomain search</string>
|
||||
<string name="subdomain_search_summary">Search web domains with subdomains constraints</string>
|
||||
<string name="progress_create">Creating new database…</string>
|
||||
<string name="progress_title">Working…</string>
|
||||
<string name="protection">Protection</string>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
<SwitchPreference
|
||||
android:key="@string/subdomain_search_key"
|
||||
android:title="@string/subdomain_search_title"
|
||||
android:summary="@string/subdomain_search_summary"
|
||||
android:defaultValue="@bool/subdomain_search_default"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
|
||||
Reference in New Issue
Block a user