mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Search in current group
This commit is contained in:
@@ -128,6 +128,7 @@ class GroupActivity : DatabaseLockActivity(),
|
||||
searchState.searchParameters.searchQuery = query
|
||||
mGroupViewModel.loadSearchGroup(mDatabase,
|
||||
searchState.searchParameters,
|
||||
mCurrentGroupState?.groupId,
|
||||
searchState.firstVisibleItem)
|
||||
}
|
||||
}
|
||||
@@ -146,6 +147,7 @@ class GroupActivity : DatabaseLockActivity(),
|
||||
searchState.searchParameters = searchParameters
|
||||
mGroupViewModel.loadSearchGroup(mDatabase,
|
||||
searchState.searchParameters,
|
||||
mCurrentGroupState?.groupId,
|
||||
searchState.firstVisibleItem)
|
||||
}
|
||||
}
|
||||
@@ -452,6 +454,7 @@ class GroupActivity : DatabaseLockActivity(),
|
||||
finishNodeAction()
|
||||
mGroupViewModel.loadSearchGroup(mDatabase,
|
||||
searchState.searchParameters,
|
||||
mCurrentGroupState?.groupId,
|
||||
searchState.firstVisibleItem
|
||||
)
|
||||
}
|
||||
|
||||
@@ -789,9 +789,10 @@ class Database {
|
||||
}
|
||||
|
||||
fun createVirtualGroupFromSearch(searchParameters: SearchParameters,
|
||||
fromGroup: NodeId<*>? = null,
|
||||
max: Int = Integer.MAX_VALUE): Group? {
|
||||
return mSearchHelper?.createVirtualGroupWithSearchResult(this,
|
||||
searchParameters, max)
|
||||
searchParameters, fromGroup, max)
|
||||
}
|
||||
|
||||
fun createVirtualGroupFromSearchInfo(searchInfoString: String,
|
||||
@@ -810,7 +811,7 @@ class Database {
|
||||
searchInTags = false
|
||||
searchInTemplates = false
|
||||
searchInRecycleBin = false
|
||||
}, max)
|
||||
}, null, max)
|
||||
}
|
||||
|
||||
val tagPool: Tags
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.kunzisoft.keepass.database.action.node.NodeHandler
|
||||
import com.kunzisoft.keepass.database.element.Database
|
||||
import com.kunzisoft.keepass.database.element.Entry
|
||||
import com.kunzisoft.keepass.database.element.Group
|
||||
import com.kunzisoft.keepass.database.element.node.NodeId
|
||||
import com.kunzisoft.keepass.model.EntryInfo
|
||||
import com.kunzisoft.keepass.model.SearchInfo
|
||||
import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_FIELD
|
||||
@@ -37,6 +38,7 @@ class SearchHelper {
|
||||
|
||||
fun createVirtualGroupWithSearchResult(database: Database,
|
||||
searchParameters: SearchParameters,
|
||||
fromGroup: NodeId<*>? = null,
|
||||
max: Int): Group? {
|
||||
|
||||
val searchGroup = database.createGroup(virtual = true)
|
||||
@@ -44,7 +46,13 @@ class SearchHelper {
|
||||
|
||||
// Search all entries
|
||||
incrementEntry = 0
|
||||
database.rootGroup?.doForEachChild(
|
||||
|
||||
val startGroup = if (searchParameters.searchInCurrentGroup && fromGroup != null) {
|
||||
database.getGroupById(fromGroup) ?: database.rootGroup
|
||||
} else {
|
||||
database.rootGroup
|
||||
}
|
||||
startGroup?.doForEachChild(
|
||||
object : NodeHandler<Entry>() {
|
||||
override fun operate(node: Entry): Boolean {
|
||||
if (incrementEntry >= max)
|
||||
@@ -202,7 +210,6 @@ class SearchHelper {
|
||||
// TODO Search settings
|
||||
var regularExpression = false
|
||||
var removeAccents = true <- Too much time, to study
|
||||
var searchOnlyInCurrentGroup = false
|
||||
*/
|
||||
return stringToCheck.isNotEmpty()
|
||||
&& stringToCheck.contains(
|
||||
|
||||
@@ -28,6 +28,8 @@ import android.os.Parcelable
|
||||
class SearchParameters() : Parcelable{
|
||||
var searchQuery: String = ""
|
||||
|
||||
var searchInCurrentGroup = false
|
||||
|
||||
var caseSensitive = false
|
||||
var excludeExpired = false
|
||||
|
||||
@@ -46,6 +48,7 @@ class SearchParameters() : Parcelable{
|
||||
|
||||
constructor(parcel: Parcel) : this() {
|
||||
searchQuery = parcel.readString() ?: searchQuery
|
||||
searchInCurrentGroup = parcel.readByte() != 0.toByte()
|
||||
caseSensitive = parcel.readByte() != 0.toByte()
|
||||
excludeExpired = parcel.readByte() != 0.toByte()
|
||||
searchInTitles = parcel.readByte() != 0.toByte()
|
||||
@@ -63,6 +66,7 @@ class SearchParameters() : Parcelable{
|
||||
|
||||
override fun writeToParcel(parcel: Parcel, flags: Int) {
|
||||
parcel.writeString(searchQuery)
|
||||
parcel.writeByte(if (searchInCurrentGroup) 1 else 0)
|
||||
parcel.writeByte(if (caseSensitive) 1 else 0)
|
||||
parcel.writeByte(if (excludeExpired) 1 else 0)
|
||||
parcel.writeByte(if (searchInTitles) 1 else 0)
|
||||
|
||||
@@ -21,6 +21,7 @@ class SearchFiltersView @JvmOverloads constructor(context: Context,
|
||||
private var searchAdvanceFiltersContainer: ViewGroup
|
||||
private var searchExpandButton: ImageView
|
||||
private var searchNumbers: TextView
|
||||
private var searchCurrentGroup: CompoundButton
|
||||
private var searchCaseSensitive: CompoundButton
|
||||
private var searchExpires: CompoundButton
|
||||
private var searchTitle: CompoundButton
|
||||
@@ -37,6 +38,7 @@ class SearchFiltersView @JvmOverloads constructor(context: Context,
|
||||
var searchParameters = SearchParameters()
|
||||
get() {
|
||||
return field.apply {
|
||||
this.searchInCurrentGroup = searchCurrentGroup.isChecked
|
||||
this.caseSensitive = searchCaseSensitive.isChecked
|
||||
this.excludeExpired = !(searchExpires.isChecked)
|
||||
this.searchInTitles = searchTitle.isChecked
|
||||
@@ -55,6 +57,7 @@ class SearchFiltersView @JvmOverloads constructor(context: Context,
|
||||
field = value
|
||||
val tempListener = onParametersChangeListener
|
||||
onParametersChangeListener = null
|
||||
searchCurrentGroup.isChecked = value.searchInCurrentGroup
|
||||
searchCaseSensitive.isChecked = value.caseSensitive
|
||||
searchExpires.isChecked = !value.excludeExpired
|
||||
searchTitle.isChecked = value.searchInTitles
|
||||
@@ -80,6 +83,7 @@ class SearchFiltersView @JvmOverloads constructor(context: Context,
|
||||
searchAdvanceFiltersContainer = findViewById(R.id.search_advance_filters)
|
||||
searchExpandButton = findViewById(R.id.search_expand)
|
||||
searchNumbers = findViewById(R.id.search_numbers)
|
||||
searchCurrentGroup = findViewById(R.id.search_chip_current_group)
|
||||
searchCaseSensitive = findViewById(R.id.search_chip_case_sensitive)
|
||||
searchExpires = findViewById(R.id.search_chip_expires)
|
||||
searchTitle = findViewById(R.id.search_chip_title)
|
||||
@@ -105,6 +109,10 @@ class SearchFiltersView @JvmOverloads constructor(context: Context,
|
||||
}
|
||||
}
|
||||
|
||||
searchCurrentGroup.setOnCheckedChangeListener { _, isChecked ->
|
||||
searchParameters.searchInCurrentGroup = isChecked
|
||||
onParametersChangeListener?.invoke(searchParameters)
|
||||
}
|
||||
searchCaseSensitive.setOnCheckedChangeListener { _, isChecked ->
|
||||
searchParameters.caseSensitive = isChecked
|
||||
onParametersChangeListener?.invoke(searchParameters)
|
||||
|
||||
@@ -69,11 +69,13 @@ class GroupViewModel: ViewModel() {
|
||||
|
||||
fun loadSearchGroup(database: Database?,
|
||||
searchParameters: SearchParameters,
|
||||
fromGroup: NodeId<*>?,
|
||||
showFromPosition: Int?) {
|
||||
IOActionTask(
|
||||
{
|
||||
database?.createVirtualGroupFromSearch(
|
||||
searchParameters,
|
||||
fromGroup,
|
||||
SearchHelper.MAX_SEARCH_ENTRY
|
||||
)
|
||||
},
|
||||
|
||||
@@ -34,6 +34,6 @@
|
||||
<dimen name="hidden_lock_button_size">0dp</dimen>
|
||||
<dimen name="content_percent">1</dimen>
|
||||
<dimen name="toolbar_parallax_height">160dp</dimen>
|
||||
<dimen name="advanced_search_height">260dp</dimen>
|
||||
<dimen name="advanced_search_height">280dp</dimen>
|
||||
<integer name="animation_duration">260</integer>
|
||||
</resources>
|
||||
Reference in New Issue
Block a user