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).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.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.