blob: b1a421e1274037f0041259f1f6ff7771ebd5aea2 [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.modular;
using fuchsia.modular.auth;
using fuchsia.speech;
using fuchsia.ui.policy;
using fuchsia.ui.viewsv1token;
// This interface is implemented by a session shell and is used by the
// sessionmgr to hand to the session shell views of stories, or to notify that
// the view of a story is about to be closed.
interface SessionShell {
// Displays the given story view. The story this view belongs to is
// identified by |view_id.story_id|.
AttachView(ViewIdentifier view_id, fuchsia.ui.viewsv1token.ViewOwner view_owner);
// Instructs the session shell to detach the view identified by |view_id|
// that was previously provided by AttachView() from the UI of the session
// shell. The view will be closed soon after DetachView() returns, or when a
// timeout is reached.
// It is customary for the session shell to display a placeholder before a
// view is attached for a given view identifier, or after it was detached.
// If the story identified by |view_id.story_id| is about to be deleted, the
// Shell will observe a call to StoryProviderWatcher.OnDelete() sometime
// after DetachView() returns.
// If the session for which this session shell is responsible for is being
// terminated, or the session shell is stopped because it's replaced by
// another session shell, DetachView() will *not* be called at all, and the
// shell will rather observe a call to Lifecycle.Terminate().
DetachView(ViewIdentifier view_id) -> ();
// Identifies a view provided to a session shell. The values of the |story_id|
// field match those used in the |StoryProvider| interface, allowing
// identification of the same story across interfaces.
// This is a struct rather than a naked string to allow for future evolution of
// the identifier without changing the |SessionShell| API itself.
struct ViewIdentifier {
string story_id;
// This interface allows a |SessionShell| to request capabilities from its
// creator in a way that is more explicit about the services that are
// offered than a generic |ServiceProvider|.
interface SessionShellContext {
// The account associated with the currently logged-in user. It's NULL if
// logged into GUEST mode.
1: GetAccount() -> (fuchsia.modular.auth.Account? account);
2: GetAgentProvider(request<AgentProvider> request);
3: GetComponentContext(request<ComponentContext> request);
4: GetDeviceName() -> (string device_name);
5: GetFocusController(request<FocusController> request);
6: GetFocusProvider(request<FocusProvider> request);
8: GetLink(request<Link> request);
9: GetPresentation(request<fuchsia.ui.policy.Presentation> request);
10: GetSpeechToText(request<fuchsia.speech.SpeechToText> request);
11: GetStoryProvider(request<StoryProvider> request);
12: GetSuggestionProvider(request<SuggestionProvider> request);
13: GetVisibleStoriesController(request<VisibleStoriesController> request);
// Requests logout of the user. This causes the basemgr to tear down the
// |Sessionmgr| instance of the user.
16: Logout();
// Session shell provides this service to the framework which may plumb it to
// different subscribers, such as story shell and intelligence provider.
// EXPERIMENTAL Service that allows consumers of a given story to get a
// connection to a Presentation, and visual state services provided by the user
// shell. This allows story shell implementations to coordinate event and focus
// handling. An analog mechanism exists between BaseShell and SessionShell.
[Discoverable] // Created by session shell components.
interface SessionShellPresentationProvider {
// When a StoryShell calls StoryShellContext.GetPresentation(), this request
// arrives here.
1: GetPresentation(string story_id, request<fuchsia.ui.policy.Presentation> request);
// When a StoryShell calls StoryShellContext.WatchVisualState(), this request
// arrives here.
2: WatchVisualState(string story_id, StoryVisualStateWatcher watcher);