blob: 5b45257971c246907d6a8c6525d076ad74d44b7d [file] [log] [blame]
// 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.
#ifndef SRC_LIB_UI_BASE_VIEW_EMBEDDED_VIEW_UTILS_H_
#define SRC_LIB_UI_BASE_VIEW_EMBEDDED_VIEW_UTILS_H_
#include <fuchsia/ui/app/cpp/fidl.h>
#include <fuchsia/ui/gfx/cpp/fidl.h>
#include <fuchsia/ui/input/cpp/fidl.h>
#include <fuchsia/ui/scenic/cpp/fidl.h>
#include <fuchsia/ui/views/cpp/fidl.h>
#include <lib/sys/cpp/service_directory.h>
#include <lib/ui/scenic/cpp/resources.h>
#include <lib/ui/scenic/cpp/session.h>
namespace scenic {
// Serves as the return value for LaunchAppAndCreateView(), below.
struct EmbeddedViewInfo {
// Controls the launched app. The app will be destroyed if this connection
// is closed.
fuchsia::sys::ComponentControllerPtr controller;
// Services provided by the launched app. Must not be destroyed
// immediately, otherwise the |view_provider| connection may not be
// established.
std::shared_ptr<sys::ServiceDirectory> app_services;
// ViewProvider service obtained from the app via |app_services|. Must not
// be destroyed immediately, otherwise the call to CreateView() might not be
// processed.
fuchsia::ui::app::ViewProviderPtr view_provider;
// A token that can be used to create a ViewHolder; the corresponding token
// was provided to |view_provider| via ViewProvider.CreateView(). The
// launched app is expected to create a View, which will be connected to the
// ViewHolder created with this token.
fuchsia::ui::views::ViewHolderToken view_holder_token;
// The ViewRef of the embedded View.
fuchsia::ui::views::ViewRef view_ref;
};
// Launch a component and connect to its ViewProvider service, passing it the
// necessary information to attach itself as a child view. Populates the
// returned EmbeddedViewInfo, which the caller can use to embed the child.
// For example, an interface to a ViewProvider is obtained, a pair of
// zx::eventpairs is created, CreateView is called, etc. This encapsulates
// the boilerplate the the client would otherwise write themselves.
EmbeddedViewInfo LaunchComponentAndCreateView(const fuchsia::sys::LauncherPtr& launcher,
const std::string& component_url,
const std::vector<std::string>& component_args = {});
} // namespace scenic
#endif // SRC_LIB_UI_BASE_VIEW_EMBEDDED_VIEW_UTILS_H_