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

Unified Diff: chrome/browser/chromeos/login/ui/login_display_host_impl.cc

Issue 292233002: Disable VK overscroll for login/out-of-box. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, keyboard override value: convert to bool Created 6 years, 7 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
Index: chrome/browser/chromeos/login/ui/login_display_host_impl.cc
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
index be3a303249bbf552237ffa3fec6e0b674a9d7444..5eb3f15c0190662fe101affc423f4ba50aca083f 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
+++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
@@ -80,9 +80,13 @@
#include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/scoped_layer_animation_settings.h"
#include "ui/events/event_utils.h"
+#include "ui/gfx/display.h"
#include "ui/gfx/rect.h"
+#include "ui/gfx/screen.h"
+#include "ui/gfx/size.h"
#include "ui/gfx/transform.h"
#include "ui/keyboard/keyboard_controller.h"
+#include "ui/keyboard/keyboard_util.h"
#include "ui/views/focus/focus_manager.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
@@ -282,6 +286,18 @@ class LoginWidgetDelegate : public views::WidgetDelegate {
DISALLOW_COPY_AND_ASSIGN(LoginWidgetDelegate);
};
+// Disables virtual keyboard overscroll. Login UI will scroll user pods
+// into view on JS side when virtual keyboard is shown.
+void DisableKeyboardOverscroll() {
+ keyboard::SetKeyboardOverscrollOverride(
+ keyboard::KEYBOARD_OVERSCROLL_OVERRIDE_DISABLED);
+}
+
+void ResetKeyboardOverscrollOverride() {
+ keyboard::SetKeyboardOverscrollOverride(
+ keyboard::KEYBOARD_OVERSCROLL_OVERRIDE_NONE);
+}
+
} // namespace
namespace chromeos {
@@ -332,6 +348,7 @@ LoginDisplayHostImpl::LoginDisplayHostImpl(const gfx::Rect& background_bounds)
}
ash::Shell::GetInstance()->delegate()->AddVirtualKeyboardStateObserver(this);
+ ash::Shell::GetScreen()->AddObserver(this);
// We need to listen to CLOSE_ALL_BROWSERS_REQUEST but not APP_TERMINATING
// because/ APP_TERMINATING will never be fired as long as this keeps
@@ -434,6 +451,10 @@ LoginDisplayHostImpl::~LoginDisplayHostImpl() {
ash::Shell::GetInstance()->delegate()->
RemoveVirtualKeyboardStateObserver(this);
+ ash::Shell::GetScreen()->RemoveObserver(this);
+
+ if (login::LoginScrollIntoViewEnabled())
+ ResetKeyboardOverscrollOverride();
views::FocusManager::set_arrow_key_traversal_enabled(false);
ResetLoginWindowAndView();
@@ -530,6 +551,9 @@ AutoEnrollmentController* LoginDisplayHostImpl::GetAutoEnrollmentController() {
void LoginDisplayHostImpl::StartWizard(
const std::string& first_screen_name,
scoped_ptr<base::DictionaryValue> screen_parameters) {
+ if (login::LoginScrollIntoViewEnabled())
+ DisableKeyboardOverscroll();
+
startup_sound_honors_spoken_feedback_ = true;
TryToPlayStartupSound();
@@ -574,6 +598,9 @@ AppLaunchController* LoginDisplayHostImpl::GetAppLaunchController() {
void LoginDisplayHostImpl::StartUserAdding(
const base::Closure& completion_callback) {
+ if (login::LoginScrollIntoViewEnabled())
+ DisableKeyboardOverscroll();
+
restore_path_ = RESTORE_ADD_USER_INTO_SESSION;
completion_callback_ = completion_callback;
finalize_animation_type_ = ANIMATION_NONE;
@@ -606,6 +633,9 @@ void LoginDisplayHostImpl::StartUserAdding(
void LoginDisplayHostImpl::StartSignInScreen(
const LoginScreenContext& context) {
+ if (login::LoginScrollIntoViewEnabled())
+ DisableKeyboardOverscroll();
+
startup_sound_honors_spoken_feedback_ = true;
TryToPlayStartupSound();
@@ -876,18 +906,46 @@ void LoginDisplayHostImpl::OnKeyboardBoundsChanging(
const gfx::Rect& new_bounds) {
if (new_bounds.IsEmpty() && !keyboard_bounds_.IsEmpty()) {
// Keyboard has been hidden.
- if (webui_login_display_)
+ if (webui_login_display_) {
webui_login_display_->ShowControlBar(true);
+ if (login::LoginScrollIntoViewEnabled())
+ webui_login_display_->SetKeyboardState(false);
+ }
} else if (!new_bounds.IsEmpty() && keyboard_bounds_.IsEmpty()) {
// Keyboard has been shown.
- if (webui_login_display_)
+ if (webui_login_display_) {
webui_login_display_->ShowControlBar(false);
+ if (login::LoginScrollIntoViewEnabled())
+ webui_login_display_->SetKeyboardState(true);
+ }
}
keyboard_bounds_ = new_bounds;
}
////////////////////////////////////////////////////////////////////////////////
+// LoginDisplayHostImpl, gfx::DisplayObserver implementation:
+
+void LoginDisplayHostImpl::OnDisplayAdded(const gfx::Display& new_display) {
+}
+
+void LoginDisplayHostImpl::OnDisplayRemoved(const gfx::Display& old_display) {
+}
+
+void LoginDisplayHostImpl::OnDisplayMetricsChanged(const gfx::Display& display,
+ uint32_t changed_metrics) {
+ if (display.id() != ash::Shell::GetScreen()->GetPrimaryDisplay().id() ||
+ !(changed_metrics & DISPLAY_METRIC_BOUNDS)) {
+ return;
+ }
+
+ if (webui_login_display_) {
+ const gfx::Size& size = ash::Shell::GetScreen()->GetPrimaryDisplay().size();
+ webui_login_display_->SetClientAreaSize(size.width(), size.height());
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
// LoginDisplayHostImpl, private
void LoginDisplayHostImpl::ShutdownDisplayHost(bool post_quit_task) {
« no previous file with comments | « chrome/browser/chromeos/login/ui/login_display_host_impl.h ('k') | chrome/browser/chromeos/login/ui/mock_login_display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698