blob: 67932cdb1515c9a6fa6b85d7f764420620407087 [file] [log] [blame]
// Copyright 2019 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.app.sessionshell;
using fuchsia.app;
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 {
/// Attaches |view_holder_token| as the view for |story_id|. Session
/// shells are expected to compose the view into the session UI. Metadata
/// about the story are available through SessionObserver/WatchStories() for the same
/// StoryId.
///
/// It is customary for the session shell to display a placeholder before a
/// the first call to AttachView() for a given view_id.
AttachView(fuchsia.app.StoryId story_id, fuchsia.ui.views.ViewHolderToken view_holder_token);
/// Instructs the session shell to detach from the shell UI the view
/// for |story_id|. The view will be closed soon after
/// DetachView() returns, or after a timeout is reached.
///
/// If the story identified by |story_id| is being deleted, the
/// shell will observe the story's removal in a future call to
/// SessionObserver/WatchStories().
///
/// If the session for which this session shell is responsible for is being
/// terminated, the shell should expect to be terminated without observing
/// individual calls to DetachView() for each story.
///
/// It is customary for the session shell to display a placeholder after a
/// call to DetachView().
DetachView(fuchsia.app.StoryId story_id) -> ();
/// Instructs the shell that another client (such as a session controller)
/// is requesting a specific story be brought into focus. The shell should
/// return true if it will honor the request and false otherwise.
///
/// Returning true has the same behavior as returning false and calling
/// SessionController/FocusStory(id).
HandleFocusStoryRequest(fuchsia.app.StoryId id) -> (bool did_focus);
};