mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Merge branch 'develop' into feature/Autofill_Save
This commit is contained in:
@@ -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")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user