# ProviderEventsManager

Artifact: [androidx.credentials.providerevents:providerevents](https://developer.android.com/jetpack/androidx/releases/credentials-providerevents) [View Source](https://cs.android.com/search?q=file:androidx/credentials/providerevents/ProviderEventsManager.kt+class:androidx.credentials.providerevents.ProviderEventsManager) Added in [1.0.0-beta01](https://developer.android.com/jetpack/androidx/releases/credentials-providerevents#1.0.0-beta01)

*** ** * ** ***


```
interface ProviderEventsManager
```

<br />

*** ** * ** ***

Provides APIs for credential providers to participate in provider events, such as same-device credential transfer.

This manager supports two primary roles for credential transfer:

- **Importing (Client Role):** A provider can initiate a flow to import credentials by calling `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#importCredentials(android.content.Context,androidx.credentials.providerevents.transfer.ImportCredentialsRequest)`. This will display a UI allowing the user to select another provider to import from.

- **Exporting (Source Role):** A provider must first register its ability to export credentials by calling `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)`. Once registered, it will appear in the UI when other providers initiate an import flow.

## Summary

| ### Public companion functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager` | `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#create(android.content.Context)(context: https://developer.android.com/reference/android/content/Context.html)` Creates a `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager` based on the given `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager.Companion#create(android.content.Context)`. |

| ### Public functions |
|---|---|
| `open suspend https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportResponse` | `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#clearExport(androidx.credentials.providerevents.transfer.ClearExportRequest)(request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportRequest)` Clears all previously registered `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` registered through the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)` API. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#clearExportAsync(androidx.credentials.providerevents.transfer.ClearExportRequest,java.util.concurrent.Executor,androidx.credentials.CredentialManagerCallback)( request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportRequest, executor: https://developer.android.com/reference/java/util/concurrent/Executor.html, callback: https://developer.android.com/reference/kotlin/androidx/credentials/CredentialManagerCallback<https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportResponse, https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/ClearExportException> )` Clears all previously registered `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry`. |
| `open suspend https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsResponse` | `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#importCredentials(android.content.Context,androidx.credentials.providerevents.transfer.ImportCredentialsRequest)(context: https://developer.android.com/reference/android/content/Context.html, request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsRequest)` Initiates a flow to import credentials from another credential provider. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#importCredentialsAsync(android.content.Context,androidx.credentials.providerevents.transfer.ImportCredentialsRequest,android.os.CancellationSignal,java.util.concurrent.Executor,androidx.credentials.CredentialManagerCallback)( context: https://developer.android.com/reference/android/content/Context.html, request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsRequest, cancellationSignal: https://developer.android.com/reference/android/os/CancellationSignal.html?, executor: https://developer.android.com/reference/java/util/concurrent/Executor.html, callback: https://developer.android.com/reference/kotlin/androidx/credentials/CredentialManagerCallback<https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsResponse, https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/ImportCredentialsException> )` Initiates a flow to import credentials from another credential provider. |
| `open suspend https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportResponse` | `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)(request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportRequest)` Registers the calling credential provider as a source for exporting credentials. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExportAsync(androidx.credentials.providerevents.transfer.RegisterExportRequest,java.util.concurrent.Executor,androidx.credentials.CredentialManagerCallback)( request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportRequest, executor: https://developer.android.com/reference/java/util/concurrent/Executor.html, callback: https://developer.android.com/reference/kotlin/androidx/credentials/CredentialManagerCallback<https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportResponse, https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/RegisterExportException> )` Registers the calling credential provider as a source for exporting credentials. |

## Public companion functions

### create

Added in [1.0.0-beta01](https://developer.android.com/jetpack/androidx/releases/credentials-providerevents#1.0.0-beta01)

```
fun create(context: Context): ProviderEventsManager
```

Creates a `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager` based on the given `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager.Companion#create(android.content.Context)`.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html` | the context with which the ProviderEventsManager should be associated |

## Public functions

### clearExport

```
open suspend fun clearExport(request: ClearExportRequest): ClearExportResponse
```

Clears all previously registered `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` registered through the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)` API. This API should be used to clear all `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` from the device. If trying to override the existing `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` with new ones, there is no need to clear the old ones. `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)` can be used to directly override `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry`.

| Parameters |
|---|---|
| `request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportRequest` | the request to clear all the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportResponse` | a `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportResponse` on successful clear. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/ClearExportException` | if the registration fails. |

### clearExportAsync

Added in [1.0.0-beta01](https://developer.android.com/jetpack/androidx/releases/credentials-providerevents#1.0.0-beta01)

```
fun clearExportAsync(
    request: ClearExportRequest,
    executor: Executor,
    callback: CredentialManagerCallback<ClearExportResponse, ClearExportException>
): Unit
```

Clears all previously registered `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry`. All `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` will be cleared from the device. In order to override the previously registered `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` with different ones, `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)` can be used to override the entries.

| Parameters |
|---|---|
| `request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportRequest` | the request to clear all the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` |
| `executor: https://developer.android.com/reference/java/util/concurrent/Executor.html` | the callback will take place on this executor |
| `callback: https://developer.android.com/reference/kotlin/androidx/credentials/CredentialManagerCallback<https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ClearExportResponse, https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/ClearExportException>` | the callback invoked when the request succeeds or fails |

### importCredentials

```
open suspend fun importCredentials(context: Context, request: ImportCredentialsRequest): ProviderImportCredentialsResponse
```

Initiates a flow to import credentials from another credential provider.

This method launches a provider selector UI, allowing the user to choose a source provider from a list of those registered via `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)`. The request is then forwarded to the selected provider.

Under the hood, this API facilitates the transfer by creating a temporary file in the
caller's cache directory. The framework handles the file I/O, permissions, and cleanup,
providing a seamless transfer medium between the two providers.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html` | the activity context required to launch the UI. |
| `request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsRequest` | the request detailing the credentials to be imported. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsResponse` | a `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsResponse` with the imported credential data. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/ImportCredentialsException` | on failure, with a subclass indicating the error type. |

### importCredentialsAsync

Added in [1.0.0-beta01](https://developer.android.com/jetpack/androidx/releases/credentials-providerevents#1.0.0-beta01)

```
fun importCredentialsAsync(
    context: Context,
    request: ImportCredentialsRequest,
    cancellationSignal: CancellationSignal?,
    executor: Executor,
    callback: CredentialManagerCallback<ProviderImportCredentialsResponse, ImportCredentialsException>
): Unit
```

Initiates a flow to import credentials from another credential provider.

This method launches a provider selector UI, allowing the user to choose a source provider from a list of those registered via `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#registerExport(androidx.credentials.providerevents.transfer.RegisterExportRequest)`. The request is then forwarded to the selected provider.

Under the hood, this API facilitates the transfer by creating a temporary file in the
caller's cache directory. The framework handles the file I/O, permissions, and cleanup,
providing a seamless transfer medium between the two providers.

| Parameters |
|---|---|
| `context: https://developer.android.com/reference/android/content/Context.html` | the activity context required to launch the UI. |
| `request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsRequest` | request the request detailing the credentials to be imported. |
| `cancellationSignal: https://developer.android.com/reference/android/os/CancellationSignal.html?` | an optional signal that allows for cancelling this call |
| `executor: https://developer.android.com/reference/java/util/concurrent/Executor.html` | the callback will take place on this executor |
| `callback: https://developer.android.com/reference/kotlin/androidx/credentials/CredentialManagerCallback<https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsResponse, https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/ImportCredentialsException>` | the callback invoked when the request succeeds or fails |

### registerExport

```
open suspend fun registerExport(request: RegisterExportRequest): RegisterExportResponse
```

Registers the calling credential provider as a source for exporting credentials.

Once registered, the provider's `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` will be displayed in the provider selector UI when another provider initiates an `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#importCredentials(android.content.Context,androidx.credentials.providerevents.transfer.ImportCredentialsRequest)` flow.

In addition to calling this method, a provider that wishes to export credentials must
declare an \[Activity\] in its manifest that can handle the transfer request. This activity
must have an intent filter configured with the following:

- An intent action of "androidx.identitycredentials.action.IMPORT_CREDENTIALS"
- A data element with a "content" scheme

The framework will invoke this activity with an intent containing a content URI, which serves as the medium for transferring the credential data. The activity can retrieve the request from the intent by calling `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/IntentHandler#retrieveProviderImportCredentialsRequest(android.content.Intent)`. In addition to the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsRequest`, the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsRequest` contains a few security measures. The importer's `https://developer.android.com/reference/kotlin/androidx/credentials/provider/CallingAppInfo` is provided to verify the importer. The 'credId' is provided to validate the selected `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry`.

After the activity processes the request, the activity should return the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsResponse` through the 'uri' of `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsRequest` to successfully return the credentials or set an exception by calling `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/IntentHandler#setImportCredentialsException(android.content.Intent,androidx.credentials.providerevents.exception.ImportCredentialsException)`.

| Parameters |
|---|---|
| `request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportRequest` | the request containing the provider data to register |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportResponse` | a `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportResponse` on successful registration. |

| Throws |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/RegisterExportException` | if the registration fails. |

### registerExportAsync

Added in [1.0.0-beta01](https://developer.android.com/jetpack/androidx/releases/credentials-providerevents#1.0.0-beta01)

```
fun registerExportAsync(
    request: RegisterExportRequest,
    executor: Executor,
    callback: CredentialManagerCallback<RegisterExportResponse, RegisterExportException>
): Unit
```

Registers the calling credential provider as a source for exporting credentials.

Once registered, the provider's `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry` will be displayed in the provider selector UI when another provider initiates an `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/ProviderEventsManager#importCredentials(android.content.Context,androidx.credentials.providerevents.transfer.ImportCredentialsRequest)` flow.

In addition to calling this method, a provider that wishes to export credentials must
declare an \[Activity\] in its manifest that can handle the transfer request. This activity
must have an intent filter configured with the following:

- An intent action of "androidx.identitycredentials.action.IMPORT_CREDENTIALS"
- A data element with a "content" scheme

The framework will invoke this activity with an intent containing a content URI, which serves as the medium for transferring the credential data. The activity can retrieve the request from the intent by calling `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/IntentHandler#retrieveProviderImportCredentialsRequest(android.content.Intent)`. In addition to the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsRequest`, the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsRequest` contains a few security measures. The importer's `https://developer.android.com/reference/kotlin/androidx/credentials/provider/CallingAppInfo` is provided to verify the importer. The 'credId' is provided to validate the selected `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ExportEntry`.

After the activity processes the request, the activity should return the `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ImportCredentialsResponse` through the 'uri' of `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/ProviderImportCredentialsRequest` to successfully return the credentials or set an exception by calling `https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/IntentHandler#setImportCredentialsException(android.content.Intent,androidx.credentials.providerevents.exception.ImportCredentialsException)`.

| Parameters |
|---|---|
| `request: https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportRequest` | the request containing the provider data to register |
| `executor: https://developer.android.com/reference/java/util/concurrent/Executor.html` | the callback will take place on this executor |
| `callback: https://developer.android.com/reference/kotlin/androidx/credentials/CredentialManagerCallback<https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/transfer/RegisterExportResponse, https://developer.android.com/reference/kotlin/androidx/credentials/providerevents/exception/RegisterExportException>` | the callback invoked when the request succeeds or fails |