From cb7b37fca404e4b4134d2851a8e5429ea3d3a516 Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Mon, 5 Oct 2020 18:12:30 +0200 Subject: [PATCH] Fix crash in autofill save workflow --- .../keepass/autofill/KeeAutofillService.kt | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt b/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt index d74d1c976..c53bbd3b8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt @@ -23,6 +23,7 @@ import android.os.Build import android.os.CancellationSignal import android.service.autofill.* import android.util.Log +import android.view.autofill.AutofillId import android.widget.RemoteViews import androidx.annotation.RequiresApi import com.kunzisoft.keepass.R @@ -111,12 +112,23 @@ class KeeAutofillService : AutofillService() { RemoteViews(packageName, R.layout.item_autofill_unlock) } // Tell to service the interest to save credentials - responseBuilder.setSaveInfo( - SaveInfo.Builder(SaveInfo.SAVE_DATA_TYPE_USERNAME - or SaveInfo.SAVE_DATA_TYPE_PASSWORD, - arrayOf(parseResult.usernameId, parseResult.passwordId) - ).build() - ) + var types: Int = SaveInfo.SAVE_DATA_TYPE_GENERIC + val info = ArrayList() + // Only if at least a password + parseResult.passwordId?.let { passwordInfo -> + parseResult.usernameId?.let { usernameInfo -> + types = types or SaveInfo.SAVE_DATA_TYPE_USERNAME + info.add(usernameInfo) + } + types = types or SaveInfo.SAVE_DATA_TYPE_PASSWORD + info.add(passwordInfo) + } + if (info.isNotEmpty()) { + responseBuilder.setSaveInfo( + SaveInfo.Builder(types, info.toTypedArray()).build() + ) + } + // Build response responseBuilder.setAuthentication(autofillIds, sender, remoteViewsUnlock) callback.onSuccess(responseBuilder.build()) }