Search through subdomains as parameter #584

This commit is contained in:
J-Jamet
2020-06-10 20:40:01 +02:00
parent ab0cd4152a
commit d0da4f03a6
10 changed files with 55 additions and 13 deletions

View File

@@ -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 -> {}

View File

@@ -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

View File

@@ -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

View File

@@ -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(

View File

@@ -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
?: ""
}

View File

@@ -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),

View File

@@ -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) ?: ""
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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