blob: 6bbcbccd97d0c89c676803b481a4573bc25d9244 [file] [log] [blame]
// Copyright 2017 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.
module ash.mojom;
import "ash/public/interfaces/ime_info.mojom";
import "mojo/public/mojom/base/string16.mojom";
import "ui/base/ime/chromeos/public/interfaces/ime_keyset.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";
// Interface for ash client (e.g. Chrome) to send input method info to ash.
interface ImeController {
// Sets the client interface.
SetClient(ImeControllerClient client);
// Updates the cached IME information and refreshes the IME menus.
// |current_ime_id| is empty when there is no active IME yet.
RefreshIme(string current_ime_id,
array<ImeInfo> available_imes,
array<ImeMenuItem> menu_items);
// Shows an icon in the IME menu indicating that IMEs are controlled by device
// policy.
SetImesManagedByPolicy(bool managed);
// Shows the IME menu on the shelf instead of inside the system tray menu.
// Users with multiple IMEs that have multiple configurable properties (e.g.
// some Chinese IMEs) prefer this to keeping the IME menu under the primary
// system tray menu.
ShowImeMenuOnShelf(bool show);
// Report caps lock state changes from chrome (which is the source of truth)
// to the tray.
UpdateCapsLockState(bool enabled);
// Report keyboard layout changes from chrome (which is the source of truth)
// This is also called when a connection is first established between
// ImeController and ImeControllerClient.
// The layout name is a XKB keyboard layout name (e.g. "us").
OnKeyboardLayoutNameChanged(string layout_name);
// Report the enabled state of the various extra input options (currently
// emoji, handwriting, and voice input). |is_extra_input_options_enabled| set
// to false will disable all extra input option UI regardless of the enabled
// state of the individual options (which will be ingored).
SetExtraInputOptionsEnabledState(bool is_extra_input_options_enabled,
bool is_emoji_enabled,
bool is_handwriting_enabled,
bool is_voice_enabled);
// Show the mode indicator view (e.g. a bubble with "DV" for Dvorak).
// The view fades out after a delay and close itself.
// The anchor bounds is in the universal screen coordinates in DIP.
ShowModeIndicator(gfx.mojom.Rect anchor_bounds,
mojo_base.mojom.String16 ime_short_name);
// Interface for ash to send input method requests to its client (e.g. Chrome).
interface ImeControllerClient {
// Switches to the next input method. Does nothing if only one input method
// is installed.
// Switches to the last used input method. Does nothing if only one input
// method is installed.
// Switches to an input method by |id|. Does nothing if the input method is
// not installed. The ID is usually the output of a call like
// chromeos::extension_ime_util::GetInputMethodIDByEngineID("xkb:jp::jpn"),
// see that function for details. Shows a bubble with the input method short
// name when |show_message| is true.
SwitchImeById(string id, bool show_message);
// Activates an input method menu item. The |key| must be a value from the
// ImeMenuItems provided via RefreshIme. Does nothing if the |key| is invalid.
ActivateImeMenuItem(string key);
// When the caps lock state change originates from the tray (i.e. clicking the
// caps lock toggle from the settings menu from the caps lock icon), from an
// accelerator (e.g. pressing Alt + Search), or from the debug UI (i.e.
// toggling the caps lock button), propagate the change to the client without
// sending a change notification back.
// TODO(crbug/759435): Ideally this interaction should only be to disable the
// caps lock.
SetCapsLockEnabled(bool enabled);
// Notifies the mirroring state change to the client where IME lives (e.g.
// Chrome), so that the IME can behave according to the state.
UpdateMirroringState(bool enabled);
// Notifies the casting state change to the client where IME lives (e.g.
// Chrome), so that the IME can behave according to the state.
UpdateCastingState(bool enabled);
// Overrides the keyboard keyset (emoji, handwriting or voice). If keyset is
// 'kNone', we switch to the default keyset. Because this is asynchronous,
// any code that needs the keyset to be updated first must use the callback.
OverrideKeyboardKeyset(chromeos.input_method.mojom.ImeKeyset keyset) => ();