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

Unified Diff: chrome/browser/resources/settings/languages_page/languages.js

Issue 2573643005: Language settings: Fix Restart and Remove buttons shown at wrong times (Closed)
Patch Set: feedback Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/resources/settings/languages_page/languages_page.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/settings/languages_page/languages.js
diff --git a/chrome/browser/resources/settings/languages_page/languages.js b/chrome/browser/resources/settings/languages_page/languages.js
index 790a45fba91d763cbad5c548833d0bc05dae1fdb..0073a2e235fd230f21305b5a6b13ed8a6d5c6b0a 100644
--- a/chrome/browser/resources/settings/languages_page/languages.js
+++ b/chrome/browser/resources/settings/languages_page/languages.js
@@ -121,9 +121,15 @@ Polymer({
type: Object,
value: function() { return new Map(); },
},
+
+ /** @private Prospective UI language when the page was loaded. */
+ originalProspectiveUILanguage_: String,
},
observers: [
+ // All observers wait for the model to be populated by including the
+ // |languages| property.
+ 'prospectiveUILanguageChanged_(prefs.intl.app_locale.value, languages)',
'preferredLanguagesPrefChanged_(' +
'prefs.' + preferredLanguagesPrefName + '.value, languages)',
'spellCheckDictionariesPrefChanged_(' +
@@ -178,6 +184,16 @@ Polymer({
}.bind(this));
}
+ if (cr.isWindows || cr.isChromeOS) {
+ // Fetch the starting UI language, which affects which actions should be
+ // enabled.
+ promises.push(cr.sendWithPromise('getProspectiveUILanguage').then(
+ function(prospectiveUILanguage) {
+ this.originalProspectiveUILanguage_ =
+ prospectiveUILanguage || window.navigator.language;
+ }.bind(this)));
+ }
+
Promise.all(promises).then(function(results) {
this.createModel_(results[1], results[2], results[3], results[4]);
this.resolver_.resolve();
@@ -190,12 +206,22 @@ Polymer({
},
/**
+ * Updates the prospective UI language based on the new pref value.
+ * @param {string} prospectiveUILanguage
+ * @private
+ */
+ prospectiveUILanguageChanged_: function(prospectiveUILanguage) {
+ this.set('languages.prospectiveUILanguage',
+ prospectiveUILanguage || this.originalProspectiveUILanguage_);
+ },
+
+ /**
* Updates the list of enabled languages from the preferred languages pref.
* @private
*/
preferredLanguagesPrefChanged_: function() {
- var enabledLanguageStates =
- this.getEnabledLanguageStates_(this.languages.translateTarget);
+ var enabledLanguageStates = this.getEnabledLanguageStates_(
+ this.languages.translateTarget, this.languages.prospectiveUILanguage);
// Recreate the enabled language set before updating languages.enabled.
this.enabledLanguageSet_.clear();
@@ -226,8 +252,10 @@ Polymer({
/** @type {!Array<string>} */(translateBlockedPref.value));
for (var i = 0; i < this.languages.enabled.length; i++) {
- if (this.languages.enabled[i].language.code == navigator.language)
+ if (this.languages.enabled[i].language.code ==
+ this.languages.prospectiveUILanguage) {
continue;
+ }
var translateCode = this.convertLanguageCodeForTranslate(
this.languages.enabled[i].language.code);
this.set(
@@ -277,8 +305,16 @@ Polymer({
}
}
+ var prospectiveUILanguage;
+ if (cr.isChromeOS || cr.isWindows) {
+ prospectiveUILanguage =
+ /** @type {string} */(this.getPref('intl.app_locale').value) ||
+ this.originalProspectiveUILanguage_;
+ }
+
// Create a list of enabled languages from the supported languages.
- var enabledLanguageStates = this.getEnabledLanguageStates_(translateTarget);
+ var enabledLanguageStates =
+ this.getEnabledLanguageStates_(translateTarget, prospectiveUILanguage);
// Populate the hash set of enabled languages.
for (var languageState of enabledLanguageStates)
this.enabledLanguageSet_.add(languageState.language.code);
@@ -288,6 +324,10 @@ Polymer({
enabled: enabledLanguageStates,
translateTarget: translateTarget,
});
+
+ if (cr.isChromeOS || cr.isWindows)
+ model.prospectiveUILanguage = prospectiveUILanguage;
+
if (cr.isChromeOS) {
model.inputMethods = /** @type {!InputMethodsModel} */({
supported: supportedInputMethods,
@@ -305,10 +345,12 @@ Polymer({
* languages list.
* @param {string} translateTarget Language code of the default translate
* target language.
+ * @param {(string|undefined)} prospectiveUILanguage Prospective UI display
+ * language. Only defined on Windows and Chrome OS.
* @return {!Array<!LanguageState>}
* @private
*/
- getEnabledLanguageStates_: function(translateTarget) {
+ getEnabledLanguageStates_: function(translateTarget, prospectiveUILanguage) {
assert(CrSettingsPrefs.isInitialized);
var pref = this.getPref(preferredLanguagesPrefName);
@@ -334,10 +376,11 @@ Polymer({
// Translate is considered disabled if this language maps to any translate
// language that is blocked.
var translateCode = this.convertLanguageCodeForTranslate(code);
- languageState.translateEnabled = !!language.supportsTranslate &&
- code != navigator.language &&
+ languageState.translateEnabled =
+ !!language.supportsTranslate &&
!translateBlockedSet.has(translateCode) &&
- translateCode != translateTarget;
+ translateCode != translateTarget &&
+ (!prospectiveUILanguage || code != prospectiveUILanguage);
enabledLanguageStates.push(languageState);
}
return enabledLanguageStates;
@@ -426,26 +469,18 @@ Polymer({
* the actual UI language until a restart.
* @param {string} languageCode
*/
- setUILanguage: function(languageCode) {
+ setProspectiveUILanguage: function(languageCode) {
assert(cr.isChromeOS || cr.isWindows);
- chrome.send('setUILanguage', [languageCode]);
- },
-
- /** Resets the prospective UI language back to the actual UI language. */
- resetUILanguage: function() {
- assert(cr.isChromeOS || cr.isWindows);
- chrome.send('setUILanguage', [navigator.language]);
+ chrome.send('setProspectiveUILanguage', [languageCode]);
},
/**
- * Returns the "prospective" UI language, i.e. the one to be used on next
- * restart. If the pref is not set, the current UI language is also the
- * "prospective" language.
- * @return {string} Language code of the prospective UI language.
+ * True if the prospective UI language was changed from its starting value.
+ * @return {boolean}
*/
- getProspectiveUILanguage: function() {
- return /** @type {string} */(this.getPref('intl.app_locale').value) ||
- navigator.language;
+ requiresRestart: function() {
+ return this.originalProspectiveUILanguage_ !=
+ this.languages.prospectiveUILanguage;
},
/**
@@ -506,7 +541,7 @@ Polymer({
*/
canDisableLanguage: function(languageCode) {
// Cannot disable the prospective UI language.
- if (languageCode == this.getProspectiveUILanguage())
+ if (languageCode == this.languages.prospectiveUILanguage)
return false;
// Cannot disable the only enabled language.
« no previous file with comments | « no previous file | chrome/browser/resources/settings/languages_page/languages_page.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698