From de1b976638dae3ca98c665d8cba3560f49898030 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim <4312191+fmeum@users.noreply.github.com> Date: Wed, 23 Dec 2020 06:13:10 +0100 Subject: Mark unfocused single password fields as fillable (#1258) Unfocused single password fields in forms with no other recognized fields must be marked as fillable or the Autofill service will no longer be invoked on that form. This is compatible with the restrictions of single-origin mode as filling only takes place after the password field has gained focus and the user has tapped the fill UI. For an example website where fill UI is not shown without this commit, open https://amazon.lbb.de and tab the user name field ("Benutzername") first before focusing the password field. (cherry picked from commit c15594b045ad035b2026a201acd2a89e3962de4d) --- .../autofillparser/AutofillStrategy.kt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillStrategy.kt b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillStrategy.kt index a98d6e81..9f34a200 100644 --- a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillStrategy.kt +++ b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillStrategy.kt @@ -187,6 +187,26 @@ internal val autofillStrategy = strategy { } } + // Fallback rule for the case of a login form with a password field and other fields that are + // not recognized by any other rule. If one of the other fields is focused and we return no + // response, the system will not invoke the service again if focus later changes to the password + // field. Hence, we must mark it as fillable now. + // This rule can apply in single origin mode since even though the password field may not be + // focused at the time the rule runs, the fill suggestion will only show if it ever receives + // focus. + rule(applyInSingleOriginMode = true) { + currentPassword { + takeSingle { hasAutocompleteHintCurrentPassword } + } + } + + // See above. + rule(applyInSingleOriginMode = true) { + genericPassword { + takeSingle { true } + } + } + // Match any focused password field with optional username field on manual request. rule(applyInSingleOriginMode = true, applyOnManualRequestOnly = true) { genericPassword { -- cgit v1.2.3