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

Side by Side Diff: chrome/browser/resources/bluetooth_internals/device_details_page.js

Issue 2617923002: bluetooth: Add service list to DeviceDetailsPage in internals page. (Closed)
Patch Set: Add semicolon, inline serviceViewObj Created 3 years, 11 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 * Javascript for DeviceDetailsPage which displays all of the details of a 6 * Javascript for DeviceDetailsPage which displays all of the details of a
7 * device. The page is generated and managed dynamically in bluetooth_internals. 7 * device. The page is generated and managed dynamically in bluetooth_internals.
8 * served from chrome://bluetooth-internals/. 8 * served from chrome://bluetooth-internals/.
9 */ 9 */
10 10
11 cr.define('device_details_page', function() { 11 cr.define('device_details_page', function() {
12 /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
12 /** @const */ var Page = cr.ui.pageManager.Page; 13 /** @const */ var Page = cr.ui.pageManager.Page;
13 /** @const */ var Snackbar = snackbar.Snackbar; 14 /** @const */ var Snackbar = snackbar.Snackbar;
14 /** @const */ var SnackbarType = snackbar.SnackbarType; 15 /** @const */ var SnackbarType = snackbar.SnackbarType;
15 16
16 /** 17 /**
17 * Property names that will be displayed in the ObjectFieldSet which contains 18 * Property names that will be displayed in the ObjectFieldSet which contains
18 * the DeviceInfo object. 19 * the DeviceInfo object.
19 */ 20 */
20 var PROPERTY_NAMES = { 21 var PROPERTY_NAMES = {
21 name: 'Name', 22 name: 'Name',
(...skipping 13 matching lines...) Expand all
35 * @param {string} id 36 * @param {string} id
36 * @param {!interfaces.BluetoothDevice.DeviceInfo} deviceInfo 37 * @param {!interfaces.BluetoothDevice.DeviceInfo} deviceInfo
37 * @extends {cr.ui.pageManager.Page} 38 * @extends {cr.ui.pageManager.Page}
38 */ 39 */
39 function DeviceDetailsPage(id, deviceInfo) { 40 function DeviceDetailsPage(id, deviceInfo) {
40 Page.call(this, id, deviceInfo.name_for_display, id); 41 Page.call(this, id, deviceInfo.name_for_display, id);
41 42
42 /** @type {interfaces.BluetoothDevice.DeviceInfo} */ 43 /** @type {interfaces.BluetoothDevice.DeviceInfo} */
43 this.deviceInfo = deviceInfo; 44 this.deviceInfo = deviceInfo;
44 45
45 /** @type {interfaces.BluetoothDevice.Device.ptrClass} */ 46 /** @type {?interfaces.BluetoothDevice.Device.ptrClass} */
46 this.devicePtr = null; 47 this.devicePtr = null;
47 48
48 /** @type {!object_fieldset.ObjectFieldSet} */ 49 /** @type {!object_fieldset.ObjectFieldSet} */
49 this.deviceFieldSet = new object_fieldset.ObjectFieldSet(); 50 this.deviceFieldSet = new object_fieldset.ObjectFieldSet();
50 this.deviceFieldSet.setPropertyDisplayNames(PROPERTY_NAMES); 51 this.deviceFieldSet.setPropertyDisplayNames(PROPERTY_NAMES);
51 52
53 /** @type {!service_list.ServiceList} */
54 this.serviceList = new service_list.ServiceList();
55 this.serviceList.setLoading(true);
56
52 /** @private {!device_collection.ConnectionStatus} */ 57 /** @private {!device_collection.ConnectionStatus} */
53 this.status_ = device_collection.ConnectionStatus.DISCONNECTED; 58 this.status_ = device_collection.ConnectionStatus.DISCONNECTED;
54 59
55 /** @private {?HTMLElement} */ 60 /** @private {?HTMLElement} */
56 this.connectBtn_ = null; 61 this.connectBtn_ = null;
57 62
58 this.pageDiv.appendChild( 63 this.pageDiv.appendChild(
59 document.importNode($('device-details-template').content, 64 document.importNode($('device-details-template').content,
60 true /* deep */)); 65 true /* deep */));
61 66
62 this.pageDiv.querySelector('.device-details').appendChild( 67 this.pageDiv.querySelector('.device-details').appendChild(
63 this.deviceFieldSet); 68 this.deviceFieldSet);
69 this.pageDiv.querySelector('.services').appendChild(this.serviceList);
64 70
65 this.pageDiv.querySelector('.forget').addEventListener( 71 this.pageDiv.querySelector('.forget').addEventListener(
66 'click', function() { 72 'click', function() {
67 this.disconnect(); 73 this.disconnect();
68 this.pageDiv.dispatchEvent(new CustomEvent('forgetpressed', { 74 this.pageDiv.dispatchEvent(new CustomEvent('forgetpressed', {
69 detail: { 75 detail: {
70 address: this.deviceInfo.address, 76 address: this.deviceInfo.address,
71 }, 77 },
72 })); 78 }));
73 }.bind(this)); 79 }.bind(this));
(...skipping 21 matching lines...) Expand all
95 return adapterBroker.connectToDevice(this.deviceInfo.address); 101 return adapterBroker.connectToDevice(this.deviceInfo.address);
96 }.bind(this)).then(function(devicePtr) { 102 }.bind(this)).then(function(devicePtr) {
97 this.devicePtr = devicePtr; 103 this.devicePtr = devicePtr;
98 104
99 this.updateConnectionStatus_( 105 this.updateConnectionStatus_(
100 device_collection.ConnectionStatus.CONNECTED); 106 device_collection.ConnectionStatus.CONNECTED);
101 107
102 // Fetch services asynchronously. 108 // Fetch services asynchronously.
103 return this.devicePtr.getServices(); 109 return this.devicePtr.getServices();
104 }.bind(this)).then(function(response) { 110 }.bind(this)).then(function(response) {
105 this.deviceInfo.services = response.services; 111 this.serviceList.setData(new ArrayDataModel(response.services));
112 this.deviceInfo.services = this.serviceList.dataModel;
113 this.serviceList.setLoading(false);
114
106 this.redraw(); 115 this.redraw();
107 this.fireDeviceInfoChanged_(); 116 this.fireDeviceInfoChanged_();
108 }.bind(this)).catch(function(error) { 117 }.bind(this)).catch(function(error) {
109 // If a connection error occurs while fetching the services, the 118 // If a connection error occurs while fetching the services, the
110 // devicePtr reference must be removed. 119 // devicePtr reference must be removed.
111 if (this.devicePtr) { 120 if (this.devicePtr) {
112 this.devicePtr.disconnect(); 121 this.devicePtr.disconnect();
113 this.devicePtr = null; 122 this.devicePtr = null;
114 } 123 }
115 124
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 162
154 var deviceViewObj = { 163 var deviceViewObj = {
155 name: this.deviceInfo.name_for_display, 164 name: this.deviceInfo.name_for_display,
156 address: this.deviceInfo.address, 165 address: this.deviceInfo.address,
157 is_gatt_connected: connectedText, 166 is_gatt_connected: connectedText,
158 'rssi.value': rssiValue, 167 'rssi.value': rssiValue,
159 'services.length': serviceCount, 168 'services.length': serviceCount,
160 }; 169 };
161 170
162 this.deviceFieldSet.setObject(deviceViewObj); 171 this.deviceFieldSet.setObject(deviceViewObj);
172 this.serviceList.redraw();
163 }, 173 },
164 174
165 /** 175 /**
166 * Sets the page's device info and forces a redraw. 176 * Sets the page's device info and forces a redraw.
167 * @param {!interfaces.BluetoothDevice.DeviceInfo} 177 * @param {!interfaces.BluetoothDevice.DeviceInfo}
168 */ 178 */
169 setDeviceInfo: function(info) { 179 setDeviceInfo: function(info) {
170 this.deviceInfo = info; 180 this.deviceInfo = info;
171 this.redraw(); 181 this.redraw();
172 }, 182 },
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 status: status, 224 status: status,
215 } 225 }
216 })); 226 }));
217 }, 227 },
218 }; 228 };
219 229
220 return { 230 return {
221 DeviceDetailsPage: DeviceDetailsPage, 231 DeviceDetailsPage: DeviceDetailsPage,
222 }; 232 };
223 }); 233 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698