diff options
author | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-14 00:17:04 +0000 |
---|---|---|
committer | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-14 00:17:04 +0000 |
commit | e6c1a7d3b21482fb58491b231a32bcff8666f73f (patch) | |
tree | 44de04765c7d85aeb2f94e0819ed1a87aa6e806a /chrome/browser/chromeos/input_method/input_method_persistence.cc | |
parent | 06af6a46eb2f078f8df6e241051ded35b2f1ae6e (diff) | |
download | chromium_src-e6c1a7d3b21482fb58491b231a32bcff8666f73f.zip chromium_src-e6c1a7d3b21482fb58491b231a32bcff8666f73f.tar.gz chromium_src-e6c1a7d3b21482fb58491b231a32bcff8666f73f.tar.bz2 |
Decompose BrowserStateMonitor into two parts, simplifying unit tests and APIs.
Decouple InputMethodManagerImpl from content notifications by requiring the client to push said notifications. BrowserStateMonitor and InputMethodPersistence thus become part of the client (configuration layer).
BUG=164375
TBR=sky
Review URL: https://chromiumcodereview.appspot.com/11466010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173015 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/input_method/input_method_persistence.cc')
-rw-r--r-- | chrome/browser/chromeos/input_method/input_method_persistence.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/input_method/input_method_persistence.cc b/chrome/browser/chromeos/input_method/input_method_persistence.cc new file mode 100644 index 0000000..4bb10e9 --- /dev/null +++ b/chrome/browser/chromeos/input_method/input_method_persistence.cc @@ -0,0 +1,96 @@ +// Copyright (c) 2012 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. + +#include "chrome/browser/chromeos/input_method/input_method_persistence.h" + +#include "base/logging.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/chromeos/input_method/input_method_util.h" +#include "chrome/browser/chromeos/language_preferences.h" +#include "chrome/browser/prefs/pref_service.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/common/pref_names.h" + +namespace chromeos { +namespace input_method { +namespace { + +void PersistSystemInputMethod(const std::string& input_method) { + if (!g_browser_process || !g_browser_process->local_state()) + return; + + g_browser_process->local_state()->SetString( + language_prefs::kPreferredKeyboardLayout, input_method); +} + +void PersistUserInputMethod(const std::string& input_method) { + PrefServiceBase* user_prefs = NULL; + Profile* profile = ProfileManager::GetDefaultProfile(); + if (profile) + user_prefs = profile->GetPrefs(); + if (!user_prefs) + return; + + const std::string current_input_method_on_pref = + user_prefs->GetString(prefs::kLanguageCurrentInputMethod); + if (current_input_method_on_pref == input_method) + return; + + user_prefs->SetString(prefs::kLanguagePreviousInputMethod, + current_input_method_on_pref); + user_prefs->SetString(prefs::kLanguageCurrentInputMethod, + input_method); +} + +} // namespace + +InputMethodPersistence::InputMethodPersistence( + InputMethodManager* input_method_manager) + : input_method_manager_(input_method_manager), + state_(InputMethodManager::STATE_LOGIN_SCREEN) { + input_method_manager_->AddObserver(this); +} + +InputMethodPersistence::~InputMethodPersistence() { + input_method_manager_->RemoveObserver(this); +} + +void InputMethodPersistence::InputMethodChanged( + InputMethodManager* manager, bool show_message) { + DCHECK_EQ(input_method_manager_, manager); + const std::string current_input_method = + manager->GetCurrentInputMethod().id(); + // Save the new input method id depending on the current browser state. + switch (state_) { + case InputMethodManager::STATE_LOGIN_SCREEN: + if (!InputMethodUtil::IsKeyboardLayout(current_input_method)) { + DVLOG(1) << "Only keyboard layouts are supported: " + << current_input_method; + return; + } + PersistSystemInputMethod(current_input_method); + return; + case InputMethodManager::STATE_BROWSER_SCREEN: + PersistUserInputMethod(current_input_method); + return; + case InputMethodManager::STATE_LOCK_SCREEN: + // We use a special set of input methods on the screen. Do not update. + return; + case InputMethodManager::STATE_TERMINATING: + return; + } + NOTREACHED(); +} + +void InputMethodPersistence::InputMethodPropertyChanged( + InputMethodManager* manager) {} + +void InputMethodPersistence::OnSessionStateChange( + InputMethodManager::State new_state) { + state_ = new_state; +} + +} // namespace input_method +} // namespace chromeos |