diff --git a/src/Android/Autofill/FieldCollection.cs b/src/Android/Autofill/FieldCollection.cs index 3c2e35358..8b29ab8e3 100644 --- a/src/Android/Autofill/FieldCollection.cs +++ b/src/Android/Autofill/FieldCollection.cs @@ -12,6 +12,7 @@ namespace Bit.Droid.Autofill private List _passwordFields = null; private List _usernameFields = null; private HashSet _ignoreSearchTerms = new HashSet { "search", "find", "recipient", "edit" }; + private HashSet _usernameTerms = new HashSet { "email", "phone", "username"}; private HashSet _passwordTerms = new HashSet { "password", "pswd" }; public List AutofillIds { get; private set; } = new List(); @@ -98,6 +99,11 @@ namespace Bit.Droid.Autofill _usernameFields.Add(usernameField); } } + + if (!_usernameFields.Any()) + { + _usernameFields = Fields.Where(f => FieldHasUsernameTerms(f)).ToList(); + } } return _usernameFields; } @@ -321,7 +327,7 @@ namespace Bit.Droid.Autofill } return inputTypePassword && !ValueContainsAnyTerms(f.IdEntry, _ignoreSearchTerms) && - !ValueContainsAnyTerms(f.Hint, _ignoreSearchTerms); + !ValueContainsAnyTerms(f.Hint, _ignoreSearchTerms) && !FieldHasUsernameTerms(f); } private bool FieldHasPasswordTerms(Field f) @@ -329,6 +335,11 @@ namespace Bit.Droid.Autofill return ValueContainsAnyTerms(f.IdEntry, _passwordTerms) || ValueContainsAnyTerms(f.Hint, _passwordTerms); } + private bool FieldHasUsernameTerms(Field f) + { + return ValueContainsAnyTerms(f.IdEntry, _usernameTerms) || ValueContainsAnyTerms(f.Hint, _usernameTerms); + } + private bool ValueContainsAnyTerms(string value, HashSet terms) { if (string.IsNullOrWhiteSpace(value))