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

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

Issue 2568283003: bluetooth: Add notification system to internals page. (Closed)
Patch Set: Fix snackbar bug with contentfocus/contentblur Created 4 years 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 * 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.
11 var adapterBroker = null; 11 var adapterBroker = null;
12 var devices = null; 12 var devices = null;
13 var sidebarObj = null; 13 var sidebarObj = null;
14 14
15 cr.define('bluetooth_internals', function() { 15 cr.define('bluetooth_internals', function() {
16 /** @const */ var DevicesPage = devices_page.DevicesPage; 16 /** @const */ var DevicesPage = devices_page.DevicesPage;
17 /** @const */ var PageManager = cr.ui.pageManager.PageManager; 17 /** @const */ var PageManager = cr.ui.pageManager.PageManager;
18 /** @const */ var Snackbar = snackbar.Snackbar;
19 /** @const */ var SnackbarType = snackbar.SnackbarType;
18 20
19 /** 21 /**
20 * Observer for page changes. Used to update page title header. 22 * Observer for page changes. Used to update page title header.
21 * @extends {cr.ui.pageManager.PageManager.Observer} 23 * @extends {cr.ui.pageManager.PageManager.Observer}
22 */ 24 */
23 var PageObserver = function() {}; 25 var PageObserver = function() {};
24 26
25 PageObserver.prototype = { 27 PageObserver.prototype = {
26 __proto__: PageManager.Observer.prototype, 28 __proto__: PageManager.Observer.prototype,
27 29
(...skipping 13 matching lines...) Expand all
41 43
42 /** @type {!Map<string, !interfaces.BluetoothDevice.Device.proxyClass>} */ 44 /** @type {!Map<string, !interfaces.BluetoothDevice.Device.proxyClass>} */
43 var deviceAddressToProxy = new Map(); 45 var deviceAddressToProxy = new Map();
44 46
45 /** @type {!device_collection.DeviceCollection} */ 47 /** @type {!device_collection.DeviceCollection} */
46 devices = new device_collection.DeviceCollection([]); 48 devices = new device_collection.DeviceCollection([]);
47 49
48 /** @type {devices_page.DevicesPage} */ 50 /** @type {devices_page.DevicesPage} */
49 var devicesPage = null; 51 var devicesPage = null;
50 52
53 function handleInspect(event) {
54 // TODO(crbug.com/663470): Move connection logic to DeviceDetailsView
55 // when it's added in chrome://bluetooth-internals.
56 var address = event.detail.address;
57 var proxy = deviceAddressToProxy.get(address);
58
59 if (proxy) {
60 // Device is already connected, so disconnect.
61 proxy.disconnect();
62 deviceAddressToProxy.delete(address);
63 devices.updateConnectionStatus(
64 address, device_collection.ConnectionStatus.DISCONNECTED);
65 return;
66 }
67
68 devices.updateConnectionStatus(
69 address, device_collection.ConnectionStatus.CONNECTING);
70
71 adapterBroker.connectToDevice(address).then(function(deviceProxy) {
72 var deviceInfo = devices.getByAddress(address);
73 if (!deviceInfo) {
74 // Device no longer in list, so drop the connection.
75 deviceProxy.disconnect();
76 return;
77 }
78
79 deviceAddressToProxy.set(address, deviceProxy);
80 devices.updateConnectionStatus(
81 address, device_collection.ConnectionStatus.CONNECTED);
82 Snackbar.show(deviceInfo.name_for_display + ': Connected',
83 SnackbarType.SUCCESS);
84
85 // Fetch services asynchronously.
86 return deviceProxy.getServices();
87 }).then(function(response) {
88 if (!response) return;
89
90 var deviceInfo = devices.getByAddress(address);
91 deviceInfo.services = response.services;
92 devices.addOrUpdate(deviceInfo);
93 }).catch(function(error) {
94 // If a connection error occurs while fetching the services, the proxy
95 // reference must be removed.
96 var proxy = deviceAddressToProxy.get(address);
97 if (proxy) {
98 proxy.disconnect();
99 deviceAddressToProxy.delete(address);
100 }
101
102 devices.updateConnectionStatus(
103 address, device_collection.ConnectionStatus.DISCONNECTED);
104
105 var deviceInfo = devices.getByAddress(address);
106 Snackbar.show(deviceInfo.name_for_display + ': ' + error.message,
107 SnackbarType.DANGER, 'Retry', function() { handleInspect(event); });
108 });
109 }
110
51 function setupDeviceSystem(response) { 111 function setupDeviceSystem(response) {
52 // Hook up device collection events. 112 // Hook up device collection events.
53 adapterBroker.addEventListener('deviceadded', function(event) { 113 adapterBroker.addEventListener('deviceadded', function(event) {
54 devices.addOrUpdate(event.detail.deviceInfo); 114 devices.addOrUpdate(event.detail.deviceInfo);
55 }); 115 });
56 adapterBroker.addEventListener('devicechanged', function(event) { 116 adapterBroker.addEventListener('devicechanged', function(event) {
57 devices.addOrUpdate(event.detail.deviceInfo); 117 devices.addOrUpdate(event.detail.deviceInfo);
58 }); 118 });
59 adapterBroker.addEventListener('deviceremoved', function(event) { 119 adapterBroker.addEventListener('deviceremoved', function(event) {
60 devices.remove(event.detail.deviceInfo); 120 devices.remove(event.detail.deviceInfo);
61 }); 121 });
62 122
63 response.devices.forEach(devices.addOrUpdate, devices /* this */); 123 response.devices.forEach(devices.addOrUpdate, devices /* this */);
64 124
65 devicesPage.setDevices(devices); 125 devicesPage.setDevices(devices);
66 devicesPage.pageDiv.addEventListener('inspectpressed', function() { 126 devicesPage.pageDiv.addEventListener('inspectpressed', function(event) {
scheib 2016/12/14 06:06:43 why not just addEventListener('inspectpressed',
mbrunson 2016/12/14 22:44:47 Done.
67 // TODO(crbug.com/663470): Move connection logic to DeviceDetailsView 127 handleInspect(event);
68 // when it's added in chrome://bluetooth-internals.
69 var address = event.detail.address;
70 var proxy = deviceAddressToProxy.get(address);
71
72 if (proxy) {
73 // Device is already connected, so disconnect.
74 proxy.disconnect();
75 deviceAddressToProxy.delete(address);
76 devices.updateConnectionStatus(
77 address, device_collection.ConnectionStatus.DISCONNECTED);
78 return;
79 }
80
81 devices.updateConnectionStatus(
82 address, device_collection.ConnectionStatus.CONNECTING);
83
84 adapterBroker.connectToDevice(address).then(function(deviceProxy) {
85 if (!devices.getByAddress(address)) {
86 // Device no longer in list, so drop the connection.
87 deviceProxy.disconnect();
88 return;
89 }
90
91 deviceAddressToProxy.set(address, deviceProxy);
92 devices.updateConnectionStatus(
93 address, device_collection.ConnectionStatus.CONNECTED);
94
95 // Fetch services asynchronously.
96 return deviceProxy.getServices();
97 }).then(function(response) {
98 if (!response) return;
99
100 var deviceInfo = devices.getByAddress(address);
101 deviceInfo.services = response.services;
102 devices.addOrUpdate(deviceInfo);
103 }).catch(function(error) {
104 devices.updateConnectionStatus(
105 address,
106 device_collection.ConnectionStatus.DISCONNECTED,
107 error);
108 });
109 }); 128 });
110 } 129 }
111 130
112 function setupPages() { 131 function setupPages() {
113 sidebarObj = new window.sidebar.Sidebar($('sidebar')); 132 sidebarObj = new window.sidebar.Sidebar($('sidebar'));
114 $('menu-btn').addEventListener('click', function() { sidebarObj.open(); }); 133 $('menu-btn').addEventListener('click', function() { sidebarObj.open(); });
115 PageManager.addObserver(sidebarObj); 134 PageManager.addObserver(sidebarObj);
116 PageManager.addObserver(new PageObserver()); 135 PageManager.addObserver(new PageObserver());
117 136
118 devicesPage = new DevicesPage(); 137 devicesPage = new DevicesPage();
(...skipping 14 matching lines...) Expand all
133 152
134 function initializeViews() { 153 function initializeViews() {
135 setupPages(); 154 setupPages();
136 155
137 adapter_broker.getAdapterBroker() 156 adapter_broker.getAdapterBroker()
138 .then(function(broker) { adapterBroker = broker; }) 157 .then(function(broker) { adapterBroker = broker; })
139 .then(function() { return adapterBroker.getInfo(); }) 158 .then(function() { return adapterBroker.getInfo(); })
140 .then(function(response) { console.log('adapter', response.info); }) 159 .then(function(response) { console.log('adapter', response.info); })
141 .then(function() { return adapterBroker.getDevices(); }) 160 .then(function() { return adapterBroker.getDevices(); })
142 .then(setupDeviceSystem) 161 .then(setupDeviceSystem)
143 .catch(function(error) { console.error(error); }); 162 .catch(function(error) {
163 Snackbar.show(error.message, SnackbarType.DANGER);
164 console.error(error);
165 });
144 } 166 }
145 167
146 return { 168 return {
147 initializeViews: initializeViews 169 initializeViews: initializeViews
148 }; 170 };
149 }); 171 });
150 172
151 document.addEventListener( 173 document.addEventListener(
152 'DOMContentLoaded', bluetooth_internals.initializeViews); 174 'DOMContentLoaded', bluetooth_internals.initializeViews);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698