Added in API level 26

Builder


class Builder
kotlin.Any
   ↳ android.service.autofill.Dataset.Builder

A builder for Dataset objects. You must provide at least one value for a field or set an authentication intent.

Summary

Public constructors
Builder(presentation: RemoteViews)

Creates a new builder.

Builder(presentations: Presentations)

Creates a new builder.

Creates a new builder for a dataset where each field will be visualized independently.

Public methods
Dataset

Creates a new Dataset instance.

Dataset.Builder
setAuthentication(authentication: IntentSender?)

Triggers a custom UI before before autofilling the screen with the contents of this dataset.

Dataset.Builder
setField(id: AutofillId, field: Field?)

Sets the value of a field.

Dataset.Builder
setField(hint: String, field: Field)

Adds a field to this Dataset with a specific type.

Dataset.Builder

Adds a field to this Dataset that is relevant to all applicable hints.

Dataset.Builder
setId(id: String?)

Sets the id for the dataset so its usage can be tracked.

Dataset.Builder

Sets the InlinePresentation used to visualize this dataset as inline suggestions.

Dataset.Builder
setInlinePresentation(inlinePresentation: InlinePresentation, inlineTooltipPresentation: InlinePresentation)

Visualizes this dataset as inline suggestions.

Dataset.Builder

Sets the value of a field.

Dataset.Builder
setValue(id: AutofillId, value: AutofillValue?, presentation: RemoteViews)

Sets the value of a field, using a custom presentation to visualize it.

Dataset.Builder
setValue(id: AutofillId, value: AutofillValue?, filter: Pattern?)

Sets the value of a field using an explicit filter.

Dataset.Builder
setValue(id: AutofillId, value: AutofillValue?, filter: Pattern?, presentation: RemoteViews)

Sets the value of a field, using a custom presentation to visualize it and a explicit filter.

Dataset.Builder
setValue(id: AutofillId, value: AutofillValue?, presentation: RemoteViews, inlinePresentation: InlinePresentation)

Sets the value of a field, using a custom presentation to visualize it and an InlinePresentation to visualize it as an inline suggestion.

Dataset.Builder
setValue(id: AutofillId, value: AutofillValue?, presentation: RemoteViews, inlinePresentation: InlinePresentation, inlineTooltipPresentation: InlinePresentation)

Sets the value of a field, using a custom presentation to visualize it and an InlinePresentation to visualize it as an inline suggestion.

Dataset.Builder
setValue(id: AutofillId, value: AutofillValue?, filter: Pattern?, presentation: RemoteViews, inlinePresentation: InlinePresentation)

Sets the value of a field, using a custom presentation to visualize it and a explicit filter, and an InlinePresentation to visualize it as an inline suggestion.

Dataset.Builder
setValue(id: AutofillId, value: AutofillValue?, filter: Pattern?, presentation: RemoteViews, inlinePresentation: InlinePresentation, inlineTooltipPresentation: InlinePresentation)

Sets the value of a field, using a custom presentation to visualize it and a explicit filter, and an InlinePresentation to visualize it as an inline suggestion.

Public constructors

Builder

Added in API level 26
Builder(presentation: RemoteViews)

Deprecated: Use Builder(android.service.autofill.Presentations) instead.

Creates a new builder.

Parameters
presentation RemoteViews: The presentation used to visualize this dataset. This value cannot be null.

Builder

Added in API level 33
Builder(presentations: Presentations)

Creates a new builder.

Parameters
presentations Presentations: The presentations used to visualize this dataset. This value cannot be null.

Builder

Added in API level 26
Builder()

Creates a new builder for a dataset where each field will be visualized independently.

When using this constructor, a presentation must be provided for each field through setField(android.view.autofill.AutofillId,android.service.autofill.Field).

Public methods

build

Added in API level 26
fun build(): Dataset

Creates a new Dataset instance.

You should not interact with this builder once this method is called.

Return
Dataset The built dataset. This value cannot be null.
Exceptions
java.lang.IllegalStateException if no field was set (through setField(android.view.autofill.AutofillId,android.service.autofill.Field)), or if build() was already called.

setAuthentication

Added in API level 26
fun setAuthentication(authentication: IntentSender?): Dataset.Builder

Triggers a custom UI before before autofilling the screen with the contents of this dataset.

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 called when you need to provide an authentication UI for the data set. For example, when a data set contains credit card information (such as number, expiration date, and verification code), you can display UI asking for the verification code before filing in the data. Even if the data set is completely populated the system will launch the specified authentication intent and will need your approval to fill it in. Since the data set is "locked" until the user authenticates it, typically this data set name is masked (for example, "VISA....1234"). Typically you would want to store the data set labels non-encrypted and the actual sensitive data encrypted and not in memory. This allows showing the labels in the UI while involving the user if one of the items with these labels is chosen. Note that if you use sensitive data as a label, for example an email address, then it should also be encrypted.

When a user triggers autofill, the system launches the provided intent whose extras will have the screen content, and your client. Once you complete your authentication flow you should set the activity result to android.app.Activity#RESULT_OK and provide the fully populated dataset or a fully-populated response by setting it to the android.view.autofill.AutofillManager#EXTRA_AUTHENTICATION_RESULT extra. If you provide a dataset in the result, it will replace the authenticated dataset and will be immediately filled in. An exception to this behavior is if the original dataset represents a pinned inline suggestion (i.e. any of the field in the dataset has a pinned inline presentation, see InlinePresentation#isPinned()), then the original dataset will not be replaced, so that it can be triggered as a pending intent again. If you provide a response, it will replace the current response and the UI will be refreshed. For example, if you provided credit card information without the CVV for the data set in the response then the returned data set should contain the CVV entry.

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

Parameters
authentication IntentSender?: Intent to an activity with your authentication flow. This value may be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setField

Added in API level 33
fun setField(
    id: AutofillId,
    field: Field?
): Dataset.Builder

Sets the value of a field. Before Android 13, this information could be provided using several overloaded setValue(...) methods. This method replaces those with a Builder pattern. For example, in the old workflow, the app sets a field would be:

Dataset.Builder dataset = new Dataset.Builder();
   if (filter != null) {
       if (presentation != null) {
           if (inlinePresentation != null) {
               dataset.setValue(id, value, filter, presentation, inlinePresentation)
           } else {
               dataset.setValue(id, value, filter, presentation);
           }
       } else {
           dataset.setValue(id, value, filter);
       }
   } else {
       if (presentation != null) {
           if (inlinePresentation != null) {
               dataset.setValue(id, value, presentation, inlinePresentation)
           } else {
               dataset.setValue(id, value, presentation);
           }
       } else {
           dataset.setValue(id, value);
       }
   }
   

The new workflow would be:

Field.Builder fieldBuilder = new Field.Builder();
  if (value != null) {
      fieldBuilder.setValue(value);
  }
  if (filter != null) {
      fieldBuilder.setFilter(filter);
  }
  Presentations.Builder presentationsBuilder = new Presentations.Builder();
  if (presentation != null) {
      presentationsBuilder.setMenuPresentation(presentation);
  }
  if (inlinePresentation != null) {
      presentationsBuilder.setInlinePresentation(inlinePresentation);
  }
  if (dialogPresentation != null) {
      presentationsBuilder.setDialogPresentation(dialogPresentation);
  }
  fieldBuilder.setPresentations(presentationsBuilder.build());
  dataset.setField(id, fieldBuilder.build());
  
Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
field Field?: the fill information about the field. This value may be null.
Return
Dataset.Builder this builder.
Exceptions
java.lang.IllegalStateException if build() was already called.

setField

Added in API level 34
fun setField(
    hint: String,
    field: Field
): Dataset.Builder

Adds a field to this Dataset with a specific type. This is used to send back Field information when Autofilling with platform detections is on. Platform detections are on when receiving a populated list from FillRequest#getHints(). Populate every field/type known for this user for this app. For example, if getHints() contains "username" and "password", a new Dataset should be created that calls this method twice, one for the username, then another for the password (assuming the only one credential pair is found for the user). If a user has two credential pairs, then two Datasets should be created, and so on.

Parameters
hint String: An autofill hint returned from android.service.autofill.FillRequest#getHints(). This value cannot be null.
field Field: the fill information about the field. This value cannot be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called or this builder also contains AutofillId information

setFieldForAllHints

Added in API level 34
fun setFieldForAllHints(field: Field): Dataset.Builder

Adds a field to this Dataset that is relevant to all applicable hints. This is used to provide field information when autofill with platform detections is enabled. Platform detections are on when receiving a populated list from FillRequest#getHints().

Parameters
field Field: the fill information about the field. This value cannot be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called or this builder also contains AutofillId information

setId

Added in API level 26
fun setId(id: String?): Dataset.Builder

Sets the id for the dataset so its usage can be tracked.

Dataset usage can be tracked for 2 purposes:

Parameters
id String?: id for this dataset or null to unset.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setInlinePresentation

Added in API level 30
Deprecated in API level 33
fun setInlinePresentation(inlinePresentation: InlinePresentation): Dataset.Builder

Deprecated: Use Builder(android.service.autofill.Presentations) instead.

Sets the InlinePresentation used to visualize this dataset as inline suggestions. If the dataset supports inline suggestions this should not be null.

Parameters
inlinePresentation InlinePresentation: This value cannot be null.
Return
Dataset.Builder this builder.
Exceptions
java.lang.IllegalStateException if build() was already called.

setInlinePresentation

Added in API level 31
Deprecated in API level 33
fun setInlinePresentation(
    inlinePresentation: InlinePresentation,
    inlineTooltipPresentation: InlinePresentation
): Dataset.Builder

Deprecated: Use Builder(android.service.autofill.Presentations) instead.

Visualizes this dataset as inline suggestions.

Parameters
inlinePresentation InlinePresentation: the InlinePresentation used to visualize this dataset as inline suggestions. If the dataset supports inline suggestions this should not be null.
inlineTooltipPresentation InlinePresentation: the InlinePresentation used to show the tooltip for the inlinePresentation. This value cannot be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setValue

Added in API level 26
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field. Note: Prior to Android android.os.Build.VERSION_CODES#P, this method would throw an IllegalStateException if this builder was constructed without a presentation. Android android.os.Build.VERSION_CODES#P and higher removed this restriction because datasets used as an authentication result do not need a presentation. But if you don't set the presentation in the constructor in a dataset that is meant to be shown to the user, the autofill UI for this field will not be displayed.

Note: On Android android.os.Build.VERSION_CODES#P and higher, datasets that require authentication can be also be filtered by passing a text value as the value parameter.

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setValue

Added in API level 26
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?,
    presentation: RemoteViews
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field, using a custom presentation to visualize it.

Note: On Android android.os.Build.VERSION_CODES#P and higher, datasets that require authentication can be also be filtered by passing a text value as the value parameter.

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

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: the value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
presentation RemoteViews: the presentation used to visualize this field. This value cannot be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setValue

Added in API level 28
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?,
    filter: Pattern?
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field using an explicit filter.

This method is typically used when the dataset requires authentication and the service does not know its value but wants to hide the dataset after the user enters a minimum number of characters. For example, if the dataset represents a credit card number and the service does not want to show the "Tap to authenticate" message until the user tapped 4 digits, in which case the filter would be Pattern.compile("\\d.{4,}").

Note: If the dataset requires authentication but the service knows its text value it's easier to filter by calling setValue(android.view.autofill.AutofillId,android.view.autofill.AutofillValue) and use the value to filter.

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: the value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
filter Pattern?: regex used to determine if the dataset should be shown in the autofill UI; when null, it disables filtering on that dataset (this is the recommended approach when value is not null and field contains sensitive data such as passwords).
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if the builder was constructed without a presentation or build() was already called.

setValue

Added in API level 28
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?,
    filter: Pattern?,
    presentation: RemoteViews
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field, using a custom presentation to visualize it and a explicit filter.

This method is typically used when the dataset requires authentication and the service does not know its value but wants to hide the dataset after the user enters a minimum number of characters. For example, if the dataset represents a credit card number and the service does not want to show the "Tap to authenticate" message until the user tapped 4 digits, in which case the filter would be Pattern.compile("\\d.{4,}").

Note: If the dataset requires authentication but the service knows its text value it's easier to filter by calling setValue(android.view.autofill.AutofillId,android.view.autofill.AutofillValue,android.widget.RemoteViews) and using the value to filter.

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: the value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
filter Pattern?: regex used to determine if the dataset should be shown in the autofill UI; when null, it disables filtering on that dataset (this is the recommended approach when value is not null and field contains sensitive data such as passwords).
presentation RemoteViews: the presentation used to visualize this field. This value cannot be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setValue

Added in API level 30
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?,
    presentation: RemoteViews,
    inlinePresentation: InlinePresentation
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field, using a custom presentation to visualize it and an InlinePresentation to visualize it as an inline suggestion.

Note: If the dataset requires authentication but the service knows its text value it's easier to filter by calling setValue(android.view.autofill.AutofillId,android.view.autofill.AutofillValue,android.widget.RemoteViews) and using the value to filter.

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: the value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
presentation RemoteViews: the presentation used to visualize this field. This value cannot be null.
inlinePresentation InlinePresentation: The InlinePresentation used to visualize this dataset as inline suggestions. If the dataset supports inline suggestions, this should not be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setValue

Added in API level 31
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?,
    presentation: RemoteViews,
    inlinePresentation: InlinePresentation,
    inlineTooltipPresentation: InlinePresentation
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field, using a custom presentation to visualize it and an InlinePresentation to visualize it as an inline suggestion.

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: the value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
presentation RemoteViews: the presentation used to visualize this field. This value cannot be null.
inlinePresentation InlinePresentation: The InlinePresentation used to visualize this dataset as inline suggestions. If the dataset supports inline suggestions, this should not be null.
inlineTooltipPresentation InlinePresentation: The InlinePresentation used to show the tooltip for the inlinePresentation. This value cannot be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setValue

Added in API level 30
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?,
    filter: Pattern?,
    presentation: RemoteViews,
    inlinePresentation: InlinePresentation
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field, using a custom presentation to visualize it and a explicit filter, and an InlinePresentation to visualize it as an inline suggestion.

This method is typically used when the dataset requires authentication and the service does not know its value but wants to hide the dataset after the user enters a minimum number of characters. For example, if the dataset represents a credit card number and the service does not want to show the "Tap to authenticate" message until the user tapped 4 digits, in which case the filter would be Pattern.compile("\\d.{4,}").

Note: If the dataset requires authentication but the service knows its text value it's easier to filter by calling setValue(android.view.autofill.AutofillId,android.view.autofill.AutofillValue,android.widget.RemoteViews) and using the value to filter.

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: the value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
filter Pattern?: regex used to determine if the dataset should be shown in the autofill UI; when null, it disables filtering on that dataset (this is the recommended approach when value is not null and field contains sensitive data such as passwords).
presentation RemoteViews: the presentation used to visualize this field. This value cannot be null.
inlinePresentation InlinePresentation: The InlinePresentation used to visualize this dataset as inline suggestions. If the dataset supports inline suggestions, this should not be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.

setValue

Added in API level 31
Deprecated in API level 33
fun setValue(
    id: AutofillId,
    value: AutofillValue?,
    filter: Pattern?,
    presentation: RemoteViews,
    inlinePresentation: InlinePresentation,
    inlineTooltipPresentation: InlinePresentation
): Dataset.Builder

Deprecated: Use setField(android.view.autofill.AutofillId,android.service.autofill.Field) instead.

Sets the value of a field, using a custom presentation to visualize it and a explicit filter, and an InlinePresentation to visualize it as an inline suggestion.

Parameters
id AutofillId: id returned by android.app.assist.AssistStructure.ViewNode#getAutofillId(). This value cannot be null.
value AutofillValue?: the value to be autofilled. Pass null if you do not have the value but the target view is a logical part of the dataset. For example, if the dataset needs authentication and you have no access to the value.
filter Pattern?: regex used to determine if the dataset should be shown in the autofill UI; when null, it disables filtering on that dataset (this is the recommended approach when value is not null and field contains sensitive data such as passwords).
presentation RemoteViews: the presentation used to visualize this field. This value cannot be null.
inlinePresentation InlinePresentation: The InlinePresentation used to visualize this dataset as inline suggestions. If the dataset supports inline suggestions, this should not be null.
inlineTooltipPresentation InlinePresentation: The InlinePresentation used to show the tooltip for the inlinePresentation. This value cannot be null.
Return
Dataset.Builder this builder. This value cannot be null.
Exceptions
java.lang.IllegalStateException if build() was already called.