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

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

Issue 2640073004: bluetooth: Add descriptor list to DeviceDetailsPage on internals page. (Closed)
Patch Set: Fix merge issue of bluetooth_internals.css 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/bluetooth_internals/descriptor_list.js
diff --git a/chrome/browser/resources/bluetooth_internals/descriptor_list.js b/chrome/browser/resources/bluetooth_internals/descriptor_list.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b026c30af0915d383741bf0162ea2b99f272d10
--- /dev/null
+++ b/chrome/browser/resources/bluetooth_internals/descriptor_list.js
@@ -0,0 +1,153 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * Javascript for DescriptorList and DescriptorListItem, served from
+ * chrome://bluetooth-internals/.
+ */
+
+cr.define('descriptor_list', function() {
+ /** @const */ var ArrayDataModel = cr.ui.ArrayDataModel;
+ /** @const */ var ExpandableList = expandable_list.ExpandableList;
+ /** @const */ var ExpandableListItem = expandable_list.ExpandableListItem;
+ /** @const */ var Snackbar = snackbar.Snackbar;
+ /** @const */ var SnackbarType = snackbar.SnackbarType;
+
+ /** Property names for the DescriptorInfo fieldset */
+ var INFO_PROPERTY_NAMES = {
+ id: 'ID',
+ 'uuid.uuid': 'UUID',
+ };
+
+ /**
+ * A list item that displays the properties of a DescriptorInfo object.
+ * A fieldset is created within the element for the primitive
+ * properties, 'id' and 'uuid' within the DescriptorInfo object.
+ * @constructor
+ * @param {!interfaces.BluetoothDevice.DescriptorInfo} descriptorInfo
+ */
+ function DescriptorListItem(descriptorInfo) {
+ var listItem = new ExpandableListItem();
+ listItem.__proto__ = DescriptorListItem.prototype;
+
+ /** @type {!interfaces.BluetoothDevice.DescriptorInfo} */
+ listItem.info = descriptorInfo;
+
+ listItem.decorate();
+ return listItem;
+ }
+
+ DescriptorListItem.prototype = {
+ __proto__: ExpandableListItem.prototype,
+
+ /**
+ * Decorates the element as a descriptor list item. Creates and caches
+ * a fieldset for displaying property values.
+ * @override
+ */
+ decorate: function() {
+ this.classList.add('descriptor-list-item');
+
+ /** @private {!object_fieldset.ObjectFieldSet} */
+ this.descriptorFieldSet_ = object_fieldset.ObjectFieldSet();
+ this.descriptorFieldSet_.setPropertyDisplayNames(INFO_PROPERTY_NAMES);
+ this.descriptorFieldSet_.setObject({
+ id: this.info.id,
+ 'uuid.uuid': this.info.uuid.uuid,
+ });
+
+ // Create content for display in brief content container.
+ var descriptorHeaderText = document.createElement('div');
+ descriptorHeaderText.textContent = 'Descriptor:';
+
+ var descriptorHeaderValue = document.createElement('div');
+ descriptorHeaderValue.textContent = this.info.uuid.uuid;
+
+ var descriptorHeader = document.createElement('div');
+ descriptorHeader.appendChild(descriptorHeaderText);
+ descriptorHeader.appendChild(descriptorHeaderValue);
+ this.briefContent_.appendChild(descriptorHeader);
+
+ // Create content for display in expanded content container.
+ var descriptorInfoHeader = document.createElement('h4');
+ descriptorInfoHeader.textContent = 'Descriptor Info';
+
+ var descriptorDiv = document.createElement('div');
+ descriptorDiv.classList.add('flex');
+ descriptorDiv.appendChild(this.descriptorFieldSet_);
+
+ var infoDiv = document.createElement('div');
+ infoDiv.classList.add('info-container');
+ infoDiv.appendChild(descriptorInfoHeader);
+ infoDiv.appendChild(descriptorDiv);
+
+ this.expandedContent_.appendChild(infoDiv);
+ },
+ };
+
+ /**
+ * A list that displays DescriptorListItems.
+ * @constructor
+ */
+ var DescriptorList = cr.ui.define('list');
+
+ DescriptorList.prototype = {
+ __proto__: ExpandableList.prototype,
+
+ /** @override */
+ decorate: function() {
+ ExpandableList.prototype.decorate.call(this);
+
+ /** @private {boolean} */
+ this.descriptorsRequested_ = false;
+
+ this.classList.add('descriptor-list');
+ this.setEmptyMessage('No Descriptors Found');
+ },
+
+ /** @override */
+ createItem: function(data) {
+ return new DescriptorListItem(data);
+ },
+
+ /**
+ * Loads the descriptor list with an array of DescriptorInfo from
+ * the device with |deviceAddress|, service with |serviceId|, and
+ * characteristic with |characteristicId|. If no active connection to the
+ * device exists, one is created.
+ * @param {string} deviceAddress
+ * @param {string} serviceId
+ * @param {string} characteristicId
+ */
+ load: function(deviceAddress, serviceId, characteristicId) {
+ if (this.descriptorsRequested_ || !this.isSpinnerShowing())
+ return;
+
+ this.descriptorsRequested_ = true;
+
+ device_broker.connectToDevice(deviceAddress)
+ .then(function(device) {
+ return device.getDescriptors(serviceId, characteristicId);
+ }.bind(this))
+ .then(function(response) {
+ this.setData(new ArrayDataModel(response.descriptors || []));
+ this.setSpinnerShowing(false);
+ this.descriptorsRequested_ = false;
+ }.bind(this))
+ .catch(function(error) {
+ this.descriptorsRequested_ = false;
+ Snackbar.show(
+ deviceAddress + ': ' + error.message, SnackbarType.ERROR,
+ 'Retry', function() {
+ this.load(deviceAddress, serviceId, characteristicId);
+ }.bind(this));
+ }.bind(this));
+ },
+ };
+
+ return {
+ DescriptorList: DescriptorList,
+ DescriptorListItem: DescriptorListItem,
+ };
+});

Powered by Google App Engine
This is Rietveld 408576698