// Copyright 2015 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.input;

// TODO(jeffbrown): Redesign input event representation later.

// The input connection service allows a view to receive input events
// such as key presses and pointer movements.

// This service can be retrieved from the |View| service provider.
//
// TODO(jeffbrown): Elaborate this.  Particularly need to think about
// how to handle focus and gestures.
[Discoverable]
interface InputConnection {
  // Sets the listener for receiving input events.
  //
  // If |listener| is null, then the previously set listener is removed.
  1: SetEventListener(InputListener? listener);

  // Retrieves an |InputMethodEditor| to handle text editing.
  2: GetInputMethodEditor(KeyboardType keyboard_type,
                         InputMethodAction action,
                         TextInputState initial_state,
                         InputMethodEditorClient client,
                         request<InputMethodEditor> editor);
  3: ShowKeyboard();
  4: HideKeyboard();
};

// An interface applications may implement to receive events from an
// input connection.
// TODO(MZ-33): This should include hit testing and an input arena.
[Discoverable]
interface InputListener {
  // Called to deliver an input event.
  //
  // The |consumed| result should indicate whether the input event was
  // consumed by the connection.  If |consumed| is false, the system may
  // apply default behavior of its own in response to the event.
  1: OnEvent(InputEvent event) -> (bool consumed);
};