From 95dd7674b9e59de541279fd6171f4f9545694bc2 Mon Sep 17 00:00:00 2001 From: Pin Zhang Date: Fri, 18 Apr 2014 10:51:32 +0800 Subject: [PATCH] Bug 997064: Do not call navigator.mozFMRadio from system app. --- apps/fm/index.html | 1 + apps/fm/js/fm.js | 44 +++++++-------------------------- apps/fm/test/unit/fm_test.js | 16 +++--------- apps/system/js/airplane_mode.js | 8 ++---- 4 files changed, 15 insertions(+), 54 deletions(-) diff --git a/apps/fm/index.html b/apps/fm/index.html index 1e0001de14ce..ef3e632009ea 100644 --- a/apps/fm/index.html +++ b/apps/fm/index.html @@ -8,6 +8,7 @@ + diff --git a/apps/fm/js/fm.js b/apps/fm/js/fm.js index 5f62f9b81a9c..e6f128763f51 100644 --- a/apps/fm/js/fm.js +++ b/apps/fm/js/fm.js @@ -130,29 +130,6 @@ var mozFMRadio = navigator.mozFM || navigator.mozFMRadio || { } }; -// XXX fake mozSetting object for UI testing on PC -var mozSettings = navigator.mozSettings || { - addObserver: function settings_addObserver(key, callback) {}, - createLock: function settings_createLock() { - return { - get: function() { - var request = { - result: {} - }; - - window.setTimeout(function() { - if (request.onsuccess) { - request.result['ril.radio.disabled'] = false; - request.onsuccess(); - } - }, 500); - - return request; - } - }; - } -}; - // XXX fake SpeakerManager object for UI testing on PC (function(aGlobal) { aGlobal.SpeakerManager = aGlobal.SpeakerManager || aGlobal.MozSpeakerManager; @@ -203,7 +180,7 @@ function updateAntennaUI() { } function updateAirplaneModeUI() { - $('airplane-mode-warning').hidden = !rilDisabled; + $('airplane-mode-warning').hidden = !airplaneModeEnabled; } var enabling = false; @@ -222,9 +199,9 @@ function updateEnablingState(enablingState) { updateFrequencyBarUI(); } -var rilDisabled = false; +var airplaneModeEnabled = false; function enableFMRadio(frequency) { - if (rilDisabled) + if (airplaneModeEnabled) return; var request = mozFMRadio.enable(frequency); @@ -822,8 +799,9 @@ function init() { // Disable the power button and the fav list when the airplane mode is on. updateAirplaneModeUI(); - mozSettings.addObserver('ril.radio.disabled', function(event) { - rilDisabled = event.settingValue; + + AirplaneModeHelper.addEventListener('statechange', function(status) { + airplaneModeEnabled = status === 'enabled'; updateAirplaneModeUI(); }); @@ -849,14 +827,10 @@ function init() { } window.addEventListener('load', function(e) { - var req = mozSettings.createLock().get('ril.radio.disabled'); - req.onsuccess = function() { - rilDisabled = req.result['ril.radio.disabled']; + AirplaneModeHelper.ready(function() { + airplaneModeEnabled = AirplaneModeHelper.getStatus() == 'enabled'; init(); - }; - req.onerror = function() { - init(); - }; + }); }, false); // Turn off radio immediately when window is unloaded. diff --git a/apps/fm/test/unit/fm_test.js b/apps/fm/test/unit/fm_test.js index bac72039aef6..3e2a76330465 100644 --- a/apps/fm/test/unit/fm_test.js +++ b/apps/fm/test/unit/fm_test.js @@ -1,20 +1,10 @@ +requireApp('shared/js/airplane_mode_helper.js'); requireApp('fm/js/fm.js'); var PerformanceTestingHelper = { dispatch: function() { } }; -// fake mozSettings at the global level because fm.js uses it before any `setup` -// function is called. -navigator.mozSettings = { - addObserver: function() {}, - createLock: function() { - return { - get: function() {} - }; - } -}; - suite('FM', function() { var tempNode; @@ -229,7 +219,7 @@ suite('FM', function() { suite('airplane mode on', function() { setup(function() { - rilDisabled = true; + airplaneModeEnabled = true; updateAirplaneModeUI(); }); @@ -240,7 +230,7 @@ suite('FM', function() { suite('airplane mode off', function() { setup(function() { - rilDisabled = false; + airplaneModeEnabled = false; updateAirplaneModeUI(); }); diff --git a/apps/system/js/airplane_mode.js b/apps/system/js/airplane_mode.js index 881221b344bb..2e8e368ecd74 100644 --- a/apps/system/js/airplane_mode.js +++ b/apps/system/js/airplane_mode.js @@ -90,9 +90,10 @@ ); }, updateStatus: function(value) { + // FM Radio will be turned off in Gecko, more detailed about why we do + // this in Gecko instead, please check bug 997064. var bluetooth = window.navigator.mozBluetooth; var wifiManager = window.navigator.mozWifiManager; - var fmRadio = window.navigator.mozFMRadio; var nfc = window.navigator.mozNfc; // Radio is a special service (might not exist e.g. tablet) @@ -130,11 +131,6 @@ if (nfc) { this._suspend('nfc'); } - - // Turn off FM Radio. - if (fmRadio && fmRadio.enabled) { - fmRadio.disable(); - } } else { // Note that we don't restore Wifi tethering when leaving airplane mode // because Wifi tethering can't be switched on before data connection is