runComposition
@SuppressLint("PrimitiveInCollection")
@ExperimentalGlanceApi
fun GlanceAppWidget.runComposition(
@Suppress("ContextFirst") context: Context,
id: GlanceId = createFakeAppWidgetId(),
options: Bundle = Bundle(),
sizes: List<DpSize>? = null,
state: Any? = null,
lambdaReceiver: ComponentName = ComponentName(context, UnmanagedSessionReceiver::class.java),
): Flow<RemoteViews>
Returns a FlowGlanceAppWidget
and emits RemoteViews
for each result. The composition is closed when the
flow is cancelled.
If a valid id
is provided, this function will use the sizing values from the bound widget if
using SizeMode.Exact
or SizeMode.Single
.
Lambda actions and list views in the emitted RemoteViews
will continue to work while this is
flow is running. This currently does not support resizing (you have to run the flow again with
new sizes
) or reloading the androidx.glance.state.GlanceStateDefinition
state value.
Note: In order to handle lambda actions correctly, only one instance of runComposition for a
particular id
may run at the same time. Calling runComposition concurrently with the same ID
will succeed, but the first call will resume with an exception.
If you need to call runComposition concurrently, you can omit id
so that a random fake ID will
be used. Otherwise, call runComposition sequentially when using the same id
.
By default, this function uses UnmanagedSessionReceiver
as the lambdaReceiver
target to
receive any lambda actions while this function is running. If you need to run this function in a
non-default process, you can declare a sub-class of UnmanagedSessionReceiver in that process and
pass its ComponentName
here.