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

using fuchsia.ui.input;

/// A service provided to keyboard apps that allows them to access a TextField
/// interface for the currently focused text field. Requests to this TextField
/// interface are proxied through the TextManager to batch edits together,
/// and to ensure requests aren't sent to unfocused TextFields.
[Discoverable]
interface TextInputContext {
  /// Tells anyone listening to ImeVisibilityService (usually a shell) to hide
  /// the onscreen keyboard.
  HideKeyboard();

  /// This event fires any time a new text field is focused. It also is sent to
  /// newly connected keyboards when they connect, if there is a focused text
  /// field. If focus is lost, the TextField handle will be closed.
  -> OnFocus(TextField text_field);

  /// This event fires any time a physical keyboard event is sent to the
  /// TextManager. The keyboard may translate it into an edit on the focused
  /// text field if it so desires. It's expected that this interface will change
  /// as the routing for keyboard events and keymaps evolves.
  -> OnInputEvent(fuchsia.ui.input.InputEvent event);
};
