// 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.ui.shortcut;

using fuchsia.ui.input2;

/// Shortcuts manager handles keyboard events, detects shortcut activations,
/// notifies clients.
///
/// Typically this interface is used by RootPresenter to notify the manager
/// about events generated by other participants of the user interaction flow.
[Discoverable]
protocol Manager {

    /// Detect shortcuts and notify clients of activations.
    /// Returns true if shortcut was matched and client handled it, false otherwise.
    HandleKeyEvent(fuchsia.ui.input2.KeyEvent event) -> (bool was_handled);

    // TODO: implement when the design is approved.
    // HandleFocusChange(FocusChain focus) -> ();
};
