15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)cr.define('nfcDebug', function() { 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'use strict'; 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) function NfcDebugUI() { 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.adapterData_ = {}; 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.peerData_ = {}; 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.tagData_ = {}; 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.prototype = { 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) setAdapterData: function(data) { 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.adapterData_ = data; 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) setPeerData: function(data) { 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.peerData_ = data; 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) setTagData: function(data) { 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.tagData_ = data; 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Powers the NFC adapter ON or OFF. 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) toggleAdapterPower: function() { 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.send('setAdapterPower', [!this.adapterData_.powered]); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Tells the NFC adapter to start or stop polling. 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) toggleAdapterPolling: function() { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.send('setAdapterPolling', [!this.adapterData_.polling]); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Notifies the UI that the user made an NDEF type selection and the 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * appropriate form should be displayed. 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordTypeChanged: function() { 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.updateRecordFormContents(); 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Creates a table element and populates it for each record contained 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * in the given list of records and adds them as a child of the given 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * DOMElement. This method will replace the contents of the given element 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * with the tables. 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {DOMElement} div The container that the records should be rendered 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * to. 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {Array} records List of NDEF record data. 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) renderRecords: function(div, records) { 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) div.textContent = ''; 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (records.length == 0) { 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var self = this; 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) records.forEach(function(record) { 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var recordDiv = document.createElement('div'); 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordDiv.setAttribute('class', 'record-div'); 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (var key in record) { 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!record.hasOwnProperty(key)) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) continue; 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var rowDiv = document.createElement('div'); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rowDiv.setAttribute('class', 'record-key-value-div'); 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var keyElement, valueElement; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (key == 'titles') { 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keyElement = document.createElement('div'); 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keyElement.setAttribute('class', 'record-key-div'); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keyElement.appendChild(document.createTextNode(key)); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) valueElement = document.createElement('div'); 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) valueElement.setAttribute('class', 'record-value-div'); 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.renderRecords(valueElement, record[key]); 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keyElement = document.createElement('span'); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keyElement.setAttribute('class', 'record-key-span'); 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) keyElement.appendChild(document.createTextNode(key)); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) valueElement = document.createElement('span'); 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) valueElement.setAttribute('class', 'record-value-span'); 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) valueElement.appendChild(document.createTextNode(record[key])); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rowDiv.appendChild(keyElement); 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rowDiv.appendChild(valueElement); 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordDiv.appendChild(rowDiv); 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) div.appendChild(recordDiv); 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (records[records.length - 1] !== record) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) div.appendChild(document.createElement('hr')); 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Updates which record type form is displayed based on the currently 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * selected type. 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) updateRecordFormContents: function() { 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var recordTypeMenu = $('record-type-menu'); 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var selectedType = 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordTypeMenu.options[recordTypeMenu.selectedIndex].value; 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) this.updateRecordFormContentsFromType(selectedType); 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Updates which record type form is displayed based on the passed in 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * type string. 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} type The record type. 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) updateRecordFormContentsFromType: function(type) { 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('text-form').hidden = (type != 'text'); 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('uri-form').hidden = (type != 'uri'); 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('smart-poster-form').hidden = (type != 'smart-poster'); 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Tries to push or write the record to the remote tag or device based on 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * the contents of the record form fields. 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) submitRecordForm: function() { 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var recordTypeMenu = $('record-type-menu'); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var selectedType = 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordTypeMenu.options[recordTypeMenu.selectedIndex].value; 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var recordData = {}; 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (selectedType == 'text') { 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.type = 'TEXT'; 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('text-form-text').value) 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.text = $('text-form-text').value; 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('text-form-encoding').value) 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.encoding = $('text-form-encoding').value; 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('text-form-language-code').value) 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.languageCode = $('text-form-language-code').value; 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (selectedType == 'uri') { 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.type = 'URI'; 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('uri-form-uri').value) 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.uri = $('uri-form-uri').value; 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('uri-form-mime-type').value) 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.mimeType = $('uri-form-mime-type').value; 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('uri-form-target-size').value) { 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var targetSize = $('uri-form-target-size').value; 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) targetSize = parseFloat(targetSize); 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.targetSize = isNaN(targetSize) ? 0.0 : targetSize; 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else if (selectedType == 'smart-poster') { 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.type = 'SMART_POSTER'; 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('smart-poster-form-uri').value) 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.uri = $('smart-poster-form-uri').value; 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('smart-poster-form-mime-type').value) 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.mimeType = $('smart-poster-form-mime-type').value; 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('smart-poster-form-target-size').value) { 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var targetSize = $('smart-poster-form-target-size').value; 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) targetSize = parseFloat(targetSize); 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.targetSize = isNaN(targetSize) ? 0.0 : targetSize; 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var title = {}; 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('smart-poster-form-title-text').value) 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title.text = $('smart-poster-form-title-text').value; 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('smart-poster-form-title-encoding').value) 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title.encoding = $('smart-poster-form-title-encoding').value; 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if ($('smart-poster-form-title-language-code').value) 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) title.languageCode = 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('smart-poster-form-title-language-code').value; 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (Object.keys(title).length != 0) 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) recordData.titles = [title]; 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.send('submitRecordForm', [recordData]); 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Given a dictionary |data|, builds a table where each row contains the 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * a key and its value. The resulting table is then added as the sole child 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * of |div|. |data| contains information about an adapter, tag, or peer and 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * this method creates a table for display, thus the value of some keys 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * will be processed. 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {DOMElement} div The container that the table should be rendered 1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * to. 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {dictionary} data Data to generate the table from. 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) createTableFromData: function(div, data) { 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) div.textContent = ''; 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var table = document.createElement('table'); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.classList.add('parameters-table'); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (var key in data) { 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var row = document.createElement('tr'); 1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var col = document.createElement('td'); 1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) col.textContent = key; 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) row.appendChild(col); 1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) col = document.createElement('td'); 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) var value = data[key]; 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (key == 'records') 2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) value = value.length; 2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) else if (key == 'supportedTechnologies') 2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) value = value.join(', '); 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) col.textContent = value; 2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) row.appendChild(col); 2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) table.appendChild(row); 2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) div.appendChild(table); 2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }, 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) cr.addSingletonGetter(NfcDebugUI); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Initializes the page after the content has loaded. 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.initialize = function() { 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-adapter-info').hidden = true; 2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('adapter-toggles').hidden = true; 2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-adapter-info').classList.add('transition-out'); 2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('ndef-record-form').classList.add('transition-out'); 2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-peer-info').classList.add('transition-out'); 2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-tag-info').classList.add('transition-out'); 2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('power-toggle').onclick = function() { 2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().toggleAdapterPower(); 2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('poll-toggle').onclick = function() { 2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().toggleAdapterPolling(); 2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-type-menu').onchange = function() { 2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().recordTypeChanged(); 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').onclick = function() { 2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().submitRecordForm(); 2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').hidden = true; 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().updateRecordFormContents(); 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) chrome.send('initialize'); 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Updates the UI based on the NFC availability on the current platform. 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {bool} available If true, NFC is supported on the current platform. 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.onNfcAvailabilityDetermined = function(available) { 2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-not-supported').hidden = available; 2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Notifies the UI that information about the NFC adapter has been received. 2525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 2535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {dictionary} data Properties of the NFC adapter. 2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.onNfcAdapterInfoChanged = function(data) { 2565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().setAdapterData(data); 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-adapter-info').hidden = false; 2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().createTableFromData($('adapter-parameters'), data); 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-adapter-info').classList.toggle('transition-out', !data.present); 2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-adapter-info').classList.toggle('transition-in', data.present); 2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('ndef-record-form').classList.toggle('transition-out', !data.present); 2645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('ndef-record-form').classList.toggle('transition-in', data.present); 2655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('adapter-toggles').hidden = !data.present; 2675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('ndef-record-form').hidden = !data.present; 2685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('power-toggle').textContent = loadTimeData.getString( 2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) data.powered ? 'adapterPowerOffText' : 'adapterPowerOnText'); 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('poll-toggle').textContent = loadTimeData.getString( 2725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) data.polling ? 'adapterStopPollText' : 'adapterStartPollText'); 2735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Notifies the UI that information about an NFC peer has been received. 2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {dictionary} data Properties of the NFC peer device. 2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.onNfcPeerDeviceInfoChanged = function(data) { 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().setPeerData(data); 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (Object.keys(data).length == 0) { 2845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-peer-info').classList.add('transition-out'); 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-peer-info').classList.remove('transition-in'); 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').hidden = true; 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-peer-info').classList.remove('transition-out'); 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-peer-info').classList.add('transition-in'); 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().createTableFromData($('peer-parameters'), data); 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').hidden = false; 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').textContent = 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) loadTimeData.getString('ndefFormPushButtonText'); 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (data.records.length == 0) { 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('peer-records-entry').hidden = true; 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 3025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('peer-records-entry').hidden = false; 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().renderRecords($('peer-records-container'), 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) data.records); 3075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 3085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 3105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Notifies the UI that information about an NFC tag has been received. 3115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {dictionary} data Properties of the NFC tag. 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 3145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.onNfcTagInfoChanged = function(data) { 3155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().setTagData(data); 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (Object.keys(data).length == 0) { 3185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-tag-info').classList.add('transition-out'); 3195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-tag-info').classList.remove('transition-in'); 3205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').hidden = true; 3215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 3225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-tag-info').classList.remove('transition-out'); 3255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('nfc-tag-info').classList.add('transition-in'); 3265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().createTableFromData($('tag-parameters'), data); 3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').hidden = false; 3305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('record-form-submit-button').textContent = 3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) loadTimeData.getString('ndefFormWriteButtonText'); 3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (data.records.length == 0) { 3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('tag-records-entry').hidden = true; 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return; 3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) $('tag-records-entry').hidden = false; 3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.getInstance().renderRecords($('tag-records-container'), 3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) data.records); 3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Notifies the UI that a call to "setAdapterPower" failed. Displays an 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * alert. 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.onSetAdapterPowerFailed = function() { 3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) alert(loadTimeData.getString('errorFailedToSetPowerText')); 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Notifies the UI that a call to "setAdapterPolling" failed. Displays an 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * alert. 3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.onSetAdapterPollingFailed = function() { 3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) alert(loadTimeData.getString('errorFailedToSetPollingText')); 3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) /** 3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * Notifies the UI that an error occurred while submitting an NDEF record 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * form. 3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * @param {string} errorMessage An error message, describing the failure. 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) */ 3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI.onSubmitRecordFormFailed = function(errorMessage) { 3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) alert(loadTimeData.getString('errorFailedToSubmitPrefixText') + 3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ' ' + errorMessage); 3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Export 3705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return { 3715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) NfcDebugUI: NfcDebugUI 3725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) }; 3735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}); 3745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)document.addEventListener('DOMContentLoaded', nfcDebug.NfcDebugUI.initialize); 376