Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7031)

Unified Diff: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc

Issue 484353005: ChromeOS: "Add New User" screen should enable all hardware keyboards. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix tests. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index 24cee1b974b2184ce3e2d3acb4c4c2ba7cfbc173..ebeeafe5c6670aa6d8f7b7f29587b73fad4ed7de 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -175,36 +175,16 @@ std::string GetNetworkName(const std::string& service_path) {
static bool SetUserInputMethodImpl(
const std::string& username,
- chromeos::input_method::InputMethodManager* manager) {
- PrefService* const local_state = g_browser_process->local_state();
-
- const base::DictionaryValue* users_lru_input_methods =
- local_state->GetDictionary(prefs::kUsersLRUInputMethod);
-
- if (users_lru_input_methods == NULL) {
- DLOG(WARNING) << "SetUserInputMethod('" << username
- << "'): no kUsersLRUInputMethod";
- return false;
- }
-
- std::string input_method;
-
- if (!users_lru_input_methods->GetStringWithoutPathExpansion(username,
- &input_method)) {
- DVLOG(0) << "SetUserInputMethod('" << username
- << "'): no input method for this user";
- return false;
- }
-
- if (input_method.empty())
- return false;
-
- if (!manager->IsLoginKeyboard(input_method)) {
+ const std::string& user_input_method,
+ input_method::InputMethodManager::State* ime_state) {
+ if (!chromeos::input_method::InputMethodManager::Get()->IsLoginKeyboard(
+ user_input_method)) {
LOG(WARNING) << "SetUserInputMethod('" << username
- << "'): stored user LRU input method '" << input_method
+ << "'): stored user LRU input method '" << user_input_method
<< "' is no longer Full Latin Keyboard Language"
<< " (entry dropped). Use hardware default instead.";
+ PrefService* const local_state = g_browser_process->local_state();
DictionaryPrefUpdate updater(local_state, prefs::kUsersLRUInputMethod);
base::DictionaryValue* const users_lru_input_methods = updater.Get();
@@ -214,16 +194,14 @@ static bool SetUserInputMethodImpl(
return false;
}
- if (!Contains(manager->GetActiveIMEState()->GetActiveInputMethodIds(),
- input_method)) {
- if (!manager->GetActiveIMEState()->EnableInputMethod(input_method)) {
+ if (!Contains(ime_state->GetActiveInputMethodIds(), user_input_method)) {
+ if (!ime_state->EnableInputMethod(user_input_method)) {
DLOG(ERROR) << "SigninScreenHandler::SetUserInputMethod('" << username
- << "'): user input method '" << input_method
+ << "'): user input method '" << user_input_method
<< "' is not enabled and enabling failed (ignored!).";
}
}
- manager->GetActiveIMEState()->ChangeInputMethod(input_method,
- false /* show_message */);
+ ime_state->ChangeInputMethod(user_input_method, false /* show_message */);
return true;
}
@@ -276,6 +254,7 @@ SigninScreenHandler::SigninScreenHandler(
->GetImeKeyboard()
->CapsLockIsEnabled()),
gaia_screen_handler_(gaia_screen_handler),
+ oobe_ui_observer_added_(false),
weak_factory_(this) {
DCHECK(network_state_informer_.get());
DCHECK(error_screen_actor_);
@@ -314,6 +293,9 @@ SigninScreenHandler::SigninScreenHandler(
}
SigninScreenHandler::~SigninScreenHandler() {
+ OobeUI* oobe_ui = GetOobeUI();
+ if (oobe_ui && oobe_ui_observer_added_)
+ oobe_ui->RemoveObserver(this);
chromeos::input_method::ImeKeyboard* keyboard =
chromeos::input_method::InputMethodManager::Get()->GetImeKeyboard();
if (keyboard)
@@ -478,6 +460,11 @@ void SigninScreenHandler::UpdateState(ErrorScreenActor::ErrorReason reason) {
UpdateStateInternal(reason, false);
}
+void SigninScreenHandler::SetFocusPODCallbackForTesting(
+ base::Closure callback) {
+ test_focus_pod_callback_ = callback;
+}
+
// SigninScreenHandler, private: -----------------------------------------------
void SigninScreenHandler::ShowImpl() {
@@ -486,6 +473,14 @@ void SigninScreenHandler::ShowImpl() {
return;
}
+ if (!ime_state_.get())
+ ime_state_ = input_method::InputMethodManager::Get()->GetActiveIMEState();
+
+ if (!oobe_ui_observer_added_) {
+ oobe_ui_observer_added_ = true;
+ GetOobeUI()->AddObserver(this);
+ }
+
if (oobe_ui_ || is_enrolling_consumer_management_) {
// Shows new user sign-in for OOBE.
OnShowAddUser();
@@ -794,6 +789,38 @@ void SigninScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterDictionaryPref(prefs::kUsersLRUInputMethod);
}
+void SigninScreenHandler::OnCurrentScreenChanged(OobeUI::Screen current_screen,
+ OobeUI::Screen new_screen) {
+ if (new_screen == OobeUI::SCREEN_ACCOUNT_PICKER) {
+ // Restore active IME state if returning to user pod row screen.
+ input_method::InputMethodManager::Get()->SetState(ime_state_);
+ }
+}
+
+std::string SigninScreenHandler::GetUserLRUInputMethod(
+ const std::string& username) const {
+ PrefService* const local_state = g_browser_process->local_state();
+ const base::DictionaryValue* users_lru_input_methods =
+ local_state->GetDictionary(prefs::kUsersLRUInputMethod);
+
+ if (users_lru_input_methods == NULL) {
+ DLOG(WARNING) << "GetUserLRUInputMethod('" << username
+ << "'): no kUsersLRUInputMethod";
+ return std::string();
+ }
+
+ std::string input_method;
+
+ if (!users_lru_input_methods->GetStringWithoutPathExpansion(username,
+ &input_method)) {
+ DVLOG(0) << "GetUserLRUInputMethod('" << username
+ << "'): no input method for this user";
+ return std::string();
+ }
+
+ return input_method;
+}
+
void SigninScreenHandler::HandleGetUsers() {
if (delegate_)
delegate_->HandleGetUsers();
@@ -1000,7 +1027,9 @@ bool SigninScreenHandler::ShouldLoadGaia() const {
}
// Update keyboard layout to least recently used by the user.
-void SigninScreenHandler::SetUserInputMethod(const std::string& username) {
+void SigninScreenHandler::SetUserInputMethod(
+ const std::string& username,
+ input_method::InputMethodManager::State* ime_state) {
user_manager::UserManager* user_manager = user_manager::UserManager::Get();
if (user_manager->IsUserLoggedIn()) {
// We are on sign-in screen inside user session (adding new user to
@@ -1010,10 +1039,12 @@ void SigninScreenHandler::SetUserInputMethod(const std::string& username) {
return;
}
- chromeos::input_method::InputMethodManager* const manager =
- chromeos::input_method::InputMethodManager::Get();
+ bool succeed = false;
- const bool succeed = SetUserInputMethodImpl(username, manager);
+ const std::string input_method = GetUserLRUInputMethod(username);
+
+ if (!input_method.empty())
+ succeed = SetUserInputMethodImpl(username, input_method, ime_state);
// This is also a case when LRU layout is set only for a few local users,
// thus others need to be switched to default locale.
@@ -1022,7 +1053,7 @@ void SigninScreenHandler::SetUserInputMethod(const std::string& username) {
DVLOG(0) << "SetUserInputMethod('" << username
<< "'): failed to set user layout. Switching to default.";
- manager->GetActiveIMEState()->SetInputMethodLoginDefault();
+ ime_state->SetInputMethodLoginDefault();
}
}
@@ -1325,12 +1356,14 @@ void SigninScreenHandler::HandleUpdateOfflineLogin(bool offline_login_active) {
}
void SigninScreenHandler::HandleFocusPod(const std::string& user_id) {
- SetUserInputMethod(user_id);
+ SetUserInputMethod(user_id, ime_state_.get());
#if !defined(USE_ATHENA)
// TODO(dpolukhin): crbug.com/408734.
WallpaperManager::Get()->SetUserWallpaperDelayed(user_id);
#endif
ScreenlockBridge::Get()->SetFocusedUser(user_id);
+ if (!test_focus_pod_callback_.is_null())
+ test_focus_pod_callback_.Run();
}
void SigninScreenHandler::HandleHardlockPod(const std::string& user_id) {
@@ -1431,9 +1464,13 @@ void SigninScreenHandler::CancelPasswordChangedFlowInternal() {
}
}
+OobeUI* SigninScreenHandler::GetOobeUI() const {
+ return static_cast<OobeUI*>(web_ui()->GetController());
+}
+
OobeUI::Screen SigninScreenHandler::GetCurrentScreen() const {
OobeUI::Screen screen = OobeUI::SCREEN_UNKNOWN;
- OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController());
+ OobeUI* oobe_ui = GetOobeUI();
if (oobe_ui)
screen = oobe_ui->current_screen();
return screen;
« no previous file with comments | « chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698