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.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import com.kunzisoft.keepass.R
|
|
||||||
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
|
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
|
||||||
import com.kunzisoft.keepass.database.element.Database
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.database.search.SearchHelper
|
import com.kunzisoft.keepass.database.search.SearchHelper
|
||||||
@@ -49,9 +47,8 @@ class EntrySelectionLauncherActivity : AppCompatActivity() {
|
|||||||
if ("text/plain" == intent.type) {
|
if ("text/plain" == intent.type) {
|
||||||
// Retrieve web domain
|
// Retrieve web domain
|
||||||
intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
|
intent.getStringExtra(Intent.EXTRA_TEXT)?.let {
|
||||||
sharedWebDomain = Uri.parse(it).authority
|
sharedWebDomain = Uri.parse(it).host
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> {}
|
else -> {}
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ import com.kunzisoft.keepass.database.element.node.Type
|
|||||||
import com.kunzisoft.keepass.education.GroupActivityEducation
|
import com.kunzisoft.keepass.education.GroupActivityEducation
|
||||||
import com.kunzisoft.keepass.icons.assignDatabaseIcon
|
import com.kunzisoft.keepass.icons.assignDatabaseIcon
|
||||||
import com.kunzisoft.keepass.model.SearchInfo
|
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_COPY_NODES_TASK
|
||||||
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_CREATE_GROUP_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
|
import com.kunzisoft.keepass.notifications.DatabaseTaskNotificationService.Companion.ACTION_DATABASE_DELETE_NODES_TASK
|
||||||
@@ -308,7 +309,7 @@ class GroupActivity : LockingActivity(),
|
|||||||
if (searchInfo != null) {
|
if (searchInfo != null) {
|
||||||
intent.action = Intent.ACTION_SEARCH
|
intent.action = Intent.ACTION_SEARCH
|
||||||
intent.removeExtra(KEY_SEARCH_INFO)
|
intent.removeExtra(KEY_SEARCH_INFO)
|
||||||
intent.putExtra(SearchManager.QUERY, searchInfo.toString())
|
intent.putExtra(SearchManager.QUERY, searchInfo.getSearchString(this))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -404,11 +404,9 @@ class Database {
|
|||||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchQuery, SearchParameters(), max)
|
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchQuery, SearchParameters(), max)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createVirtualGroupFromSearch(searchInfo: SearchInfo,
|
fun createVirtualGroupFromSearchInfo(searchInfoString: String,
|
||||||
max: Int = Integer.MAX_VALUE): Group? {
|
max: Int = Integer.MAX_VALUE): Group? {
|
||||||
if (searchInfo.containsOnlyNullValues())
|
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchInfoString, SearchParameters().apply {
|
||||||
return null
|
|
||||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this, searchInfo.toString(), SearchParameters().apply {
|
|
||||||
searchInTitles = false
|
searchInTitles = false
|
||||||
searchInUserNames = false
|
searchInUserNames = false
|
||||||
searchInPasswords = 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.database.search.iterator.EntrySearchStringIteratorKDBX
|
||||||
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.model.getSearchString
|
||||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||||
|
|
||||||
@@ -48,9 +49,13 @@ class SearchHelper(private val isOmitBackup: Boolean) {
|
|||||||
if (database.loaded && TimeoutHelper.checkTime(context)) {
|
if (database.loaded && TimeoutHelper.checkTime(context)) {
|
||||||
var searchWithoutUI = false
|
var searchWithoutUI = false
|
||||||
if (PreferencesUtil.isAutofillAutoSearchEnable(context)
|
if (PreferencesUtil.isAutofillAutoSearchEnable(context)
|
||||||
&& searchInfo != null) {
|
&& searchInfo != null
|
||||||
|
&& !searchInfo.containsOnlyNullValues()) {
|
||||||
// If search provide results
|
// 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) {
|
if (searchGroup.getNumberOfChildEntries() > 0) {
|
||||||
searchWithoutUI = true
|
searchWithoutUI = true
|
||||||
onItemsFound.invoke(
|
onItemsFound.invoke(
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
package com.kunzisoft.keepass.model
|
package com.kunzisoft.keepass.model
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Parcel
|
import android.os.Parcel
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
|
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
import com.kunzisoft.keepass.utils.ObjectNameResource
|
import com.kunzisoft.keepass.utils.ObjectNameResource
|
||||||
|
import com.kunzisoft.keepass.utils.UriUtil
|
||||||
|
|
||||||
class SearchInfo : ObjectNameResource, Parcelable {
|
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
|
||||||
|
?: ""
|
||||||
}
|
}
|
||||||
@@ -97,6 +97,12 @@ object PreferencesUtil {
|
|||||||
context.resources.getBoolean(R.bool.auto_focus_search_default))
|
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 {
|
fun showUsernamesListEntries(context: Context): Boolean {
|
||||||
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
|
||||||
return prefs.getBoolean(context.getString(R.string.list_entries_show_username_key),
|
return prefs.getBoolean(context.getString(R.string.list_entries_show_username_key),
|
||||||
|
|||||||
@@ -86,6 +86,19 @@ object UriUtil {
|
|||||||
null
|
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 {
|
fun decode(uri: String?): String {
|
||||||
return Uri.decode(uri) ?: ""
|
return Uri.decode(uri) ?: ""
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,8 @@
|
|||||||
<bool name="omit_backup_search_default" translatable="false">true</bool>
|
<bool name="omit_backup_search_default" translatable="false">true</bool>
|
||||||
<string name="auto_focus_search_key" translatable="false">auto_focus_search_key</string>
|
<string name="auto_focus_search_key" translatable="false">auto_focus_search_key</string>
|
||||||
<bool name="auto_focus_search_default" translatable="false">false</bool>
|
<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="app_timeout_key" translatable="false">app_timeout_key</string>
|
||||||
<string name="lock_database_screen_off_key" translatable="false">lock_database_screen_off_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>
|
<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="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_title">Quick search</string>
|
||||||
<string name="auto_focus_search_summary">Request a search when opening a database</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_create">Creating new database…</string>
|
||||||
<string name="progress_title">Working…</string>
|
<string name="progress_title">Working…</string>
|
||||||
<string name="protection">Protection</string>
|
<string name="protection">Protection</string>
|
||||||
|
|||||||
@@ -59,7 +59,11 @@
|
|||||||
android:title="@string/auto_focus_search_title"
|
android:title="@string/auto_focus_search_title"
|
||||||
android:summary="@string/auto_focus_search_summary"
|
android:summary="@string/auto_focus_search_summary"
|
||||||
android:defaultValue="@bool/auto_focus_search_default"/>
|
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>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
|
|||||||
Reference in New Issue
Block a user