OLD | NEW |
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 * Javascript for bluetooth_internals.html, served from | 6 * Javascript for bluetooth_internals.html, served from |
7 * chrome://bluetooth-internals/. | 7 * chrome://bluetooth-internals/. |
8 */ | 8 */ |
9 | 9 |
10 // Expose for testing. | 10 // Expose for testing. |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 * Creates a DeviceDetailsPage with the given |deviceInfo|, appends it to | 86 * Creates a DeviceDetailsPage with the given |deviceInfo|, appends it to |
87 * '#page-container', and adds a sidebar item to show the new page. If a | 87 * '#page-container', and adds a sidebar item to show the new page. If a |
88 * page exists that matches |deviceInfo.address|, nothing is created and the | 88 * page exists that matches |deviceInfo.address|, nothing is created and the |
89 * existing page is returned. | 89 * existing page is returned. |
90 * @param {!interfaces.BluetoothDevice.Device} deviceInfo | 90 * @param {!interfaces.BluetoothDevice.Device} deviceInfo |
91 * @return {!device_details_page.DeviceDetailsPage} | 91 * @return {!device_details_page.DeviceDetailsPage} |
92 */ | 92 */ |
93 function makeDeviceDetailsPage(deviceInfo) { | 93 function makeDeviceDetailsPage(deviceInfo) { |
94 var deviceDetailsPageId = 'devices/' + deviceInfo.address.toLowerCase(); | 94 var deviceDetailsPageId = 'devices/' + deviceInfo.address.toLowerCase(); |
95 var deviceDetailsPage = PageManager.registeredPages[deviceDetailsPageId]; | 95 var deviceDetailsPage = PageManager.registeredPages[deviceDetailsPageId]; |
96 if (deviceDetailsPage) return deviceDetailsPage; | 96 if (deviceDetailsPage) |
| 97 return deviceDetailsPage; |
97 | 98 |
98 var pageSection = document.createElement('section'); | 99 var pageSection = document.createElement('section'); |
99 pageSection.hidden = true; | 100 pageSection.hidden = true; |
100 pageSection.id = deviceDetailsPageId; | 101 pageSection.id = deviceDetailsPageId; |
101 $('page-container').appendChild(pageSection); | 102 $('page-container').appendChild(pageSection); |
102 | 103 |
103 deviceDetailsPage = new DeviceDetailsPage(deviceDetailsPageId, deviceInfo); | 104 deviceDetailsPage = new DeviceDetailsPage(deviceDetailsPageId, deviceInfo); |
104 deviceDetailsPage.pageDiv.addEventListener('connectionchanged', | 105 deviceDetailsPage.pageDiv.addEventListener( |
105 function(event) { | 106 'connectionchanged', function(event) { |
106 devices.updateConnectionStatus( | 107 devices.updateConnectionStatus( |
107 event.detail.address, event.detail.status); | 108 event.detail.address, event.detail.status); |
108 }); | 109 }); |
109 | 110 |
110 deviceDetailsPage.pageDiv.addEventListener('infochanged', function(event) { | 111 deviceDetailsPage.pageDiv.addEventListener('infochanged', function(event) { |
111 devices.addOrUpdate(event.detail.info); | 112 devices.addOrUpdate(event.detail.info); |
112 }); | 113 }); |
113 | 114 |
114 deviceDetailsPage.pageDiv.addEventListener('forgetpressed', | 115 deviceDetailsPage.pageDiv.addEventListener( |
115 function(event) { | 116 'forgetpressed', function(event) { |
116 PageManager.showPageByName(devicesPage.name); | 117 PageManager.showPageByName(devicesPage.name); |
117 removeDeviceDetailsPage(event.detail.address); | 118 removeDeviceDetailsPage(event.detail.address); |
118 }); | 119 }); |
119 | 120 |
120 // Inform the devices page that the user is inspecting this device. | 121 // Inform the devices page that the user is inspecting this device. |
121 // This will update the links in the device table. | 122 // This will update the links in the device table. |
122 devicesPage.setInspecting(deviceInfo, true /* isInspecting */); | 123 devicesPage.setInspecting(deviceInfo, true /* isInspecting */); |
123 PageManager.register(deviceDetailsPage); | 124 PageManager.register(deviceDetailsPage); |
124 | 125 |
125 sidebarObj.addItem({ | 126 sidebarObj.addItem({ |
126 pageName: deviceDetailsPageId, | 127 pageName: deviceDetailsPageId, |
127 text: deviceInfo.name_for_display, | 128 text: deviceInfo.name_for_display, |
128 }); | 129 }); |
129 | 130 |
130 deviceDetailsPage.connect(); | 131 deviceDetailsPage.connect(); |
131 return deviceDetailsPage; | 132 return deviceDetailsPage; |
132 } | 133 } |
133 | 134 |
134 /** | 135 /** |
135 * Updates the DeviceDetailsPage with the matching device |address| and | 136 * Updates the DeviceDetailsPage with the matching device |address| and |
136 * redraws it. | 137 * redraws it. |
137 * @param {string} address | 138 * @param {string} address |
138 */ | 139 */ |
139 function updateDeviceDetailsPage(address) { | 140 function updateDeviceDetailsPage(address) { |
140 var detailPageId = 'devices/' + address.toLowerCase(); | 141 var detailPageId = 'devices/' + address.toLowerCase(); |
141 var page = PageManager.registeredPages[detailPageId]; | 142 var page = PageManager.registeredPages[detailPageId]; |
142 if (page) page.redraw(); | 143 if (page) |
| 144 page.redraw(); |
143 } | 145 } |
144 | 146 |
145 function updateStoppedDiscoverySession() { | 147 function updateStoppedDiscoverySession() { |
146 devicesPage.setScanStatus(devices_page.ScanStatus.OFF); | 148 devicesPage.setScanStatus(devices_page.ScanStatus.OFF); |
147 discoverySession.ptr.reset(); | 149 discoverySession.ptr.reset(); |
148 discoverySession = null; | 150 discoverySession = null; |
149 } | 151 } |
150 | 152 |
151 function setupAdapterSystem(response) { | 153 function setupAdapterSystem(response) { |
152 adapterBroker.addEventListener('adapterchanged', function(event) { | 154 adapterBroker.addEventListener('adapterchanged', function(event) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 adapterBroker.addEventListener('deviceremoved', function(event) { | 186 adapterBroker.addEventListener('deviceremoved', function(event) { |
185 devices.remove(event.detail.deviceInfo); | 187 devices.remove(event.detail.deviceInfo); |
186 updateDeviceDetailsPage(event.detail.deviceInfo.address); | 188 updateDeviceDetailsPage(event.detail.deviceInfo.address); |
187 }); | 189 }); |
188 | 190 |
189 response.devices.forEach(devices.addOrUpdate, devices /* this */); | 191 response.devices.forEach(devices.addOrUpdate, devices /* this */); |
190 | 192 |
191 devicesPage.setDevices(devices); | 193 devicesPage.setDevices(devices); |
192 | 194 |
193 devicesPage.pageDiv.addEventListener('inspectpressed', function(event) { | 195 devicesPage.pageDiv.addEventListener('inspectpressed', function(event) { |
194 var detailsPage = makeDeviceDetailsPage( | 196 var detailsPage = |
195 devices.getByAddress(event.detail.address)); | 197 makeDeviceDetailsPage(devices.getByAddress(event.detail.address)); |
196 PageManager.showPageByName(detailsPage.name); | 198 PageManager.showPageByName(detailsPage.name); |
197 }); | 199 }); |
198 | 200 |
199 devicesPage.pageDiv.addEventListener('forgetpressed', function(event) { | 201 devicesPage.pageDiv.addEventListener('forgetpressed', function(event) { |
200 PageManager.showPageByName(devicesPage.name); | 202 PageManager.showPageByName(devicesPage.name); |
201 removeDeviceDetailsPage(event.detail.address); | 203 removeDeviceDetailsPage(event.detail.address); |
202 }); | 204 }); |
203 | 205 |
204 devicesPage.pageDiv.addEventListener('scanpressed', function(event) { | 206 devicesPage.pageDiv.addEventListener('scanpressed', function(event) { |
205 if (discoverySession && discoverySession.ptr.isBound()) { | 207 if (discoverySession && discoverySession.ptr.isBound()) { |
206 userRequestedScanStop = true; | 208 userRequestedScanStop = true; |
207 devicesPage.setScanStatus(devices_page.ScanStatus.STOPPING); | 209 devicesPage.setScanStatus(devices_page.ScanStatus.STOPPING); |
208 | 210 |
209 discoverySession.stop().then(function(response) { | 211 discoverySession.stop().then(function(response) { |
210 if (response.success) { | 212 if (response.success) { |
211 updateStoppedDiscoverySession(); | 213 updateStoppedDiscoverySession(); |
212 userRequestedScanStop = false; | 214 userRequestedScanStop = false; |
213 return; | 215 return; |
214 } | 216 } |
215 | 217 |
216 devicesPage.setScanStatus(devices_page.ScanStatus.ON); | 218 devicesPage.setScanStatus(devices_page.ScanStatus.ON); |
217 Snackbar.show( | 219 Snackbar.show('Failed to stop discovery session', SnackbarType.ERROR); |
218 'Failed to stop discovery session', SnackbarType.ERROR); | |
219 userRequestedScanStop = false; | 220 userRequestedScanStop = false; |
220 }); | 221 }); |
221 | 222 |
222 return; | 223 return; |
223 } | 224 } |
224 | 225 |
225 devicesPage.setScanStatus(devices_page.ScanStatus.STARTING); | 226 devicesPage.setScanStatus(devices_page.ScanStatus.STARTING); |
226 adapterBroker.startDiscoverySession().then(function(session) { | 227 adapterBroker.startDiscoverySession() |
227 discoverySession = session; | 228 .then(function(session) { |
| 229 discoverySession = session; |
228 | 230 |
229 discoverySession.ptr.setConnectionErrorHandler(function() { | 231 discoverySession.ptr.setConnectionErrorHandler(function() { |
230 updateStoppedDiscoverySession(); | 232 updateStoppedDiscoverySession(); |
231 Snackbar.show('Discovery session ended', SnackbarType.WARNING); | 233 Snackbar.show('Discovery session ended', SnackbarType.WARNING); |
232 }); | 234 }); |
233 | 235 |
234 devicesPage.setScanStatus(devices_page.ScanStatus.ON); | 236 devicesPage.setScanStatus(devices_page.ScanStatus.ON); |
235 }).catch(function(error) { | 237 }) |
236 devicesPage.setScanStatus(devices_page.ScanStatus.OFF); | 238 .catch(function(error) { |
237 Snackbar.show('Failed to start discovery session', SnackbarType.ERROR); | 239 devicesPage.setScanStatus(devices_page.ScanStatus.OFF); |
238 console.error(error); | 240 Snackbar.show( |
239 }); | 241 'Failed to start discovery session', SnackbarType.ERROR); |
| 242 console.error(error); |
| 243 }); |
240 }); | 244 }); |
241 } | 245 } |
242 | 246 |
243 function setupPages() { | 247 function setupPages() { |
244 sidebarObj = new window.sidebar.Sidebar($('sidebar')); | 248 sidebarObj = new window.sidebar.Sidebar($('sidebar')); |
245 $('menu-btn').addEventListener('click', function() { sidebarObj.open(); }); | 249 $('menu-btn').addEventListener('click', function() { |
| 250 sidebarObj.open(); |
| 251 }); |
246 PageManager.addObserver(sidebarObj); | 252 PageManager.addObserver(sidebarObj); |
247 PageManager.addObserver(new PageObserver()); | 253 PageManager.addObserver(new PageObserver()); |
248 | 254 |
249 devicesPage = new DevicesPage(); | 255 devicesPage = new DevicesPage(); |
250 PageManager.register(devicesPage); | 256 PageManager.register(devicesPage); |
251 adapterPage = new AdapterPage(); | 257 adapterPage = new AdapterPage(); |
252 PageManager.register(adapterPage); | 258 PageManager.register(adapterPage); |
253 | 259 |
254 // Set up hash-based navigation. | 260 // Set up hash-based navigation. |
255 window.addEventListener('hashchange', function() { | 261 window.addEventListener('hashchange', function() { |
256 // If a user navigates and the page doesn't exist, do nothing. | 262 // If a user navigates and the page doesn't exist, do nothing. |
257 var pageName = window.location.hash.substr(1); | 263 var pageName = window.location.hash.substr(1); |
258 if ($(pageName)) | 264 if ($(pageName)) |
259 PageManager.showPageByName(pageName); | 265 PageManager.showPageByName(pageName); |
260 }); | 266 }); |
261 | 267 |
262 if (!window.location.hash) { | 268 if (!window.location.hash) { |
263 PageManager.showPageByName(adapterPage.name); | 269 PageManager.showPageByName(adapterPage.name); |
264 return; | 270 return; |
265 } | 271 } |
266 | 272 |
267 // Only the root pages are available on page load. | 273 // Only the root pages are available on page load. |
268 PageManager.showPageByName(window.location.hash.split('/')[0].substr(1)); | 274 PageManager.showPageByName(window.location.hash.split('/')[0].substr(1)); |
269 } | 275 } |
270 | 276 |
271 function initializeViews() { | 277 function initializeViews() { |
272 setupPages(); | 278 setupPages(); |
273 | 279 |
274 adapter_broker.getAdapterBroker() | 280 adapter_broker.getAdapterBroker() |
275 .then(function(broker) { adapterBroker = broker; }) | 281 .then(function(broker) { |
276 .then(function() { return adapterBroker.getInfo(); }) | 282 adapterBroker = broker; |
277 .then(setupAdapterSystem) | 283 }) |
278 .then(function() { return adapterBroker.getDevices(); }) | 284 .then(function() { |
279 .then(setupDeviceSystem) | 285 return adapterBroker.getInfo(); |
280 .catch(function(error) { | 286 }) |
281 Snackbar.show(error.message, SnackbarType.ERROR); | 287 .then(setupAdapterSystem) |
282 console.error(error); | 288 .then(function() { |
283 }); | 289 return adapterBroker.getDevices(); |
| 290 }) |
| 291 .then(setupDeviceSystem) |
| 292 .catch(function(error) { |
| 293 Snackbar.show(error.message, SnackbarType.ERROR); |
| 294 console.error(error); |
| 295 }); |
284 } | 296 } |
285 | 297 |
286 return { | 298 return { |
287 initializeViews: initializeViews, | 299 initializeViews: initializeViews, |
288 }; | 300 }; |
289 }); | 301 }); |
290 | 302 |
291 document.addEventListener( | 303 document.addEventListener( |
292 'DOMContentLoaded', bluetooth_internals.initializeViews); | 304 'DOMContentLoaded', bluetooth_internals.initializeViews); |
OLD | NEW |