| // 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 zx; |
| |
| /// Allows clients to observe changes in the session. |
| [FragileBase] |
| protocol SessionObserver { |
| /// Returns the list of existing stories. Subsequent calls will wait until |
| /// the list has changed to return. |
| WatchStories() -> (vector<StorySummary> stories); |
| |
| /// Immediately returns the list of ongoing activities in the session on the |
| /// first call. On subsequent calls, waits and returns a new list only once |
| /// the list has changed. |
| WatchOngoingActivities() |
| -> (vector<OngoingActivityInfo> ongoing_activies); |
| }; |
| |
| table StorySummary { |
| /// The ID, unique to the session and assigned by the framework, for this story. |
| /// |
| /// NOTE: the value of |id| is different from that provided by session |
| /// controllers through fuchsia.app.sessioncontrol.SessionController. |
| 1 : fuchsia.app.StoryId id; |
| |
| /// Contains the latest runtime state for this story. Shells may opt to use |
| /// this state to, e.g., dim a story's UI while it is not running. |
| 2 : StoryRuntimeState runtime_state; |
| |
| /// Informs the session shell how to display this story when on screen. See |
| /// StoryDisplayInfo below for details. |
| /// |
| /// The value can change at any time. Shells are expected to update the |
| /// story's UI accordingly. |
| 3 : StoryDisplayInfo display_info; |
| |
| /// The last time this story was the foreground story in any session shell |
| /// across all devices. |
| /// Updated after a session shell calls SessionController/FocusedStory(). |
| 4 : zx.time last_focus_time; |
| }; |
| |
| /// Describes how a story should be displayed within the session |
| /// shell when the story is being displayed on screen. Session shells are |
| /// expected to honor the semantics of this struct. |
| table StoryDisplayInfo { |
| /// The expected display mode for the story within the shell. See |
| /// StoryVisibilityMode docs for details. |
| 1: StoryVisibilityMode mode; |
| }; |
| |
| /// Describes how a story should be displayed, when focused, within the session |
| /// shell. |
| enum StoryVisibilityMode { |
| /// Default for a story: the story should be given the majority of the |
| /// screen. |
| DEFAULT = 1; |
| |
| /// Full-screen user experience, e.g. playing a video. |
| IMMERSIVE = 2; |
| }; |
| |
| /// Information about a single ongoing activity within a story. |
| table OngoingActivityInfo { |
| 1 : fuchsia.app.StoryId id; |
| |
| 2 : fuchsia.app.OngoingActivityType type; |
| }; |
| |
| /// State of a Story. A story is either running, stopping, or stopped, |
| /// separately on every device of the user. If it's running, it can also be |
| /// focused, but that's tracked in a separate service, cf. FocusProvider in |
| /// focus.fidl. |
| /// |
| /// State transitions are: |
| /// STOPPED -> RUNNING -> STOPPING -> STOPPED |
| enum StoryRuntimeState { |
| /// Modules are running and the story can react to user input. |
| RUNNING = 1; |
| /// Story is in the process of being torn down. |
| STOPPING = 2; |
| /// Story is not running and will not react to user input if displayed. UI |
| /// for a story, if available, is a static snapshot of previous story state. |
| STOPPED = 3; |
| }; |