Index: chrome/browser/resources/login/user_pod_row.js |
diff --git a/chrome/browser/resources/login/user_pod_row.js b/chrome/browser/resources/login/user_pod_row.js |
index bd6d78c2371074e2e792d00571a4f900c087f031..63cd9cf74b6a79275d278a0e5d13240bd758c74f 100644 |
--- a/chrome/browser/resources/login/user_pod_row.js |
+++ b/chrome/browser/resources/login/user_pod_row.js |
@@ -47,6 +47,13 @@ cr.define('login', function() { |
var POD_ROW_PADDING = 10; |
/** |
+ * Minimal padding between user pod and virtual keyboard. |
+ * @type {number} |
+ * @const |
+ */ |
+ var USER_POD_KEYBOARD_MIN_PADDING = 20; |
+ |
+ /** |
* Whether to preselect the first pod automatically on login screen. |
* @type {boolean} |
* @const |
@@ -1560,6 +1567,29 @@ cr.define('login', function() { |
}, |
/** |
+ * Scrolls focused user pod into view. |
+ */ |
+ scrollFocusedPodIntoView: function() { |
+ var pod = this.focusedPod_; |
+ if (!pod) |
+ return; |
+ |
+ // First check whether focused pod is already fully visible. |
+ var visibleArea = $('scroll-container'); |
+ var scrollTop = visibleArea.scrollTop; |
+ var clientHeight = visibleArea.clientHeight; |
+ var podTop = $('oobe').offsetTop + pod.offsetTop; |
+ var padding = USER_POD_KEYBOARD_MIN_PADDING; |
+ if (podTop + pod.height + padding <= scrollTop + clientHeight && |
+ podTop - padding >= scrollTop) { |
+ return; |
+ } |
+ |
+ // Scroll so that user pod is as centered as possible. |
+ visibleArea.scrollTop = podTop - (clientHeight - pod.offsetHeight) / 2; |
+ }, |
+ |
+ /** |
* Rebuilds pod row using users_ and apps_ that were previously set or |
* updated. |
*/ |
@@ -1734,6 +1764,9 @@ cr.define('login', function() { |
var layout = this.calculateLayout_(); |
if (layout.columns != this.columns || layout.rows != this.rows) |
this.placePods_(); |
+ |
+ if (Oobe.getInstance().virtualKeyboardShown) |
+ this.scrollFocusedPodIntoView(); |
}, |
/** |
@@ -1829,7 +1862,7 @@ cr.define('login', function() { |
this.setAttribute('ncolumns', columns); |
}, |
get columns() { |
- return this.getAttribute('ncolumns'); |
+ return parseInt(this.getAttribute('ncolumns')); |
}, |
/** |
@@ -1841,7 +1874,7 @@ cr.define('login', function() { |
this.setAttribute('nrows', rows); |
}, |
get rows() { |
- return this.getAttribute('nrows'); |
+ return parseInt(this.getAttribute('nrows')); |
}, |
/** |
@@ -1907,6 +1940,9 @@ cr.define('login', function() { |
chrome.send('focusPod', [podToFocus.user.username]); |
this.firstShown_ = false; |
this.lastFocusedPod_ = podToFocus; |
+ |
+ if (Oobe.getInstance().virtualKeyboardShown) |
+ this.scrollFocusedPodIntoView(); |
} |
this.insideFocusPod_ = false; |
this.keyboardActivated_ = false; |