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( ...@@ -619,6 +619,7 @@ void InputMethodManagerImpl::StateImpl::AddInputMethodExtension(
} }
manager_->NotifyImeMenuListChanged(); manager_->NotifyImeMenuListChanged();
manager_->NotifyInputMethodExtensionAdded(extension_id);
} }
void InputMethodManagerImpl::StateImpl::RemoveInputMethodExtension( void InputMethodManagerImpl::StateImpl::RemoveInputMethodExtension(
...@@ -655,6 +656,7 @@ void InputMethodManagerImpl::StateImpl::RemoveInputMethodExtension( ...@@ -655,6 +656,7 @@ void InputMethodManagerImpl::StateImpl::RemoveInputMethodExtension(
// If |current_input_method| is no longer in |active_input_method_ids|, // If |current_input_method| is no longer in |active_input_method_ids|,
// switch to the first one in |active_input_method_ids|. // switch to the first one in |active_input_method_ids|.
ChangeInputMethod(current_input_method.id(), false); ChangeInputMethod(current_input_method.id(), false);
manager_->NotifyInputMethodExtensionRemoved(extension_id);
} }
void InputMethodManagerImpl::StateImpl::GetInputMethodExtensions( void InputMethodManagerImpl::StateImpl::GetInputMethodExtensions(
...@@ -1278,6 +1280,18 @@ void InputMethodManagerImpl::ImeMenuActivationChanged(bool is_active) { ...@@ -1278,6 +1280,18 @@ void InputMethodManagerImpl::ImeMenuActivationChanged(bool is_active) {
MaybeNotifyImeMenuActivationChanged(); 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() { void InputMethodManagerImpl::NotifyImeMenuListChanged() {
for (auto& observer : ime_menu_observers_) for (auto& observer : ime_menu_observers_)
observer.ImeMenuListChanged(); observer.ImeMenuListChanged();
......
...@@ -201,6 +201,10 @@ class InputMethodManagerImpl : public InputMethodManager, ...@@ -201,6 +201,10 @@ class InputMethodManagerImpl : public InputMethodManager,
void NotifyObserversImeExtraInputStateChange() override; void NotifyObserversImeExtraInputStateChange() override;
ui::InputMethodKeyboardController* GetInputMethodKeyboardController() ui::InputMethodKeyboardController* GetInputMethodKeyboardController()
override; override;
void NotifyInputMethodExtensionAdded(
const std::string& extension_id) override;
void NotifyInputMethodExtensionRemoved(
const std::string& extension_id) override;
// chromeos::UserAddingScreen: // chromeos::UserAddingScreen:
void OnUserAddingStarted() override; void OnUserAddingStarted() override;
......
...@@ -66,9 +66,10 @@ class TestObserver : public InputMethodManager::Observer, ...@@ -66,9 +66,10 @@ class TestObserver : public InputMethodManager::Observer,
public: public:
TestObserver() TestObserver()
: input_method_changed_count_(0), : input_method_changed_count_(0),
input_method_extension_added_count_(0),
input_method_extension_removed_count_(0),
input_method_menu_item_changed_count_(0), input_method_menu_item_changed_count_(0),
last_show_message_(false) { last_show_message_(false) {}
}
~TestObserver() override {} ~TestObserver() override {}
void InputMethodChanged(InputMethodManager* manager, void InputMethodChanged(InputMethodManager* manager,
...@@ -77,12 +78,23 @@ class TestObserver : public InputMethodManager::Observer, ...@@ -77,12 +78,23 @@ class TestObserver : public InputMethodManager::Observer,
++input_method_changed_count_; ++input_method_changed_count_;
last_show_message_ = show_message; 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( void InputMethodMenuItemChanged(
ui::ime::InputMethodMenuManager* manager) override { ui::ime::InputMethodMenuManager* manager) override {
++input_method_menu_item_changed_count_; ++input_method_menu_item_changed_count_;
} }
int input_method_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_; int input_method_menu_item_changed_count_;
bool last_show_message_; bool last_show_message_;
...@@ -385,6 +397,8 @@ TEST_F(InputMethodManagerImplTest, TestObserver) { ...@@ -385,6 +397,8 @@ TEST_F(InputMethodManagerImplTest, TestObserver) {
manager_->AddObserver(&observer); manager_->AddObserver(&observer);
menu_manager_->AddObserver(&observer); menu_manager_->AddObserver(&observer);
EXPECT_EQ(0, observer.input_method_changed_count_); 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); manager_->GetActiveIMEState()->EnableLoginLayouts("en-US", keyboard_layouts);
EXPECT_EQ(8U, manager_->GetActiveIMEState()->GetActiveInputMethods()->size()); EXPECT_EQ(8U, manager_->GetActiveIMEState()->GetActiveInputMethods()->size());
EXPECT_EQ(1, observer.input_method_changed_count_); EXPECT_EQ(1, observer.input_method_changed_count_);
...@@ -408,6 +422,21 @@ TEST_F(InputMethodManagerImplTest, TestObserver) { ...@@ -408,6 +422,21 @@ TEST_F(InputMethodManagerImplTest, TestObserver) {
// notified. // notified.
EXPECT_EQ(1, observer.input_method_menu_item_changed_count_); 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); manager_->RemoveObserver(&observer);
menu_manager_->RemoveObserver(&observer); menu_manager_->RemoveObserver(&observer);
} }
......
...@@ -88,7 +88,12 @@ class UI_BASE_IME_EXPORT InputMethodManager { ...@@ -88,7 +88,12 @@ class UI_BASE_IME_EXPORT InputMethodManager {
bool is_extra_input_options_enabled, bool is_extra_input_options_enabled,
bool is_emoji_enabled, bool is_emoji_enabled,
bool is_handwriting_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 // CandidateWindowObserver is notified of events related to the candidate
...@@ -349,6 +354,12 @@ class UI_BASE_IME_EXPORT InputMethodManager { ...@@ -349,6 +354,12 @@ class UI_BASE_IME_EXPORT InputMethodManager {
// Gets the implementation of the keyboard controller. // Gets the implementation of the keyboard controller.
virtual ui::InputMethodKeyboardController* virtual ui::InputMethodKeyboardController*
GetInputMethodKeyboardController() = 0; 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 } // namespace input_method
......
...@@ -221,6 +221,12 @@ MockInputMethodManager::GetInputMethodKeyboardController() { ...@@ -221,6 +221,12 @@ MockInputMethodManager::GetInputMethodKeyboardController() {
return this; return this;
} }
void MockInputMethodManager::NotifyInputMethodExtensionAdded(
const std::string& extension_id) {}
void MockInputMethodManager::NotifyInputMethodExtensionRemoved(
const std::string& extension_id) {}
bool MockInputMethodManager::DisplayVirtualKeyboard() { bool MockInputMethodManager::DisplayVirtualKeyboard() {
return false; return false;
} }
......
...@@ -119,6 +119,10 @@ class UI_BASE_IME_EXPORT MockInputMethodManager ...@@ -119,6 +119,10 @@ class UI_BASE_IME_EXPORT MockInputMethodManager
void NotifyObserversImeExtraInputStateChange() override; void NotifyObserversImeExtraInputStateChange() override;
ui::InputMethodKeyboardController* GetInputMethodKeyboardController() ui::InputMethodKeyboardController* GetInputMethodKeyboardController()
override; override;
void NotifyInputMethodExtensionAdded(
const std::string& extension_id) override;
void NotifyInputMethodExtensionRemoved(
const std::string& extension_id) override;
// ui::InputMethodKeyboardController overrides. // ui::InputMethodKeyboardController overrides.
bool DisplayVirtualKeyboard() override; 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