blob: 5715651b4a94cf631fc4f5cd09a901cd694b1816 [file] [log] [blame] [view]
# `text_manager` internals
The `text_manager` is a program that serves the text editing needs of Fuchsia
clients.
## Consumer-facing APIs
`text_manager` serves the following discoverable FIDL APIs, which are offered
to the consumers of the text entry APIs.
* [`fuchsia.ui.input/ImeService`][1]: this is the first point of contact for
a text consumer that requires text editing capabilities. Clients call this
API to establish two-way communication between the consumer (text field owner)
and `text_manager`.
There is some duplication of functionality that should be removed in the
steady state. See [`fuchsia.input.virtualkeyboard/Manager`][10].
* [`fuchsia.ui.input3/Keyboard`][7]: used to accept keyboard event listener
registrations.
* [`fuchsia.ui.input3/KeyEventInjector`][8]: used to receive keyboard events
from the input pipeline.
* [`fuchsia.ui.keyboard.focus/Controller`][9]: used to accept focus change data,
primarily intended for getting messages from the input pipeline.
When `ImeService.GetInputMethodEditor` is called, two more connections are
established:
* [`fuchsia.ui.input/InputMethodEditorClient`][3]: served by the *consumer*,
used by the text manager to communicate the change in the text edit box state
to the consumer.
* [`fuchsia.ui.input/InputMethodEditor`][4]: served by text manager, used to
communicate the text input, and client commands.
## A brief tour of the internals
The text manager entry point is [main.rs][5].
All the services that text manager provides are declared in [`main` itself][6].
This is useful to know because the `.cml` "capabilities" and "offer" sections
must be reconstructed from the code.
[1]: https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.input/ime_service.fidl;l=8;drc=e3b39f2b57e720770773b857feca4f770ee0619e
[3]: https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.input/text_input.fidl?q=%22protocol%20InputMethodEditorClient%20%7B%22&ss=fuchsia%2Ffuchsia
[4]: https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.input/text_input.fidl?q=%22protocol%20InputMethodEditor%20%7B%22&ss=fuchsia%2Ffuchsia
[5]: https://cs.opensource.google/fuchsia/fuchsia/+/main:src/ui/bin/text/src/main.rs;l=19;drc=d5c7f0ad7d26fac62c9495cb7024203a8e85d93d
[6]: https://cs.opensource.google/fuchsia/fuchsia/+/main:src/ui/bin/text/src/main.rs;l=27;drc=d5c7f0ad7d26fac62c9495cb7024203a8e85d93d
[7]: https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.input3/keyboard.fidl;l=11;drc=e3b39f2b57e720770773b857feca4f770ee0619e
[8]: https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.input3/keyboard.fidl?q=%22protocol%20KeyEventInjector%20%7B%22
[9]: https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.ui.keyboard.focus/focus.fidl;l=21;drc=28aebcdb857d528c73f78b2c1b3ed731fd13bc1d
[10]: https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.input.virtualkeyboard/virtual_keyboard.fidl;l=184;drc=dbbfb34baa9a0f1d713d945de2c9978b26eaa312