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

library fuchsia.accessibility;

using fuchsia.accessibility.semantics;
using fuchsia.ui.input;
using fuchsia.ui.viewsv1;

// The accessibility manager as a whole acts as an aggregator of accessibility
// information provided by the compositor, Scenic, and front-ends like Flutter.
// It is also the main contact for accessibility services to read accessibility
// information.
//
// The Manager interface itself defines the API surface for accessibility
// services to access semantics information and apply accessibility actions.
//

// TODO(SCN-812) This is a stub implementation and is currently a work in
// progress. Currently, there are three levels of identification used in the
// system (All prone to change):
//  1. ViewTreeToken: Owned by Scenic. Maps to ViewTree to do hit test on.
//  2. View id: Owned by Scenic. Maps to view corresponding to a front-end.
//  3. Node id: Owned by front-end. Maps to semantic node local to a front-end.
[Discoverable]
protocol Manager {
    // Returns the deepest node that the input touches. We currently need to
    // pass the view tree token for the current view manager implementation to
    // know which view tree to search.
    GetHitAccessibilityNode(fuchsia.ui.viewsv1.ViewTreeToken tree_token,
                            fuchsia.ui.input.PointerEvent input)
        -> (int32 view_id, fuchsia.accessibility.semantics.Node node);

    // Sets accessibility focus to the specified node in the frontend with the
    // specified id. Previously set accessibility focus is removed.
    SetAccessibilityFocus(int32 view_id, int32 node_id);

    // Performs an accessibility action on the current accessibility focused
    // element. If no element has accessibility focus, does nothing.
    PerformAccessibilityAction(fuchsia.accessibility.semantics.Action action);

    // Event to notify that a node in a front-end referenced by id had an
    // action applied on it.
    -> OnNodeAction(int32 view_id, fuchsia.accessibility.semantics.Node node, fuchsia.accessibility.semantics.Action action);
};
