mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Fix autofill auto search
This commit is contained in:
@@ -1036,7 +1036,7 @@ class GroupActivity : LockingActivity(),
|
||||
@RequiresApi(api = Build.VERSION_CODES.O)
|
||||
fun launchForAutofillResult(activity: Activity,
|
||||
assistStructure: AssistStructure,
|
||||
searchInfo: SearchInfo?,
|
||||
searchInfo: SearchInfo? = null,
|
||||
readOnly: Boolean = PreferencesUtil.enableReadOnlyDatabase(activity)) {
|
||||
checkTimeAndBuildIntent(activity, null, searchInfo, readOnly) { intent ->
|
||||
AutofillHelper.startActivityForAutofillResult(activity, intent, assistStructure, searchInfo)
|
||||
|
||||
@@ -268,10 +268,21 @@ open class PasswordActivity : StylishActivity() {
|
||||
},
|
||||
{ assistStructure ->
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
GroupActivity.launchForAutofillResult(this@PasswordActivity,
|
||||
assistStructure,
|
||||
intent.getParcelableExtra(KEY_SEARCH_INFO),
|
||||
readOnly)
|
||||
val searchInfo: SearchInfo? = intent.getParcelableExtra(KEY_SEARCH_INFO)
|
||||
AutofillHelper.checkAutoSearchInfo(this,
|
||||
Database.getInstance(),
|
||||
searchInfo,
|
||||
{
|
||||
finish()
|
||||
},
|
||||
{
|
||||
// Here no search info found
|
||||
GroupActivity.launchForAutofillResult(this@PasswordActivity,
|
||||
assistStructure,
|
||||
null,
|
||||
readOnly)
|
||||
}
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ import android.widget.RemoteViews
|
||||
import androidx.annotation.RequiresApi
|
||||
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
|
||||
import com.kunzisoft.keepass.model.EntryInfo
|
||||
import com.kunzisoft.keepass.model.SearchInfo
|
||||
|
||||
@@ -125,6 +127,32 @@ object AutofillHelper {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to perform actions if item is found or not after an auto search in [database]
|
||||
*/
|
||||
fun checkAutoSearchInfo(activity: Activity,
|
||||
database: Database,
|
||||
searchInfo: SearchInfo?,
|
||||
onItemFound: () -> Unit,
|
||||
onItemNotFound: () -> Unit) {
|
||||
var searchWithoutUI = false
|
||||
if (searchInfo != null) {
|
||||
// If search provide results
|
||||
database.createVirtualGroupFromSearch(searchInfo, SearchHelper.MAX_SEARCH_ENTRY)?.let { searchGroup ->
|
||||
if (searchGroup.getNumberOfChildEntries() > 0) {
|
||||
// Build response with the entry selected
|
||||
buildResponse(activity,
|
||||
searchGroup.getChildEntriesInfo(database))
|
||||
searchWithoutUI = true
|
||||
onItemFound.invoke()
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!searchWithoutUI) {
|
||||
onItemNotFound.invoke()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to start an activity with an Autofill for result
|
||||
*/
|
||||
|
||||
@@ -31,7 +31,6 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import com.kunzisoft.keepass.activities.FileDatabaseSelectActivity
|
||||
import com.kunzisoft.keepass.activities.GroupActivity
|
||||
import com.kunzisoft.keepass.database.element.Database
|
||||
import com.kunzisoft.keepass.database.search.SearchHelper.Companion.MAX_SEARCH_ENTRY
|
||||
import com.kunzisoft.keepass.model.SearchInfo
|
||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||
|
||||
@@ -50,23 +49,19 @@ class AutofillLauncherActivity : AppCompatActivity() {
|
||||
}
|
||||
// If database is open
|
||||
if (database.loaded && TimeoutHelper.checkTime(this)) {
|
||||
var searchWithoutUI = false
|
||||
// If search provide results
|
||||
database.createVirtualGroupFromSearch(searchInfo, MAX_SEARCH_ENTRY)?.let { searchGroup ->
|
||||
if (searchGroup.getNumberOfChildEntries() > 0) {
|
||||
// Build response with the entry selected
|
||||
AutofillHelper.buildResponse(this@AutofillLauncherActivity,
|
||||
searchGroup.getChildEntriesInfo(database))
|
||||
searchWithoutUI = true
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
// Show the database UI to select the entry
|
||||
if (!searchWithoutUI) {
|
||||
GroupActivity.launchForAutofillResult(this,
|
||||
assistStructure, searchInfo)
|
||||
}
|
||||
AutofillHelper.checkAutoSearchInfo(this,
|
||||
Database.getInstance(),
|
||||
searchInfo,
|
||||
{
|
||||
// Items found
|
||||
finish()
|
||||
},
|
||||
{
|
||||
// Show the database UI to select the entry
|
||||
GroupActivity.launchForAutofillResult(this,
|
||||
assistStructure)
|
||||
}
|
||||
)
|
||||
} else {
|
||||
FileDatabaseSelectActivity.launchForAutofillResult(this,
|
||||
assistStructure, searchInfo)
|
||||
|
||||
Reference in New Issue
Block a user