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

Side by Side Diff: chrome/browser/resources/settings/bluetooth_page/bluetooth_device_dialog.js

Issue 2256773005: MD Settings: Bluetooth: Use CrScrollableBehavior (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue_638377_scrollable_behavior
Patch Set: . Created 4 years, 4 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 cr.exportPath('settings'); 5 cr.exportPath('settings');
6 6
7 (function() { 7 (function() {
8 8
9 var PairingEventType = chrome.bluetoothPrivate.PairingEventType; 9 var PairingEventType = chrome.bluetoothPrivate.PairingEventType;
10 10
(...skipping 14 matching lines...) Expand all
25 25
26 /** 26 /**
27 * The ordered list of bluetooth devices. 27 * The ordered list of bluetooth devices.
28 * @type {!Array<!chrome.bluetooth.Device>} 28 * @type {!Array<!chrome.bluetooth.Device>}
29 */ 29 */
30 deviceList: { 30 deviceList: {
31 type: Array, 31 type: Array,
32 value: /** @return {Array} */ function() { 32 value: /** @return {Array} */ function() {
33 return []; 33 return [];
34 }, 34 },
35 observer: 'deviceListChanged_',
36 },
37
38 /**
39 * Reflects the iron-list selecteditem property.
40 * @type {!chrome.bluetooth.Device}
41 */
42 selectedItem: {
43 type: Object,
44 observer: 'selectedItemChanged_',
35 }, 45 },
36 }, 46 },
37 47
38 /** @private */ 48 /** @private */
39 adapterStateChanged_: function() { 49 adapterStateChanged_: function() {
40 if (!this.adapterState.powered) 50 if (!this.adapterState.powered)
41 this.close(); 51 this.close();
42 }, 52 },
43 53
54 /** @private */
55 deviceListChanged_: function() {
56 this.updateScrollableContents();
57 },
58
59 /** @private */
60 selectedItemChanged_: function() {
61 if (this.selectedItem)
62 this.fire('device-event', {action: 'connect', device: this.selectedItem});
63 },
64
44 /** 65 /**
45 * @param {!chrome.bluetooth.Device} device 66 * @return {!Array<!chrome.bluetooth.Device>}
46 * @return {boolean}
47 * @private 67 * @private
48 */ 68 */
49 deviceNotPaired_: function(device) { 69 getUnpaired_: function() {
50 return !device.paired; 70 return this.deviceList.filter(function(device) {
71 return !device.paired;
72 });
51 }, 73 },
52 74
53 /** 75 /**
54 * @return {boolean} True if deviceList contains any unpaired devices. 76 * @return {boolean} True if deviceList contains any unpaired devices.
55 * @private 77 * @private
56 */ 78 */
57 haveDevices_: function(deviceList) { 79 haveUnpaired_: function(deviceList) {
58 return this.deviceList.findIndex(function(d) { 80 return this.getUnpaired_().length > 0;
59 return !d.paired;
60 }) != -1;
61 },
62
63 /**
64 * @param {!{detail: {action: string, device: !chrome.bluetooth.Device}}} e
65 * @private
66 */
67 onDeviceEvent_: function(e) {
68 this.fire('device-event', e.detail);
69 /** @type {Event} */ (e).stopPropagation();
70 }, 81 },
71 }; 82 };
72 83
73 /** @polymerBehavior */ 84 /** @polymerBehavior */
74 settings.BluetoothPairDeviceBehavior = { 85 settings.BluetoothPairDeviceBehavior = {
75 properties: { 86 properties: {
76 /** 87 /**
77 * Current Pairing device. 88 * Current Pairing device.
78 * @type {?chrome.bluetooth.Device|undefined} 89 * @type {?chrome.bluetooth.Device|undefined}
79 */ 90 */
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 } 325 }
315 return cssClass; 326 return cssClass;
316 }, 327 },
317 }; 328 };
318 329
319 Polymer({ 330 Polymer({
320 is: 'bluetooth-device-dialog', 331 is: 'bluetooth-device-dialog',
321 332
322 behaviors: [ 333 behaviors: [
323 I18nBehavior, 334 I18nBehavior,
335 CrScrollableBehavior,
324 settings.BluetoothAddDeviceBehavior, 336 settings.BluetoothAddDeviceBehavior,
325 settings.BluetoothPairDeviceBehavior, 337 settings.BluetoothPairDeviceBehavior,
326 ], 338 ],
327 339
328 properties: { 340 properties: {
329 /** Which version of this dialog to show (adding or pairing). */ 341 /**
342 * The version of this dialog to show: 'addDevice', 'pairDevice', or
343 * 'connectError'. Must be set before the dialog is opened.
344 */
330 dialogId: String, 345 dialogId: String,
331 }, 346 },
332 347
333 observers: [ 348 observers: [
334 'dialogUpdated_(dialogId, pairingEvent)', 349 'dialogUpdated_(dialogId, pairingEvent)',
335 ], 350 ],
336 351
337 open: function() { 352 open: function() {
338 this.pinOrPass = ''; 353 this.pinOrPass = '';
339 this.getDialog_().showModal(); 354 this.getDialog_().showModal();
355
356 assert(!!this.dialogId);
357 if (this.dialogId != 'addDevice')
358 return;
359
360 // Wait until the iron-list is populated with at least one visible item
361 // then focus it.
362 var intervalId = setInterval(function() {
363 let item = this.$$('iron-list bluetooth-device-list-item');
364 if (item && item.offsetParent != null) {
365 clearInterval(intervalId);
366 item.focus();
367 }
368 }.bind(this), 100);
dschuyler 2016/08/23 02:33:11 nit: since this an interval instead of a timeout,
stevenjb 2016/08/23 15:31:43 Actually, a small delay could have a noticible per
dschuyler 2016/08/23 22:16:28 I think this is another, "agree to disagree". This
340 }, 369 },
341 370
342 close: function() { 371 close: function() {
343 var dialog = this.getDialog_(); 372 var dialog = this.getDialog_();
344 if (dialog.open) 373 if (dialog.open)
345 dialog.close(); 374 dialog.close();
346 }, 375 },
347 376
348 /** @private */ 377 /** @private */
349 dialogUpdated_: function() { 378 dialogUpdated_: function() {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 }, 416 },
388 417
389 /** @private */ 418 /** @private */
390 onDialogCanceled_: function() { 419 onDialogCanceled_: function() {
391 if (this.dialogId == 'pairDevice') 420 if (this.dialogId == 'pairDevice')
392 this.sendResponse_(chrome.bluetoothPrivate.PairingResponse.CANCEL); 421 this.sendResponse_(chrome.bluetoothPrivate.PairingResponse.CANCEL);
393 }, 422 },
394 }); 423 });
395 424
396 })(); 425 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698