Fix autofill auto search

This commit is contained in:
J-Jamet
2020-04-07 21:01:26 +02:00
parent 456bc22138
commit d77635e572
4 changed files with 57 additions and 23 deletions

View File

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

View File

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

View File

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

View File

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