blob: 6452ffb313548a9de6ebaeec4c339ac86b9511cb [file] [log] [blame] [view]
## Shells
Shells are components which are responsible for composing UI. There are three
shells:
* `BaseShell` displays UI associated with a device, prior to a session being
started.
* `SessionShell` displays the UI associated with a given session (e.g. list of
stories, settings UI).
* `StoryShell` displays a single story (i.e. the composition of the modules in
a story, each story gets its own `StoryShell` instance).
### Environment
A shell is given access to two services provided by the modular framework in its
incoming namespace:
* `fuchsia.modular.ComponentContext` gives the agent access to functionality
which is shared across components run under the modular framework (e.g.
modules, shells, agents).
* `fuchsia.modular.[Base,Session,Story]ShellContext` gives access to shell
specific functionality for each type of shell, respectively.
A shell is expected to provide two services to the modular framework in its
outgoing namespace:
* `fuchsia.modular.[Base,Session,Story]Shell` the modular framework uses to
communicate requests to display UI.
* `fuchsia.modular.Lifecycle` allows the framework to signal the shell to
terminate gracefully.
### Lifecycle
The three shells have varying lifecycles:
* `BaseShell` runs between the time `basemgr` starts up until a session has
been established, and on demand thereafter to faciliate authentication
requests.
* `SessionShell` runs for the duration of a session.
* `StoryShell` runs while its associated story is running.