input_method_persistence.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_persistence.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_util.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/language_preferences.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace input_method { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PersistSystemInputMethod(const std::string& input_method) { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!g_browser_process || !g_browser_process->local_state()) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_browser_process->local_state()->SetString( 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) language_prefs::kPreferredKeyboardLayout, input_method); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void PersistUserInputMethod(const std::string& input_method) { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* user_prefs = NULL; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = ProfileManager::GetDefaultProfile(); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (profile) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_prefs = profile->GetPrefs(); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!user_prefs) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string current_input_method_on_pref = 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_prefs->GetString(prefs::kLanguageCurrentInputMethod); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (current_input_method_on_pref == input_method) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_prefs->SetString(prefs::kLanguagePreviousInputMethod, 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) current_input_method_on_pref); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_prefs->SetString(prefs::kLanguageCurrentInputMethod, 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input_method); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)InputMethodPersistence::InputMethodPersistence( 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputMethodManager* input_method_manager) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : input_method_manager_(input_method_manager), 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_(InputMethodManager::STATE_LOGIN_SCREEN) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input_method_manager_->AddObserver(this); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)InputMethodPersistence::~InputMethodPersistence() { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) input_method_manager_->RemoveObserver(this); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InputMethodPersistence::InputMethodChanged( 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputMethodManager* manager, bool show_message) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(input_method_manager_, manager); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string current_input_method = 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) manager->GetCurrentInputMethod().id(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Save the new input method id depending on the current browser state. 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (state_) { 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case InputMethodManager::STATE_LOGIN_SCREEN: 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!InputMethodUtil::IsKeyboardLayout(current_input_method)) { 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DVLOG(1) << "Only keyboard layouts are supported: " 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << current_input_method; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PersistSystemInputMethod(current_input_method); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case InputMethodManager::STATE_BROWSER_SCREEN: 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PersistUserInputMethod(current_input_method); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case InputMethodManager::STATE_LOCK_SCREEN: 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // We use a special set of input methods on the screen. Do not update. 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case InputMethodManager::STATE_TERMINATING: 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InputMethodPersistence::InputMethodPropertyChanged( 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputMethodManager* manager) {} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InputMethodPersistence::OnSessionStateChange( 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputMethodManager::State new_state) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_ = new_state; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace input_method 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 97