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

using fuchsia.sys;

// NOTE: This is likely not the ViewProvider you are looking for!  This is
// the new ViewProvider interface that will be deprecating the old one soon.
// The old ViewProvider is in fuchsia.ui.viewsv1.ViewProvider.
// TODO(SCN-589): Remove this when old ViewProvider is deleted.
//
// ViewProvider is the standard mechanism for two modules to each obtain half
// of a shared eventpair token.  The shared token is a capability allowing the
// modules to ask Scenic to create a ViewHolder/View pair.  The resulting
// View and ViewHolder are linked together until either one is destroyed.
//
// Modules are free to use any other mechanism to agree upon the shared
// eventpair token, and use this to create the linked ViewHolder/View.
// ViewProvider is given for the convenience of clients that don't require
// a more complex implementation.
[Discoverable]
interface ViewProvider {
    // Creates a new View under the control of the ViewProvider.
    //
    // |token| is one half of the shared eventpair which will bind the new View
    // to its associated ViewHolder.  The ViewProvider will use |token| to
    // create its internal View representation.  The caller is expected to use
    // its half to create corresponding ViewHolder object.
    //
    // |incoming_services| allows clients to request services from the
    // ViewProvider implementation.  |outgoing_services| allows clients to
    // provide services of their own to the ViewProvider implementation.
    //
    // Clients can embed a ViewHolder (and by proxy the paired View) into their
    // scene graph by using |Node.AddChild()|.  The ViewHolder cannot itself
    // have any children. A ViewProvider implementation can nest scene objects
    // within its View by using |View.AddChild()|.  The View itself
    // cannot be a child of anything.
    //
    // Modules can use these mechanisms to establish a distributed,
    // inter-process scene graph.
    1: CreateView(handle<eventpair> token,
                  request<fuchsia.sys.ServiceProvider>? incoming_services,
                  fuchsia.sys.ServiceProvider? outgoing_services);
};
