1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/screen_lock_view.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/rounded_rect_painter.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/screen_locker.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/chromeos/login/textfield_with_margin.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/user_manager.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/user_view.h" 13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/chromeos/login/username_view.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/chromeos/views/copy_background.h" 1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile_manager.h" 17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_service.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h" 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/background.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/border.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/image_view.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h" 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/textfield/native_textfield_wrapper.h" 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/controls/textfield/textfield.h" 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/layout/grid_layout.h" 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace { 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst int kCornerRadius = 5; 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A Textfield for password, which also sets focus to itself 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// when a mouse is clicked on it. This is necessary in screen locker 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// as mouse events are grabbed in the screen locker. 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass PasswordField : public TextfieldWithMargin { 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PasswordField() 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : TextfieldWithMargin(views::Textfield::STYLE_PASSWORD), 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen context_menu_disabled_(false) { 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch set_text_to_display_when_empty( 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen l10n_util::GetStringUTF16(IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT)); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // views::View overrides. 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool OnMousePressed(const views::MouseEvent& e) { 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RequestFocus(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ViewHierarchyChanged(bool is_add, 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::View* parent, 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::View* child) OVERRIDE { 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Textfield::ViewHierarchyChanged(is_add, parent, child); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wiat until native widget is created. 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!context_menu_disabled_ && native_wrapper_) { 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen gfx::NativeView widget = native_wrapper_->GetTestingHandle(); 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (widget) { 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen context_menu_disabled_ = true; 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen g_signal_connect(widget, "button-press-event", 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen G_CALLBACK(OnButtonPressEventThunk), this); 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CHROMEGTK_CALLBACK_1(PasswordField, gboolean, OnButtonPressEvent, 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GdkEventButton*); 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool context_menu_disabled_; 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(PasswordField); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsengboolean PasswordField::OnButtonPressEvent(GtkWidget* widget, 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GdkEventButton* event) { 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Eat button 2/3 and alt + any button to disable context menu. 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return event->state & GDK_MOD1_MASK || 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->button == 2 || 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen event->button == 3; 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::GridLayout; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing login::kBorderSize; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochScreenLockView::ScreenLockView(ScreenLocker* screen_locker) 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : user_view_(NULL), 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_field_(NULL), 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick screen_locker_(screen_locker), 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick main_(NULL), 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick username_(NULL) { 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(screen_locker_); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenScreenLockView::~ScreenLockView() { 10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen} 10221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickgfx::Size ScreenLockView::GetPreferredSize() { 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return main_->GetPreferredSize(); 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickvoid ScreenLockView::Layout() { 1084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch int username_height = login::kSelectedLabelHeight; 109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick main_->SetBounds(0, 0, width(), height()); 110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick username_->SetBounds( 111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kBorderSize, 112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick login::kUserImageSize - username_height + kBorderSize, 113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick login::kUserImageSize, 114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick username_height); 115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ScreenLockView::Init() { 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType::LOGIN_USER_IMAGE_CHANGED, 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources()); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick user_view_ = new UserView(this, 1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick false, // is_login 1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick true); // need_background 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick main_ = new views::View(); 1263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Use rounded rect background. 1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::Painter* painter = 1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CreateWizardPainter(&BorderDefinition::kUserBorder); 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick main_->set_background( 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::Background::CreateBackgroundPainter(true, painter)); 132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick main_->set_border(CreateWizardBorder(&BorderDefinition::kUserBorder)); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Password field. 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_field_ = new PasswordField(); 13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_field_->SetController(this); 1384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch password_field_->set_background(new CopyBackground(main_)); 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Setup ThrobberView's host view. 14121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen set_host_view(password_field_); 14221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // User icon. 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserManager::User user = screen_locker_->user(); 145201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch user_view_->SetImage(user.image(), user.image()); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // User name. 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::wstring text = UTF8ToWide(user.GetDisplayName()); 149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const gfx::Font& font = rb.GetFont(ResourceBundle::MediumBoldFont).DeriveFont( 15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen kSelectedUsernameFontDelta); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Layouts image, textfield and button components. 155731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GridLayout* layout = new GridLayout(main_); 156731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick main_->SetLayoutManager(layout); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::ColumnSet* column_set = layout->AddColumnSet(0); 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch column_set->AddPaddingColumn(0, kBorderSize); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GridLayout::USE_PREF, 0, 0); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch column_set->AddPaddingColumn(0, kBorderSize); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch column_set = layout->AddColumnSet(1); 16421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen column_set->AddPaddingColumn(0, kBorderSize); 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GridLayout::USE_PREF, 0, 0); 16721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen column_set->AddPaddingColumn(0, kBorderSize); 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch layout->AddPaddingRow(0, kBorderSize); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch layout->StartRow(0, 0); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch layout->AddView(user_view_); 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch layout->AddPaddingRow(0, kBorderSize); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch layout->StartRow(0, 1); 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch layout->AddView(password_field_); 175731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick layout->AddPaddingRow(0, kBorderSize); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AddChildView(main_); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen UsernameView* username = UsernameView::CreateShapedUsernameView(text, false); 180731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick username_ = username; 1814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch username->SetColor(login::kTextColor); 182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick username->SetFont(font); 183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AddChildView(username); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ScreenLockView::ClearAndSetFocusToPassword() { 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_field_->RequestFocus(); 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_field_->SetText(string16()); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ScreenLockView::SetSignoutEnabled(bool enabled) { 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch user_view_->SetSignoutEnabled(enabled); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgfx::Rect ScreenLockView::GetPasswordBoundsRelativeTo(const views::View* view) { 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point p; 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::View::ConvertPointToView(password_field_, view, &p); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return gfx::Rect(p, size()); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ScreenLockView::SetEnabled(bool enabled) { 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::View::SetEnabled(enabled); 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!enabled) { 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(oshima): Re-enabling does not move the focus to the view 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // that had a focus (issue http://crbug.com/43131). 208731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Clear focus on the textfield so that re-enabling can set focus 209731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // back to the text field. 210731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // FocusManager may be null if the view does not have 211731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // associated Widget yet. 212731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (password_field_->GetFocusManager()) 213731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick password_field_->GetFocusManager()->ClearFocus(); 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch password_field_->SetEnabled(enabled); 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ScreenLockView::OnSignout() { 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch screen_locker_->Signout(); 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ScreenLockView::ContentsChanged(views::Textfield* sender, 22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const string16& new_contents) { 22472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!new_contents.empty()) 22572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen screen_locker_->ClearErrors(); 22672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 22772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 2283f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenbool ScreenLockView::HandleKeyEvent( 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Textfield* sender, 2303f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const views::KeyEvent& key_event) { 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch screen_locker_->ClearErrors(); 23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (key_event.key_code() == ui::VKEY_RETURN) { 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch screen_locker_->Authenticate(password_field_->text()); 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ScreenLockView::Observe( 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationType type, 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details) { 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (type != NotificationType::LOGIN_USER_IMAGE_CHANGED || !user_view_) 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UserManager::User* user = Details<UserManager::User>(details).ptr(); 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (screen_locker_->user().email() != user->email()) 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return; 249201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch user_view_->SetImage(user->image(), user->image()); 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 253