Autofill compatibility mode.
Autofill helps users fill credentials, addresses, payment methods, emails, etc without manually typing. When focus lands on a fillable element the platform captures a snapshot of the screen content and sends it to an autofill service for analysis and suggestions. The screen snapshot is a structured representation of the screen content. If this content is composed of standard widgets, autofill works out-of-the-box. However, some apps do their own rendering and the content in this case looks like a single view to the platform while it may have semantic structure. For example, a view may render a login page with two input test fields. The platform exposes APIs for apps to report virtual view structure allowing autofill services to handle apps that have virtual content. As opposed to apps using standard widgets, this case requires the app developer to implement the new APIs which may require a fair amount of code and could be seen as a processes that could take some time. The most prominent typs of apps that fall into this category are browsers. Until most apps rendering virtual content and specifically browsers don't implement the virutal APIs, autofill providers need to fall- back to using the accessibliity APIs to provide autofill support for these apps. This requires developers to work against two sets of APIs - autofill and accessibility - which is incovenient and error prone. Also, users need to enable two plugins - autofill and accessibility which is confusing. Additionally, the privacy and perfomance impact of using the accessibility APIs cannot be addressed while autofill providers need to use thes APis. This change adds an autofill compatibility mode that would allow autofill services to work with apps that don't implement the virtual structure autofill APIs. The key idea is to locally enable accessibility for the target package and remap accessibility to autofill APIs and vise versa. This way an autofill provider codes against a single set of APIs, the users enable a single plugin, the privacy/performance implications of using the accessibility APIs are addressed, the target app only takes a performance hit since accessibility is enabled locally which is still more efficient compared to the performance hit it would incur if accessibility is enabled globally. To enable compatibility mode an autofill service declares in its metadata which packages it is interested in and also what is the max version code of the package for which to enable compat mode. Targeted versioning allows targeting only older versions of the package that are known to not support autofill while newer versions that are known to support autofill would work in normal mode. Since compatibility mode should be used only as a fallback we have a white list setting with the packages for which this mode can be requested. This allows applying policy to target only apps that are known to not support autofill. Test: cts-tradefed run cts-dev -m CtsAutoFillServiceTestCases cts-tradefed run cts-dev -m CtsAccessibilityServiceTestCases bug:72811034 Change-Id: I11f1580ced0f8b4300a10b3a5174a1758a5702a0
Loading
Please register or sign in to comment