Tích hợp tính năng tự động điền với IME và các dịch vụ tự động điền

Kể từ Android 11, bàn phím và các trình chỉnh sửa phương thức nhập (IME) khác có thể hiển thị các đề xuất tự động điền cùng dòng, trong một dải đề xuất hoặc ở nơi tương tự, thay vì hệ thống hiển thị các đề xuất này trong một trình đơn. Vì các đề xuất tự động điền này có thể chứa dữ liệu riêng tư, chẳng hạn như mật khẩu hoặc thông tin thẻ tín dụng, nên các đề xuất sẽ bị ẩn khỏi IME cho đến khi người dùng chọn một đề xuất. Hãy cập nhật các IME và dịch vụ tự động điền, chẳng hạn như trình quản lý mật khẩu để sử dụng tính năng này. Nếu một IME hoặc dịch vụ tự động điền không hỗ trợ tính năng tự động điền cùng dòng, thì các đề xuất sẽ hiển thị trong một trình đơn, như trong các phiên bản trước Android 11.

Quy trình làm việc

Trong quy trình này, IME có nghĩa là bàn phím hiện tại hoặc trình chỉnh sửa phương thức nhập khác và trình cung cấp đề xuất có nghĩa là trình cung cấp phù hợp của các đề xuất tự động điền đó. Tuỳ thuộc vào trường nhập dữ liệu và các chế độ cài đặt của người dùng, trình cung cấp đề xuất có thể là nền tảng hoặc một dịch vụ tự động điền.

  1. Người dùng tập trung vào một trường nhập dữ liệu kích hoạt việc tự động điền, chẳng hạn như trường nhập mật khẩu hoặc thông tin thẻ tín dụng.

  2. Nền tảng này sẽ truy vấn IME hiện tại và trình cung cấp đề xuất thích hợp để xem chúng có hỗ trợ tính năng tự động điền cùng dòng hay không. Nếu IME hoặc trình cung cấp đề xuất không hỗ trợ tính năng tự động điền cùng dòng, thì đề xuất sẽ xuất hiện trong một trình đơn, như trên Android 10 trở xuống.

  3. Nền tảng này sẽ yêu cầu IME đưa ra một yêu cầu đề xuất. Yêu cầu đề xuất này chỉ định số lượng đề xuất tối đa sẽ hiển thị, đồng thời cung cấp thông số trình bày cho mỗi đề xuất. Thông số trình bày chỉ định các thông số như kích thước tối đa, kích thước văn bản, màu sắc và dữ liệu phông chữ để trình cung cấp đề xuất khớp với giao diện của IME.

  4. Nền tảng này sẽ yêu cầu trình cung cấp đề xuất đưa ra tối đa số đề xuất đã yêu cầu. Mỗi đề xuất bao gồm một lệnh gọi lại để phóng to View chứa giao diện người dùng của đề xuất.

  5. Nền tảng này sẽ thông báo cho IME biết rằng các đề xuất đã sẵn sàng. IME hiển thị các đề xuất bằng cách gọi phương thức gọi lại để tăng cường View của từng đề xuất. Để bảo vệ thông tin riêng tư của người dùng, IME không xem các đề xuất ở giai đoạn này.

  6. Nếu người dùng chọn một trong các đề xuất, thì IME sẽ được thông báo giống như khi người dùng chọn một đề xuất trong trình đơn hệ thống.

Các phần sau đây mô tả cách định cấu hình IME hoặc dịch vụ tự động điền để hỗ trợ tính năng tự động điền cùng dòng.

Định cấu hình IME để hỗ trợ tính năng tự động điền cùng dòng

Phần này mô tả cách định cấu hình IME để hỗ trợ tính năng tự động điền cùng dòng. Nếu IME của bạn không hỗ trợ tính năng tự động điền cùng dòng, thì theo mặc định, nền tảng sẽ hiện các đề xuất tự động điền trong một trình đơn.

IME của bạn phải đặt thuộc tính supportsInlinedSuggestions thành true:

<input-method
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

Khi nền tảng cần đề xuất tự động điền, nó sẽ gọi phương thức InputMethodService.onCreateInlineSuggestionsRequest() của IME. Bạn phải triển khai phương thức này. Trả về một InlineSuggestionsRequest nêu rõ những thông tin sau:

  • Số lượng đề xuất mà IME của bạn muốn nhận được.
  • Một InlinePresentationSpec cho từng đề xuất, xác định cách đề xuất phải được hiển thị.

Khi có đề xuất, nền tảng sẽ gọi phương thức onInlineSuggestionsResponse() của IME, chuyển một InlineSuggestionsResponse chứa các đề xuất. Bạn phải triển khai phương thức này. Trong quá trình triển khai, hãy gọi InlineSuggestionsResponse.getInlineSuggestions() để nhận danh sách các đề xuất, sau đó tăng cường từng đề xuất bằng cách gọi phương thức InlineSuggestion.inflate().

Định cấu hình dịch vụ tự động điền để hỗ trợ tính năng tự động điền cùng dòng

Phần này mô tả cách định cấu hình dịch vụ tự động điền để hỗ trợ tính năng tự động điền cùng dòng. Nếu ứng dụng của bạn không hỗ trợ tính năng tự động điền cùng dòng, thì theo mặc định, nền tảng sẽ hiện các đề xuất tự động điền trong một trình đơn.

Dịch vụ tự động điền phải đặt thuộc tính supportsInlinedSuggestions thành true:

<autofill-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:supportsInlineSuggestions="true"/>

Khi IME cần các đề xuất tự động điền, nền tảng sẽ gọi phương thức onFillRequest() của dịch vụ tự động điền, giống như trong các phiên bản trước Android 11. Tuy nhiên, dịch vụ của bạn phải gọi phương thứcgetInlineSuggestionsRequest() của đối tượng FillRequest đã chuyển để nhận InlineSuggestionsRequest do IME tạo. InlineSuggestionsRequest chỉ định số lượng đề xuất cùng dòng cần thiết và cách trình bày từng đề xuất. Nếu IME không hỗ trợ các đề xuất cùng dòng, thì phương thức này sẽ trả về null.

Dịch vụ tự động điền của bạn sẽ tạo ra các đối tượng InlinePresentation, lên tới số lượng tối đa được yêu cầu trong InlineSuggestionsRequest. Bản trình bày của bạn phải tuân thủ các quy định ràng buộc về kích thước do InlineSuggestionsRequest chỉ định. Để trả về các đề xuất cho IME, hãy gọi Dataset.Builder.setValue() một lần cho từng đề xuất. Android 11 cung cấp phiên bản của Dataset.Builder.setValue() để hỗ trợ các đề xuất cùng dòng.