Merge branch 'develop' into feature/Autofill_Save

This commit is contained in:
J-Jamet
2020-10-08 18:16:21 +02:00

View File

@@ -32,6 +32,7 @@ import com.kunzisoft.keepass.database.element.Database
import com.kunzisoft.keepass.database.search.SearchHelper import com.kunzisoft.keepass.database.search.SearchHelper
import com.kunzisoft.keepass.model.SearchInfo import com.kunzisoft.keepass.model.SearchInfo
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import java.util.concurrent.atomic.AtomicBoolean
@RequiresApi(api = Build.VERSION_CODES.O) @RequiresApi(api = Build.VERSION_CODES.O)
class KeeAutofillService : AutofillService() { class KeeAutofillService : AutofillService() {
@@ -39,6 +40,7 @@ class KeeAutofillService : AutofillService() {
var applicationIdBlocklist: Set<String>? = null var applicationIdBlocklist: Set<String>? = null
var webDomainBlocklist: Set<String>? = null var webDomainBlocklist: Set<String>? = null
var askToSaveData: Boolean = false var askToSaveData: Boolean = false
private var mLock = AtomicBoolean()
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
@@ -54,39 +56,43 @@ class KeeAutofillService : AutofillService() {
cancellationSignal.setOnCancelListener { Log.w(TAG, "Cancel autofill.") } cancellationSignal.setOnCancelListener { Log.w(TAG, "Cancel autofill.") }
// Check user's settings for authenticating Responses and Datasets. // Lock
val latestStructure = request.fillContexts.last().structure if (!mLock.get()) {
StructureParser(latestStructure).parse()?.let { parseResult -> mLock.set(true)
// Check user's settings for authenticating Responses and Datasets.
val latestStructure = request.fillContexts.last().structure
StructureParser(latestStructure).parse()?.let { parseResult ->
// Build search info only if applicationId or webDomain are not blocked // Build search info only if applicationId or webDomain are not blocked
if (autofillAllowedFor(parseResult.applicationId, applicationIdBlocklist) if (autofillAllowedFor(parseResult.applicationId, applicationIdBlocklist)
&& autofillAllowedFor(parseResult.domain, webDomainBlocklist)) { && autofillAllowedFor(parseResult.domain, webDomainBlocklist)) {
val searchInfo = SearchInfo().apply { val searchInfo = SearchInfo().apply {
applicationId = parseResult.applicationId applicationId = parseResult.applicationId
webDomain = parseResult.domain webDomain = parseResult.domain
} }
SearchHelper.checkAutoSearchInfo(this, SearchHelper.checkAutoSearchInfo(this,
Database.getInstance(), Database.getInstance(),
searchInfo, searchInfo,
{ items -> { items ->
val responseBuilder = FillResponse.Builder() val responseBuilder = FillResponse.Builder()
AutofillHelper.addHeader(responseBuilder, packageName, AutofillHelper.addHeader(responseBuilder, packageName,
parseResult.domain, parseResult.applicationId) parseResult.domain, parseResult.applicationId)
items.forEach { items.forEach {
responseBuilder.addDataset(AutofillHelper.buildDataset(this, it, parseResult)) responseBuilder.addDataset(AutofillHelper.buildDataset(this, it, parseResult))
}
callback.onSuccess(responseBuilder.build())
},
{
// Show UI if no search result
showUIForEntrySelection(parseResult, searchInfo, callback)
},
{
// Show UI if database not open
showUIForEntrySelection(parseResult, searchInfo, callback)
} }
callback.onSuccess(responseBuilder.build()) )
}, }
{
// Show UI if no search result
showUIForEntrySelection(parseResult, searchInfo, callback)
},
{
// Show UI if database not open
showUIForEntrySelection(parseResult, searchInfo, callback)
}
)
} }
} }
} }
@@ -161,6 +167,7 @@ class KeeAutofillService : AutofillService() {
} }
override fun onDisconnected() { override fun onDisconnected() {
mLock.set(false)
Log.d(TAG, "onDisconnected") Log.d(TAG, "onDisconnected")
} }