blob: eb3705d3d6feed9871ca3da193a6b62c898a830d [file] [log] [blame]
// 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.
#ifndef SRC_LIB_UI_BASE_VIEW_VIEW_PROVIDER_SERVICE_H_
#define SRC_LIB_UI_BASE_VIEW_VIEW_PROVIDER_SERVICE_H_
#include <fuchsia/ui/app/cpp/fidl.h>
#include <lib/fidl/cpp/binding_set.h>
#include <lib/fit/function.h>
#include <lib/sys/cpp/component_context.h>
#include <vector>
#include "src/lib/ui/base_view/base_view.h"
namespace scenic {
// A callback to create a view when given a context.
using ViewFactory = fit::function<std::unique_ptr<BaseView>(ViewContext context)>;
// Publishes a view provider as an outgoing service of the application.
// The views created by the view provider are owned by it and will be destroyed
// when the view provider itself is destroyed.
//
// This is only intended to be used for simple example programs.
class ViewProviderService : private fuchsia::ui::app::ViewProvider {
public:
ViewProviderService(sys::ComponentContext* component_context, fuchsia::ui::scenic::Scenic* scenic,
ViewFactory factory);
~ViewProviderService();
// |fuchsia::ui::app::ViewProvider|
void CreateView(zx::eventpair view_token,
fidl::InterfaceRequest<fuchsia::sys::ServiceProvider> incoming_services,
fidl::InterfaceHandle<fuchsia::sys::ServiceProvider> outgoing_services) override;
private:
ViewProviderService(sys::ComponentContext* component_context,
fuchsia::ui::scenic::Scenic* scenic);
ViewProviderService(const ViewProviderService&) = delete;
ViewProviderService& operator=(const ViewProviderService&) = delete;
sys::ComponentContext* const component_context_;
fuchsia::ui::scenic::Scenic* const scenic_;
ViewFactory view_factory_ = nullptr;
std::vector<std::unique_ptr<BaseView>> views_;
fidl::BindingSet<fuchsia::ui::app::ViewProvider> bindings_;
};
} // namespace scenic
#endif // SRC_LIB_UI_BASE_VIEW_VIEW_PROVIDER_SERVICE_H_