Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / google_input_tools / src / chrome / os / env.js
blobfae9ad28b0443b45fdaa73497d5ffd053068c1b3
1 // Copyright 2015 The ChromeOS IME Authors. All Rights Reserved.
2 // limitations under the License.
3 // See the License for the specific language governing permissions and
4 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5 // distributed under the License is distributed on an "AS-IS" BASIS,
6 // Unless required by applicable law or agreed to in writing, software
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // You may obtain a copy of the License at
11 // you may not use this file except in compliance with the License.
12 // Licensed under the Apache License, Version 2.0 (the "License");
14 goog.provide('i18n.input.chrome.Env');
16 goog.require('goog.array');
17 goog.require('i18n.input.chrome.Constant');
18 goog.require('i18n.input.chrome.inputview.FeatureTracker');
19 goog.require('i18n.input.lang.InputTool');
20 goog.require('i18n.input.lang.InputToolType');
22 goog.scope(function() {
23 var Constant = i18n.input.chrome.Constant;
24 var FeatureTracker = i18n.input.chrome.inputview.FeatureTracker;
25 var InputTool = i18n.input.lang.InputTool;
26 var InputToolType = i18n.input.lang.InputToolType;
30 /**
31  * The Environment class which holds some status' of ChromeOS for input methods.
32  * e.g. the current input field context, the current input method engine ID,
33  * the flags, etc.
34  *
35  * @constructor
36  */
37 i18n.input.chrome.Env = function() {
39   /**
40    * Tracker for which FeatureName are enabled.
41    *
42    * @type {!FeatureTracker};
43    */
44   this.featureTracker = new FeatureTracker();
46   /** @private {!Function} */
47   this.compositionBoundsChangedHandler_ =
48       this.onBoundsChanged_.bind(this);
50   /**
51    * The current initial bounds.
52    * @type {!BoundSize}
53    */
54   this.currentBounds = /** @type {!BoundSize} */ ({x: 0, y: 0, w: 0, h: 0});
57   /**
58    * The current bounds list.
59    * @type {!Array.<!BoundSize>}
60    */
61   this.currentBoundsList = [
62     /** @type {!BoundSize} */ ({x: 0, y: 0, w: 0, h: 0})];
65   if (chrome.accessibilityFeatures &&
66       chrome.accessibilityFeatures.spokenFeedback) {
67     chrome.accessibilityFeatures.spokenFeedback.get({}, (function(details) {
68       this.isChromeVoxOn = details['value'];
69     }).bind(this));
71     chrome.accessibilityFeatures.spokenFeedback.onChange.addListener(
72         function(details) {
73           this.isChromeVoxOn = details['value'];
74         }.bind(this));
75   }
77   if (window.inputview && window.inputview.getKeyboardConfig) {
78     window.inputview.getKeyboardConfig((function(config) {
79       this.featureTracker.initialize(config);
80     }).bind(this));
81   }
83 var Env = i18n.input.chrome.Env;
84 goog.addSingletonGetter(Env);
87 /** @type {string} */
88 Env.prototype.engineId = '';
91 /** @type {InputContext} */
92 Env.prototype.context = null;
95 /** @type {string} */
96 Env.prototype.screenType = 'normal';
99 /** @type {boolean} */
100 Env.prototype.isPhysicalKeyboardAutocorrectEnabled = false;
103 /** @type {string} */
104 Env.prototype.textBeforeCursor = '';
107 /** @type {Object.<{text: string, focus: number, anchor: number}>} */
108 Env.prototype.surroundingInfo = null;
111 /** @type {boolean} */
112 Env.prototype.isChromeVoxOn = false;
115 /** @type {boolean} */
116 Env.prototype.isOnScreenKeyboardShown = false;
120  * Handler for onCompositionBoundsChanged event.
122  * @param {!BoundSize} bounds The bounds of the composition text.
123  * @param {!Array.<!BoundSize>} boundsList The list of bounds of each
124  *     composition character.
125  * @private
126  */
127 Env.prototype.onBoundsChanged_ = function(bounds, boundsList) {
128   this.currentBounds = bounds;
129   this.currentBoundsList = boundsList;
134  * Let Env listen "onCompositionBoundsChanged" event.
135  */
136 Env.prototype.listenCompositionBoundsChanged = function() {
137   if (chrome.inputMethodPrivate &&
138       chrome.inputMethodPrivate.onCompositionBoundsChanged) {
139     chrome.inputMethodPrivate.onCompositionBoundsChanged.addListener(
140         this.compositionBoundsChangedHandler_);
141   }
146  * Let Env unlisten "onCompositionBoundsChanged" event.
147  */
148 Env.prototype.unlistenCompositionBoundsChanged = function() {
149   if (chrome.inputMethodPrivate &&
150       chrome.inputMethodPrivate.onCompositionBoundsChanged) {
151     chrome.inputMethodPrivate.onCompositionBoundsChanged.removeListener(
152         this.compositionBoundsChangedHandler_);
153   }
158  * Returns whether the XKB engine id supports NACL.
160  * @param {string} xkbEngineId The XKB engine Id.
161  * @return {boolean} supported or not.
162  */
163 Env.isXkbAndNaclEnabled = function(xkbEngineId) {
164   var inputTool = InputTool.get(xkbEngineId);
165   return !!inputTool && inputTool.type == InputToolType.XKB &&
166       goog.array.contains(Constant.NACL_LANGUAGES, inputTool.languageCode);
168 });  // goog.scope