| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 /** | 5 /** |
| 6 * @fileoverview 'settings-languages' handles Chrome's language and input | 6 * @fileoverview 'settings-languages' handles Chrome's language and input |
| 7 * method settings. The 'languages' property, which reflects the current | 7 * method settings. The 'languages' property, which reflects the current |
| 8 * language settings, must not be changed directly. Instead, changes to | 8 * language settings, must not be changed directly. Instead, changes to |
| 9 * language settings should be made using the LanguageHelper APIs provided by | 9 * language settings should be made using the LanguageHelper APIs provided by |
| 10 * this class via languageHelper. | 10 * this class via languageHelper. |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 /** | 218 /** |
| 219 * Updates the list of enabled languages from the preferred languages pref. | 219 * Updates the list of enabled languages from the preferred languages pref. |
| 220 * @private | 220 * @private |
| 221 */ | 221 */ |
| 222 preferredLanguagesPrefChanged_: function() { | 222 preferredLanguagesPrefChanged_: function() { |
| 223 var enabledLanguageStates = this.getEnabledLanguageStates_( | 223 var enabledLanguageStates = this.getEnabledLanguageStates_( |
| 224 this.languages.translateTarget, this.languages.prospectiveUILanguage); | 224 this.languages.translateTarget, this.languages.prospectiveUILanguage); |
| 225 | 225 |
| 226 // Recreate the enabled language set before updating languages.enabled. | 226 // Recreate the enabled language set before updating languages.enabled. |
| 227 this.enabledLanguageSet_.clear(); | 227 this.enabledLanguageSet_.clear(); |
| 228 for (var languageState of enabledLanguageStates) | 228 for (var i = 0; i < enabledLanguageStates.length; i++) |
| 229 this.enabledLanguageSet_.add(languageState.language.code); | 229 this.enabledLanguageSet_.add(enabledLanguageStates[i].language.code); |
| 230 | 230 |
| 231 this.set('languages.enabled', enabledLanguageStates); | 231 this.set('languages.enabled', enabledLanguageStates); |
| 232 }, | 232 }, |
| 233 | 233 |
| 234 /** | 234 /** |
| 235 * Updates the spellCheckEnabled state of each enabled language. | 235 * Updates the spellCheckEnabled state of each enabled language. |
| 236 * @private | 236 * @private |
| 237 */ | 237 */ |
| 238 spellCheckDictionariesPrefChanged_: function() { | 238 spellCheckDictionariesPrefChanged_: function() { |
| 239 var spellCheckSet = this.makeSetFromArray_(/** @type {!Array<string>} */( | 239 var spellCheckSet = this.makeSetFromArray_(/** @type {!Array<string>} */( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 * target language. | 272 * target language. |
| 273 * @param {!Array<!chrome.languageSettingsPrivate.InputMethod>|undefined} | 273 * @param {!Array<!chrome.languageSettingsPrivate.InputMethod>|undefined} |
| 274 * supportedInputMethods Input methods (Chrome OS only). | 274 * supportedInputMethods Input methods (Chrome OS only). |
| 275 * @param {string|undefined} currentInputMethodId ID of the currently used | 275 * @param {string|undefined} currentInputMethodId ID of the currently used |
| 276 * input method (Chrome OS only). | 276 * input method (Chrome OS only). |
| 277 * @private | 277 * @private |
| 278 */ | 278 */ |
| 279 createModel_: function(supportedLanguages, translateTarget, | 279 createModel_: function(supportedLanguages, translateTarget, |
| 280 supportedInputMethods, currentInputMethodId) { | 280 supportedInputMethods, currentInputMethodId) { |
| 281 // Populate the hash map of supported languages. | 281 // Populate the hash map of supported languages. |
| 282 for (var language of supportedLanguages) { | 282 for (var i = 0; i < supportedLanguages.length; i++) { |
| 283 var language = supportedLanguages[i]; |
| 283 language.supportsUI = !!language.supportsUI; | 284 language.supportsUI = !!language.supportsUI; |
| 284 language.supportsTranslate = !!language.supportsTranslate; | 285 language.supportsTranslate = !!language.supportsTranslate; |
| 285 language.supportsSpellcheck = !!language.supportsSpellcheck; | 286 language.supportsSpellcheck = !!language.supportsSpellcheck; |
| 286 this.supportedLanguageMap_.set(language.code, language); | 287 this.supportedLanguageMap_.set(language.code, language); |
| 287 } | 288 } |
| 288 | 289 |
| 289 if (supportedInputMethods) { | 290 if (supportedInputMethods) { |
| 290 // Populate the hash map of supported input methods. | 291 // Populate the hash map of supported input methods. |
| 291 for (var inputMethod of supportedInputMethods) { | 292 for (var j = 0; j < supportedInputMethods.length; j++) { |
| 293 var inputMethod = supportedInputMethods[j]; |
| 292 inputMethod.enabled = !!inputMethod.enabled; | 294 inputMethod.enabled = !!inputMethod.enabled; |
| 293 // Add the input method to the map of IDs. | 295 // Add the input method to the map of IDs. |
| 294 this.supportedInputMethodMap_.set(inputMethod.id, inputMethod); | 296 this.supportedInputMethodMap_.set(inputMethod.id, inputMethod); |
| 295 // Add the input method to the list of input methods for each language | 297 // Add the input method to the list of input methods for each language |
| 296 // it supports. | 298 // it supports. |
| 297 for (var languageCode of inputMethod.languageCodes) { | 299 for (var k = 0; k < inputMethod.languageCodes.length; k++) { |
| 300 var languageCode = inputMethod.languageCodes[k]; |
| 298 if (!this.supportedLanguageMap_.has(languageCode)) | 301 if (!this.supportedLanguageMap_.has(languageCode)) |
| 299 continue; | 302 continue; |
| 300 if (!this.languageInputMethods_.has(languageCode)) | 303 if (!this.languageInputMethods_.has(languageCode)) |
| 301 this.languageInputMethods_.set(languageCode, [inputMethod]); | 304 this.languageInputMethods_.set(languageCode, [inputMethod]); |
| 302 else | 305 else |
| 303 this.languageInputMethods_.get(languageCode).push(inputMethod); | 306 this.languageInputMethods_.get(languageCode).push(inputMethod); |
| 304 } | 307 } |
| 305 } | 308 } |
| 306 } | 309 } |
| 307 | 310 |
| 308 var prospectiveUILanguage; | 311 var prospectiveUILanguage; |
| 309 if (cr.isChromeOS || cr.isWindows) { | 312 if (cr.isChromeOS || cr.isWindows) { |
| 310 prospectiveUILanguage = | 313 prospectiveUILanguage = |
| 311 /** @type {string} */(this.getPref('intl.app_locale').value) || | 314 /** @type {string} */(this.getPref('intl.app_locale').value) || |
| 312 this.originalProspectiveUILanguage_; | 315 this.originalProspectiveUILanguage_; |
| 313 } | 316 } |
| 314 | 317 |
| 315 // Create a list of enabled languages from the supported languages. | 318 // Create a list of enabled languages from the supported languages. |
| 316 var enabledLanguageStates = | 319 var enabledLanguageStates = |
| 317 this.getEnabledLanguageStates_(translateTarget, prospectiveUILanguage); | 320 this.getEnabledLanguageStates_(translateTarget, prospectiveUILanguage); |
| 318 // Populate the hash set of enabled languages. | 321 // Populate the hash set of enabled languages. |
| 319 for (var languageState of enabledLanguageStates) | 322 for (var l = 0; l < enabledLanguageStates.length; l++) |
| 320 this.enabledLanguageSet_.add(languageState.language.code); | 323 this.enabledLanguageSet_.add(enabledLanguageStates[l].language.code); |
| 321 | 324 |
| 322 var model = /** @type {!LanguagesModel} */({ | 325 var model = /** @type {!LanguagesModel} */({ |
| 323 supported: supportedLanguages, | 326 supported: supportedLanguages, |
| 324 enabled: enabledLanguageStates, | 327 enabled: enabledLanguageStates, |
| 325 translateTarget: translateTarget, | 328 translateTarget: translateTarget, |
| 326 }); | 329 }); |
| 327 | 330 |
| 328 if (cr.isChromeOS || cr.isWindows) | 331 if (cr.isChromeOS || cr.isWindows) |
| 329 model.prospectiveUILanguage = prospectiveUILanguage; | 332 model.prospectiveUILanguage = prospectiveUILanguage; |
| 330 | 333 |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 442 }, | 445 }, |
| 443 | 446 |
| 444 /** | 447 /** |
| 445 * Creates a Set from the elements of the array. | 448 * Creates a Set from the elements of the array. |
| 446 * @param {!Array<T>} list | 449 * @param {!Array<T>} list |
| 447 * @return {!Set<T>} | 450 * @return {!Set<T>} |
| 448 * @template T | 451 * @template T |
| 449 * @private | 452 * @private |
| 450 */ | 453 */ |
| 451 makeSetFromArray_: function(list) { | 454 makeSetFromArray_: function(list) { |
| 452 var set = new Set(); | 455 return new Set(list); |
| 453 for (var item of list) | |
| 454 set.add(item); | |
| 455 return set; | |
| 456 }, | 456 }, |
| 457 | 457 |
| 458 // LanguageHelper implementation. | 458 // LanguageHelper implementation. |
| 459 // TODO(michaelpg): replace duplicate docs with @override once b/24294625 | 459 // TODO(michaelpg): replace duplicate docs with @override once b/24294625 |
| 460 // is fixed. | 460 // is fixed. |
| 461 | 461 |
| 462 /** @return {!Promise} */ | 462 /** @return {!Promise} */ |
| 463 whenReady: function() { | 463 whenReady: function() { |
| 464 return this.resolver_.promise; | 464 return this.resolver_.promise; |
| 465 }, | 465 }, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 return; | 512 return; |
| 513 | 513 |
| 514 assert(this.canDisableLanguage(languageCode)); | 514 assert(this.canDisableLanguage(languageCode)); |
| 515 | 515 |
| 516 // Remove the language from spell check. | 516 // Remove the language from spell check. |
| 517 this.deletePrefListItem('spellcheck.dictionaries', languageCode); | 517 this.deletePrefListItem('spellcheck.dictionaries', languageCode); |
| 518 | 518 |
| 519 if (cr.isChromeOS) { | 519 if (cr.isChromeOS) { |
| 520 // Remove input methods that don't support any other enabled language. | 520 // Remove input methods that don't support any other enabled language. |
| 521 var inputMethods = this.languageInputMethods_.get(languageCode) || []; | 521 var inputMethods = this.languageInputMethods_.get(languageCode) || []; |
| 522 for (var inputMethod of inputMethods) { | 522 for (var i = 0; i < inputMethods.length; i++) { |
| 523 var inputMethod = inputMethods[i]; |
| 523 var supportsOtherEnabledLanguages = inputMethod.languageCodes.some( | 524 var supportsOtherEnabledLanguages = inputMethod.languageCodes.some( |
| 524 function(otherLanguageCode) { | 525 function(otherLanguageCode) { |
| 525 return otherLanguageCode != languageCode && | 526 return otherLanguageCode != languageCode && |
| 526 this.isLanguageEnabled(otherLanguageCode); | 527 this.isLanguageEnabled(otherLanguageCode); |
| 527 }.bind(this)); | 528 }.bind(this)); |
| 528 if (!supportsOtherEnabledLanguages) | 529 if (!supportsOtherEnabledLanguages) |
| 529 this.removeInputMethod(inputMethod.id); | 530 this.removeInputMethod(inputMethod.id); |
| 530 } | 531 } |
| 531 } | 532 } |
| 532 | 533 |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 772 this.updateEnabledInputMethods_(); | 773 this.updateEnabledInputMethods_(); |
| 773 }, | 774 }, |
| 774 | 775 |
| 775 /** @param {string} id Removed input method ID. */ | 776 /** @param {string} id Removed input method ID. */ |
| 776 onInputMethodRemoved_: function(id) { | 777 onInputMethodRemoved_: function(id) { |
| 777 assert(cr.isChromeOS); | 778 assert(cr.isChromeOS); |
| 778 this.updateEnabledInputMethods_(); | 779 this.updateEnabledInputMethods_(); |
| 779 }, | 780 }, |
| 780 }); | 781 }); |
| 781 })(); | 782 })(); |
| OLD | NEW |