Skip to content

Commit

Permalink
Sort input method list as the sequence as XKB, M17n, T13, CJK.
Browse files Browse the repository at this point in the history
BUG=432662
TEST=Verified on linux_chromeos.

Review URL: https://codereview.chromium.org/722183002

Cr-Commit-Position: refs/heads/master@{#304033}
  • Loading branch information
shuchen authored and Commit bot committed Nov 13, 2014
1 parent 1031884 commit 09194f8
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 13 deletions.
22 changes: 22 additions & 0 deletions chromeos/ime/component_extension_ime_manager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,27 @@ const char* kLoginLayoutWhitelist[] = {
"us(intl)"
};

// Gets the input method category according to the given input method id.
// This is used for sorting a list of input methods.
int GetInputMethodCategory(const std::string& id) {
const std::string engine_id =
chromeos::extension_ime_util::GetComponentIDByInputMethodID(id);
if (StartsWithASCII(engine_id, "xkb:", true))
return 0;
if (StartsWithASCII(engine_id, "vkd_", true))
return 1;
if (engine_id.find("-t-i0-") != std::string::npos &&
!StartsWithASCII(engine_id, "zh-", true)) {
return 2;
}
return 3;
}

bool InputMethodCompare(const input_method::InputMethodDescriptor& im1,
const input_method::InputMethodDescriptor& im2) {
return GetInputMethodCategory(im1.id()) < GetInputMethodCategory(im2.id());
}

} // namespace

ComponentExtensionEngine::ComponentExtensionEngine() {
Expand Down Expand Up @@ -173,6 +194,7 @@ input_method::InputMethodDescriptors
ime.input_view_url));
}
}
std::stable_sort(result.begin(), result.end(), InputMethodCompare);
return result;
}

Expand Down
36 changes: 23 additions & 13 deletions chromeos/ime/component_extension_ime_manager_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,24 @@ class ComponentExtensionIMEManagerTest : public testing::Test {
ext1.path = base::FilePath("ext1_file_path");

ComponentExtensionEngine ext1_engine1;
ext1_engine1.engine_id = "ext1_engine1_engine_id";
ext1_engine1.engine_id = "zh-t-i0-pinyin";
ext1_engine1.display_name = "ext1_engine_1_display_name";
ext1_engine1.language_codes.push_back("en");
ext1_engine1.language_codes.push_back("zh-CN");
ext1_engine1.layouts.push_back("us");
ext1.engines.push_back(ext1_engine1);

ComponentExtensionEngine ext1_engine2;
ext1_engine2.engine_id = "ext1_engine2_engine_id";
ext1_engine2.engine_id = "mozc_us";
ext1_engine2.display_name = "ext1_engine2_display_name";
ext1_engine2.language_codes.push_back("en");
ext1_engine2.language_codes.push_back("jp");
ext1_engine2.layouts.push_back("us");
ext1.engines.push_back(ext1_engine2);

ComponentExtensionEngine ext1_engine3;
ext1_engine3.engine_id = "ext1_engine3_engine_id";
ext1_engine3.engine_id = "xkb:ru::rus";
ext1_engine3.display_name = "ext1_engine3_display_name";
ext1_engine3.language_codes.push_back("ja");
ext1_engine3.layouts.push_back("us");
ext1_engine3.language_codes.push_back("ru");
ext1_engine3.layouts.push_back("ru");
ext1.engines.push_back(ext1_engine3);

ime_list_.push_back(ext1);
Expand All @@ -56,24 +56,24 @@ class ComponentExtensionIMEManagerTest : public testing::Test {
ext2.path = base::FilePath("ext2_file_path");

ComponentExtensionEngine ext2_engine1;
ext2_engine1.engine_id = "ext2_engine1_engine_id";
ext2_engine1.engine_id = "vkd_ru_phone_aatseel";
ext2_engine1.display_name = "ext2_engine_1_display_name";
ext2_engine1.language_codes.push_back("en");
ext2_engine1.language_codes.push_back("ru");
ext2_engine1.layouts.push_back("us");
ext2.engines.push_back(ext2_engine1);

ComponentExtensionEngine ext2_engine2;
ext2_engine2.engine_id = "ext2_engine2_engine_id";
ext2_engine2.engine_id = "vkd_vi_telex";
ext2_engine2.display_name = "ext2_engine2_display_name";
ext2_engine2.language_codes.push_back("hi");
ext2_engine2.layouts.push_back("us");
ext2.engines.push_back(ext2_engine2);

ComponentExtensionEngine ext2_engine3;
ext2_engine3.engine_id = "ext2_engine3_engine_id";
ext2_engine3.engine_id = "xkb:us::eng";
ext2_engine3.display_name = "ext2_engine3_display_name";
ext2_engine3.language_codes.push_back("ja");
ext2_engine3.layouts.push_back("jp");
ext2_engine3.language_codes.push_back("us");
ext2_engine3.layouts.push_back("us");
ext2.engines.push_back(ext2_engine3);

ime_list_.push_back(ext2);
Expand Down Expand Up @@ -191,6 +191,16 @@ TEST_F(ComponentExtensionIMEManagerTest, GetAllIMEAsInputMethodDescriptor) {
total_ime_size += ime_list_[i].engines.size();
}
EXPECT_EQ(total_ime_size, descriptors.size());

// Verify order
for (size_t i = 0; i < descriptors.size(); ++i) {
const input_method::InputMethodDescriptor& d = descriptors[i];
if (i < 2) {
EXPECT_TRUE(d.id().find("xkb:") != std::string::npos);
} else if (i >= 2 && i < 4) {
EXPECT_TRUE(d.id().find("vkd_") != std::string::npos);
}
}
}

} // namespace
Expand Down

0 comments on commit 09194f8

Please sign in to comment.