blob: 19b02f937e28109ec5f01806490442a911e2166a [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.
@discoverable
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.
@transitional
AttachView(resource struct {
view_id ViewIdentifier;
view_holder_token fuchsia.ui.views.ViewHolderToken;
});
@transitional
AttachView2(resource struct {
view_id ViewIdentifier;
view_holder_token fuchsia.ui.views.ViewHolderToken;
});
/// 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(struct {
view_id ViewIdentifier;
}) -> ();
};
/// 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:MAX to allow for future evolution of
/// the identifier without changing the `SessionShell` API itself.
type ViewIdentifier = struct {
story_id string:MAX;
};
/// 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`.
@discoverable
protocol SessionShellContext {
GetComponentContext(resource struct {
request server_end:ComponentContext;
});
GetPresentation(resource struct {
request server_end:fuchsia.ui.policy.Presentation;
});
GetStoryProvider(resource struct {
request server_end:StoryProvider;
});
/// Restarts the session.
Restart();
/// Deprecated: Equivalent to Restart().
@transitional
Logout();
};