Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/apps/system/js/bluetooth.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/system/js/bluetooth.js')
-rw-r--r--apps/system/js/bluetooth.js136
1 files changed, 136 insertions, 0 deletions
diff --git a/apps/system/js/bluetooth.js b/apps/system/js/bluetooth.js
new file mode 100644
index 0000000..3a77cc7
--- /dev/null
+++ b/apps/system/js/bluetooth.js
@@ -0,0 +1,136 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+'use strict';
+
+var Bluetooth = {
+
+ /* this property store a reference of the default adapter */
+ defaultAdapter: null,
+
+ /* keep a global connected property here */
+ connected: false,
+
+ init: function bt_init() {
+ if (!window.navigator.mozSettings)
+ return;
+
+ var bluetooth = window.navigator.mozBluetooth;
+
+ SettingsListener.observe('bluetooth.enabled', true, function(value) {
+ if (!bluetooth) {
+ // roll back the setting value to notify the UIs
+ // that Bluetooth interface is not available
+ if (value) {
+ SettingsListener.getSettingsLock().set({
+ 'bluetooth.enabled': false
+ });
+ }
+ return;
+ }
+ });
+
+ var self = this;
+ // when bluetooth adapter is ready, emit event to notify QuickSettings
+ // and try to get defaultAdapter at this moment
+ bluetooth.onadapteradded = function bt_onAdapterAdded() {
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent('bluetooth-adapter-added',
+ /* canBubble */ true, /* cancelable */ false, null);
+ window.dispatchEvent(evt);
+ self.initDefaultAdapter();
+ };
+ // if bluetooth is enabled in booting time, try to get adapter now
+ this.initDefaultAdapter();
+
+ // when bluetooth is really disabled, emit event to notify QuickSettings
+ bluetooth.ondisabled = function bt_onDisabled() {
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent('bluetooth-disabled',
+ /* canBubble */ true, /* cancelable */ false, null);
+ window.dispatchEvent(evt);
+ };
+
+ /* for v1, we only support two use cases for bluetooth connection:
+ * 1. connecting with a headset
+ * 2. transfering a file to/from another device
+ * So we need to monitor their event messages to know we are (aren't)
+ * connected, then summarize to an event and dispatch to StatusBar
+ */
+
+ // In headset connected case:
+ navigator.mozSetMessageHandler('bluetooth-hfp-status-changed',
+ this.updateConnected.bind(this)
+ );
+
+ /* In file transfering case:
+ * since System Message can't be listened in two js files within a app,
+ * so we listen here but dispatch events to bluetooth_transfer.js
+ * when getting bluetooth file transfer start/complete system messages
+ */
+ var self = this;
+ navigator.mozSetMessageHandler('bluetooth-opp-transfer-start',
+ function bt_fileTransferUpdate(transferInfo) {
+ self.updateConnected();
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent('bluetooth-opp-transfer-start',
+ /* canBubble */ true, /* cancelable */ false,
+ {transferInfo: transferInfo});
+ window.dispatchEvent(evt);
+ }
+ );
+
+ navigator.mozSetMessageHandler('bluetooth-opp-transfer-complete',
+ function bt_fileTransferUpdate(transferInfo) {
+ self.updateConnected();
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent('bluetooth-opp-transfer-complete',
+ /* canBubble */ true, /* cancelable */ false,
+ {transferInfo: transferInfo});
+ window.dispatchEvent(evt);
+ }
+ );
+
+ },
+
+ // Get adapter for BluetoothTransfer when everytime bluetooth is enabled
+ initDefaultAdapter: function bt_initDefaultAdapter() {
+ var bluetooth = window.navigator.mozBluetooth;
+ var self = this;
+
+ if (!bluetooth || !bluetooth.enabled ||
+ !('getDefaultAdapter' in bluetooth))
+ return;
+
+ var req = bluetooth.getDefaultAdapter();
+ req.onsuccess = function bt_gotDefaultAdapter(evt) {
+ self.defaultAdapter = req.result;
+ };
+ },
+
+ updateConnected: function bt_updateConnected() {
+ var bluetooth = window.navigator.mozBluetooth;
+
+ if (!bluetooth || !('isConnected' in bluetooth))
+ return;
+
+ var wasConnected = this.connected;
+ this.connected =
+ bluetooth.isConnected(0x111E) || bluetooth.isConnected(0x1105);
+
+ if (wasConnected !== this.connected) {
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent('bluetoothconnectionchange',
+ /* canBubble */ true, /* cancelable */ false,
+ {deviceConnected: this.connected});
+ window.dispatchEvent(evt);
+ }
+ },
+
+ // This function is called by external (BluetoothTransfer) for re-use adapter
+ getAdapter: function bt_getAdapter() {
+ return this.defaultAdapter;
+ }
+};
+
+Bluetooth.init();