Commit 9ede1f92 authored by yusukes's avatar yusukes Committed by Commit Bot

Add OnInputMethodExtensionAdded/Removed() to InputMethodManager::Observer

This allows chrome://settings/inputMethods to update its contents
when a new Chrome OS or Android IME is added or removed.

BUG=867795,845079
TEST=try

Change-Id: Ibae94e01c14422ea5d2766b737397050aae9a299
Reviewed-on: https://chromium-review.googlesource.com/1195441Reviewed-by: default avatarYuichiro Hanada <yhanada@chromium.org>
Commit-Queue: Yusuke Sato <yusukes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#588393}
parent 2956bd10
......@@ -619,6 +619,7 @@ void InputMethodManagerImpl::StateImpl::AddInputMethodExtension(
}
manager_->NotifyImeMenuListChanged();
manager_->NotifyInputMethodExtensionAdded(extension_id);
}
void InputMethodManagerImpl::StateImpl::RemoveInputMethodExtension(
......@@ -655,6 +656,7 @@ void InputMethodManagerImpl::StateImpl::RemoveInputMethodExtension(
// If |current_input_method| is no longer in |active_input_method_ids|,
// switch to the first one in |active_input_method_ids|.
ChangeInputMethod(current_input_method.id(), false);
manager_->NotifyInputMethodExtensionRemoved(extension_id);
}
void InputMethodManagerImpl::StateImpl::GetInputMethodExtensions(
......@@ -1278,6 +1280,18 @@ void InputMethodManagerImpl::ImeMenuActivationChanged(bool is_active) {
MaybeNotifyImeMenuActivationChanged();
}
void InputMethodManagerImpl::NotifyInputMethodExtensionAdded(
const std::string& extension_id) {
for (auto& observer : observers_)
observer.OnInputMethodExtensionAdded(extension_id);
}
void InputMethodManagerImpl::NotifyInputMethodExtensionRemoved(
const std::string& extension_id) {
for (auto& observer : observers_)
observer.OnInputMethodExtensionRemoved(extension_id);
}
void InputMethodManagerImpl::NotifyImeMenuListChanged() {
for (auto& observer : ime_menu_observers_)
observer.ImeMenuListChanged();
......
......@@ -201,6 +201,10 @@ class InputMethodManagerImpl : public InputMethodManager,
void NotifyObserversImeExtraInputStateChange() override;
ui::InputMethodKeyboardController* GetInputMethodKeyboardController()
override;
void NotifyInputMethodExtensionAdded(
const std::string& extension_id) override;
void NotifyInputMethodExtensionRemoved(
const std::string& extension_id) override;
// chromeos::UserAddingScreen:
void OnUserAddingStarted() override;
......
......@@ -66,9 +66,10 @@ class TestObserver : public InputMethodManager::Observer,
public:
TestObserver()
: input_method_changed_count_(0),
input_method_extension_added_count_(0),
input_method_extension_removed_count_(0),
input_method_menu_item_changed_count_(0),
last_show_message_(false) {
}
last_show_message_(false) {}
~TestObserver() override {}
void InputMethodChanged(InputMethodManager* manager,
......@@ -77,12 +78,23 @@ class TestObserver : public InputMethodManager::Observer,
++input_method_changed_count_;
last_show_message_ = show_message;
}
void OnInputMethodExtensionAdded(const std::string& id) override {
++input_method_extension_added_count_;
}
void OnInputMethodExtensionRemoved(const std::string& id) override {
++input_method_extension_removed_count_;
}
void InputMethodMenuItemChanged(
ui::ime::InputMethodMenuManager* manager) override {
++input_method_menu_item_changed_count_;
}
int input_method_changed_count_;
int input_method_extension_added_count_;
int input_method_extension_removed_count_;
int input_method_menu_item_changed_count_;
bool last_show_message_;
......@@ -385,6 +397,8 @@ TEST_F(InputMethodManagerImplTest, TestObserver) {
manager_->AddObserver(&observer);
menu_manager_->AddObserver(&observer);
EXPECT_EQ(0, observer.input_method_changed_count_);
EXPECT_EQ(0, observer.input_method_extension_added_count_);
EXPECT_EQ(0, observer.input_method_extension_removed_count_);
manager_->GetActiveIMEState()->EnableLoginLayouts("en-US", keyboard_layouts);
EXPECT_EQ(8U, manager_->GetActiveIMEState()->GetActiveInputMethods()->size());
EXPECT_EQ(1, observer.input_method_changed_count_);
......@@ -408,6 +422,21 @@ TEST_F(InputMethodManagerImplTest, TestObserver) {
// notified.
EXPECT_EQ(1, observer.input_method_menu_item_changed_count_);
// Add an ARC IME, remove it, then check the observer counts.
MockInputMethodEngine engine;
const std::string ime_id =
extension_ime_util::GetArcInputMethodID(kExtensionId1, "engine_id");
InputMethodDescriptor descriptor(ime_id, "arc ime", "AI", {"us"}, {"en-US"},
false /* is_login_keyboard */, GURL(),
GURL());
manager_->GetActiveIMEState()->AddInputMethodExtension(kExtensionId1,
{descriptor}, &engine);
EXPECT_EQ(1, observer.input_method_extension_added_count_);
EXPECT_EQ(0, observer.input_method_extension_removed_count_);
manager_->GetActiveIMEState()->RemoveInputMethodExtension(kExtensionId1);
EXPECT_EQ(1, observer.input_method_extension_added_count_);
EXPECT_EQ(1, observer.input_method_extension_removed_count_);
manager_->RemoveObserver(&observer);
menu_manager_->RemoveObserver(&observer);
}
......
......@@ -88,7 +88,12 @@ class UI_BASE_IME_EXPORT InputMethodManager {
bool is_extra_input_options_enabled,
bool is_emoji_enabled,
bool is_handwriting_enabled,
bool is_voice_enabled){};
bool is_voice_enabled) {}
// Called when an input method extension is added or removed.
virtual void OnInputMethodExtensionAdded(const std::string& extension_id) {}
virtual void OnInputMethodExtensionRemoved(
const std::string& extension_id) {}
};
// CandidateWindowObserver is notified of events related to the candidate
......@@ -349,6 +354,12 @@ class UI_BASE_IME_EXPORT InputMethodManager {
// Gets the implementation of the keyboard controller.
virtual ui::InputMethodKeyboardController*
GetInputMethodKeyboardController() = 0;
// Notifies an input method extension is added or removed.
virtual void NotifyInputMethodExtensionAdded(
const std::string& extension_id) = 0;
virtual void NotifyInputMethodExtensionRemoved(
const std::string& extension_id) = 0;
};
} // namespace input_method
......
......@@ -221,6 +221,12 @@ MockInputMethodManager::GetInputMethodKeyboardController() {
return this;
}
void MockInputMethodManager::NotifyInputMethodExtensionAdded(
const std::string& extension_id) {}
void MockInputMethodManager::NotifyInputMethodExtensionRemoved(
const std::string& extension_id) {}
bool MockInputMethodManager::DisplayVirtualKeyboard() {
return false;
}
......
......@@ -119,6 +119,10 @@ class UI_BASE_IME_EXPORT MockInputMethodManager
void NotifyObserversImeExtraInputStateChange() override;
ui::InputMethodKeyboardController* GetInputMethodKeyboardController()
override;
void NotifyInputMethodExtensionAdded(
const std::string& extension_id) override;
void NotifyInputMethodExtensionRemoved(
const std::string& extension_id) override;
// ui::InputMethodKeyboardController overrides.
bool DisplayVirtualKeyboard() override;
......
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