Commit fac31329 authored by alemate's avatar alemate Committed by Commit bot

Input methods configuration on User Adding Screen should be consistent with signin screen.

This CL adds automatic "last used keyboard layout" for active user POD
on User Adding screen.

BUG=292774
TEST=manual

Review URL: https://codereview.chromium.org/602593003

Cr-Commit-Position: refs/heads/master@{#296557}
parent ac852f9a
......@@ -12,6 +12,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
#include "chrome/browser/chromeos/login/ui/user_adding_screen_input_methods_controller.h"
#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
#include "components/session_manager/core/session_manager.h"
#include "components/user_manager/user_manager.h"
......@@ -42,6 +43,8 @@ class UserAddingScreenImpl : public UserAddingScreen {
ObserverList<Observer> observers_;
LoginDisplayHost* display_host_;
UserAddingScreenInputMethodsController im_controller_;
};
void UserAddingScreenImpl::Start() {
......@@ -98,7 +101,7 @@ UserAddingScreenImpl* UserAddingScreenImpl::GetInstance() {
}
UserAddingScreenImpl::UserAddingScreenImpl()
: display_host_(NULL) {
: display_host_(NULL), im_controller_(this) {
}
UserAddingScreenImpl::~UserAddingScreenImpl() {
......
// Copyright 2014 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/login/ui/user_adding_screen_input_methods_controller.h"
#include "components/user_manager/user_manager.h"
namespace chromeos {
UserAddingScreenInputMethodsController::UserAddingScreenInputMethodsController(
UserAddingScreen* screen)
: screen_(screen), active_user_on_show_(NULL) {
screen_->AddObserver(this);
}
UserAddingScreenInputMethodsController::
~UserAddingScreenInputMethodsController() {
screen_->RemoveObserver(this);
}
void UserAddingScreenInputMethodsController::OnUserAddingStarted() {
active_user_on_show_ = user_manager::UserManager::Get()->GetActiveUser();
input_method::InputMethodManager* imm =
input_method::InputMethodManager::Get();
saved_ime_state_ = imm->GetActiveIMEState();
imm->SetState(saved_ime_state_->Clone());
imm->GetActiveIMEState()->EnableLockScreenLayouts();
}
void UserAddingScreenInputMethodsController::OnUserAddingFinished() {
if (user_manager::UserManager::Get()->GetActiveUser() == active_user_on_show_)
input_method::InputMethodManager::Get()->SetState(saved_ime_state_);
saved_ime_state_ = NULL;
}
} // namespace chromeos
// Copyright 2014 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.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_UI_USER_ADDING_SCREEN_INPUT_METHODS_CONTROLLER_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_UI_USER_ADDING_SCREEN_INPUT_METHODS_CONTROLLER_H_
#include "base/memory/ref_counted.h"
#include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
#include "chromeos/ime/input_method_manager.h"
namespace user_manager {
class User;
}
namespace chromeos {
// Ensure a set of "Login keyboard layouts" is used at UserAddingScreen.
class UserAddingScreenInputMethodsController
: public UserAddingScreen::Observer {
public:
explicit UserAddingScreenInputMethodsController(UserAddingScreen* screen);
virtual ~UserAddingScreenInputMethodsController();
// UserAddingScreen::Observer implementation:
virtual void OnUserAddingStarted() OVERRIDE;
virtual void OnUserAddingFinished() OVERRIDE;
private:
UserAddingScreen* screen_;
scoped_refptr<input_method::InputMethodManager::State> saved_ime_state_;
user_manager::User* active_user_on_show_;
DISALLOW_COPY_AND_ASSIGN(UserAddingScreenInputMethodsController);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_UI_USER_ADDING_SCREEN_INPUT_METHODS_CONTROLLER_H_
......@@ -1049,15 +1049,6 @@ bool SigninScreenHandler::ShouldLoadGaia() const {
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
// the session or on lock screen), don't switch input methods in this case.
// TODO(dpolukhin): adding user and sign-in should be consistent
// crbug.com/292774
return;
}
bool succeed = false;
const std::string input_method = GetUserLRUInputMethod(username);
......
......@@ -720,6 +720,8 @@
'browser/chromeos/login/ui/simple_web_view_dialog.h',
'browser/chromeos/login/ui/user_adding_screen.cc',
'browser/chromeos/login/ui/user_adding_screen.h',
'browser/chromeos/login/ui/user_adding_screen_input_methods_controller.cc',
'browser/chromeos/login/ui/user_adding_screen_input_methods_controller.h',
'browser/chromeos/login/ui/webui_login_display.cc',
'browser/chromeos/login/ui/webui_login_display.h',
'browser/chromeos/login/ui/webui_login_view.cc',
......
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