1Password Autofill service with Jetpack Compose

tadfisher
tadfisher
Community Member

Hi!

I'm an Android engineer working on a team with a Jetpack Compose app in production. Compose provides some rudimentary Autofill support, but we're seeing some issues in conjunction with 1Password for Android that aren't occurring when using other Autofill services (we've tested with Google, Password Store, and Firefox). Notably:

  1. 1Password will fill an email address field correctly (with AutofillType.Username and AutofillType.EmailAddress), but it will not fill the associated password field. We've verified the autofill ViewStructure is populated with both fields, with the correct autofill hints and valid virtual view bounding boxes.
  2. Upon calling Autofill.requestAutofillForNode() on the password field, 1Password does not display, either using GBoard's inline suggestions or its own popup.
  3. When (2) occurs, 1Password will no longer display for the email address field, and in fact will no longer display at all until the app is killed and restarted. In this state, we are receiving the EVENT_INPUT_UNAVAILABLE event from AutofillManager, and the Compose Autofill API is reporting that autofill is not available.

These issues have been observed on the following devices:

  1. Samsung Galaxy S8 (API 29)
    • Stock Samsung keyboard
    • GBoard, with and without inline suggestions enabled
  2. LG G8 (API 29)
    • Stock LG keyboard
    • GBoard, with and without inline suggestions enabled
  3. Google Pixel 6 (API 31)
    • GBoard, with and without inline suggestions enabled
  4. Google Pixel 6 Pro (API 31)
    • GBoard, with and without inline suggestions enabled

We've tested the production version (7.9.1) and the beta version (7.9.2.BETA-1).

Our app is on the Play Store here if you would like to take a look. I can also provide a debug build if that would help.

I can take some time to create a minimal project to reproduce the issue, but I'd like to know if that would be useful first. Also, is there any additional debug data I can provide?

Thanks!


1Password Version: 7.9.1, 7.9.2.BETA-1
Extension Version: Not Provided
OS Version: Android 10, Android 12

Comments

  • Hi @tadfisher. Thanks for testing your app with 1Password and sharing your findings with us.

    1Password has an additional requirement for filling password fields where the input type of the field must also be of a password type. This appears to be the issue since 1Password does not receive the input type value for both the username and password fields in your app.

    I’ve confirmed the same behaviour on my end where I’ve set the keyboardOptions and visualTransformation for the password field. Those attributes are immediately reflective visually and with the IME but do not carry over as an input type to the Autofill service.

    Although Autofill support is currently limited and is in the experimental phase with Jetpack Compose, we’re very excited to see that it is in active development and hope to see full support in the near future.

    I hope that helps. Let us know if you have any questions!

  • tadfisher
    tadfisher
    Community Member

    Thank you! I've patched compose-ui to populate inputType in the Autofill view structure and it works correctly with 1Password. The patch is under review here if you'd like to review.

  • Hello @tadfisher thanks for sharing that with us! I'm glad to hear you were able to get things working with 1Password.

  • @tadfisher that's fantastic! Thank you. We'll follow the code review and provide any support where we can help!

  • joaocevada
    joaocevada
    Community Member

    Hi!

    I'm getting a similar issue where 1Password is not working in compose views. I noticed that the the patch was never merged, and after inspecting the ViewStructure I noticed that the inputType is still not being set by compose's Autofill.

    I'm wondering what you did to get past this issue?
    Did you at some point drop the requirement of the input type of the having to be password type?

    Thanks!

  • Hi @joaocevada. We have not dropped the requirement of the input type of the field needing to be a password type. Until we're able to receive the input type, we may not be able to fill into those fields.

This discussion has been closed.