blob: 7642756e7b40218ea774a936339065e34bf9f0d5 [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_UI_TOOLS_TILES_TILES_H_
#define SRC_UI_TOOLS_TILES_TILES_H_
#include <fuchsia/developer/tiles/cpp/fidl.h>
#include <fuchsia/sys/cpp/fidl.h>
#include <fuchsia/ui/app/cpp/fidl.h>
#include <fuchsia/ui/gfx/cpp/fidl.h>
#include <fuchsia/ui/scenic/cpp/fidl.h>
#include <fuchsia/ui/views/cpp/fidl.h>
#include <lib/fidl/cpp/binding_set.h>
#include <lib/ui/scenic/cpp/id.h>
#include <lib/ui/scenic/cpp/resources.h>
#include "src/lib/ui/base_view/base_view.h"
#include <unordered_map>
namespace tiles {
class Tiles : public fuchsia::developer::tiles::Controller, public scenic::BaseView {
public:
Tiles(scenic::ViewContext view_context, std::vector<std::string> urls, int border = 0);
~Tiles() override = default;
private:
struct ViewData {
explicit ViewData(const std::string& url, bool allow_focus,
fuchsia::sys::ComponentControllerPtr controller, scenic::EntityNode node,
scenic::ViewHolder view_holder);
~ViewData() = default;
const std::string url;
fuchsia::sys::ComponentControllerPtr controller;
fuchsia::ui::gfx::ViewProperties view_properties;
scenic::EntityNode host_node;
scenic::ViewHolder host_view_holder;
};
// |fuchsia::developer::tiles::Controller|
void AddTileFromURL(std::string url, bool allow_focus, fidl::VectorPtr<std::string> args,
AddTileFromURLCallback callback) final;
void AddTileFromViewProvider(std::string url,
fidl::InterfaceHandle<fuchsia::ui::app::ViewProvider> provider,
AddTileFromViewProviderCallback callback) final;
void RemoveTile(uint32_t key) final;
void ListTiles(ListTilesCallback callback) final;
void Quit() final;
// |scenic::SessionListener|
void OnScenicError(std::string error) final;
// |scenic::BaseView|
void OnPropertiesChanged(fuchsia::ui::gfx::ViewProperties old_properties) final;
void OnScenicEvent(fuchsia::ui::scenic::Event) final;
void AddTile(uint32_t child_key, fuchsia::ui::views::ViewHolderToken view_holder_token,
const std::string& url, fuchsia::sys::ComponentControllerPtr, bool allow_focus);
void Layout();
fidl::BindingSet<fuchsia::developer::tiles::Controller> tiles_binding_;
fuchsia::sys::LauncherPtr launcher_;
std::unordered_map<uint32_t, std::unique_ptr<ViewData>> views_;
std::unordered_map<scenic::ResourceId, uint32_t> view_id_to_keys_;
scenic::ShapeNode background_node_;
scenic::EntityNode container_node_;
uint32_t next_child_view_key_ = 0;
int border_ = 0; // Border in logical pixels for each tile.
};
} // namespace tiles
#endif // SRC_UI_TOOLS_TILES_TILES_H_