// 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;

/// Allows clients to make changes to the session.
[FragileBase]
protocol SessionController {
    /// Focuses the story given the |id|. The shell can expect:
    ///   * The story's runtime state to transition to RUNNING, observable
    ///     through SessionObserver/WatchStories().
    ///   * The story's |StoryInfo.last_focus_time| to increase.
    ///   * A future call to SessionShell/AttachView(), if there is not already
    ///     a view attached.
    ///
    /// Modular priotizes runtime resources for the focused story.
    FocusStory(fuchsia.app.StoryId id);

    /// Sets the prioritized stories.  |ids| should include those stories that
    /// the shell wishes to remain interactive such as ambient UI elements or
    /// other stories that do not classify as focused but remain important.
    ///
    /// The list is used to prioritize runtime resources.
    SetPrioritizedStories(vector<fuchsia.app.StoryId> ids);

    /// Tears down the session. The SessionController channel will close
    /// immediately.
    TeardownSession();
};
