blob: c67654cdb6378a0ff8b6dc9193463110d17be520 [file] [log] [blame]
// 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;
using fuchsia.ui.input3;
/// Requests a specific keyboard type from the text editing subsystem.
///
/// This is most relevant for virtual keyboards which have some leeway in how
/// the keyboard is presented to the user, as well as which input is acceptable.
///
/// For example, a `NUMBER` keyboard type may only allow decimal numbers to be
/// entered. In addition, a virtual keyboard might only show a numeric keypad
/// for text entry.
type KeyboardType = flexible enum {
/// Single-line text fields only. Use MULTILINE below for multiline text.
@unknown
TEXT = 0;
/// A text field intended for entering numbers only.
NUMBER = 1;
/// A text field for entering phone numbers only (e.g. digits, limited
/// punctuation, perhaps some validation).
PHONE = 2;
/// A text field for entering date and time. For example, may have a
/// calendar widget on the side, to aid in date time entry.
DATETIME = 3;
/// Multi-line text.
@available(added=8)
MULTILINE = 4;
};
/// Determines what happens if the "action" key is pressed on the keyboard,
/// typically would either be the "Enter" key on a physical keyboard, or an
/// action button on a virtual keyboard, which is usually placed where Enter
/// would be, but with a custom label.
type InputMethodAction = flexible enum {
/// The method action was not specified at all.
@unknown
UNSPECIFIED = 0;
/// No special action is requested.
NONE = 1;
/// The action is "Go", e.g. execute a command.
GO = 2;
/// The action is to invoke a search.
SEARCH = 3;
/// The action is to invoke "send", e.g. if this is an email or a SMS
/// message.
SEND = 4;
/// The action is to move to the next field in the focus sequence.
NEXT = 5;
/// The action is to end the text editing.
DONE = 6;
/// The action is to move to the previous field in the focus sequence.
PREVIOUS = 7;
/// Pressing the action key inserts a new line into the text field. In
/// contrast to other values, which all stop editing and invoke a specific
/// action.
@available(added=8)
NEWLINE = 8;
};
/// The current text, selection, and composing state for editing a run of text.
type TextInputState = struct {
/// Current state revision to avoid race conditions.
revision uint32;
/// The current text being edited.
text string;
/// The range of text that is currently selected.
selection TextSelection;
/// The range of text that is still being composed.
composing TextRange;
};
/// A interface for interacting with a text input control.
closed protocol InputMethodEditor {
strict SetKeyboardType(struct {
keyboard_type KeyboardType;
});
strict SetState(struct {
state TextInputState;
});
// TODO(https://fxbug.dev/42152248)
@available(deprecated=8, note="Instead, use `fuchsia.ui.input3.KeyEventInjector`")
strict InjectInput(struct {
event InputEvent;
});
// TODO(https://fxbug.dev/42152248)
@available(deprecated=8, note="Instead, use `fuchsia.ui.input3.KeyEventInjector`")
strict DispatchKey3(struct {
event fuchsia.ui.input3.KeyEvent;
}) -> (struct {
handled bool;
});
// TODO(https://fxbug.dev/42101179): remove these in a later change, after PlatformView has been
// switched over to open/close on the input_connection_ instead.
@available(deprecated=13)
strict Show();
@available(deprecated=13)
strict Hide();
};
/// An interface to receive information from `TextInputService`.
closed protocol InputMethodEditorClient {
strict DidUpdateState(struct {
state TextInputState;
event InputEvent:optional;
});
strict OnAction(struct {
action InputMethodAction;
});
};