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

Unified Diff: chrome/browser/resources/chromeos/quick_unlock/pin_keyboard.js

Issue 2302483003: Pin keyboard improvements. (Closed)
Patch Set: Remove async. Created 4 years, 3 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/resources/chromeos/quick_unlock/pin_keyboard.js
diff --git a/chrome/browser/resources/chromeos/quick_unlock/pin_keyboard.js b/chrome/browser/resources/chromeos/quick_unlock/pin_keyboard.js
index d6c28711b4d28f8981da2fa4aa487e02dafc6e40..90cf289bcb905ff3771653ffc354009b882d6b1f 100644
--- a/chrome/browser/resources/chromeos/quick_unlock/pin_keyboard.js
+++ b/chrome/browser/resources/chromeos/quick_unlock/pin_keyboard.js
@@ -22,6 +22,24 @@
* value="{{pinValue}}">
* </pin-keyboard>
*/
+
+(function() {
+
+/**
+ * Once auto backspace starts, the time between individual backspaces.
+ * @type {number}
+ * @const
+ */
+var REPEAT_BACKSPACE_DELAY_MS = 150;
+
+/**
+ * How long the backspace button must be held down before auto backspace
+ * starts.
+ * @type {number}
+ * @const
+ */
+var INITIAL_BACKSPACE_DELAY_MS = 500;
+
Polymer({
is: 'pin-keyboard',
@@ -53,6 +71,24 @@ Polymer({
notify: true,
value: '',
observer: 'onPinValueChange_'
+ },
+
+ /**
+ * The intervalID used for the backspace button set/clear interval.
+ * @private
+ */
+ repeatBackspaceIntervalId_: {
+ type: Number,
+ value: 0
+ },
+
+ /**
+ * The timeoutID used for the auto backspace.
+ * @private
+ */
+ startAutoBackspaceId_: {
+ type: Number,
+ value: 0
}
},
@@ -97,12 +133,62 @@ Polymer({
/**
* Called when the user wants to erase the last character of the entered
- * PIN value.
+ * PIN value.
+ * @private
*/
onPinClear_: function() {
this.value = this.value.substring(0, this.value.length - 1);
},
+ /**
+ * Called when the user presses or touches the backspace button. Starts a
+ * timer which starts an interval to repeatedly backspace the pin value until
+ * the interval is cleared.
+ * @param {Event} event The event object.
+ * @private
+ */
+ onBackspacePointerDown_: function(event) {
+ this.startAutoBackspaceId_ = setTimeout(function() {
+ this.repeatBackspaceIntervalId_ = setInterval(
+ this.onPinClear_.bind(this), REPEAT_BACKSPACE_DELAY_MS);
+ }.bind(this), INITIAL_BACKSPACE_DELAY_MS);
+ },
+
+ /**
+ * Helper function which clears the timer / interval ids and resets them.
+ * @private
+ */
+ clearAndReset_: function() {
+ clearInterval(this.repeatBackspaceIntervalId_);
+ this.repeatBackspaceIntervalId_ = 0;
+ clearTimeout(this.startAutoBackspaceId_);
+ this.startAutoBackspaceId_ = 0;
+ },
+
+ /**
+ * Called when the user exits the backspace button. Stops the interval
+ * callback.
+ * @param {Event} event The event object.
+ * @private
+ */
+ onBackspacePointerOut_: function(event) {
+ this.clearAndReset_();
+ },
+
+ /**
+ * Called when the user unpresses or untouches the backspace button. Stops the
+ * interval callback and fires a backspace event if there is no interval
+ * running.
+ * @param {Event} event The event object.
+ * @private
+ */
+ onBackspacePointerUp_: function(event) {
+ // If an interval has started, do not fire event on pointer up.
+ if (!this.repeatBackspaceIntervalId_)
+ this.onPinClear_();
+ this.clearAndReset_();
+ },
+
/** Called when a key event is pressed while the input element has focus. */
onInputKeyDown_: function(event) {
// Up/down pressed, swallow the event to prevent the input value from
@@ -143,6 +229,11 @@ Polymer({
* @private
*/
onKeyPress_: function(event) {
+ // If the active element is the input element, the input element itself will
+ // handle the keypresses, so we do not handle them here.
+ if (this.shadowRoot.activeElement == this.inputElement)
+ return;
+
var code = event.keyCode;
// Enter pressed.
@@ -201,3 +292,4 @@ Polymer({
return (document.dir == 'rtl') && !Number.isInteger(+password);
},
});
+})();

Powered by Google App Engine
This is Rietveld 408576698