Commit 67550354 authored by yusukes's avatar yusukes Committed by Commit Bot

Show ARC IME names in chrome://settings/inputMethods

ARC IMEs added via Play Store are not associated with any language
by design. Instead, each IME supports only one fake language
|kArcImeLanguage| defined in ui/base/ime/chromeos/.

This CL allows chrome://settings/inputMethods to show such IMEs
at the bottom of the list by doing the following:

 - Return |kArcImeLanguage| and its display name from the
   GetLanguageList() private API.
 - Do not show the fake language in add_languages_dialog.js since
   it's for internal use only.
 - Modify manage_input_methods_page.js to show ARC IMEs associated
   with |kArcImeLanguage|.
 - Handle ARC IMEs in the AddInputMethod() private API.

Bug: b:74499980
Bug: 845079
Cq-Include-Trybots: luci.chromium.try:closure_compilation
Change-Id: I28a1b01705387dc9cd87dd0b873dc3ca23087cbf
Reviewed-on: https://chromium-review.googlesource.com/1114680Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Reviewed-by: default avatarYuichiro Hanada <yhanada@chromium.org>
Commit-Queue: Yusuke Sato <yusukes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#571343}
parent cc6c20ef
...@@ -2309,6 +2309,9 @@ ...@@ -2309,6 +2309,9 @@
<message name="IDS_SETTINGS_LANGUAGES_SHOW_IME_MENU" desc="The label for he toggle button controlling showing the IME menu in the shelf."> <message name="IDS_SETTINGS_LANGUAGES_SHOW_IME_MENU" desc="The label for he toggle button controlling showing the IME menu in the shelf.">
Show input options in the shelf Show input options in the shelf
</message> </message>
<message name="IDS_SETTINGS_LANGUAGES_KEYBOARD_APPS" desc="Title for the list of keyboard apps installed via Play Store by the user.">
Keyboard apps
</message>
</if> </if>
<message name="IDS_SETTINGS_LANGUAGES_MANAGE_LANGUAGES_TITLE" desc="Name of the settings dialog which allows enabling additional languages."> <message name="IDS_SETTINGS_LANGUAGES_MANAGE_LANGUAGES_TITLE" desc="Name of the settings dialog which allows enabling additional languages.">
Add languages Add languages
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#include "ui/base/l10n/l10n_util_collator.h" #include "ui/base/l10n/l10n_util_collator.h"
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
#include "chrome/grit/generated_resources.h"
#include "ui/base/ime/chromeos/component_extension_ime_manager.h" #include "ui/base/ime/chromeos/component_extension_ime_manager.h"
#include "ui/base/ime/chromeos/extension_ime_util.h" #include "ui/base/ime/chromeos/extension_ime_util.h"
#include "ui/base/ime/chromeos/input_method_manager.h" #include "ui/base/ime/chromeos/input_method_manager.h"
...@@ -144,6 +145,10 @@ std::vector<std::string> GetSortedExtensionIMEs( ...@@ -144,6 +145,10 @@ std::vector<std::string> GetSortedExtensionIMEs(
base::SplitString(preferred_languages, ",", base::TRIM_WHITESPACE, base::SplitString(preferred_languages, ",", base::TRIM_WHITESPACE,
base::SPLIT_WANT_NONEMPTY); base::SPLIT_WANT_NONEMPTY);
// Add the fake language for ARC IMEs at the very last of the list. Unlike
// Chrome OS IMEs, these ARC ones are not associated with any (real) language.
enabled_languages.push_back(chromeos::extension_ime_util::kArcImeLanguage);
InputMethodDescriptors descriptors; InputMethodDescriptors descriptors;
ime_state->GetInputMethodExtensions(&descriptors); ime_state->GetInputMethodExtensions(&descriptors);
...@@ -243,6 +248,20 @@ LanguageSettingsPrivateGetLanguageListFunction::Run() { ...@@ -243,6 +248,20 @@ LanguageSettingsPrivateGetLanguageListFunction::Run() {
language_list->Append(language.ToValue()); language_list->Append(language.ToValue());
} }
#if defined(OS_CHROMEOS)
// Send the display name of the fake language for ARC IMEs to the JS side.
// |native_display_name| does't have to be set because the language selection
// drop-down menu doesn't list the fake language.
{
language_settings_private::Language language;
language.code = chromeos::extension_ime_util::kArcImeLanguage;
language.display_name =
l10n_util::GetStringUTF8(IDS_SETTINGS_LANGUAGES_KEYBOARD_APPS);
language_list->Append(language.ToValue());
}
#endif // defined(OS_CHROMEOS)
return RespondNow(OneArgument(std::move(language_list))); return RespondNow(OneArgument(std::move(language_list)));
} }
......
...@@ -180,15 +180,17 @@ class TestInputMethodManager : public input_method::MockInputMethodManager { ...@@ -180,15 +180,17 @@ class TestInputMethodManager : public input_method::MockInputMethodManager {
// Set up three IMEs // Set up three IMEs
std::vector<std::string> layouts({"us"}); std::vector<std::string> layouts({"us"});
std::vector<std::string> languages({"en-US"}); std::vector<std::string> languages({"en-US"});
std::vector<std::string> arc_languages(
{chromeos::extension_ime_util::kArcImeLanguage});
InputMethodDescriptor extension_ime( InputMethodDescriptor extension_ime(
GetExtensionImeId(), "", "", layouts, languages, GetExtensionImeId(), "", "", layouts, languages,
false /* is_login_keyboard */, GURL(), GURL()); false /* is_login_keyboard */, GURL(), GURL());
InputMethodDescriptor component_extension_ime( InputMethodDescriptor component_extension_ime(
GetComponentExtensionImeId(), "", "", layouts, languages, GetComponentExtensionImeId(), "", "", layouts, languages,
false /* is_login_keyboard */, GURL(), GURL()); false /* is_login_keyboard */, GURL(), GURL());
InputMethodDescriptor arc_ime(GetArcImeId(), "", "", layouts, languages, InputMethodDescriptor arc_ime(
false /* is_login_keyboard */, GURL(), GetArcImeId(), "", "", layouts, arc_languages,
GURL()); false /* is_login_keyboard */, GURL(), GURL());
input_methods_ = {extension_ime, component_extension_ime, arc_ime}; input_methods_ = {extension_ime, component_extension_ime, arc_ime};
} }
......
...@@ -83,6 +83,9 @@ Polymer({ ...@@ -83,6 +83,9 @@ Polymer({
if (!isAvailableLanguage) if (!isAvailableLanguage)
return false; return false;
if (this.languageHelper.isLanguageCodeForArcIme(language.code))
return false; // internal use only
if (filterValue === null) if (filterValue === null)
return true; return true;
......
...@@ -35,6 +35,10 @@ const kTranslateLanguageSynonyms = { ...@@ -35,6 +35,10 @@ const kTranslateLanguageSynonyms = {
'jv': 'jw', 'jv': 'jw',
}; };
// The fake language name used for ARC IMEs. The value must be in sync with the
// one in ui/base/ime/chromeos/extension_ime_util.h.
const kArcImeLanguage = '_arc_ime_language_';
const preferredLanguagesPrefName = cr.isChromeOS ? const preferredLanguagesPrefName = cr.isChromeOS ?
'settings.language.preferred_languages' : 'settings.language.preferred_languages' :
'intl.accept_languages'; 'intl.accept_languages';
...@@ -661,6 +665,21 @@ Polymer({ ...@@ -661,6 +665,21 @@ Polymer({
}, },
// </if> // </if>
/**
* @return {string} The language code for ARC IMEs.
*/
getArcImeLanguageCode: function() {
return kArcImeLanguage;
},
/**
* @param {string} languageCode
* @return {boolean} True if the language is for ARC IMEs.
*/
isLanguageCodeForArcIme: function(languageCode) {
return languageCode == kArcImeLanguage;
},
/** /**
* @param {string} languageCode * @param {string} languageCode
* @return {boolean} True if the language is enabled. * @return {boolean} True if the language is enabled.
......
...@@ -96,6 +96,17 @@ class LanguageHelper { ...@@ -96,6 +96,17 @@ class LanguageHelper {
// </if> // </if>
/**
* @return {string} The language code for ARC IMEs.
*/
getArcImeLanguageCode() {}
/**
* @param {string} languageCode
* @return {boolean}
*/
isLanguageCodeForArcIme(languageCode) {}
/** /**
* @param {string} languageCode * @param {string} languageCode
* @return {boolean} * @return {boolean}
......
...@@ -153,6 +153,17 @@ Polymer({ ...@@ -153,6 +153,17 @@ Polymer({
usedLanguages.add(languageFamilyCodes[k]); usedLanguages.add(languageFamilyCodes[k]);
} }
// Add ARC IMEs to the bottom if any.
const arcInputMethods = this.getInputMethodsForLanguages(
[this.languageHelper.getArcImeLanguageCode()]);
if (arcInputMethods.length) {
languageList.push({
language: this.languageHelper.getLanguage(
this.languageHelper.getArcImeLanguageCode()),
inputMethods: arcInputMethods,
});
}
this.languageList_ = languageList; this.languageList_ = languageList;
this.notifyInputMethodsChanged_(); this.notifyInputMethodsChanged_();
}, },
......
...@@ -106,6 +106,13 @@ cr.define('settings', function() { ...@@ -106,6 +106,13 @@ cr.define('settings', function() {
displayName: 'Greek', displayName: 'Greek',
nativeDisplayName: 'Ελληνικά', nativeDisplayName: 'Ελληνικά',
supportsUI: true, supportsUI: true,
},
{
// A fake language for ARC IMEs which is for internal use only. The
// value of the |code| must be the same as |kArcImeLanguage| in
// ui/base/ime/chromeos/extension_ime_util.cc.
code: '_arc_ime_language_',
displayName: 'Keyboard apps',
} }
]; ];
......
...@@ -212,6 +212,11 @@ cr.define('languages_page_tests', function() { ...@@ -212,6 +212,11 @@ cr.define('languages_page_tests', function() {
searchInput.setValue('egaugnal'); searchInput.setValue('egaugnal');
Polymer.dom.flush(); Polymer.dom.flush();
assertEquals(0, getItems().length); assertEquals(0, getItems().length);
// Issue query that should never match any language.
searchInput.setValue('_arc_ime_language_');
Polymer.dom.flush();
assertEquals(0, getItems().length);
}); });
test('Escape key behavior', function() { test('Escape key behavior', function() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment