blob: 31d5dd08bf312027de85a1e69f4c67217fd15048 [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.ui.policy;
using fuchsia.ui.views;
/// 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.
protocol SessionShell {
/// Displays the given story view. The story this view belongs to is
/// identified by `view_id.story_id`.
/// DEPRECATED. For transitional purposes only.
AttachView(ViewIdentifier view_id, fuchsia.ui.views.ViewHolderToken view_holder_token);
AttachView2(ViewIdentifier view_id, fuchsia.ui.views.ViewHolderToken view_holder_token);
/// 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`.
protocol SessionShellContext {
GetComponentContext(request<ComponentContext> request);
GetFocusController(request<FocusController> request);
GetFocusProvider(request<FocusProvider> request);
GetPresentation(request<fuchsia.ui.policy.Presentation> request);
GetStoryProvider(request<StoryProvider> request);
/// Requests logout of the user. This causes the basemgr to tear down the
/// `Sessionmgr` instance of the user.
/// Restarts the session without logging out the user.
/// 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.
protocol SessionShellPresentationProvider {
/// When a StoryShell calls StoryShellContext.GetPresentation(), this request
/// arrives here.
GetPresentation(string story_id, request<fuchsia.ui.policy.Presentation> request);
/// When a StoryShell calls StoryShellContext.WatchVisualState(), this request
/// arrives here.
WatchVisualState(string story_id, StoryVisualStateWatcher watcher);