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

Unified Diff: chrome/browser/resources/bluetooth_internals/device_collection.js

Issue 2448713002: bluetooth: Add Device connection logic and accompanying user interface. (Closed)
Patch Set: Remove binding variable in Device.Create Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/bluetooth_internals/device_collection.js
diff --git a/chrome/browser/resources/bluetooth_internals/device_collection.js b/chrome/browser/resources/bluetooth_internals/device_collection.js
index 4d86d99c79d47e972aa809d210f54b8a59528384..e7e6ae3c4254447ca74ad9224b40e06cd78f00ee 100644
--- a/chrome/browser/resources/bluetooth_internals/device_collection.js
+++ b/chrome/browser/resources/bluetooth_internals/device_collection.js
@@ -8,12 +8,25 @@
*/
cr.define('device_collection', function() {
+ /**
+ * Enum of connection status for a device. Used for
+ * DeviceCollection.updateConnectionStatus which sets the connectionStatus
+ * on the DeviceInfo object. New DeviceInfo objects have a DISCONNECTED status
+ * by default.
+ * @enum {number}
+ */
+ var ConnectionStatus = {
+ DISCONNECTED: 0,
+ CONNECTING: 1,
+ CONNECTED: 2,
+ };
+
/*
* Collection of devices. Extends ArrayDataModel which provides a set of
* functions and events that notifies observers when the collection changes.
* @constructor
- * @param {!Array<device_collection.Device>} array The starting collection of
- * devices.
+ * @param {!Array<!device_collection.DeviceInfo>} array The starting
+ * collection of devices.
* @extends {cr.ui.ArrayDataModel}
*/
var DeviceCollection = function(array) {
@@ -29,7 +42,7 @@ cr.define('device_collection', function() {
getByAddress: function(address) {
for (var i = 0; i < this.length; i++) {
var device = this.item(i);
- if (address == device.info.address)
+ if (address == device.address)
return device;
}
return null;
@@ -40,19 +53,23 @@ cr.define('device_collection', function() {
* @param {!interfaces.BluetoothDevice.DeviceInfo} deviceInfo
*/
addOrUpdate: function(deviceInfo) {
- var oldDevice = this.getByAddress(deviceInfo.address);
- if (oldDevice) {
+ deviceInfo.removed = false;
+ var oldDeviceInfo = this.getByAddress(deviceInfo.address);
+
+ if (oldDeviceInfo) {
// Update rssi if it's valid
var rssi = (deviceInfo.rssi && deviceInfo.rssi.value) ||
- (oldDevice.info.rssi && oldDevice.info.rssi.value);
+ (oldDeviceInfo.rssi && oldDeviceInfo.rssi.value);
- oldDevice.info = deviceInfo;
- oldDevice.info.rssi = { value: rssi };
- oldDevice.removed = false;
-
- this.updateIndex(this.indexOf(oldDevice));
+ // The connectionStatus and connectionMessage properties may not exist
+ // on |deviceInfo|. The rssi property may be null, so it must be
+ // re-assigned.
+ Object.assign(oldDeviceInfo, deviceInfo);
+ oldDeviceInfo.rssi = { value: rssi };
+ this.updateIndex(this.indexOf(oldDeviceInfo));
} else {
- this.push(new Device(deviceInfo));
+ deviceInfo.connectionStatus = ConnectionStatus.DISCONNECTED;
+ this.push(deviceInfo);
}
},
@@ -65,21 +82,29 @@ cr.define('device_collection', function() {
assert(device, 'Device does not exist.');
device.removed = true;
this.updateIndex(this.indexOf(device));
- }
- };
+ },
- /*
- * Data model for a cached device.
- * @constructor
- * @param {!interfaces.BluetoothDevice.DeviceInfo} info
- */
- var Device = function(info) {
- this.info = info;
- this.removed = false;
+ /**
+ * Updates the device connection status.
+ * @param {string} address The address of the device.
+ * @param {number} status .
+ * @param {?Error} opt_error Optional Error from connection.
+ */
+ updateConnectionStatus: function(address, status, opt_error) {
+ var message = (opt_error && opt_error.message) || '';
+
+ var device = assert(this.getByAddress(address), 'Device does not exist');
+ device.connectionStatus = status;
+
+ // TODO(crbug.com/663830): Replace connection error column with better
+ // notification system.
+ device.connectionMessage = message;
+ this.updateIndex(this.indexOf(device));
+ },
};
return {
- Device: Device,
+ ConnectionStatus: ConnectionStatus,
DeviceCollection: DeviceCollection,
};
});

Powered by Google App Engine
This is Rietveld 408576698