From 8359e4d40e7210ddf18f995674f8428ddbe6b851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Natalie=20Klestrup=20R=C3=B6ijezon?= Date: Tue, 4 Aug 2026 16:20:57 +0200 Subject: [PATCH 1/2] Allow reusing imeSpecs This is documented as Android's intended API contract in https://developer.android.com/reference/kotlin/android/view/inputmethod/InlineSuggestionsRequest?hl=en#getinlinepresentationspecs: > If the max suggestion count is larger than > the number of specs in the list, then > the last spec is used for the remainder > of the suggestions. --- .../util/autofill/Api30AutofillResponseBuilder.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt b/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt index c106ec344e..b8b1cb20c8 100644 --- a/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt +++ b/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt @@ -184,19 +184,28 @@ class Api30AutofillResponseBuilder private constructor(form: FillableForm) : matchedFiles: List, ): FillResponse? { var datasetCount = 0 + val maxSuggestions = inlineSuggestionsRequest?.maxSuggestionCount + ?: InlineSuggestionsRequest.SUGGESTION_COUNT_UNLIMITED val imeSpecs = inlineSuggestionsRequest?.inlinePresentationSpecs ?: emptyList() + fun nextImeSpec(): InlinePresentationSpec? = + when { + datasetCount < maxSuggestions -> + imeSpecs.getOrNull(datasetCount) ?: imeSpecs.lastOrNull() + + else -> null + } return FillResponse.Builder().run { for (file in matchedFiles) { - makeMatchDataset(context, file, imeSpecs.getOrNull(datasetCount))?.let { + makeMatchDataset(context, file, nextImeSpec())?.let { datasetCount++ addDataset(it) } } - makeGenerateDataset(context, imeSpecs.getOrNull(datasetCount))?.let { + makeGenerateDataset(context, nextImeSpec())?.let { datasetCount++ addDataset(it) } - makeSearchDataset(context, imeSpecs.getOrNull(datasetCount))?.let { + makeSearchDataset(context, nextImeSpec())?.let { datasetCount++ addDataset(it) } From 7cc63173afc6153a8df06d9758bf8f6424a968e7 Mon Sep 17 00:00:00 2001 From: Alexander Grahn Date: Tue, 4 Aug 2026 17:52:37 +0200 Subject: [PATCH 2/2] code formatting fixed --- .../util/autofill/Api30AutofillResponseBuilder.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt b/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt index b8b1cb20c8..d872527830 100644 --- a/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt +++ b/app/src/main/java/app/passwordstore/util/autofill/Api30AutofillResponseBuilder.kt @@ -184,13 +184,13 @@ class Api30AutofillResponseBuilder private constructor(form: FillableForm) : matchedFiles: List, ): FillResponse? { var datasetCount = 0 - val maxSuggestions = inlineSuggestionsRequest?.maxSuggestionCount - ?: InlineSuggestionsRequest.SUGGESTION_COUNT_UNLIMITED + val maxSuggestions = + inlineSuggestionsRequest?.maxSuggestionCount + ?: InlineSuggestionsRequest.SUGGESTION_COUNT_UNLIMITED val imeSpecs = inlineSuggestionsRequest?.inlinePresentationSpecs ?: emptyList() fun nextImeSpec(): InlinePresentationSpec? = when { - datasetCount < maxSuggestions -> - imeSpecs.getOrNull(datasetCount) ?: imeSpecs.lastOrNull() + datasetCount < maxSuggestions -> imeSpecs.getOrNull(datasetCount) ?: imeSpecs.lastOrNull() else -> null }