// Copyright 2017 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;

enum KeyboardType {
  TEXT = 0;
  NUMBER = 1;
  PHONE = 2;
  DATETIME = 3;
};

enum InputMethodAction {
  UNSPECIFIED = 0;
  NONE = 1;
  GO = 2;
  SEARCH = 3;
  SEND = 4;
  NEXT = 5;
  DONE = 6;
  PREVIOUS = 7;
};

// The current text, selection, and composing state for editing a run of text.
struct TextInputState {
  // Current state revision to avoid race conditions.
  uint32 revision;

  // The current text being edited.
  string text;

  // The range of text that is currently selected.
  TextSelection selection;

  // The range of text that is still being composed.
  TextRange composing;
};

// A interface for interacting with a text input control.
interface InputMethodEditor {
  1: SetKeyboardType(KeyboardType keyboard_type);
  2: SetState(TextInputState state);
  3: InjectInput(InputEvent event);

  // TODO(TEXT-19): remove these in a later change, after PlatformView has been
  // switched over to open/close on the input_connection_ instead.
  4: Show();
  5: Hide();
};

// An interface to receive information from |TextInputService|.
interface InputMethodEditorClient {
  1: DidUpdateState(TextInputState state, InputEvent? event);
  2: OnAction(InputMethodAction action);
};
