| // 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.mem; |
| |
| struct Proposal { |
| // Identifies a proposal, namespaced internally to the proposing component and |
| // proposal channel (Query or Next/Interruption). |
| string id; |
| |
| // A client-assigned name for the story to which the actions in |on_selected| |
| // apply. If a story with the given name already exists (ie, because a past |
| // Proposal with the same |story_name| was executed), the actions in |
| // |on_selected| will apply to the existing story. Otherwise, a new story is |
| // created. |
| // If |story_name| is null, a new story is always created. |
| // This name is namespaced to the agent that submitted the proposal. |
| string? story_name; |
| |
| // If set to true, this proposal will only show up when |story_id| is in the |
| // foreground. |
| bool story_affinity; |
| |
| // The list of actions to take when the user selects the associated |
| // Suggestion. |
| vector<Action> on_selected; |
| |
| // An optional hint about the probability that this proposal would be chosen |
| // if it were the only proposal presented to the user. A confidence of 0.0 |
| // indicates no hint. The confidence assigned by the system may be subject to |
| // other considerations such as performance metrics. |
| float32 confidence = 0.0; |
| |
| // True iff the proposal would like to make use of a rich suggestion. Only |
| // certain components are allowed to use rich suggestions. |
| bool wants_rich_suggestion = false; |
| |
| SuggestionDisplay display; |
| |
| // A listener interface that is notified when the proposal is accepted by |
| // the system. |
| // |
| // The listener is currently notified once when a proposal is accepted. Thus the |
| // |story_id| provided will be of the first create story action in |on_selected|, |
| // and subsequent create story actions will not notify the listener. |
| ProposalListener? listener; |
| }; |
| |
| // An interface that allows Proposal creators to be notified when a proposal |
| // is accepted by the system. |
| interface ProposalListener { |
| // Indicates that a proposal was accepted by the system. |
| // |
| // |proposal_id| The identifier of the accepted proposal. |
| // |story_id| The identifier of the created story, if a story was created. |
| 1: OnProposalAccepted(string proposal_id, string? story_id); |
| }; |
| |
| union Action { |
| FocusStory focus_story; |
| FocusModule focus_module; |
| AddModule add_module; |
| UpdateModule update_module; |
| SetLinkValueAction set_link_value_action; |
| CustomAction custom_action; |
| }; |
| |
| // Brings an existing story into focus. |
| struct FocusStory { |
| // Struct can't be empty. This field is ignored. |
| bool hack; |
| }; |
| |
| // Brings an existing module into focus. |
| struct FocusModule { |
| // The module path of the existing module. |
| vector<string> module_path; |
| }; |
| |
| // Adds a module from an Intent to an existing story. |
| struct AddModule { |
| // The name of the module that will be added as a result of this proposal. A |
| // proposal for the same |story_id|, |module_name| and |
| // |surface_parent_module_path| from the same Agent will result in replacing |
| // the module at |module_name|, not adding a new one. |
| string module_name; |
| |
| // The Intent that is to be added to the story. |
| Intent intent; |
| |
| // The relation, relative to |surface_parent_module_path| to use. This |
| // information is passed to the story shell for visual module composition. |
| SurfaceRelation surface_relation; |
| |
| // The module path of an existing module to assign as the surface-relationship |
| // parent of this new module. |
| vector<string> surface_parent_module_path; |
| }; |
| |
| struct SetLinkValueAction { |
| // Identifies the link within the story. |
| LinkPath link_path; |
| |
| // The bytes that will be written to the link. |
| // If empty, unsets the link value. |
| fuchsia.mem.Buffer? value; |
| }; |
| |
| struct UpdateModule { |
| vector<string> module_name; |
| |
| // For every entry |p| in |parameters|, update the value of the link |
| // backing |p.name| to that specified in |p.data|. |
| vector<IntentParameter> parameters; |
| }; |
| |
| // An action that calls back to the proposal publisher to be performed. |
| interface CustomAction { |
| 1: Execute(); |
| }; |