// 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.ui.app;

/// A View is an interface that a component implements to offer a Scenic
/// view to its clients.  A Scenic view is container of Scenic graph nodes,
/// which, when rendered, might display a graphical user interface, such
/// as a module, shell, or on-screen keyboard.
///
/// A client of the |View| interface will:
///
/// 1. Launch (or bind to) the component that provides the interface.
/// 2. Connect to the component's |View| interface.
/// 3. Call |SetConfig()| at least once to configure the view's presentation
///    parameters.
/// 4. Call |AttachView()| to ask the |View| to attach its graphical
///    content to the Scenic scene graph using the provided |view_token|.
/// 5. Optionally, while the View is attached, call |SetConfig()| again to
///    modify any presentation parameters as needed.
///
/// When the client no longer needs the View, it should disconnect from
/// the interface and terminate (or unbind) from the component.
///
/// NOTE: Unlike with |ViewProvider|, the client owns the |View| instance and
/// must retain it for the lifetime of the UI that it displays. If the |View|
/// instance is destroyed, the connection will be dropped.
///
/// On the implementation side, a component that exposes the
/// |View| interface has the following responsibilities:
///
/// * Initialize and attach the View's content to the Scenic scene graph
///   using the |fuchsia.ui.view.CreateViewCmd| and passing the provided
///   |view_token|.
/// * Adjust the appearance and/or contents of the view's content whenever
///   its |ViewConfig| changes.
/// * Provide graphical content for the view and handle user interface
///   events such as touches, key presses, and |fuchsia.ui.view.ViewProperty|
///   changes using other Scenic interfaces such as |fuchsia.ui.Scenic|
///   and |fuchsia.ui.SessionListener|.
///
///  TODO(SCN-1198): Migrate all implementations of |ViewProvider| to use |View|.
[Discoverable]
protocol View {
    /// Updates the View's configuration.
    ///
    /// To prevent triggering UI changes shortly after a client starts up, the
    /// View's client should set the configuration prior to calling
    /// |AttachView()| unless the default is adequate.
    ///
    /// May be called again at any time to modify the view's configuration.
    SetConfig(ViewConfig config);

    /// Attaches the View to Scenic's scene graph. Must only be called once per
    /// |View| lifetime.
    ///
    /// The View's implementation should pass the |view_token| to Scenic
    /// using a |fuchsia.ui.view.CreateViewCmd|.
    Attach(handle<eventpair> view_token);
};
