Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(710)

Side by Side Diff: chrome/browser/resources/chromeos/braille_ime/braille_ime.js

Issue 271723002: Make Braille IME send space bar as an empty cell instead of letting propagate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ime
Patch Set: Change spacebar behaviour, fix nits, add test coverage. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/braille_ime/braille_ime_unittest.gtestjs » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @fileoverview Braille hardware keyboard input method. 8 * @fileoverview Braille hardware keyboard input method.
9 * 9 *
10 * This method is automatically enabled when a braille display is connected 10 * This method is automatically enabled when a braille display is connected
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 /** 63 /**
64 * Identifier for the use standard keyboard option used in the menu and 64 * Identifier for the use standard keyboard option used in the menu and
65 * {@code localStorage}. This can be switched on to type braille using the 65 * {@code localStorage}. This can be switched on to type braille using the
66 * standard keyboard, or off (default) for the usual keyboard behaviour. 66 * standard keyboard, or off (default) for the usual keyboard behaviour.
67 * @const {string} 67 * @const {string}
68 */ 68 */
69 USE_STANDARD_KEYBOARD_ID: 'useStandardKeyboard', 69 USE_STANDARD_KEYBOARD_ID: 'useStandardKeyboard',
70 70
71 // State related to the support for typing braille using a standrad 71 // State related to the support for typing braille using a standrad
72 // (querty) keyboard. 72 // (qwerty) keyboard.
73 73
74 /** @private {boolean} */ 74 /** @private {boolean} */
75 useStandardKeyboard_: false, 75 useStandardKeyboard_: false,
76 76
77 /** 77 /**
78 * Braille dots for keys that are currently pressed. 78 * Braille dots for keys that are currently pressed.
79 * @private {number} 79 * @private {number}
80 */ 80 */
81 pressed_: 0, 81 pressed_: 0,
82 82
83 /** 83 /**
84 * Dots that have been pressed at some point since {@code pressed_} was last 84 * Dots that have been pressed at some point since {@code pressed_} was last
85 * {@code 0}. 85 * {@code 0}.
86 * @private {number} 86 * @private {number}
87 */ 87 */
88 accumulated_: 0, 88 accumulated_: 0,
89 89
90 /** 90 /**
91 * Bit in {@code pressed_} and {@code accumulated_} that represent
92 * the space key.
93 * @const {number}
94 */
95 SPACE: 0x100,
96
97 /**
91 * Maps key codes on a standard keyboard to the correspodning dots. 98 * Maps key codes on a standard keyboard to the correspodning dots.
92 * Keys on the 'home row' correspond to the keys on a Perkins-style keyboard. 99 * Keys on the 'home row' correspond to the keys on a Perkins-style keyboard.
93 * Note that the mapping below is arranged like the dots in a braille cell. 100 * Note that the mapping below is arranged like the dots in a braille cell.
94 * Only 6 dot input is supported. 101 * Only 6 dot input is supported.
95 * @private 102 * @private
96 * @const {Object.<string, string>} 103 * @const {Object.<string, number>}
97 */ 104 */
98 CODE_TO_DOT_: {'KeyF': 0x01, 'KeyJ': 0x08, 105 CODE_TO_DOT_: {'KeyF': 0x01, 'KeyJ': 0x08,
99 'KeyD': 0x02, 'KeyK': 0x10, 106 'KeyD': 0x02, 'KeyK': 0x10,
100 'KeyS': 0x04, 'KeyL': 0x20 }, 107 'KeyS': 0x04, 'KeyL': 0x20,
108 'Space': 0x100 },
101 109
102 /** 110 /**
103 * The current engine ID as set by {@code onActivate}, or the empty string if 111 * The current engine ID as set by {@code onActivate}, or the empty string if
104 * the IME is not active. 112 * the IME is not active.
105 * @type {string} 113 * @type {string}
106 * @private 114 * @private
107 */ 115 */
108 engineID_: '', 116 engineID_: '',
109 117
110 /** 118 /**
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 /** 202 /**
195 * Called by the system when this IME is active and a key event is generated. 203 * Called by the system when this IME is active and a key event is generated.
196 * @param {string} engineID Engine ID, should be 'braille'. 204 * @param {string} engineID Engine ID, should be 'braille'.
197 * @param {!ChromeKeyboardEvent} event The keyboard event. 205 * @param {!ChromeKeyboardEvent} event The keyboard event.
198 * @return {boolean} Whether the event was handled by this IME (true) or 206 * @return {boolean} Whether the event was handled by this IME (true) or
199 * should be allowed to propagate. 207 * should be allowed to propagate.
200 * @private 208 * @private
201 */ 209 */
202 onKeyEvent_: function(engineID, event) { 210 onKeyEvent_: function(engineID, event) {
203 this.log_('onKeyEvent', engineID + ', ' + JSON.stringify(event)); 211 this.log_('onKeyEvent', engineID + ', ' + JSON.stringify(event));
204 return this.processKey_(event.code, event.type); 212 return this.processKey_(event);
205 }, 213 },
206 214
207 /** 215 /**
208 * Called when chrome ends the current text input session. 216 * Called when chrome ends the current text input session.
209 * @param {string} engineID Engine ID, should be 'braille'. 217 * @param {string} engineID Engine ID, should be 'braille'.
210 * @private 218 * @private
211 */ 219 */
212 onReset_: function(engineID) { 220 onReset_: function(engineID) {
213 this.log_('onReset', engineID); 221 this.log_('onReset', engineID);
214 this.engineID_ = engineID; 222 this.engineID_ = engineID;
(...skipping 30 matching lines...) Expand all
245 log_: function(func, message) { 253 log_: function(func, message) {
246 if (func === 'onKeyEvent') { 254 if (func === 'onKeyEvent') {
247 return; 255 return;
248 } 256 }
249 if (this.DEBUG) { 257 if (this.DEBUG) {
250 console.log('BrailleIme.' + func + ': ' + message); 258 console.log('BrailleIme.' + func + ': ' + message);
251 } 259 }
252 }, 260 },
253 261
254 /** 262 /**
255 * Handles a querty key on the home row as a braille key. 263 * Handles a qwerty key on the home row as a braille key.
256 * @param {string} code Key code. 264 * @param {!ChromeKeyboardEvent} event Keyboard event.
257 * @param {string} type Type of key event.
258 * @return {boolean} Whether the key event was handled or not. 265 * @return {boolean} Whether the key event was handled or not.
259 * @private 266 * @private
260 */ 267 */
261 processKey_: function(code, type) { 268 processKey_: function(event) {
262 if (!this.useStandardKeyboard_) { 269 if (!this.useStandardKeyboard_) {
263 return false; 270 return false;
264 } 271 }
265 var dot = this.CODE_TO_DOT_[code]; 272 var dot = this.CODE_TO_DOT_[event.code];
266 if (!dot) { 273 if (!dot || event.altKey || event.ctrlKey || event.shiftKey ||
274 event.capsLock) {
267 this.pressed_ = 0; 275 this.pressed_ = 0;
268 this.accumulated_ = 0; 276 this.accumulated_ = 0;
269 return false; 277 return false;
270 } 278 }
271 if (type === 'keydown') { 279 if (event.type === 'keydown') {
272 this.pressed_ |= dot; 280 this.pressed_ |= dot;
273 this.accumulated_ |= this.pressed_; 281 this.accumulated_ |= this.pressed_;
274 return true; 282 return true;
275 } else if (type == 'keyup') { 283 } else if (event.type === 'keyup') {
276 this.pressed_ &= ~dot; 284 this.pressed_ &= ~dot;
277 if (this.pressed_ == 0 && this.accumulated_ != 0) { 285 if (this.pressed_ === 0 && this.accumulated_ !== 0) {
278 this.sendToChromeVox_({type: 'brailleDots', dots: this.accumulated_}); 286 var dotsToSend = this.accumulated_;
279 this.accumulated_ = 0; 287 this.accumulated_ = 0;
288 if (dotsToSend & this.SPACE) {
289 // Space is sent as a blank cell.
290 dotsToSend &= ~this.SPACE;
David Tseng 2014/05/07 23:38:01 Would it be clearer to just say dotsToSend != this
291 if (dotsToSend != 0) {
292 // Can't combine space and actual dot keys.
293 return true;
294 }
295 }
296 this.sendToChromeVox_({type: 'brailleDots', dots: dotsToSend});
280 } 297 }
281 return true; 298 return true;
282 } 299 }
283 return false; 300 return false;
284 }, 301 },
285 302
286 /** 303 /**
287 * Connects to the ChromeVox extension for message passing. 304 * Connects to the ChromeVox extension for message passing.
288 * @private 305 * @private
289 */ 306 */
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 label: 'Use standard keyboard for braille', 421 label: 'Use standard keyboard for braille',
405 style: 'check', 422 style: 'check',
406 visible: true, 423 visible: true,
407 checked: this.useStandardKeyboard_, 424 checked: this.useStandardKeyboard_,
408 enabled: true 425 enabled: true
409 } 426 }
410 ] 427 ]
411 }); 428 });
412 } 429 }
413 }; 430 };
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/chromeos/braille_ime/braille_ime_unittest.gtestjs » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698