FillResponse.Builder


public static final class FillResponse.Builder
extends Object

java.lang.Object
   ↳ android.service.autofill.FillResponse.Builder


Builder for FillResponse objects. You must to provide at least one dataset or set an authentication intent with a presentation view.

Summary

Public constructors

Builder()

Public methods

FillResponse.Builder addDataset(Dataset dataset)

Adds a new Dataset to this response.

FillResponse build()

Builds a new FillResponse instance.

FillResponse.Builder disableAutofill(long duration)

Disables autofill for the app or activity.

FillResponse.Builder setAuthentication(AutofillId[] ids, IntentSender authentication, RemoteViews presentation, InlinePresentation inlinePresentation)

This method was deprecated in API level 33. Use setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.service.autofill.Presentations) instead.

FillResponse.Builder setAuthentication(AutofillId[] ids, IntentSender authentication, Presentations presentations)

Triggers a custom UI before autofilling the screen with any data set in this response.

FillResponse.Builder setAuthentication(AutofillId[] ids, IntentSender authentication, RemoteViews presentation)

Triggers a custom UI before autofilling the screen with any data set in this response.

FillResponse.Builder setAuthentication(AutofillId[] ids, IntentSender authentication, RemoteViews presentation, InlinePresentation inlinePresentation, InlinePresentation inlineTooltipPresentation)

This method was deprecated in API level 33. Use setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.service.autofill.Presentations) instead.

FillResponse.Builder setClientState(Bundle clientState)

Sets a bundle with state that is passed to subsequent APIs that manipulate this response.

FillResponse.Builder setDetectedFieldClassifications(Set<FieldClassification> fieldInfos)

Adds a new FieldClassification to this response, to help the platform provide more accurate detection results.

FillResponse.Builder setDialogHeader(RemoteViews header)

Sets the presentation of header in fill dialog UI.

FillResponse.Builder setFieldClassificationIds(AutofillId... ids)

Sets which fields are used for field classification

Note: This method automatically adds the FillResponse#FLAG_TRACK_CONTEXT_COMMITED to the flags.

FillResponse.Builder setFillDialogTriggerIds(AutofillId... ids)

Sets which fields are used for the fill dialog UI.

FillResponse.Builder setFlags(int flags)

Sets flags changing the response behavior.

FillResponse.Builder setFooter(RemoteViews footer)

Sets a footer to be shown as the last element in the list of datasets.

FillResponse.Builder setHeader(RemoteViews header)

Sets a header to be shown as the first element in the list of datasets.

FillResponse.Builder setIconResourceId(int id)

Overwrites Save/Fill dialog header icon with a specific one specified by resource id.

FillResponse.Builder setIgnoredIds(AutofillId... ids)

Specifies views that should not trigger new AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback) requests.

FillResponse.Builder setPresentationCancelIds(int[] ids)

Sets target resource IDs of the child view in Presentation Template which will cancel the session when clicked.

FillResponse.Builder setSaveInfo(SaveInfo saveInfo)

Sets the SaveInfo associated with this response.

FillResponse.Builder setServiceDisplayNameResourceId(int id)

Overrides the service name in the Save Dialog header with a specific string defined in the service provider's manifest.xml

FillResponse.Builder setShowFillDialogIcon(boolean show)

Whether or not to show the Autofill provider icon inside of the Fill Dialog

FillResponse.Builder setShowSaveDialogIcon(boolean show)

Whether or not to show the Autofill provider icon inside of the Save Dialog

FillResponse.Builder setUserData(UserData userData)

Sets a specific UserData for field classification for this request only.

Inherited methods

Public constructors

Builder

public Builder ()

Public methods

addDataset

Added in API level 26
public FillResponse.Builder addDataset (Dataset dataset)

Adds a new Dataset to this response.

Note: on Android Build.VERSION_CODES.O, the total number of datasets is limited by the Binder transaction size, so it's recommended to keep it small (in the range of 10-20 at most) and use pagination by adding a fake authenticated dataset at the end with a presentation string like "Next 10" that would return a new FillResponse with the next 10 datasets, and so on. This limitation was lifted on Android Build.VERSION_CODES.O_MR1, although the Binder transaction size can still be reached if each dataset itself is too big.

Parameters
dataset Dataset: This value may be null.

Returns
FillResponse.Builder This builder. This value cannot be null.

disableAutofill

Added in API level 28
public FillResponse.Builder disableAutofill (long duration)

Disables autofill for the app or activity.

This method is useful to optimize performance in cases where the service knows it can not autofill an app—for example, when the service has a list of "denylisted" apps such as office suites.

By default, it disables autofill for all activities in the app, unless the response is flagged with FillResponse.FLAG_DISABLE_ACTIVITY_ONLY.

Autofill for the app or activity is automatically re-enabled after any of the following conditions:

  1. duration milliseconds have passed.
  2. The autofill service for the user has changed.
  3. The device has rebooted.

Note: Activities that are running when autofill is re-enabled remain disabled for autofill until they finish and restart.

Parameters
duration long: duration to disable autofill, in milliseconds.

Returns
FillResponse.Builder this builder This value cannot be null.

Throws
IllegalArgumentException if duration is not a positive number.
IllegalStateException if either addDataset(android.service.autofill.Dataset), setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.service.autofill.Presentations), setSaveInfo(android.service.autofill.SaveInfo), setClientState(android.os.Bundle), or setFieldClassificationIds(android.view.autofill.AutofillId) was already called.

setAuthentication

Added in API level 30
Deprecated in API level 33
public FillResponse.Builder setAuthentication (AutofillId[] ids, 
                IntentSender authentication, 
                RemoteViews presentation, 
                InlinePresentation inlinePresentation)

This method was deprecated in API level 33.
Use setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.service.autofill.Presentations) instead.

Triggers a custom UI before autofilling the screen with any data set in this response.

Note: Although the name of this method suggests that it should be used just for authentication flow, it can be used for other advanced flows; see AutofillService for examples.

This method is similar to setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.widget.RemoteViews), but also accepts an InlinePresentation presentation which is required for authenticating through the inline autofill flow.

Note: setHeader(android.widget.RemoteViews) or setFooter(android.widget.RemoteViews) does not work with InlinePresentation.

Parameters
ids AutofillId: id of Views that when focused will display the authentication UI. This value cannot be null.

authentication IntentSender: Intent to an activity with your authentication flow. This value may be null.

presentation RemoteViews: The presentation to visualize the response. This value may be null.

inlinePresentation InlinePresentation: The inlinePresentation to visualize the response inline. This value may be null.

Returns
FillResponse.Builder This builder. This value cannot be null.

Throws
IllegalArgumentException if any of the following occurs:
  • ids is null
  • ids is empty
  • ids contains a null element
  • both authentication and presentation are null
  • both authentication and presentation are non-null
  • both authentication and inlinePresentation are null
  • both authentication and inlinePresentation are non-null
IllegalStateException if a header or a footer are already set for this builder.

setAuthentication

Added in API level 33
public FillResponse.Builder setAuthentication (AutofillId[] ids, 
                IntentSender authentication, 
                Presentations presentations)

Triggers a custom UI before autofilling the screen with any data set in this response.

Note: Although the name of this method suggests that it should be used just for authentication flow, it can be used for other advanced flows; see AutofillService for examples.

This is typically useful when a user interaction is required to unlock their data vault if you encrypt the data set labels and data set data. It is recommended to encrypt only the sensitive data and not the data set labels which would allow auth on the data set level leading to a better user experience. Note that if you use sensitive data as a label, for example an email address, then it should also be encrypted. The provided intent must be an Activity which implements your authentication flow. Also if you provide an auth intent you also need to specify the presentation view to be shown in the fill UI for the user to trigger your authentication flow.

When a user triggers autofill, the system launches the provided intent whose extras will have the screen content and your client state. Once you complete your authentication flow you should set the Activity result to Activity.RESULT_OK and set the AutofillManager.EXTRA_AUTHENTICATION_RESULT extra with the fully populated response (or null if the screen cannot be autofilled).

For example, if you provided an empty response because the user's data was locked and marked that the response needs an authentication then in the response returned if authentication succeeds you need to provide all available data sets some of which may need to be further authenticated, for example a credit card whose CVV needs to be entered.

If you provide an authentication intent you must also provide a presentation which is used to visualize the response for triggering the authentication flow.

Note: Do not make the provided pending intent immutable by using PendingIntent.FLAG_IMMUTABLE as the platform needs to fill in the authentication arguments.

Note: setHeader(android.widget.RemoteViews) or setFooter(android.widget.RemoteViews) does not work with InlinePresentation.

Parameters
ids AutofillId: id of Views that when focused will display the authentication UI. This value cannot be null.

authentication IntentSender: Intent to an activity with your authentication flow. This value may be null.

presentations Presentations: The presentations to visualize the response. This value may be null.

Returns
FillResponse.Builder This builder.

Throws
IllegalArgumentException if any of the following occurs:
  • ids is null
  • ids is empty
  • ids contains a null element
  • authentication is null, but either or both of presentations.getPresentation() and presentations.getInlinePresentation() is non-null
  • authentication is non-{null, but both presentations.getPresentation() and presentations.getInlinePresentation() are null
IllegalStateException if a header or a footer are already set for this builder.

setAuthentication

public FillResponse.Builder setAuthentication (AutofillId[] ids, 
                IntentSender authentication, 
                RemoteViews presentation)

Triggers a custom UI before autofilling the screen with any data set in this response.

Note: Although the name of this method suggests that it should be used just for authentication flow, it can be used for other advanced flows; see AutofillService for examples.

This is typically useful when a user interaction is required to unlock their data vault if you encrypt the data set labels and data set data. It is recommended to encrypt only the sensitive data and not the data set labels which would allow auth on the data set level leading to a better user experience. Note that if you use sensitive data as a label, for example an email address, then it should also be encrypted. The provided intent must be an Activity which implements your authentication flow. Also if you provide an auth intent you also need to specify the presentation view to be shown in the fill UI for the user to trigger your authentication flow.

When a user triggers autofill, the system launches the provided intent whose extras will have the screen content and your client state. Once you complete your authentication flow you should set the Activity result to Activity.RESULT_OK and set the AutofillManager.EXTRA_AUTHENTICATION_RESULT extra with the fully populated response (or null if the screen cannot be autofilled).

IMPORTANT: Extras must be non-null on the intent being set for Android 12 otherwise it will cause a crash. Do not use Activity#setResult(int), instead use Activity#setResult(int, Intent)

Parameters
ids AutofillId

authentication IntentSender

presentation RemoteViews

Returns
FillResponse.Builder

setAuthentication

Added in API level 31
Deprecated in API level 33
public FillResponse.Builder setAuthentication (AutofillId[] ids, 
                IntentSender authentication, 
                RemoteViews presentation, 
                InlinePresentation inlinePresentation, 
                InlinePresentation inlineTooltipPresentation)

This method was deprecated in API level 33.
Use setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.service.autofill.Presentations) instead.

Triggers a custom UI before autofilling the screen with any data set in this response.

This method like setAuthentication(android.view.autofill.AutofillId[], android.content.IntentSender, android.widget.RemoteViews, android.service.autofill.InlinePresentation) but allows setting an InlinePresentation for the inline suggestion tooltip.

Parameters
ids AutofillId: This value cannot be null.

authentication IntentSender: This value may be null.

presentation RemoteViews: This value may be null.

inlinePresentation InlinePresentation: This value may be null.

inlineTooltipPresentation InlinePresentation: This value may be null.

Returns
FillResponse.Builder This value cannot be null.

setClientState

Added in API level 26
public FillResponse.Builder setClientState (Bundle clientState)

Sets a bundle with state that is passed to subsequent APIs that manipulate this response.

You can use this bundle to store intermediate state that is passed to subsequent calls to AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback) and AutofillService#onSaveRequest(SaveRequest, SaveCallback), and you can also retrieve it by calling FillEventHistory.Event#getClientState().

If this method is called on multiple FillResponse objects for the same screen, just the latest bundle is passed back to the service.

Parameters
clientState Bundle: The custom client state. This value may be null.

Returns
FillResponse.Builder This builder. This value cannot be null.

setDetectedFieldClassifications

Added in API level 34
public FillResponse.Builder setDetectedFieldClassifications (Set<FieldClassification> fieldInfos)

Adds a new FieldClassification to this response, to help the platform provide more accurate detection results. Call this when a field has been detected with a type. Altough similiarly named with setFieldClassificationIds(AutofillId), it provides a different functionality - setFieldClassificationIds should be used when a field is only suspected to be Autofillable. This method should be used when a field is certainly Autofillable with a certain type.

Parameters
fieldInfos Set: This value cannot be null.

Returns
FillResponse.Builder This value cannot be null.

setDialogHeader

Added in API level 33
public FillResponse.Builder setDialogHeader (RemoteViews header)

Sets the presentation of header in fill dialog UI. The header should have a prompt for what datasets are shown in the dialog. If this is not set, the dialog only shows your application icon. More details about the fill dialog, see fill dialog UI

Parameters
header RemoteViews: This value cannot be null.

Returns
FillResponse.Builder This value cannot be null.

setFieldClassificationIds

Added in API level 28
public FillResponse.Builder setFieldClassificationIds (AutofillId... ids)

Sets which fields are used for field classification

Note: This method automatically adds the FillResponse#FLAG_TRACK_CONTEXT_COMMITED to the flags.

Parameters
ids AutofillId: This value cannot be null.

Returns
FillResponse.Builder This value cannot be null.

Throws
IllegalArgumentException is length of ids args is more than UserData#getMaxFieldClassificationIdsSize().
IllegalStateException if build() or disableAutofill(long) was already called.
NullPointerException if ids or any element on it is null.

setFillDialogTriggerIds

Added in API level 33
public FillResponse.Builder setFillDialogTriggerIds (AutofillId... ids)

Sets which fields are used for the fill dialog UI. More details about the fill dialog, see fill dialog UI

Parameters
ids AutofillId: This value cannot be null.

Returns
FillResponse.Builder This value cannot be null.

Throws
IllegalStateException if build() was already called.
NullPointerException if ids or any element on it is null.

setFlags

Added in API level 28
public FillResponse.Builder setFlags (int flags)

Sets flags changing the response behavior.

Parameters
flags int: a combination of FillResponse.FLAG_TRACK_CONTEXT_COMMITED and FillResponse.FLAG_DISABLE_ACTIVITY_ONLY, or 0. Value is either 0 or a combination of FillResponse.FLAG_TRACK_CONTEXT_COMMITED, FillResponse.FLAG_DISABLE_ACTIVITY_ONLY, FillResponse.FLAG_DELAY_FILL, and android.service.autofill.FillResponse.FLAG_CREDENTIAL_MANAGER_RESPONSE

Returns
FillResponse.Builder This builder. This value cannot be null.

setFooter

Added in API level 28
public FillResponse.Builder setFooter (RemoteViews footer)

Sets a footer to be shown as the last element in the list of datasets.

When this method is called, you must also add a dataset, otherwise build() throws an IllegalStateException. Similarly, this method should only be used on FillResponses that do not require authentication (as the footer could have been set directly in the main presentation in these cases).

Theme does not work with RemoteViews layout. Avoid hardcoded text color or background color: Autofill on different platforms may have different themes.

Parameters
footer RemoteViews: a presentation to represent the footer. This presentation is not clickable —calling RemoteViews#setOnClickPendingIntent(int, android.app.PendingIntent) on it would have no effect. This value cannot be null.

Returns
FillResponse.Builder this builder This value cannot be null.

Throws
IllegalStateException if the FillResponse requires authentication.

setHeader

Added in API level 28
public FillResponse.Builder setHeader (RemoteViews header)

Sets a header to be shown as the first element in the list of datasets.

When this method is called, you must also add a dataset, otherwise build() throws an IllegalStateException. Similarly, this method should only be used on FillResponses that do not require authentication (as the header could have been set directly in the main presentation in these cases).

Theme does not work with RemoteViews layout. Avoid hardcoded text color or background color: Autofill on different platforms may have different themes.

Parameters
header RemoteViews: a presentation to represent the header. This presentation is not clickable —calling RemoteViews#setOnClickPendingIntent(int, android.app.PendingIntent) on it would have no effect. This value cannot be null.

Returns
FillResponse.Builder this builder This value cannot be null.

Throws
IllegalStateException if an authentication was already set for this builder.

setIconResourceId

Added in API level 34
public FillResponse.Builder setIconResourceId (int id)

Overwrites Save/Fill dialog header icon with a specific one specified by resource id. The image is pulled from the package, so id should be defined in the manifest.

Parameters
id int: Drawable resource id of the icon to be used. A value of 0 indicates to use the default header icon.

Returns
FillResponse.Builder this builder This value cannot be null.

setIgnoredIds

Added in API level 26
public FillResponse.Builder setIgnoredIds (AutofillId... ids)

Specifies views that should not trigger new AutofillService#onFillRequest(FillRequest, android.os.CancellationSignal, FillCallback) requests.

This is typically used when the service cannot autofill the view; for example, a text field representing the result of a Captcha challenge.

Parameters
ids AutofillId

Returns
FillResponse.Builder This value cannot be null.

setPresentationCancelIds

Added in API level 30
public FillResponse.Builder setPresentationCancelIds (int[] ids)

Sets target resource IDs of the child view in Presentation Template which will cancel the session when clicked. Those targets will be respectively applied to a child of the header, footer and each Dataset.

Parameters
ids int: array of the resource id. Empty list or non-existing id has no effect. This value may be null.

Returns
FillResponse.Builder this builder This value cannot be null.

Throws
IllegalStateException if build() was already called.

setSaveInfo

Added in API level 26
public FillResponse.Builder setSaveInfo (SaveInfo saveInfo)

Sets the SaveInfo associated with this response.

Parameters
saveInfo SaveInfo: This value cannot be null.

Returns
FillResponse.Builder This builder. This value cannot be null.

setServiceDisplayNameResourceId

Added in API level 34
public FillResponse.Builder setServiceDisplayNameResourceId (int id)

Overrides the service name in the Save Dialog header with a specific string defined in the service provider's manifest.xml

Parameters
id int: Resoure Id of the custom string defined in the provider's manifest. If set to 0, the default name will be used.

Returns
FillResponse.Builder this builder This value cannot be null.

setShowFillDialogIcon

Added in API level 34
public FillResponse.Builder setShowFillDialogIcon (boolean show)

Whether or not to show the Autofill provider icon inside of the Fill Dialog

Parameters
show boolean: True to show, false to hide. Defaults to true.

Returns
FillResponse.Builder this builder This value cannot be null.

setShowSaveDialogIcon

Added in API level 34
public FillResponse.Builder setShowSaveDialogIcon (boolean show)

Whether or not to show the Autofill provider icon inside of the Save Dialog

Parameters
show boolean: True to show, false to hide. Defaults to true.

Returns
FillResponse.Builder this builder This value cannot be null.

setUserData

Added in API level 29
public FillResponse.Builder setUserData (UserData userData)

Sets a specific UserData for field classification for this request only.

Any fields in this UserData will override corresponding fields in the generic UserData object

Parameters
userData UserData: This value cannot be null.

Returns
FillResponse.Builder this builder This value cannot be null.

Throws
IllegalStateException if the FillResponse requires authentication.