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

Side by Side Diff: chrome/browser/resources/chromeos/quick_unlock/pin_keyboard.js

Issue 2302483003: Pin keyboard improvements. (Closed)
Patch Set: Fixed patch set 7 errors. 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview 6 * @fileoverview
7 * 'pin-keyboard' is a keyboard that can be used to enter PINs or more generally 7 * 'pin-keyboard' is a keyboard that can be used to enter PINs or more generally
8 * numeric values. 8 * numeric values.
9 * 9 *
10 * Properties: 10 * Properties:
11 * value: The value of the PIN keyboard. Writing to this property will adjust 11 * value: The value of the PIN keyboard. Writing to this property will adjust
12 * the PIN keyboard's value. 12 * the PIN keyboard's value.
13 * 13 *
14 * Events: 14 * Events:
15 * pin-change: Fired when the PIN value has changed. The pin is available at 15 * pin-change: Fired when the PIN value has changed. The pin is available at
16 * event.detail.pin. 16 * event.detail.pin.
17 * submit: Fired when the PIN is submitted. The pin is available at 17 * submit: Fired when the PIN is submitted. The pin is available at
18 * event.detail.pin. 18 * event.detail.pin.
19 * 19 *
20 * Example: 20 * Example:
21 * <pin-keyboard on-pin-change="onPinChange" on-submit="onPinSubmit" 21 * <pin-keyboard on-pin-change="onPinChange" on-submit="onPinSubmit"
22 * value="{{pinValue}}"> 22 * value="{{pinValue}}">
23 * </pin-keyboard> 23 * </pin-keyboard>
24 */ 24 */
25
26 (function() {
27
28 /**
29 * Once auto backspace starts, the time between individual backspaces.
30 * @type {number}
31 * @const
32 */
33 var repeatBackspaceIntervalMs = 150;
jdufault 2016/09/08 19:30:54 These should probably be named in all caps. What
sammiequon 2016/09/08 22:24:53 Done.
34
35 /**
36 * How long the backspace button must be held down before auto backspace
37 * starts.
38 * @type {number}
39 * @const
40 */
41 var startAutoBackspaceMs = 500;
jdufault 2016/09/08 19:30:54 INITIAL_BACKSPACE_DELAY_MS?
sammiequon 2016/09/08 22:24:54 Done.
42
25 Polymer({ 43 Polymer({
26 is: 'pin-keyboard', 44 is: 'pin-keyboard',
27 45
28 behaviors: [ 46 behaviors: [
29 I18nBehavior, 47 I18nBehavior,
30 ], 48 ],
31 49
32 properties: { 50 properties: {
33 /** 51 /**
34 * Whether or not the keyboard's input element should be numerical 52 * Whether or not the keyboard's input element should be numerical
(...skipping 11 matching lines...) Expand all
46 type: Boolean, 64 type: Boolean,
47 value: false 65 value: false
48 }, 66 },
49 67
50 /** The value stored in the keyboard's input element. */ 68 /** The value stored in the keyboard's input element. */
51 value: { 69 value: {
52 type: String, 70 type: String,
53 notify: true, 71 notify: true,
54 value: '', 72 value: '',
55 observer: 'onPinValueChange_' 73 observer: 'onPinValueChange_'
74 },
75
76 /**
77 * The intervalID used for the backspace button set/clear interval.
78 * @private
79 */
80 repeatBackspaceIntervalId_: {
81 type: Number,
82 value: 0
83 },
84
85 /**
86 * The timeoutID used for the auto backspace.
87 * @private
88 */
89 backspaceTimeoutId_: {
90 type: Number,
91 value: 0
56 } 92 }
57 }, 93 },
58 94
59 /** 95 /**
60 * Gets the container holding the password field. 96 * Gets the container holding the password field.
61 * @type {!HTMLInputElement} 97 * @type {!HTMLInputElement}
62 */ 98 */
63 get inputElement() { 99 get inputElement() {
64 return this.$$('#pin-input'); 100 return this.$$('#pin-input');
65 }, 101 },
(...skipping 24 matching lines...) Expand all
90 * @param {string} value 126 * @param {string} value
91 * @param {string} previous 127 * @param {string} previous
92 */ 128 */
93 onPinValueChange_: function(value, previous) { 129 onPinValueChange_: function(value, previous) {
94 if (value != previous) 130 if (value != previous)
95 this.fire('pin-change', { pin: value }); 131 this.fire('pin-change', { pin: value });
96 }, 132 },
97 133
98 /** 134 /**
99 * Called when the user wants to erase the last character of the entered 135 * Called when the user wants to erase the last character of the entered
100 * PIN value. 136 * PIN value.
137 * @private
101 */ 138 */
102 onPinClear_: function() { 139 onPinClear_: function() {
103 this.value = this.value.substring(0, this.value.length - 1); 140 this.value = this.value.substring(0, this.value.length - 1);
104 }, 141 },
105 142
143 /**
144 * Called when the user presses or touches the backspace button. Starts a
145 * timer which starts an interval to repeatedly backspace the pin value until
146 * the interval is cleared.
147 * @param {Event} event The event object.
148 * @private
149 */
150 onBackspacePointerDown_: function(event) {
151 this.backspaceTimeoutId_ = setTimeout(function() {
152 this.repeatBackspaceIntervalId_ = setInterval(
153 this.onPinClear_.bind(this), repeatBackspaceIntervalMs);
154 }.bind(this), startAutoBackspaceMs);
155 },
156
157 /**
158 * Helper function which clears the timer / interval ids and resets them.
159 * @private
160 */
161 clearAndReset_: function() {
162 clearInterval(this.repeatBackspaceIntervalId_);
163 this.repeatBackspaceIntervalId_ = 0;
164 clearTimeout(this.backspaceTimeoutId_);
165 this.startAutoBackspaceId_ = 0;
166 },
167
168 /**
169 * Called when the user exits the backspace button. Stops the interval
170 * callback.
171 * @param {Event} event The event object.
172 * @private
173 */
174 onBackspacePointerOut_: function(event) {
175 this.clearAndReset_();
176 },
177
178 /**
179 * Called when the user unpresses or untouches the backspace button. Stops the
180 * interval callback and fires a backspace event if there is no interval
181 * running.
182 * @param {Event} event The event object.
183 * @private
184 */
185 onBackspacePointerUp_: function(event) {
186 // If an interval has started, do not fire event on pointer up.
187 if (!this.repeatBackspaceIntervalId_)
188 this.onPinClear_();
189 this.clearAndReset_();
190 },
191
106 /** Called when a key event is pressed while the input element has focus. */ 192 /** Called when a key event is pressed while the input element has focus. */
107 onInputKeyDown_: function(event) { 193 onInputKeyDown_: function(event) {
108 // Up/down pressed, swallow the event to prevent the input value from 194 // Up/down pressed, swallow the event to prevent the input value from
109 // being incremented or decremented. 195 // being incremented or decremented.
110 if (event.keyCode == 38 || event.keyCode == 40) { 196 if (event.keyCode == 38 || event.keyCode == 40) {
111 event.preventDefault(); 197 event.preventDefault();
112 return; 198 return;
113 } 199 }
114 200
115 // Enter pressed. 201 // Enter pressed.
(...skipping 20 matching lines...) Expand all
136 }, 222 },
137 223
138 /** 224 /**
139 * Called when a key press event is fired while the number button is focused. 225 * Called when a key press event is fired while the number button is focused.
140 * Ideally we would want to pass focus back to the input element, but the we 226 * Ideally we would want to pass focus back to the input element, but the we
141 * cannot or the virtual keyboard will keep poping up. 227 * cannot or the virtual keyboard will keep poping up.
142 * @param {Event} event Keypress Event object. 228 * @param {Event} event Keypress Event object.
143 * @private 229 * @private
144 */ 230 */
145 onKeyPress_: function(event) { 231 onKeyPress_: function(event) {
232 // If the active element is the input element, the input element itself will
233 // handle the keypresses, so we do not handle them here.
234 if (this.shadowRoot.activeElement == this.inputElement)
235 return;
236
146 var code = event.keyCode; 237 var code = event.keyCode;
147 238
148 // Enter pressed. 239 // Enter pressed.
149 if (code == 13) { 240 if (code == 13) {
150 this.firePinSubmitEvent_(); 241 this.firePinSubmitEvent_();
151 event.preventDefault(); 242 event.preventDefault();
152 return; 243 return;
153 } 244 }
154 245
155 this.value += String.fromCharCode(code); 246 this.value += String.fromCharCode(code);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 // possible. Number.isInteger will verify the value is not a NaN and that it 285 // possible. Number.isInteger will verify the value is not a NaN and that it
195 // does not contain decimals. 286 // does not contain decimals.
196 // This heuristic will fail for inputs like '1.0'. 287 // This heuristic will fail for inputs like '1.0'.
197 // 288 //
198 // Since we still support users entering their passwords through the PIN 289 // Since we still support users entering their passwords through the PIN
199 // keyboard, we swap the input box to rtl when we think it is a password 290 // keyboard, we swap the input box to rtl when we think it is a password
200 // (just numbers), if the document direction is rtl. 291 // (just numbers), if the document direction is rtl.
201 return (document.dir == 'rtl') && !Number.isInteger(+password); 292 return (document.dir == 'rtl') && !Number.isInteger(+password);
202 }, 293 },
203 }); 294 });
295 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698