blob: d2d792792ae64421e375353eb094033d9d1a56e4 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview
* 'os-settings-languages-section' is the top-level settings section for
* languages.
*/
import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
import 'chrome://resources/cr_elements/shared_vars_css.m.js';
import './input_page.js';
import './os_languages_page_v2.js';
import './smart_inputs_page.js';
import './input_method_options_page.js';
import './languages.js';
import '../../settings_page/settings_animated_pages.js';
import '../../settings_page/settings_subpage.js';
import '../../settings_shared.css.js';
import '../../settings_vars.css.js';
import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {loadTimeData} from '../../i18n_setup.js';
import {Router} from '../../router.js';
import {routes} from '../os_route.js';
import {LanguageHelper, LanguagesModel} from './languages_types.js';
// The IME ID for the Accessibility Common extension used by Dictation.
/** @type {string} */
const ACCESSIBILITY_COMMON_IME_ID =
'_ext_ime_egfdjlfmgnehecnclamagfafdccgfndpdictation';
/**
* @constructor
* @extends {PolymerElement}
* @implements {I18nBehaviorInterface}
*/
const OsSettingsLanguagesSectionElementBase =
mixinBehaviors([I18nBehavior], PolymerElement);
/** @polymer */
class OsSettingsLanguagesSectionElement extends
OsSettingsLanguagesSectionElementBase {
static get is() {
return 'os-settings-languages-section';
}
static get template() {
return html`{__html_template__}`;
}
static get properties() {
return {
prefs: Object,
/** @type {!LanguagesModel|undefined} */
languages: {
type: Object,
notify: true,
},
/** @type {!LanguageHelper} */
languageHelper: Object,
/** @private {!Map<string, string>} */
focusConfig_: {
type: Object,
value() {
const map = new Map();
if (routes.OS_LANGUAGES_SMART_INPUTS) {
map.set(
routes.OS_LANGUAGES_SMART_INPUTS.path,
'#smartInputsSubpageTrigger');
}
return map;
},
},
/** @private */
inputPageTitle_: {
type: String,
value() {
const isUpdate2 =
loadTimeData.getBoolean('enableLanguageSettingsV2Update2');
return this.i18n(isUpdate2 ? 'inputPageTitleV2' : 'inputPageTitle');
},
},
/**
* This is enabled when any of the smart inputs features is allowed.
* @private
* */
smartInputsEnabled_: {
type: Boolean,
value() {
return loadTimeData.getBoolean('allowAssistivePersonalInfo') ||
loadTimeData.getBoolean('allowEmojiSuggestion');
},
},
};
}
/** @private */
onLanguagesV2Click_() {
Router.getInstance().navigateTo(routes.OS_LANGUAGES_LANGUAGES);
}
/** @private */
onInputClick_() {
Router.getInstance().navigateTo(routes.OS_LANGUAGES_INPUT);
}
/** @private */
onSmartInputsClick_() {
Router.getInstance().navigateTo(routes.OS_LANGUAGES_SMART_INPUTS);
}
/**
* @param {string|undefined} code The language code of the language.
* @param {!LanguageHelper} languageHelper The LanguageHelper object.
* @return {string} The display name of the language specified.
* @private
*/
getLanguageDisplayName_(code, languageHelper) {
if (!code) {
return '';
}
const language = languageHelper.getLanguage(code);
if (!language) {
return '';
}
return language.displayName;
}
/**
* @param {string|undefined} id The input method ID.
* @param {!LanguageHelper} languageHelper The LanguageHelper object.
* @return {string} The display name of the input method.
* @private
*/
getInputMethodDisplayName_(id, languageHelper) {
if (id === undefined) {
return '';
}
if (id === ACCESSIBILITY_COMMON_IME_ID) {
return '';
}
return languageHelper.getInputMethodDisplayName(id);
}
}
customElements.define(
OsSettingsLanguagesSectionElement.is, OsSettingsLanguagesSectionElement);