onInit: function rp_onInit(panel) { root = Root(); root.init(); airplaneModeItem = AirplaneModeItem(panel.querySelector('.airplaneMode-input')); themesItem = ThemesItem(panel.querySelector('.themes-section')); homescreenItem = HomescreenItem(panel.querySelector('#homescreens-section')); addonsItem = AddonsItem(panel.querySelector('#addons-section')); privacyPanelItem = PrivacyPanelItem({ element: panel.querySelector('.privacy-panel-item'), link: panel.querySelector('.privacy-panel-item a') }); stkItem = STKItem({ iccMainHeader: panel.querySelector('#icc-mainheader'), iccEntries: panel.querySelector('#icc-entries') }); // The decision of navigation panel will be removed while we are no // longer to use Bluetooth API v1. var bluetoothListItem = panel.querySelector('.menuItem-bluetooth'); var BTAPIVersion = BTAPIVersionDetector.getVersion(); bluetoothListItem.addEventListener('click', function() { if (BTAPIVersion === 1) { // navigate old bluetooth panel.. SettingsService.navigate('bluetooth'); } else if (BTAPIVersion === 2) { // navigate new bluetooth panel.. SettingsService.navigate('bluetooth_v2'); } }); activityDoneButton = panel.querySelector('#activityDoneButton'); activityDoneButton.addEventListener('click', function() { SettingsService.back(); }); // If the device supports dsds, callSettings must be changed 'href' for // navigating call-iccs panel first. if (DsdsSettings.getNumberOfIccSlots() > 1) { var callItem = document.getElementById('menuItem-callSettings'); callItem.setAttribute('href', '#call-iccs'); } var idleObserver = { time: 3, onidle: function() { navigator.removeIdleObserver(idleObserver); lowPriorityRoots = queryRootForLowPriorityItems(panel); initLowPriorityItems(lowPriorityRoots).then(function(items) { Object.keys(items).forEach((key) => items[key].enabled = true); }); } }; navigator.addIdleObserver(idleObserver); },
define(function(require) { 'use strict'; var APIVersionDetector = require('modules/bluetooth/version_detector'); var SettingsService = require('modules/settings_service'); var APIVersion = APIVersionDetector.getVersion(); var _debug = false; var Debug = function() {}; if (_debug) { Debug = function bti_debug(msg) { console.log('--> [BluetoothItem]: ' + msg); }; } /** * @alias module:panels/root/bluetooth_item * @class BluetoothItem * @requires module:modules/bluetooth * @param {HTMLElement} element The element displaying the bluetooth information * @return {BluetoothItem} */ function BluetoothItem(element) { this._enabled = false; this._element = element; this._boundRefreshMenuDescription = this._refreshMenuDescription.bind(this, element); } BluetoothItem.prototype = { /** * Return Bluetooth API version via APIVersionDetector module. * * @access private * @memberOf BluetoothItem.prototype * @type {Number} */ _APIVersion: function bt__APIVersion() { return APIVersion; }, /** * An instance to maintain that we have created a promise to get Bluetooth * module. * * @access private * @memberOf BluetoothItem.prototype * @type {Promise} */ _getBluetoothPromise: null, /** * A promise function to get Bluetooth module. * * @access private * @memberOf BluetoothItem.prototype * @type {Promise} */ _getBluetooth: function bt__getBluetooth() { if (!this._getBluetoothPromise) { this._getBluetoothPromise = new Promise(function(resolve) { var bluetoothModulePath; if (this._APIVersion() === 1) { bluetoothModulePath = 'modules/bluetooth/bluetooth_v1'; } else if (this._APIVersion() === 2) { Debug('loading.. modules/bluetooth/bluetooth_context'); bluetoothModulePath = 'modules/bluetooth/bluetooth_context'; } require([bluetoothModulePath], resolve); }.bind(this)); } return this._getBluetoothPromise; }, /** * Refresh the text based on the Bluetooth module enabled/disabled, * paired devices information. * * @access private * @memberOf BluetoothItem.prototype * @param {HTMLElement} element The element displaying the bluetooth information */ _refreshMenuDescription: function bt__refreshMenuDescription(element) { if (!navigator.mozL10n) { return; } this._getBluetooth().then(function(bluetooth) { Debug('Got bluetooth context'); if (bluetooth.enabled) { if (bluetooth.numberOfPairedDevices === 0) { element.setAttribute('data-l10n-id', 'bt-status-nopaired'); } else { navigator.mozL10n.setAttributes(element, 'bt-status-paired', { name: bluetooth.firstPairedDeviceName, n: bluetooth.numberOfPairedDevices - 1 }); } } else { element.setAttribute('data-l10n-id', 'bt-status-turnoff'); } }); }, /** * The value indicates whether the module is responding. * * @access public * @memberOf BluetoothItem.prototype * @type {Boolean} */ get enabled() { return this._enabled; }, set enabled(value) { if (this._enabled === value) { return; } this._enabled = value; this._getBluetooth().then(function(bluetooth) { if (this._enabled) { bluetooth.observe('enabled', this._boundRefreshMenuDescription); bluetooth.observe('numberOfPairedDevices', this._boundRefreshMenuDescription); this._boundRefreshMenuDescription(); } else { bluetooth.unobserve('enabled', this._boundRefreshMenuDescription); bluetooth.unobserve('numberOfPairedDevices', this._boundRefreshMenuDescription); } }.bind(this)); }, /** * Navigate new/old Bluetooth panel via version of mozBluetooth API. * * @access private * @memberOf BluetoothItem.prototype * @type {Function} */ _navigatePanelWithVersionCheck: function bt__navigatePanelWithVersionCheck() { if (this._APIVersion() === 1) { // navigate old bluetooth panel.. SettingsService.navigate('bluetooth'); } else if (this._APIVersion() === 2) { // navigate new bluetooth panel.. Debug('navigate bluetooth_v2 panel'); SettingsService.navigate('bluetooth_v2'); } } }; return function ctor_bluetoothItem(element) { return new BluetoothItem(element); }; });