Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [U Extensions 15](https://developer.android.com/sdkExtensions)

# EmbeddedPhotoPickerProvider

*** ** * ** ***

` public interface EmbeddedPhotoPickerProvider `   
` `

|---|
| android.widget.photopicker.EmbeddedPhotoPickerProvider |

<br />

*** ** * ** ***

This interface provides an api that callers can use to get a session of embedded PhotoPicker (`https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerSession`).

Callers can get instance of this class using `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerProviderFactory#create(android.content.Context)`.

Under the hood, a service connection with photopicker is established by the implementation of this api. To help establish this connection, a caller must include in their Manifest:

    <queries>
      <intent>
          <action android:name="com.android.photopicker.core.embedded.EmbeddedService.BIND"/>
      </intent>
    </queries>

When a session opens successfully, they would receive an instance of `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerSession` and `https://developer.android.com/reference/android/view/SurfaceControlViewHost.SurfacePackage` via the `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerClient#onSessionOpened(android.widget.photopicker.EmbeddedPhotoPickerSession)`

Callers pass an instance of `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerClient` which is used by service to notify about different events (like sessionError, uri granted/revoked etc) to them. One-to-one relationship of client to session must be maintained by a caller i.e. they shouldn't reuse same callback for more than one openSession requests.

The `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerSession` instance can be used to notify photopicker about different events (like resize, configChange etc).

This api is supported on api versions Android U+.
**See also:**

- `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerClient`
- `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerSession`
- `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerProviderFactory`

## Summary

| ### Public methods ||
|---|---|
| ` abstract void` | ` https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerProvider#openSession(android.os.IBinder,%20int,%20int,%20int,%20android.widget.photopicker.EmbeddedPhotoPickerFeatureInfo,%20java.util.concurrent.Executor,%20android.widget.photopicker.EmbeddedPhotoPickerClient)(https://developer.android.com/reference/android/os/IBinder hostToken, int displayId, int width, int height, https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerFeatureInfo featureInfo, https://developer.android.com/reference/java/util/concurrent/Executor clientExecutor, https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerClient callback) ` Open a new session for displaying content with an initial size of width x height pixels. |

## Public methods

### openSession

Added in [API level 36](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Also in [U Extensions 15](https://developer.android.com/sdkExtensions)

```
public abstract void openSession (IBinder hostToken, 
                int displayId, 
                int width, 
                int height, 
                EmbeddedPhotoPickerFeatureInfo featureInfo, 
                Executor clientExecutor, 
                EmbeddedPhotoPickerClient callback)
```

Open a new session for displaying content with an initial size of width x height pixels. `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerClient` will receive all incoming communication from the PhotoPicker. All incoming calls to `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerClient` will be made through the provided `clientExecutor`

<br />

| Parameters ||
|---|---|
| `hostToken` | `IBinder`: Token used for constructing `https://developer.android.com/reference/android/view/SurfaceControlViewHost`. Use `https://developer.android.com/reference/android/view/AttachedSurfaceControl#getInputTransferToken()` to get token of attached `https://developer.android.com/reference/android/view/SurfaceControlViewHost.SurfacePackage`. This value cannot be `null`. <br /> |
| `displayId` | `int`: Application display id. Use `https://developer.android.com/reference/android/hardware/display/DisplayManager#getDisplays()` to get the id. <br /> |
| `width` | `int`: width of the view, in pixels. <br /> |
| `height` | `int`: height of the view, in pixels. <br /> |
| `featureInfo` | `EmbeddedPhotoPickerFeatureInfo`: `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerFeatureInfo` object containing all the required features for the given session. This value cannot be `null`. <br /> |
| `clientExecutor` | `Executor`: `https://developer.android.com/reference/java/util/concurrent/Executor` to invoke callbacks. This value cannot be `null`. <br /> |
| `callback` | `EmbeddedPhotoPickerClient`: `https://developer.android.com/reference/android/widget/photopicker/EmbeddedPhotoPickerClient` object to receive callbacks from photopicker. This value cannot be `null`. <br /> |