ListenableEditorSession


public final class ListenableEditorSession implements EditorSession


ListenableFuture-based compatibility wrapper around EditorSession's suspending methods.

Summary

Public constructors

Public methods

void
static final @NonNull ListenableEditorSession
@RequiresApi(value = 27)
@UiThread
createHeadlessEditorSession(
    @NonNull ComponentActivity activity,
    @NonNull Intent editIntent,
    @NonNull HeadlessWatchFaceClient headlessWatchFaceClient
)

Constructs an ListenableEditorSession for a remote watch face editor.

Integer

The ID of the background complication or null if there isn't one.

Integer
getComplicationSlotIdAt(int x, int y)

Returns the ID of the complication at the given coordinates or null if there isn't one.

@NonNull StateFlow<@NonNull Map<@NonNull Integer, @NonNull ComplicationSlotState>>

A Flow of a Map of complication slot ids to ComplicationSlotState for each complication slot.

@NonNull StateFlow<@NonNull Map<@NonNull IntegerComplicationDataSourceInfo>>

Returns a flow of maps of androidx.wear.watchface.ComplicationSlot ids to ComplicationDataSourceInfo that represent the information available about the data source for each complication.

@NonNull StateFlow<@NonNull Map<@NonNull Integer, @NonNull ComplicationData>>

Returns a flow of maps of androidx.wear.watchface.ComplicationSlot ids to preview ComplicationData suitable for use in rendering a preview of the watch face.

@NonNull Instant

The reference preview Instant for this watch face to render previews with.

@NonNull MutableStateFlow<@NonNull UserStyle>

The current UserStyle.

@NonNull UserStyleSchema

The watch face's UserStyleSchema.

@NonNull ComponentName

The ComponentName of the watch face being edited.

@NonNull WatchFaceId
@RequiresApi(value = 30)
getWatchFaceId()

Unique ID for the instance of the watch face being edited.

boolean

Whether any changes should be committed when the session is closed (defaults to true).

static final @NonNull ListenableFuture<ListenableEditorSession>

Constructs a ListenableFuture for a ListenableEditorSession for an on watch face editor.

final @NonNull ListenableFuture<ChosenComplicationDataSource>

ListenableFuture wrapper around EditorSession.openComplicationDataSourceChooser.

ChosenComplicationDataSource
openComplicationDataSourceChooser(int complicationSlotId)

Opens the complication data source chooser and returns the chosen complication data source for the specified androidx.wear.watchface.ComplicationSlot.

@NonNull Bitmap
renderWatchFaceToBitmap(
    @NonNull RenderParameters renderParameters,
    @NonNull Instant instant,
    Map<@NonNull Integer, @NonNull ComplicationData> slotIdToComplicationData
)

Renders the watch face to a Bitmap using the current userStyle.

void
setCommitChangesOnClose(boolean commitChangesOnClose)

Whether any changes should be committed when the session is closed (defaults to true).

void

For the duration of the editor session, applies an override to complications rendered via renderWatchFaceToBitmap.

Public constructors

ListenableEditorSession

Added in 1.0.0
public ListenableEditorSession(@NonNull EditorSession wrappedEditorSession)

Public methods

close

Added in 1.0.0
public void close()

createHeadlessEditorSession

Added in 1.0.0
@RequiresApi(value = 27)
@UiThread
public static final @NonNull ListenableEditorSession createHeadlessEditorSession(
    @NonNull ComponentActivity activity,
    @NonNull Intent editIntent,
    @NonNull HeadlessWatchFaceClient headlessWatchFaceClient
)

Constructs an ListenableEditorSession for a remote watch face editor.

Parameters
@NonNull ComponentActivity activity

The ComponentActivity associated with the EditorSession.

@NonNull Intent editIntent

Intent sent by SysUI to launch the editing session.

@NonNull HeadlessWatchFaceClient headlessWatchFaceClient

The HeadlessWatchFaceClient that backs the constructed EditorSession.

getBackgroundComplicationSlotId

Added in 1.0.0
public Integer getBackgroundComplicationSlotId()

The ID of the background complication or null if there isn't one.

getComplicationSlotIdAt

Added in 1.0.0
public Integer getComplicationSlotIdAt(int x, int y)

Returns the ID of the complication at the given coordinates or null if there isn't one. Only androidx.wear.watchface.ComplicationSlots with ComplicationSlotBoundsType.ROUND_RECT are supported by this function.

getComplicationSlotsState

Added in 1.0.0
public @NonNull StateFlow<@NonNull Map<@NonNull Integer, @NonNull ComplicationSlotState>> getComplicationSlotsState()

A Flow of a Map of complication slot ids to ComplicationSlotState for each complication slot.

If accessed from java, consider using androidx.lifecycle.FlowLiveDataConversions.asLiveData to observe changes.

getComplicationsDataSourceInfo

Added in 1.0.0
public @NonNull StateFlow<@NonNull Map<@NonNull IntegerComplicationDataSourceInfo>> getComplicationsDataSourceInfo()

Returns a flow of maps of androidx.wear.watchface.ComplicationSlot ids to ComplicationDataSourceInfo that represent the information available about the data source for each complication. This data is fetched asynchronously and the map will initially be empty. For watch faces without complications this will always be empty.

Note new data may be pushed as result of running openComplicationDataSourceChooser.

Note a null ComplicationDataSourceInfo will be associated with a complication slot id if the androidx.wear.watchface.ComplicationSlot is configured to show the empty complication data source.

getComplicationsPreviewData

Added in 1.0.0
public @NonNull StateFlow<@NonNull Map<@NonNull Integer, @NonNull ComplicationData>> getComplicationsPreviewData()

Returns a flow of maps of androidx.wear.watchface.ComplicationSlot ids to preview ComplicationData suitable for use in rendering a preview of the watch face. This data is fetched asynchronously and the map will initially be empty. For watch faces without complications this will always be empty.

Note new data may be pushed as a result of running openComplicationDataSourceChooser.

Note if a slot is configured to be empty then the map will contain an instance of EmptyComplicationData for that slot. Disabled complicationSlots are included in the map.

If accessed from java, consider using androidx.lifecycle.FlowLiveDataConversions.asLiveData to observe changes.

getPreviewReferenceInstant

Added in 1.0.0
public @NonNull Instant getPreviewReferenceInstant()

The reference preview Instant for this watch face to render previews with.

getUserStyle

Added in 1.0.0
public @NonNull MutableStateFlow<@NonNull UserStylegetUserStyle()

The current UserStyle. Assigning to this will cause the style to update. However, styling changes to the watch face will be reverted upon exit.

If accessed from java, consider using androidx.lifecycle.FlowLiveDataConversions.asLiveData to observe changes.

getUserStyleSchema

Added in 1.0.0
public @NonNull UserStyleSchema getUserStyleSchema()

The watch face's UserStyleSchema.

getWatchFaceComponentName

Added in 1.0.0
public @NonNull ComponentName getWatchFaceComponentName()

The ComponentName of the watch face being edited.

getWatchFaceId

Added in 1.0.0
@RequiresApi(value = 30)
public @NonNull WatchFaceId getWatchFaceId()

Unique ID for the instance of the watch face being edited. Note each distinct ComponentName can sometimes have multiple instances. See WatchFaceId for more details.

isCommitChangesOnClose

Added in 1.0.0
public boolean isCommitChangesOnClose()

Whether any changes should be committed when the session is closed (defaults to true).

Note due to SysUI requirements EditorState can't reliably be sent in the activity result because there are circumstances where ComponentActivity.onStop doesn't get called but the UX requires us to commit changes.

Regardless of the value, on completion of the editor session, the original UserStyle is restored. Note we need SysUI's help to revert any complication data source changes. Caveat some complication data sources have their own config (e.g. the world clock has a timezone setting) and that config currently can't be reverted.

listenableCreateOnWatchEditorSession

Added in 1.0.0
@UiThread
public static final @NonNull ListenableFuture<ListenableEditorSessionlistenableCreateOnWatchEditorSession(
    @NonNull ComponentActivity activity
)

Constructs a ListenableFuture for a ListenableEditorSession for an on watch face editor. This registers an activity result handler and so it must be called during an Activity or Fragment initialization path. The EditorSession is lifecycle aware and will automatically close when onDestroy is received.

If watch face editor takes more than 4s to create a watch face, returned future will be resolved with TimeoutCancellationException exception.

Parameters
@NonNull ComponentActivity activity

The ComponentActivity associated with the EditorSession.

listenableOpenComplicationDataSourceChooser

Added in 1.0.0
public final @NonNull ListenableFuture<ChosenComplicationDataSourcelistenableOpenComplicationDataSourceChooser(int complicationSlotId)

ListenableFuture wrapper around EditorSession.openComplicationDataSourceChooser.

openComplicationDataSourceChooser

public ChosenComplicationDataSource openComplicationDataSourceChooser(int complicationSlotId)

Opens the complication data source chooser and returns the chosen complication data source for the specified androidx.wear.watchface.ComplicationSlot.

The result returns null if the operation was cancelled and otherwise returned an instance of ChosenComplicationDataSource that contains information about the chosen data source.

Parameters
int complicationSlotId

The id of the androidx.wear.watchface.ComplicationSlot to select a complication data source for.

Throws
kotlin.IllegalStateException

if a previous invocation of openComplicationDataSourceChooser is still running when openComplicationDataSourceChooser is called.

renderWatchFaceToBitmap

public @NonNull Bitmap renderWatchFaceToBitmap(
    @NonNull RenderParameters renderParameters,
    @NonNull Instant instant,
    Map<@NonNull Integer, @NonNull ComplicationData> slotIdToComplicationData
)

Renders the watch face to a Bitmap using the current userStyle.

Parameters
@NonNull RenderParameters renderParameters

The RenderParameters to render with. Must be DrawMode.INTERACTIVE

@NonNull Instant instant

The Instant to render with

Map<@NonNull Integer, @NonNull ComplicationData> slotIdToComplicationData

Override ComplicationData for each androidx.wear.watchface.ComplicationSlot to render with. Note using this feature is somewhat computationally expensive because under the hood it saves and restores the backing watch face instance's complications. If you need to render multiple times with the same slotIdToComplicationData, consider using renderWatchFaceToBitmap for a more efficient alternative.

Returns
@NonNull Bitmap

A Bitmap containing the screen shot with the specified parameters

setCommitChangesOnClose

Added in 1.0.0
public void setCommitChangesOnClose(boolean commitChangesOnClose)

Whether any changes should be committed when the session is closed (defaults to true).

Note due to SysUI requirements EditorState can't reliably be sent in the activity result because there are circumstances where ComponentActivity.onStop doesn't get called but the UX requires us to commit changes.

Regardless of the value, on completion of the editor session, the original UserStyle is restored. Note we need SysUI's help to revert any complication data source changes. Caveat some complication data sources have their own config (e.g. the world clock has a timezone setting) and that config currently can't be reverted.

setOverrideComplications

public void setOverrideComplications(
    @NonNull Map<@NonNull Integer, @NonNull ComplicationData> slotIdToComplicationData
)

For the duration of the editor session, applies an override to complications rendered via renderWatchFaceToBitmap. If you need to render multiple times with the same slotIdToComplicationData it's more efficient to use this API and call renderWatchFaceToBitmap with null slotIdToComplicationData. When the editor session ends this override will be removed.

Note if after this call updated complications are sent via InteractiveWatchFaceClient.updateComplicationData, they will only be applied once the editor session has ended.

Parameters
@NonNull Map<@NonNull Integer, @NonNull ComplicationData> slotIdToComplicationData

The complications you wish to set. Any slots not covered by this map will be unchanged.