// Copyright 2021 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.ui.keyboard.focus;

using fuchsia.ui.views;

/// Updates the focus of the keyboard subsystem.
///
/// # Roles
/// This protocol will typically be:
/// * Implemented by platform components implementing the keyboard
///   subsystem.
/// * Consumed by platform components which control UI policy.
///   E.g. Root Presenter, or the Workstation Session.
///
/// # Related protocols
/// * `fuchsia.ui.input3.Keyboard` (for receiving keystrokes)
/// * `fuchsia.ui.input.InputMethodEditor` (for text editing)
@discoverable
closed protocol Controller {
    /// Informs the implementer of `Controller` that further keyboard
    /// data should be routed to the keystroke/text consumer
    /// associated with `view_ref`.
    ///
    /// # Notes
    /// * The callee should monitor the provided `ViewRef` for a
    ///   `ZX_EVENTPAIR_PEER_CLOSED` signal (see documentation for
    ///   `fuchsia.ui.views.ViewRefControl`).
    /// * When the `ViewRef` receives `ZX_EVENTPAIR_PEER_CLOSED`, the
    ///   callee should stop delivering keystroke/text to
    ///   the consumer associated with `view_ref`.
    /// * The caller should wait for each call to be acknowledged
    ///   before calling again, to avoid queueing large numbers of
    ///   of updates.
    strict Notify(resource struct {
        view_ref fuchsia.ui.views.ViewRef;
    }) -> ();
};
