| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/chromeos/login/existing_user_view.h" | |
| 6 | |
| 7 #include "base/utf_string_conversions.h" | |
| 8 #include "chrome/browser/chromeos/login/textfield_with_margin.h" | |
| 9 #include "chrome/browser/chromeos/login/user_controller.h" | |
| 10 #include "chrome/browser/chromeos/login/wizard_accessibility_helper.h" | |
| 11 #include "grit/generated_resources.h" | |
| 12 #include "ui/base/l10n/l10n_util.h" | |
| 13 #include "ui/base/resource/resource_bundle.h" | |
| 14 #include "views/background.h" | |
| 15 #include "views/controls/textfield/textfield.h" | |
| 16 #include "views/focus/focus_manager.h" | |
| 17 #include "views/layout/fill_layout.h" | |
| 18 | |
| 19 namespace chromeos { | |
| 20 | |
| 21 // Colors for gradient background. These should be consistent with border | |
| 22 // window background so textfield border is not visible to the user. | |
| 23 // The background is needed for password textfield to imitate its borders | |
| 24 // transparency correctly. | |
| 25 const SkColor kBackgroundColorTop = SkColorSetRGB(209, 213, 216); | |
| 26 const SkColor kBackgroundColorBottom = SkColorSetRGB(205, 210, 213); | |
| 27 | |
| 28 // Textfield with custom processing for Tab/Shift+Tab to select entries. | |
| 29 class UserEntryTextfield : public TextfieldWithMargin { | |
| 30 public: | |
| 31 UserEntryTextfield(UserController* controller, | |
| 32 views::Textfield::StyleFlags style) | |
| 33 : TextfieldWithMargin(style), | |
| 34 controller_(controller) {} | |
| 35 | |
| 36 // Overridden from views::View: | |
| 37 virtual bool OnKeyPressed(const views::KeyEvent& e) { | |
| 38 if (e.key_code() == ui::VKEY_TAB) { | |
| 39 controller_->SelectUserRelative(e.IsShiftDown() ? -1 : 1); | |
| 40 return true; | |
| 41 } else if (e.key_code() == ui::VKEY_LEFT) { | |
| 42 controller_->SelectUserRelative(-1); | |
| 43 return true; | |
| 44 } else if (e.key_code() == ui::VKEY_RIGHT) { | |
| 45 controller_->SelectUserRelative(1); | |
| 46 return true; | |
| 47 } else { | |
| 48 return TextfieldWithMargin::OnKeyPressed(e); | |
| 49 } | |
| 50 } | |
| 51 | |
| 52 virtual bool SkipDefaultKeyEventProcessing(const views::KeyEvent& e) { | |
| 53 if (e.key_code() == ui::VKEY_TAB) | |
| 54 return true; | |
| 55 else | |
| 56 return views::Textfield::SkipDefaultKeyEventProcessing(e); | |
| 57 } | |
| 58 | |
| 59 private: | |
| 60 UserController* controller_; | |
| 61 | |
| 62 DISALLOW_COPY_AND_ASSIGN(UserEntryTextfield); | |
| 63 }; | |
| 64 | |
| 65 | |
| 66 ExistingUserView::ExistingUserView(UserController* user_controller) | |
| 67 : user_controller_(user_controller), | |
| 68 password_field_(NULL), | |
| 69 accel_enterprise_enrollment_( | |
| 70 views::Accelerator(ui::VKEY_E, false, true, true)), | |
| 71 accel_login_off_the_record_( | |
| 72 views::Accelerator(ui::VKEY_B, false, false, true)), | |
| 73 accel_toggle_accessibility_( | |
| 74 WizardAccessibilityHelper::GetAccelerator()) { | |
| 75 AddAccelerator(accel_enterprise_enrollment_); | |
| 76 AddAccelerator(accel_login_off_the_record_); | |
| 77 AddAccelerator(accel_toggle_accessibility_); | |
| 78 } | |
| 79 | |
| 80 void ExistingUserView::RecreateFields() { | |
| 81 if (password_field_ == NULL) { | |
| 82 SetLayoutManager(new views::FillLayout); | |
| 83 password_field_ = new UserEntryTextfield(user_controller_, | |
| 84 views::Textfield::STYLE_PASSWORD); | |
| 85 password_field_->set_background( | |
| 86 views::Background::CreateVerticalGradientBackground( | |
| 87 kBackgroundColorTop, kBackgroundColorBottom)); | |
| 88 password_field_->set_focusable(true); | |
| 89 password_field_->SetController(this); | |
| 90 AddChildView(password_field_); | |
| 91 } | |
| 92 const gfx::Font& base_font = ResourceBundle::GetSharedInstance().GetFont( | |
| 93 ResourceBundle::BaseFont); | |
| 94 SetAndCorrectTextfieldFont(password_field_, base_font); | |
| 95 password_field_->set_text_to_display_when_empty( | |
| 96 l10n_util::GetStringUTF16(IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT)); | |
| 97 Layout(); | |
| 98 SchedulePaint(); | |
| 99 } | |
| 100 | |
| 101 bool ExistingUserView::AcceleratorPressed( | |
| 102 const views::Accelerator& accelerator) { | |
| 103 if (accelerator == accel_enterprise_enrollment_) { | |
| 104 user_controller_->OnStartEnterpriseEnrollment(); | |
| 105 return true; | |
| 106 } else if (accelerator == accel_login_off_the_record_) { | |
| 107 user_controller_->OnLoginAsGuest(); | |
| 108 return true; | |
| 109 } else if (accelerator == accel_toggle_accessibility_) { | |
| 110 WizardAccessibilityHelper::GetInstance()->ToggleAccessibility(); | |
| 111 return true; | |
| 112 } | |
| 113 return false; | |
| 114 } | |
| 115 | |
| 116 bool ExistingUserView::HandleKeyEvent(views::Textfield* sender, | |
| 117 const views::KeyEvent& key_event) { | |
| 118 if (key_event.key_code() == ui::VKEY_RETURN) { | |
| 119 if (!password_field_->text().empty()) | |
| 120 user_controller_->OnLogin("", UTF16ToUTF8(password_field_->text())); | |
| 121 } else { | |
| 122 user_controller_->ClearErrors(); | |
| 123 return false; | |
| 124 } | |
| 125 return true; | |
| 126 } | |
| 127 | |
| 128 void ExistingUserView::RequestFocus() { | |
| 129 password_field_->RequestFocus(); | |
| 130 } | |
| 131 | |
| 132 void ExistingUserView::ContentsChanged(views::Textfield* sender, | |
| 133 const string16& new_contents) { | |
| 134 if (!new_contents.empty()) | |
| 135 user_controller_->ClearErrors(); | |
| 136 } | |
| 137 | |
| 138 void ExistingUserView::EnableInputControls(bool enabled) { | |
| 139 password_field_->SetEnabled(enabled); | |
| 140 } | |
| 141 | |
| 142 void ExistingUserView::ClearAndFocusControls() { | |
| 143 ClearAndFocusPassword(); | |
| 144 } | |
| 145 | |
| 146 void ExistingUserView::ClearAndFocusPassword() { | |
| 147 password_field_->SetText(string16()); | |
| 148 FocusPasswordField(); | |
| 149 } | |
| 150 | |
| 151 void ExistingUserView::FocusPasswordField() { | |
| 152 password_field_->RequestFocus(); | |
| 153 } | |
| 154 | |
| 155 gfx::Rect ExistingUserView::GetMainInputScreenBounds() const { | |
| 156 return password_field_->GetScreenBounds(); | |
| 157 } | |
| 158 | |
| 159 void ExistingUserView::OnLocaleChanged() { | |
| 160 RecreateFields(); | |
| 161 } | |
| 162 | |
| 163 } // namespace chromeos | |
| OLD | NEW |