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

Side by Side Diff: third_party/google_input_tools/src/chrome/os/soundcontroller.js

Issue 899673003: Uprev Google Input Tools. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
OLDNEW
1 // Copyright 2014 The ChromeOS IME Authors. All Rights Reserved. 1 // Copyright 2015 The ChromeOS IME Authors. All Rights Reserved.
2 // limitations under the License. 2 // limitations under the License.
3 // See the License for the specific language governing permissions and 3 // See the License for the specific language governing permissions and
4 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 4 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5 // distributed under the License is distributed on an "AS-IS" BASIS, 5 // distributed under the License is distributed on an "AS-IS" BASIS,
6 // Unless required by applicable law or agreed to in writing, software 6 // Unless required by applicable law or agreed to in writing, software
7 // 7 //
8 // http://www.apache.org/licenses/LICENSE-2.0 8 // http://www.apache.org/licenses/LICENSE-2.0
9 // 9 //
10 // You may obtain a copy of the License at 10 // You may obtain a copy of the License at
11 // you may not use this file except in compliance with the License. 11 // you may not use this file except in compliance with the License.
12 // Licensed under the Apache License, Version 2.0 (the "License"); 12 // Licensed under the Apache License, Version 2.0 (the "License");
13 // 13 //
14 goog.provide('i18n.input.chrome.inputview.SoundController'); 14 goog.provide('i18n.input.chrome.SoundController');
15 15
16 goog.require('goog.Disposable'); 16 goog.require('goog.Disposable');
17 goog.require('goog.dom'); 17 goog.require('goog.dom');
18 goog.require('i18n.input.chrome.inputview.Sounds'); 18 goog.require('i18n.input.chrome.inputview.Sounds');
19 goog.require('i18n.input.chrome.inputview.elements.ElementType'); 19 goog.require('i18n.input.chrome.inputview.elements.ElementType');
20 20
21 goog.scope(function() { 21 goog.scope(function() {
22 var Sounds = i18n.input.chrome.inputview.Sounds; 22 var Sounds = i18n.input.chrome.inputview.Sounds;
23 var ElementType = i18n.input.chrome.inputview.elements.ElementType; 23 var ElementType = i18n.input.chrome.inputview.elements.ElementType;
24 var keyToSoundIdOnKeyUp = {}; 24 var keyToSoundIdOnKeyUp = {};
25 var keyToSoundIdOnKeyRepeat = {}; 25 var keyToSoundIdOnKeyRepeat = {};
26 26
27 27
28
28 /** 29 /**
29 * Sound controller for the keyboard. 30 * Sound controller for the keyboard.
30 * 31 *
31 * @param {!boolean} enabled Whether sounds is enabled by default. 32 * @param {!boolean} enabled Whether sounds is enabled by default.
32 * @param {?number} opt_volume The default volume for sound tracks. 33 * @param {?number=} opt_volume The default volume for sound tracks.
33 * @constructor 34 * @constructor
34 * @extends {goog.Disposable} 35 * @extends {goog.Disposable}
35 */ 36 */
36 i18n.input.chrome.inputview.SoundController = function(enabled, opt_volume) { 37 i18n.input.chrome.SoundController = function(enabled, opt_volume) {
37 38
38 /** 39 /**
39 * Collection of all the sound pools. 40 * Collection of all the sound pools.
40 * 41 *
41 * @type {!Object.<string, !Object>} 42 * @private {!Object.<string, !Object>}
42 */ 43 */
43 this.sounds_ = {}; 44 this.sounds_ = {};
44 45
46 /** @private {boolean} */
45 this.enabled_ = enabled; 47 this.enabled_ = enabled;
46 48
47 /** 49 /**
48 * The default volume for all audio tracks. Tracks with volume 0 will be 50 * The default volume for all audio tracks. Tracks with volume 0 will be
49 * skipped. 51 * skipped.
50 * 52 *
51 * @type {number} 53 * @private {number}
52 */ 54 */
53 this.volume_ = opt_volume || this.DEFAULT_VOLUME; 55 this.volume_ = opt_volume || this.DEFAULT_VOLUME;
54 56
55 if (enabled) 57 if (enabled) {
56 this.initialize(); 58 this.initialize();
59 }
57 }; 60 };
58 goog.inherits(i18n.input.chrome.inputview.SoundController, goog.Disposable); 61 goog.inherits(i18n.input.chrome.SoundController, goog.Disposable);
59 62
60 63
61 var Controller = i18n.input.chrome.inputview.SoundController; 64 var Controller = i18n.input.chrome.SoundController;
62 65
63 66
64 /** 67 /**
65 * @define {number} The size of the pool to use for playing audio sounds. 68 * @define {number} The size of the pool to use for playing audio sounds.
66 */ 69 */
67 Controller.prototype.POOL_SIZE = 10; 70 Controller.prototype.POOL_SIZE = 10;
68 71
69 72
70 /** 73 /**
71 * @define {number} The default audio track volume. 74 * @define {number} The default audio track volume.
72 */ 75 */
73 Controller.prototype.DEFAULT_VOLUME = 0.6; 76 Controller.prototype.DEFAULT_VOLUME = 0.6;
74 77
75 78
79 /** @private {boolean} */
80 Controller.prototype.initialized_ = false;
81
82
76 /** 83 /**
77 * Initializes the sound controller. 84 * Initializes the sound controller.
78 */ 85 */
79 Controller.prototype.initialize = function() { 86 Controller.prototype.initialize = function() {
80 for (var sound in Sounds) { 87 if (!this.initialized_) {
88 for (var sound in Sounds) {
81 this.addSound_(Sounds[sound]); 89 this.addSound_(Sounds[sound]);
90 }
91 keyToSoundIdOnKeyUp[ElementType.BACKSPACE_KEY] = Sounds.NONE;
92 keyToSoundIdOnKeyUp[ElementType.ENTER_KEY] = Sounds.RETURN;
93 keyToSoundIdOnKeyUp[ElementType.SPACE_KEY] = Sounds.SPACEBAR;
94 keyToSoundIdOnKeyRepeat[ElementType.BACKSPACE_KEY] = Sounds.DELETE;
95 this.initialized_ = true;
82 } 96 }
83 keyToSoundIdOnKeyUp[ElementType.BACKSPACE_KEY] = Sounds.NONE;
84 keyToSoundIdOnKeyUp[ElementType.ENTER_KEY] = Sounds.RETURN;
85 keyToSoundIdOnKeyUp[ElementType.SPACE_KEY] = Sounds.SPACEBAR;
86 keyToSoundIdOnKeyRepeat[ElementType.BACKSPACE_KEY] = Sounds.DELETE;
87 }; 97 };
88 98
89 99
90 /** 100 /**
91 * Caches the specified sound on the keyboard. 101 * Caches the specified sound on the keyboard.
92 * 102 *
93 * @param {string} soundId The name of the .wav file in the "sounds" 103 * @param {string} soundId The name of the .wav file in the "sounds"
94 directory. 104 directory.
95 * @private 105 * @private
96 */ 106 */
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 } 140 }
131 }; 141 };
132 142
133 143
134 /** 144 /**
135 * Enables or disable playing sounds on keypress. 145 * Enables or disable playing sounds on keypress.
136 * @param {!boolean} enabled 146 * @param {!boolean} enabled
137 */ 147 */
138 Controller.prototype.setEnabled = function(enabled) { 148 Controller.prototype.setEnabled = function(enabled) {
139 this.enabled_ = enabled; 149 this.enabled_ = enabled;
140 if (this.enabled_) 150 if (this.enabled_) {
141 this.initialize(); 151 this.initialize();
152 }
142 }; 153 };
143 154
144 155
156 /**
157 * Gets the flag whether sound controller is enabled or not.
158 *
159 * @return {!boolean}
160 */
161 Controller.prototype.getEnabled = function() {
162 return this.enabled_;
163 };
164
165
145 /** 166 /**
146 * Sets the volume for all sounds on the keyboard. 167 * Sets the volume for all sounds on the keyboard.
147 * 168 *
148 * @param {number} volume The volume of the sounds. 169 * @param {number} volume The volume of the sounds.
149 */ 170 */
150 Controller.prototype.setMasterVolume = function(volume) { 171 Controller.prototype.setMasterVolume = function(volume) {
151 this.volume_ = volume; 172 this.volume_ = volume;
152 for (var id in this.sounds_) { 173 for (var id in this.sounds_) {
153 this.setVolume(id, volume); 174 this.setVolume(id, volume);
154 } 175 }
155 }; 176 };
156 177
157 178
158 /** 179 /**
159 * Plays the specified sound. 180 * Plays the specified sound.
160 * 181 *
161 * @param {string} soundId The id of the audio tag. 182 * @param {string} soundId The id of the audio tag.
162 * @private 183 * @param {boolean=} opt_force Force to play sound whatever the enabled flags is
184 * turned on.
163 */ 185 */
164 Controller.prototype.playSound_ = function(soundId) { 186 Controller.prototype.playSound = function(soundId, opt_force) {
187 if (opt_force) {
188 this.initialize();
189 }
165 // If master volume is zero, ignore the request. 190 // If master volume is zero, ignore the request.
166 if (!this.enabled_ || this.volume_ == 0 || soundId == Sounds.NONE) 191 if (!opt_force && !this.enabled_ || this.volume_ == 0 ||
192 soundId == Sounds.NONE) {
167 return; 193 return;
194 }
168 var pool = this.sounds_[soundId]; 195 var pool = this.sounds_[soundId];
169 if (!pool) { 196 if (!pool) {
170 console.error('Cannot find sound: ' + soundId); 197 console.error('Cannot find sound: ' + soundId);
171 return; 198 return;
172 } 199 }
173 // Search the sound pool for a free resource. 200 // Search the sound pool for a free resource.
174 for (var i = 0; i < pool.length; i++) { 201 for (var i = 0; i < pool.length; i++) {
175 if (pool[i].paused) { 202 if (pool[i].paused) {
176 pool[i].play(); 203 pool[i].play();
177 return; 204 return;
178 } 205 }
179 } 206 }
180 }; 207 };
181 208
182 209
183 /** 210 /**
184 * On key up. 211 * On key up.
185 * 212 *
186 * @param {ElementType} key The key released. 213 * @param {ElementType} key The key released.
187 */ 214 */
188 Controller.prototype.onKeyUp = function(key) { 215 Controller.prototype.onKeyUp = function(key) {
189 var sound = keyToSoundIdOnKeyUp[key] || Sounds.STANDARD; 216 var sound = keyToSoundIdOnKeyUp[key] || Sounds.STANDARD;
190 this.playSound_(sound); 217 this.playSound(sound);
191 }; 218 };
192 219
193 220
194 /** 221 /**
195 * On key repeat. 222 * On key repeat.
196 * 223 *
197 * @param {ElementType} key The key that is being repeated. 224 * @param {ElementType} key The key that is being repeated.
198 */ 225 */
199 Controller.prototype.onKeyRepeat = function(key) { 226 Controller.prototype.onKeyRepeat = function(key) {
200 var sound = keyToSoundIdOnKeyRepeat[key] || Sounds.NONE; 227 var sound = keyToSoundIdOnKeyRepeat[key] || Sounds.NONE;
201 this.playSound_(sound); 228 this.playSound(sound);
202 }; 229 };
203 230
204 231
205 /** @override */ 232 /** @override */
206 Controller.prototype.disposeInternal = function() { 233 Controller.prototype.disposeInternal = function() {
207 for (var soundId in this.sounds_) { 234 for (var soundId in this.sounds_) {
208 var pool = this.sounds_[soundId]; 235 var pool = this.sounds_[soundId];
209 for (var i = 0; i < pool.length; i++) { 236 for (var i = 0; i < pool.length; i++) {
210 var tag = pool[i]; 237 var tag = pool[i];
211 if (tag && tag.loaded) { 238 if (tag && tag.loaded) {
212 tag.pause(); 239 tag.pause();
213 tag.autoplay = false; 240 tag.autoplay = false;
214 tag.loop = false; 241 tag.loop = false;
215 tag.currentTime = 0; 242 tag.currentTime = 0;
216 } 243 }
217 } 244 }
218 delete this.sounds_[soundId]; 245 delete this.sounds_[soundId];
219 } 246 }
220 this.sounds_ = {}; 247 this.sounds_ = {};
221 keyToSoundIdOnKeyUp = {}; 248 keyToSoundIdOnKeyUp = {};
222 keyToSoundIdOnKeyRepeat = {}; 249 keyToSoundIdOnKeyRepeat = {};
223 goog.base(this, 'disposeInternal'); 250 goog.base(this, 'disposeInternal');
224 }; 251 };
225 252
226 }); // goog.scope 253 }); // goog.scope
OLDNEW
« no previous file with comments | « third_party/google_input_tools/src/chrome/os/message/name.js ('k') | third_party/google_input_tools/src/chrome/os/sounds.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698