Reviewed on: 2022-03-22
This document describes how to integrate the input pipeline within a larger Rust program. For example, the input pipeline is integrated with Scene Manager for some builds.
The code that deals with the input pipeline must run on a LocalExecutor
. For existing code, this is already true. SceneManager uses fuchsia_async::run_singlethreaded
, so it uses a LocalExecutor
.
A program might want to isolate itself from the risk that a bug in the input pipeline library (e.g. infinite loop) will keep the rest of the program from making progress. Such programs can
LocalExecutor
which creates and runs the input pipeline, ORThe library provides a client shard to ensure proper routing is available. This shard can be included in the integrating component's manifest file.
The input pipeline uses structured configuration by declaring a config
value in the integrating component's manifest, such as in //src/ui/bin/scene_manager/meta/scene_manager.cml
:
config: { supported_input_devices: { type: "vector", element: { type: "string", max_size: 12, }, max_count: 6, }, },
This value can also be set in product assembly via the following configuration schema:
product_assembly_configuration("my_product") { platform = { input = { supported_input_devices = [ "button", "touchscreen", ] } } }
It can also be set to a default value such as for testing:
fuchsia_structured_config_values("test_config") { cm_label = ":manifest" values = { supported_input_devices = [ "button", "keyboard", "lightsensor", "mouse", "touchscreen", ] } }