| Index: chrome/browser/resources/settings/languages_page/languages_page.js
|
| diff --git a/chrome/browser/resources/settings/languages_page/languages_page.js b/chrome/browser/resources/settings/languages_page/languages_page.js
|
| index d4d3198345f44cb065ee32300f4e37214b0b13f5..93817afa845402a4d99e420c36cf5120e50660ec 100644
|
| --- a/chrome/browser/resources/settings/languages_page/languages_page.js
|
| +++ b/chrome/browser/resources/settings/languages_page/languages_page.js
|
| @@ -125,11 +125,93 @@ Polymer({
|
| },
|
|
|
| /**
|
| + * @param {!LanguageState} languageState
|
| + * @param {string} prospectiveUILanguage The chosen UI language.
|
| + * @return {boolean} True if the given language cannot be set/unset as the
|
| + * prospective UI language by the user.
|
| + * @private
|
| + */
|
| + disableUILanguageCheckbox_: function(languageState, prospectiveUILanguage) {
|
| + // UI language setting belongs to the primary user.
|
| + if (this.isSecondaryUser_())
|
| + return true;
|
| +
|
| + // If the language cannot be a UI language, we can't set/unset it as the
|
| + // prospective UI language.
|
| + if (!languageState.language.supportsUI)
|
| + return true;
|
| +
|
| + // If the language already is the prospective UI language, it can't be unset
|
| + // if it is also the *actual* UI language, as we wouldn't know what other
|
| + // language to set as the prospective UI language.
|
| + if (languageState.language.code == navigator.language &&
|
| + (!prospectiveUILanguage ||
|
| + languageState.language.code == prospectiveUILanguage)) {
|
| + return true;
|
| + }
|
| +
|
| + // Otherwise, the prospective language can be changed to/from this language.
|
| + return false;
|
| + },
|
| +
|
| + /**
|
| + * @return {boolean} True for a secondary user in a multi-profile session.
|
| + * @private
|
| + */
|
| + isSecondaryUser_: function() {
|
| + return cr.isChromeOS && loadTimeData.getBoolean('isSecondaryUser');
|
| + },
|
| +
|
| + /**
|
| + * Handler for changes to the UI language checkbox.
|
| + * @param {!{target: !PaperCheckboxElement}} e
|
| + * @private
|
| + */
|
| + onUILanguageChange_: function(e) {
|
| + if (e.target.checked) {
|
| + this.languageHelper.setUILanguage(this.detailLanguage_.language.code);
|
| + } else if (this.detailLanguage_.language.code ==
|
| + this.languageHelper.getProspectiveUILanguage()) {
|
| + // Reset the chosen UI language to the actual UI language.
|
| + this.languageHelper.resetUILanguage();
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * @param {!chrome.languageSettingsPrivate.Language} language
|
| + * @param {string} targetLanguageCode The default translate target language.
|
| + * @return {boolean} True if the translate checkbox should be disabled.
|
| + * @private
|
| + */
|
| + disableTranslateCheckbox_: function(language, targetLanguageCode) {
|
| + if (!language.supportsTranslate)
|
| + return true;
|
| +
|
| + return this.languageHelper.convertLanguageCodeForTranslate(language.code) ==
|
| + targetLanguageCode;
|
| + },
|
| +
|
| + /**
|
| + * Handler for changes to the translate checkbox.
|
| + * @param {!{target: !PaperCheckboxElement}} e
|
| + * @private
|
| + */
|
| + onTranslateCheckboxChange_: function(e) {
|
| + if (e.target.checked) {
|
| + this.languageHelper.enableTranslateLanguage(
|
| + this.detailLanguage_.language.code);
|
| + } else {
|
| + this.languageHelper.disableTranslateLanguage(
|
| + this.detailLanguage_.language.code);
|
| + }
|
| + },
|
| +
|
| + /**
|
| * Moves the language up in the list.
|
| * @private
|
| */
|
| onMoveUpTap_: function() {
|
| - this.menu_.closeMenu();
|
| + /** @type {!CrSharedMenuElement} */(this.$.menu.get()).closeMenu();
|
| this.languageHelper.moveLanguage(this.detailLanguage_.language.code, -1);
|
| },
|
|
|
| @@ -138,7 +220,7 @@ Polymer({
|
| * @private
|
| */
|
| onMoveDownTap_: function() {
|
| - this.menu_.closeMenu();
|
| + /** @type {!CrSharedMenuElement} */(this.$.menu.get()).closeMenu();
|
| this.languageHelper.moveLanguage(this.detailLanguage_.language.code, 1);
|
| },
|
|
|
| @@ -147,20 +229,11 @@ Polymer({
|
| * @private
|
| */
|
| onRemoveLanguageTap_: function() {
|
| - this.menu_.closeMenu();
|
| + /** @type {!CrSharedMenuElement} */(this.$.menu.get()).closeMenu();
|
| this.languageHelper.disableLanguage(this.detailLanguage_.language.code);
|
| },
|
|
|
| /**
|
| - * Opens the Language Detail page for the language.
|
| - * @private
|
| - */
|
| - onShowLanguageDetailTap_: function() {
|
| - this.menu_.closeMenu();
|
| - settings.navigateTo(settings.Route.LANGUAGES_DETAIL);
|
| - },
|
| -
|
| - /**
|
| * Opens the Manage Input Methods page.
|
| * @private
|
| */
|
| @@ -247,8 +320,8 @@ Polymer({
|
|
|
| /**
|
| * Checks whether the prospective UI language (the pref that indicates what
|
| - * language to use in Chrome) matches the current language. This pref is only
|
| - * on Chrome OS and Windows; we don't control the UI language elsewhere.
|
| + * language to use in Chrome) matches the current language. This pref is used
|
| + * only on Chrome OS and Windows; we don't control the UI language elsewhere.
|
| * @param {string} languageCode The language code identifying a language.
|
| * @param {string} prospectiveUILanguage The prospective UI language.
|
| * @return {boolean} True if the given language matches the prospective UI
|
| @@ -282,17 +355,23 @@ Polymer({
|
| */
|
| getLanguageItemClass_: function(languageCode, prospectiveUILanguage,
|
| supportsUI) {
|
| - var classes = [];
|
| -
|
| - if (cr.isChromeOS || cr.isWindows) {
|
| - if (supportsUI && !loadTimeData.getBoolean('isGuest'))
|
| - classes.push('list-button'); // Makes the item look "actionable".
|
| -
|
| - if (this.isProspectiveUILanguage_(languageCode, prospectiveUILanguage))
|
| - classes.push('selected');
|
| + if ((cr.isChromeOS || cr.isWindows) &&
|
| + this.isProspectiveUILanguage_(languageCode, prospectiveUILanguage)) {
|
| + return 'selected';
|
| }
|
| + return '';
|
| + },
|
|
|
| - return classes.join(' ');
|
| + /**
|
| + * @param {string} languageCode The language code identifying a language.
|
| + * @param {string} prospectiveUILanguage The prospective UI language.
|
| + * @return {boolean} True if the prospective UI language is set to
|
| + * |languageCode| but requires a restart to take effect.
|
| + * @private
|
| + */
|
| + isRestartRequired_: function(languageCode, prospectiveUILanguage) {
|
| + return prospectiveUILanguage == languageCode &&
|
| + navigator.language != languageCode;
|
| },
|
|
|
| /**
|
| @@ -348,13 +427,46 @@ Polymer({
|
| /** @type {!{model: !{item: !LanguageState}}} */(e).model.item;
|
|
|
| // Ensure the template has been stamped.
|
| - if (!this.menu_) {
|
| - this.$.menuTemplate.if = true;
|
| - this.$.menuTemplate.render();
|
| - this.menu_ = /** @type {CrSharedMenuElement} */(
|
| - this.$$('cr-shared-menu'));
|
| + var menu = /** @type {?CrSharedMenuElement} */(this.$.menu.getIfExists());
|
| + if (!menu) {
|
| + menu = /** @type {!CrSharedMenuElement} */(this.$.menu.get());
|
| + this.initializeMenu_(menu);
|
| }
|
| - this.menu_.toggleMenu(e.target);
|
| +
|
| + menu.toggleMenu(/** @type {!Element} */(e.target));
|
| + },
|
| +
|
| + /**
|
| + * Applies Chrome OS session tweaks to the menu.
|
| + * @param {!CrSharedMenuElement} menu
|
| + * @private
|
| + */
|
| + initializeMenu_: function(menu) {
|
| + // In a CrOS multi-user session, the primary user controls the UI language.
|
| + // TODO(michaelpg): The language selection should not be hidden, but should
|
| + // show a policy indicator. crbug.com/648498
|
| + if (this.isSecondaryUser_())
|
| + menu.querySelector('#uiLanguageItem').hidden = true;
|
| +
|
| + // The UI language choice doesn't persist for guests.
|
| + if (cr.isChromeOS &&
|
| + (uiAccountTweaks.UIAccountTweaks.loggedInAsGuest() ||
|
| + uiAccountTweaks.UIAccountTweaks.loggedInAsPublicAccount())) {
|
| + menu.querySelector('#uiLanguageItem').hidden = true;
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Handler for the restart button.
|
| + * @private
|
| + */
|
| + onRestartTap_: function() {
|
| +<if expr="chromeos">
|
| + settings.LifetimeBrowserProxyImpl.getInstance().signOutAndRestart();
|
| +</if>
|
| +<if expr="not chromeos">
|
| + settings.LifetimeBrowserProxyImpl.getInstance().restart();
|
| +</if>
|
| },
|
| });
|
| })();
|
|
|