// 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.

library fuchsia.accessibility.semantics;

using fuchsia.ui.views;

/// An interface to manage connections with views for the purposes of gathering semantic information
/// about their current UI state.
///
/// The manager allows clients to register as a semantic provider for their view(s). In return the
/// semantics manager supplies an interface to update, commit and delete information from the
/// semantic tree for that view.
[Discoverable]
protocol SemanticsManager {
    RegisterView(fuchsia.ui.views.ViewRef view_ref,
                 SemanticActionListener listener,
                 request<SemanticTree> semantic_tree_request);
};

/// Interface to update the semantic tree for a particular view. Nodes can be added, updated or
/// deleted. Because the size of an update may exceed FIDL transfer limits, clients are responsible
/// for breaking up changes into multiple update and delete calls that conform to these limits. The
/// commit function must always be called at the end of a full update push to signal the end of an
/// update.
protocol SemanticTree {
    // Commits pending changes to node tree associated with the view using UpdateSemanticNodes and
    // DeleteSemanticNodes.
    Commit();

    // Sends new/updated nodes to the root to add to the cache on the next commit.
    UpdateSemanticNodes(vector<Node> nodes);

    // Tells the root to remove nodes with node_ids from the semantic tree on the next commit.
    DeleteSemanticNodes(vector<uint32> node_ids);
};

/// A semantic provider is the client-side interface that the manager can use to
/// ask clients to perform accessibility actions.
protocol SemanticActionListener {
    // Asks the semantics provider to perform an accessibility action on the
    // node with node id in the front-end.
    OnAccessibilityActionRequested(uint32 node_id, Action action) -> (bool handled);
};
