| // 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; |
| |
| // This file has interfaces for 2 pieces of information: (1) The story |
| // that is currently in focus and (2) stories that are visible to the |
| // user. Names of interfaces follow the usual patterns: |
| // |
| // {Focus,VisibleStories}Controller is used by session shell to update |
| // information whenever changes take place. |
| // |
| // {Focus,VisibleStories}Provider is used by maxwell and session shell to |
| // query and get updates on which story is in focus on which device |
| // and visible stories on this device. |
| // |
| // NOTE(alhaad): The information about visible stories can be used by |
| // sessionmgr to stop / pause stories that are not visible to the |
| // user. |
| |
| // Implemented by sessionmgr. Given to session shell through its namespace. |
| interface FocusController { |
| // Sets the focus on this device. |
| 1: Set(string? focused_story_id); |
| 2: WatchRequest(FocusRequestWatcher watcher); |
| }; |
| |
| // Implemented by session shell. OnFocusRequest() gets called whenever there |
| // is a new request to change focus on this device. Requests can be |
| // made via FocusProvider.Request(). |
| interface FocusRequestWatcher { |
| 1: OnFocusRequest(string story_id); |
| }; |
| |
| // Implemented by sessionmgr. Given to session shell and session agents through |
| // their namespace. Focus is persisted on the ledger. |
| [Discoverable] |
| interface FocusProvider { |
| // Returns the stories that are focused across all devices. |
| 1: Query() -> (vector<FocusInfo> focused_stories); |
| |
| // Watches for change in focus on any of the user's devices. |
| 2: Watch(FocusWatcher watcher); |
| |
| // Requests session shell to change focus on this device. If session shell |
| // responds to this request, focus shall be taken away from |
| // previously focused story and an update will be sent on |
| // FocusWatcher.OnFocusChange(). If |story_id| is NULL, the timeline |
| // is brought back into focus. |
| // |
| // TODO(alhaad): Consider making this available for remote devices as |
| // well. |
| 3: Request(string? story_id); |
| }; |
| |
| // Implemented by anyone who is interested in getting updates when focus |
| // changes. |
| interface FocusWatcher { |
| 1: OnFocusChange(FocusInfo? focus_info); |
| }; |
| |
| // Specifies the focused story of a device. |
| struct FocusInfo { |
| // The id of the device. |
| string device_id; |
| |
| // The id of the focused story. If null, no stories are focused. |
| string? focused_story_id; |
| |
| // The time the focused story on the device |device_id| was last |
| // changed. 0 if no focus has ever been set for device |device_id|. |
| uint64 last_focus_change_timestamp; |
| }; |
| |
| // Implemented by sessionmgr. Given to session shell through its namespace. |
| interface VisibleStoriesController { |
| 1: Set(vector<string>? visible_story_ids); |
| }; |
| |
| // Implemented by sessionmgr. Given to story info through its namespace. |
| // Visible stories are NOT stored on the ledger. |
| [Discoverable] // Maxwell apps request this from environment. |
| interface VisibleStoriesProvider { |
| // Returns the |story_ids| that are currently visible. |
| 1: Query() -> (vector<string> story_id); |
| |
| // Watches for change in visible stories on this device. |
| 2: Watch(VisibleStoriesWatcher watcher); |
| }; |
| |
| // Implemented by anyone (maxwell) who is interested in getting updates when |
| // stories that are currently visible change. |
| interface VisibleStoriesWatcher { |
| 1: OnVisibleStoriesChange(vector<string>? visible_story_ids); |
| }; |