// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

[DartPackage="mojo_services"]
module keyboard;

struct CompletionData {
  int64 id;
  int32 position;
  string text;
  string label;
};

struct CorrectionData {
  int32 offset;
  string old_text;
  string new_text;
};

interface KeyboardClient {
  CommitCompletion(CompletionData completion);
  CommitCorrection(CorrectionData correction);
  CommitText(string text, int32 newCursorPosition);
  DeleteSurroundingText(int32 beforeLength, int32 afterLength);
  SetComposingRegion(int32 start, int32 end);
  SetComposingText(string text, int32 newCursorPosition);
  SetSelection(int32 start, int32 end);
};

// Loosely modeled on Android InputType:
// http://developer.android.com/reference/android/text/InputType.html
enum KeyboardType {
  TEXT,
  NUMBER,
  PHONE,
  DATETIME,
};

interface KeyboardService {
  Show(KeyboardClient client, KeyboardType type);
  ShowByRequest();
  Hide();
};
