Added in API level 26

AutofillManager


class AutofillManager
kotlin.Any
   ↳ android.view.autofill.AutofillManager

The AutofillManager class provides ways for apps and custom views to integrate with the Autofill Framework lifecycle.

To learn about using Autofill in your app, read the Autofill Framework guides.

Autofill lifecycle

The autofill lifecycle starts with the creation of an autofill context associated with an activity context. The autofill context is created when one of the following methods is called for the first time in an activity context, and the current user has an enabled autofill service:

Typically, the context is automatically created when the first view of the activity is focused because View.onFocusChanged() indirectly calls notifyViewEntered(android.view.View). App developers can call requestAutofill(android.view.View) to explicitly create it (for example, a custom view developer could offer a contextual menu action in a text-field view to let users manually request autofill).

After the context is created, the Android System creates a android.view.ViewStructure that represents the view hierarchy by calling View.dispatchProvideAutofillStructure(android.view.ViewStructure, int) in the root views of all application windows. By default, dispatchProvideAutofillStructure() results in subsequent calls to View.onProvideAutofillStructure(android.view.ViewStructure, int) and View.onProvideAutofillVirtualStructure(android.view.ViewStructure, int) for each view in the hierarchy.

The resulting android.view.ViewStructure is then passed to the autofill service, which parses it looking for views that can be autofilled. If the service finds such views, it returns a data structure to the Android System containing the following optional info:

  • Datasets used to autofill subsets of views in the activity.
  • Id of views that the service can save their values for future autofilling.

When the service returns datasets, the Android System displays an autofill dataset picker UI associated with the view, when the view is focused on and is part of a dataset. The application can be notified when the UI is shown by registering an AutofillCallback through registerCallback(android.view.autofill.AutofillManager.AutofillCallback). When the user selects a dataset from the UI, all views present in the dataset are autofilled, through calls to View.autofill(AutofillValue) or View.autofill(SparseArray).

When the service returns ids of savable views, the Android System keeps track of changes made to these views, so they can be used to determine if the autofill save UI is shown later.

The context is then finished when one of the following occurs:

Finally, after the autofill context is commited (i.e., not cancelled), the Android System shows an autofill save UI if the value of savable views have changed. If the user selects the option to Save, the current value of the views is then sent to the autofill service.

Additional notes

It is safe to call AutofillManager methods from any thread.
Requires the PackageManager#FEATURE_AUTOFILL feature which can be detected using PackageManager.hasSystemFeature(String).

Summary

Nested classes
abstract

Callback for autofill related events.

Constants
static String

Intent extra: The assist structure which captures the filled screen.

static String

Intent extra: The result of an authentication operation.

static String

Intent extra: The optional boolean extra field provided by the android.service.autofill.AutofillService accompanying the result of an authentication operation.

static String

Intent extra: The optional extras provided by the android.service.autofill.AutofillService.

static String

Intent extra: the android.view.inputmethod.InlineSuggestionsRequest in the autofill request.

Public methods
Unit

Called to indicate the current autofill context should be cancelled.

Unit

Called to indicate the current autofill context should be commited.

Unit

If the app calling this API has enabled autofill services they will be disabled.

ComponentName?

Returns the component name of the AutofillService that is enabled for the current user.

MutableList<String!>

Gets the name of all algorithms currently available for field classification.

String?

Gets the name of the default algorithm used for field classification.

AutofillId?

Gets the next unique autofill ID for the activity context.

UserData?

Gets the user data used for field classification.

String?

Gets the id of the UserData used for field classification.

Boolean

Returns true if the calling application provides a AutofillService that is enabled for the current user, or false otherwise.

Boolean

Returns true if autofill is supported by the current device and is supported for this user.

Boolean

Checks whether autofill is enabled for the current user.

Boolean

Checks if field classification is enabled.

Unit

Called to indicate the value of an autofillable View changed.

Unit
notifyValueChanged(view: View!, virtualId: Int, value: AutofillValue!)

Called to indicate the value of an autofillable virtual view has changed.

Unit

Called to indicate a View is clicked.

Unit
notifyViewClicked(view: View, virtualId: Int)

Called to indicate a virtual view has been clicked.

Unit

Called when a View that supports autofill is entered.

Unit
notifyViewEntered(view: View, virtualId: Int, absBounds: Rect)

Called when a virtual view that supports autofill is entered.

Unit

Called when a View that supports autofill is exited.

Unit
notifyViewExited(view: View, virtualId: Int)

Called when a virtual view that supports autofill is exited.

Unit

Called when a view's visibility changed.

Unit
notifyViewVisibilityChanged(view: View, virtualId: Int, isVisible: Boolean)

Called when a virtual view's visibility changed.

Unit

Called when the virtual views are ready to the user for autofill.

Unit

Registers a AutofillCallback to receive autofill events.

Unit

Explicitly requests a new autofill context.

Unit
requestAutofill(view: View, virtualId: Int, absBounds: Rect)

Explicitly requests a new autofill context for virtual views.

Unit
setUserData(userData: UserData?)

Sets the UserData used for field classification

Boolean

If autofill suggestions for a dialog-style UI are available for view, shows a dialog allowing the user to select a suggestion and returns true.

Boolean
showAutofillDialog(view: View, virtualId: Int)

If autofill suggestions for a dialog-style UI are available for virtual view, shows a dialog allowing the user to select a suggestion and returns true.

Unit

Unregisters a AutofillCallback to receive autofill events.

Constants

EXTRA_ASSIST_STRUCTURE

Added in API level 26
static val EXTRA_ASSIST_STRUCTURE: String

Intent extra: The assist structure which captures the filled screen.

Type: android.app.assist.AssistStructure

Value: "android.view.autofill.extra.ASSIST_STRUCTURE"

EXTRA_AUTHENTICATION_RESULT

Added in API level 26
static val EXTRA_AUTHENTICATION_RESULT: String

Intent extra: The result of an authentication operation. It is either a fully populated android.service.autofill.FillResponse or a fully populated android.service.autofill.Dataset if a response or a dataset is being authenticated respectively.

Type: android.service.autofill.FillResponse or a android.service.autofill.Dataset

Value: "android.view.autofill.extra.AUTHENTICATION_RESULT"

EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET

Added in API level 31
static val EXTRA_AUTHENTICATION_RESULT_EPHEMERAL_DATASET: String

Intent extra: The optional boolean extra field provided by the android.service.autofill.AutofillService accompanying the result of an authentication operation.

Before android.os.Build.VERSION_CODES#R, if the authentication result is a android.service.autofill.Dataset, it'll be used to autofill the fields, and also replace the existing dataset in the cached android.service.autofill.FillResponse. That means if the user clears the field values, the autofill suggestion will show up again with the new authenticated Dataset.

In android.os.Build.VERSION_CODES#R, we added an exception to this behavior that if the Dataset being authenticated is a pinned dataset (see android.service.autofill.InlinePresentation#isPinned()), the old Dataset will not be replaced.

In android.os.Build.VERSION_CODES#S, we added this boolean extra field to allow the android.service.autofill.AutofillService to explicitly specify whether the returned authenticated Dataset is ephemeral. An ephemeral Dataset will be used to autofill once and then thrown away. Therefore, when the boolean extra is set to true, the returned Dataset will not replace the old dataset from the existing android.service.autofill.FillResponse. When it's set to false, it will. When it's not set, the old dataset will be replaced, unless it is a pinned inline suggestion, which is consistent with the behavior in android.os.Build.VERSION_CODES#R.

Value: "android.view.autofill.extra.AUTHENTICATION_RESULT_EPHEMERAL_DATASET"

EXTRA_CLIENT_STATE

Added in API level 26
static val EXTRA_CLIENT_STATE: String

Intent extra: The optional extras provided by the android.service.autofill.AutofillService.

For example, when the service responds to a android.service.autofill.FillCallback#onSuccess(android.service.autofill.FillResponse) with a FillResponse that requires authentication, the Intent that launches the service authentication will contain the Bundle set by android.service.autofill.FillResponse.Builder#setClientState(Bundle) on this extra.

On Android android.os.Build.VERSION_CODES#P and higher, the autofill service can also add this bundle to the Intent set as the result for an authentication request, so the bundle can be recovered later on android.service.autofill.SaveRequest#getClientState().

Type: android.os.Bundle

Value: "android.view.autofill.extra.CLIENT_STATE"

EXTRA_INLINE_SUGGESTIONS_REQUEST

Added in API level 31
static val EXTRA_INLINE_SUGGESTIONS_REQUEST: String

Intent extra: the android.view.inputmethod.InlineSuggestionsRequest in the autofill request.

This is filled in the authentication intent so the android.service.autofill.AutofillService can use it to create the inline suggestion android.service.autofill.Dataset in the response, if the original autofill request contains the android.view.inputmethod.InlineSuggestionsRequest.

Value: "android.view.autofill.extra.INLINE_SUGGESTIONS_REQUEST"

Public methods

cancel

Added in API level 26
fun cancel(): Unit

Called to indicate the current autofill context should be cancelled.

This method is typically called by Views that manage virtual views; for example, when the view is rendering an HTML page with a form and virtual views that represent the HTML elements, it should call this method if the user does not post the form but moves to another form in this page.

Note: This method does not need to be called on regular application lifecycle methods such as android.app.Activity#finish().

commit

Added in API level 26
fun commit(): Unit

Called to indicate the current autofill context should be commited.

This method is typically called by Views that manage virtual views; for example, when the view is rendering an HTML page with a form and virtual views that represent the HTML elements, it should call this method after the form is submitted and another page is rendered.

Note: This method does not need to be called on regular application lifecycle methods such as android.app.Activity#finish().

disableAutofillServices

Added in API level 26
fun disableAutofillServices(): Unit

If the app calling this API has enabled autofill services they will be disabled.

getAutofillServiceComponentName

Added in API level 28
fun getAutofillServiceComponentName(): ComponentName?

Returns the component name of the AutofillService that is enabled for the current user.

Return
ComponentName? This value may be null.

getAvailableFieldClassificationAlgorithms

Added in API level 28
fun getAvailableFieldClassificationAlgorithms(): MutableList<String!>

Gets the name of all algorithms currently available for field classification.

Note: This method should only be called by an app providing an autofill service, and it returns an empty list if the caller currently doesn't have an enabled autofill service for the user.

Return
MutableList<String!> This value cannot be null.

getDefaultFieldClassificationAlgorithm

Added in API level 28
fun getDefaultFieldClassificationAlgorithm(): String?

Gets the name of the default algorithm used for field classification.

The default algorithm is used when the algorithm on UserData is invalid or not set.

Note: This method should only be called by an app providing an autofill service, and it's ignored if the caller currently doesn't have an enabled autofill service for the user.

Return
String? This value may be null.

getNextAutofillId

Added in API level 28
fun getNextAutofillId(): AutofillId?

Gets the next unique autofill ID for the activity context.

Typically used to manage views whose content is recycled - see View.setAutofillId(AutofillId) for more info.

Return
AutofillId? An ID that is unique in the activity, or null if autofill is not supported in the Context associated with this AutofillManager.

getUserData

Added in API level 28
fun getUserData(): UserData?

Gets the user data used for field classification.

Note: This method should only be called by an app providing an autofill service, and it's ignored if the caller currently doesn't have an enabled autofill service for the user.

Return
UserData? value previously set by setUserData(android.service.autofill.UserData) or null if it was reset or if the caller currently does not have an enabled autofill service for the user.

getUserDataId

Added in API level 28
fun getUserDataId(): String?

Gets the id of the UserData used for field classification.

This method is useful when the service must check the status of the UserData in the device without fetching the whole object.

Note: This method should only be called by an app providing an autofill service, and it's ignored if the caller currently doesn't have an enabled autofill service for the user.

Return
String? id of the UserData previously set by setUserData(android.service.autofill.UserData) or null if it was reset or if the caller currently does not have an enabled autofill service for the user.

hasEnabledAutofillServices

Added in API level 26
fun hasEnabledAutofillServices(): Boolean

Returns true if the calling application provides a AutofillService that is enabled for the current user, or false otherwise.

isAutofillSupported

Added in API level 26
fun isAutofillSupported(): Boolean

Returns true if autofill is supported by the current device and is supported for this user.

Autofill is typically supported, but it could be unsupported in cases like:

  1. Low-end devices.
  2. Device policy rules that forbid its usage.

isEnabled

Added in API level 26
fun isEnabled(): Boolean

Checks whether autofill is enabled for the current user.

Typically used to determine whether the option to explicitly request autofill should be offered - see requestAutofill(android.view.View).

Return
Boolean whether autofill is enabled for the current user.

isFieldClassificationEnabled

Added in API level 28
fun isFieldClassificationEnabled(): Boolean

Checks if field classification is enabled.

As field classification is an expensive operation, it could be disabled, either temporarily (for example, because the service exceeded a rate-limit threshold) or permanently (for example, because the device is a low-level device).

Note: This method should only be called by an app providing an autofill service, and it's ignored if the caller currently doesn't have an enabled autofill service for the user.

notifyValueChanged

Added in API level 26
fun notifyValueChanged(view: View!): Unit

Called to indicate the value of an autofillable View changed.

Parameters
view View!: view whose value changed.

notifyValueChanged

Added in API level 26
fun notifyValueChanged(
    view: View!,
    virtualId: Int,
    value: AutofillValue!
): Unit

Called to indicate the value of an autofillable virtual view has changed.

Parameters
view View!: the virtual view parent.
virtualId Int: id identifying the virtual child inside the parent view.
value AutofillValue!: new value of the child.

notifyViewClicked

Added in API level 28
fun notifyViewClicked(view: View): Unit

Called to indicate a View is clicked.

Parameters
view View: view that has been clicked. This value cannot be null.

notifyViewClicked

Added in API level 28
fun notifyViewClicked(
    view: View,
    virtualId: Int
): Unit

Called to indicate a virtual view has been clicked.

Parameters
view View: the virtual view parent. This value cannot be null.
virtualId Int: id identifying the virtual child inside the parent view.

notifyViewEntered

Added in API level 26
fun notifyViewEntered(view: View): Unit

Called when a View that supports autofill is entered.

Parameters
view View: View that was entered. This value cannot be null.

notifyViewEntered

Added in API level 26
fun notifyViewEntered(
    view: View,
    virtualId: Int,
    absBounds: Rect
): Unit

Called when a virtual view that supports autofill is entered.

The virtual view boundaries must be absolute screen coordinates. For example, if the parent, non-virtual view uses bounds to draw the virtual view inside its Canvas, the absolute bounds could be calculated by:

int offset[] = new int[2];
    getLocationOnScreen(offset);
    Rect absBounds = new Rect(bounds.left + offset[0],
        bounds.top + offset[1],
        bounds.right + offset[0], bounds.bottom + offset[1]);
  
Parameters
view View: the virtual view parent. This value cannot be null.
virtualId Int: id identifying the virtual child inside the parent view.
absBounds Rect: absolute boundaries of the virtual view in the screen. This value cannot be null.

notifyViewExited

Added in API level 26
fun notifyViewExited(view: View): Unit

Called when a View that supports autofill is exited.

Parameters
view View: View that was exited. This value cannot be null.

notifyViewExited

Added in API level 26
fun notifyViewExited(
    view: View,
    virtualId: Int
): Unit

Called when a virtual view that supports autofill is exited.

Parameters
view View: the virtual view parent. This value cannot be null.
virtualId Int: id identifying the virtual child inside the parent view.

notifyViewVisibilityChanged

Added in API level 27
fun notifyViewVisibilityChanged(
    view: View,
    isVisible: Boolean
): Unit

Called when a view's visibility changed.

Parameters
view View: View that was exited. This value cannot be null.
isVisible Boolean: visible if the view is visible in the view hierarchy.

notifyViewVisibilityChanged

Added in API level 27
fun notifyViewVisibilityChanged(
    view: View,
    virtualId: Int,
    isVisible: Boolean
): Unit

Called when a virtual view's visibility changed.

Parameters
view View: View that was exited. This value cannot be null.
virtualId Int: id identifying the virtual child inside the parent view.
isVisible Boolean: visible if the view is visible in the view hierarchy.

notifyVirtualViewsReady

fun notifyVirtualViewsReady(
    view: View,
    infos: SparseArray<VirtualViewFillInfo!>
): Unit

Called when the virtual views are ready to the user for autofill. This method is used to notify autofill system the views are ready to the user. And then Autofill can do initialization if needed before the user starts to input. For example, do a pre-fill request for the fill dialog.

Parameters
view View: the host view that holds a virtual view hierarchy. This value cannot be null.
infos SparseArray<VirtualViewFillInfo!>: extra information for the virtual views. The key is virtual id which represents the virtual view in the host view. This value cannot be null.
Exceptions
java.lang.IllegalArgumentException if the infos was empty

registerCallback

Added in API level 26
fun registerCallback(callback: AutofillManager.AutofillCallback?): Unit

Registers a AutofillCallback to receive autofill events.

Parameters
callback AutofillManager.AutofillCallback?: callback to receive events. This value may be null.

requestAutofill

Added in API level 26
fun requestAutofill(view: View): Unit

Explicitly requests a new autofill context.

Normally, the autofill context is automatically started if necessary when notifyViewEntered(android.view.View) is called, but this method should be used in the cases where it must be explicitly started. For example, when the view offers an AUTOFILL option on its contextual overflow menu, and the user selects it.

Parameters
view View: view requesting the new autofill context. This value cannot be null.

requestAutofill

Added in API level 26
fun requestAutofill(
    view: View,
    virtualId: Int,
    absBounds: Rect
): Unit

Explicitly requests a new autofill context for virtual views.

Normally, the autofill context is automatically started if necessary when notifyViewEntered(android.view.View,int,android.graphics.Rect) is called, but this method should be used in the cases where it must be explicitly started. For example, when the virtual view offers an AUTOFILL option on its contextual overflow menu, and the user selects it.

The virtual view boundaries must be absolute screen coordinates. For example, if the parent view uses bounds to draw the virtual view inside its Canvas, the absolute bounds could be calculated by:

int offset[] = new int[2];
    getLocationOnScreen(offset);
    Rect absBounds = new Rect(bounds.left + offset[0],
        bounds.top + offset[1],
        bounds.right + offset[0], bounds.bottom + offset[1]);
  
Parameters
view View: the virtual view parent. This value cannot be null.
virtualId Int: id identifying the virtual child inside the parent view.
absBounds Rect: absolute boundaries of the virtual view in the screen. This value cannot be null.

setUserData

Added in API level 28
fun setUserData(userData: UserData?): Unit

Sets the UserData used for field classification

Note: This method should only be called by an app providing an autofill service, and it's ignored if the caller currently doesn't have an enabled autofill service for the user.

Parameters
userData UserData?: This value may be null.

showAutofillDialog

fun showAutofillDialog(view: View): Boolean

If autofill suggestions for a dialog-style UI are available for view, shows a dialog allowing the user to select a suggestion and returns true.

The dialog may not be shown if the autofill service does not support it, if the autofill request has not returned a response yet, if the dialog was shown previously, or if the input method is already shown.

It is recommended apps to call this method the first time a user focuses on an autofill-able form, and to avoid showing the input method if the dialog is shown. If this method returns false, you should then instead show the input method (assuming that is how the view normally handles the focus event). If the user re-focuses on the view, you should not call this method again so as to not disrupt usage of the input method.

Parameters
view View: the view for which to show autofill suggestions. This is typically a view receiving a focus event. The autofill suggestions shown will include content for related views as well. This value cannot be null.
Return
Boolean true if the autofill dialog is being shown

showAutofillDialog

fun showAutofillDialog(
    view: View,
    virtualId: Int
): Boolean

If autofill suggestions for a dialog-style UI are available for virtual view, shows a dialog allowing the user to select a suggestion and returns true.

The dialog may not be shown if the autofill service does not support it, if the autofill request has not returned a response yet, if the dialog was shown previously, or if the input method is already shown.

It is recommended apps to call this method the first time a user focuses on an autofill-able form, and to avoid showing the input method if the dialog is shown. If this method returns false, you should then instead show the input method (assuming that is how the view normally handles the focus event). If the user re-focuses on the view, you should not call this method again so as to not disrupt usage of the input method.

Parameters
view View: the view hosting the virtual view hierarchy which is used to show autofill suggestions. This value cannot be null.
virtualId Int: id identifying the virtual view inside the host view.
Return
Boolean true if the autofill dialog is being shown

unregisterCallback

Added in API level 26
fun unregisterCallback(callback: AutofillManager.AutofillCallback?): Unit

Unregisters a AutofillCallback to receive autofill events.

Parameters
callback AutofillManager.AutofillCallback?: callback to stop receiving events. This value may be null.