// 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.
@available(added=7, deprecated=13, note="Use fuchsia.element.Manager instead.")
library fuchsia.developer.tiles;

using fuchsia.ui.app;
using fuchsia.ui.gfx;

@discoverable
closed protocol Controller {
    /// Instantiates a component by its URL and adds a tile backed by that component's ViewProvider.
    /// Returns a key for the tile that can be used for resizing or removing the tile, or 0 on failure.
    strict AddTileFromURL(struct {
        url string;
        allow_focus bool;
        args vector<string>:optional;
    }) -> (struct {
        key uint32;
    });

    /// Adds a tile backed by a view from the view provider.
    /// Returns a key for the tile that can be used for resizing or removing the tile, or 0 on failure.
    strict AddTileFromViewProvider(resource struct {
        url string;
        provider client_end:fuchsia.ui.app.ViewProvider;
    }) -> (struct {
        key uint32;
    });

    /// Removes the tile with the given key.
    strict RemoveTile(struct {
        key uint32;
    });

    /// Returns a list of tiles.
    strict ListTiles() -> (struct {
        keys vector<uint32>;
        urls vector<string>;
        sizes vector<fuchsia.ui.gfx.vec3>;
        focusabilities vector<bool>;
    });

    /// Asks the tiles component to quit.
    strict Quit();
};
