Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Bug 1114453 - [Wifi] Add wifi setting UX and gaia setting for Allow O…
Browse files Browse the repository at this point in the history
…fff function.
  • Loading branch information
tefn3849 committed Feb 4, 2015
1 parent 106735a commit 4d1d218
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 18 deletions.
7 changes: 7 additions & 0 deletions apps/settings/elements/wifi.html
Expand Up @@ -47,6 +47,13 @@ <h2 data-l10n-id="availableNetworks"> Available Networks </h2>
<h2 data-l10n-id="advancedSettings"> Advanced Settings </h2>
</header>
<ul>
<li class="hint">
<label class="pack-switch">
<input type="checkbox" name="wifi.sleepMode">
<span data-l10n-id="wifi-sleep"></span>
</label>
<p data-l10n-id="wifi-sleep-description" class="explanation"></p>
</li>
<li>
<a class="menu-item manageNetworks" href="#">
<span data-l10n-id="manageNetworks">Manage networks</span>
Expand Down
2 changes: 2 additions & 0 deletions apps/settings/locales/settings.en-US.properties
Expand Up @@ -61,6 +61,8 @@ shortStatus-associated = Obtaining an IP address…
shortStatus-connected = Connected
shortStatus-connectingfailed = Connection failed
shortStatus-disconnected = Offline
wifi-sleep=Wi-Fi Sleep
wifi-sleep-description=Enable to automatically turn off Wi-Fi during sleep to save battery power.  
manageNetworks=Manage Networks
wifi-bad-credentials-title=Failed connecting to Wi-Fi
wifi-bad-credentials-confirm=Unable to connect to {{ssid}}, authentication failed due to bad credentials. Please re-enter the network password.
Expand Down
42 changes: 28 additions & 14 deletions apps/system/js/wifi.js
Expand Up @@ -13,6 +13,10 @@ var Wifi = {
// If it's set to 0, wifi will never be turn off.
screenOffTimeout: 0,

// When wifiSleepMode is true, Wi-Fi will be automatically turned off
// during sleep to save battery power.
wifiSleepMode: false,

// if Wifi is enabled but disconnected, try to scan for networks every
// kScanInterval ms.
kScanInterval: 20 * 1000,
Expand Down Expand Up @@ -84,6 +88,10 @@ var Wifi = {
self.screenOffTimeout = value;
});

SettingsListener.observe('wifi.sleepMode', true, function(value) {
self.wifiSleepMode = value;
});

// Track the wifi.enabled mozSettings value
SettingsListener.observe('wifi.enabled', true, function(value) {
if (!wifiManager && value) {
Expand Down Expand Up @@ -192,20 +200,26 @@ var Wifi = {
// Set System Message Handler, so we will be notified when alarm goes off.
this.setSystemMessageHandler();

// Start with a timer, only turn off wifi till timeout.
var date = new Date(Date.now() + this.screenOffTimeout);
var self = this;
var req = navigator.mozAlarms.add(date, 'ignoreTimezone', 'wifi-off');
req.onsuccess = function wifi_offAlarmSet() {
self._alarmId = req.result;
releaseCpuLock();
};
req.onerror = function wifi_offAlarmSetFailed() {
console.warn('Fail to set wifi sleep timer on Alarm API. ' +
'Turn off wifi immediately.');
self.sleep();
releaseCpuLock();
};
// When user wants to allow wifi off then start with a timer,
// only turn off wifi till timeout.
if (this.wifiSleepMode == true) {
var date = new Date(Date.now() + this.screenOffTimeout);
var self = this;
var req = navigator.mozAlarms.add(date, 'ignoreTimezone', 'wifi-off');
req.onsuccess = function wifi_offAlarmSet() {
self._alarmId = req.result;
releaseCpuLock();
};
req.onerror = function wifi_offAlarmSetFailed() {
console.warn('Fail to set wifi sleep timer on Alarm API. ' +
'Turn off wifi immediately.');
self.sleep();
releaseCpuLock();
};
}
else {
return;
}
}
// ... and quietly turn it back on or cancel the timer otherwise
else {
Expand Down
66 changes: 62 additions & 4 deletions apps/system/test/unit/wifi_test.js
Expand Up @@ -188,6 +188,20 @@ suite('WiFi > ', function() {
assert.equal(Wifi.screenOffTimeout, 2000);
});

test('Test SettingsListener callback wifi.sleepMode is set to true',
function() {
Wifi.wifiSleepMode = false;
SettingsListener.mCallbacks['wifi.sleepMode'](true);
assert.equal(Wifi.wifiSleepMode, true);
});

test('Test SettingsListener callback wifi.sleepMode is set to false',
function() {
Wifi.wifiSleepMode = true;
SettingsListener.mCallbacks['wifi.sleepMode'](false);
assert.equal(Wifi.wifiSleepMode, false);
});

test('Test SettingsListener callback wifi.enabled is set to true',
function() {
Wifi.wifiEnabled = false;
Expand Down Expand Up @@ -330,13 +344,18 @@ suite('WiFi > ', function() {
stubMozWifiManager.restore();
});

test('Test starting with a timer', function() {

test('Test starting with a timer if turn on wifi sleep mode', function() {
SettingsListener.mCallbacks['wifi.screen_off_timeout'](100);
SettingsListener.mCallbacks['wifi.sleepMode'](true);

ScreenManager.screenEnabled = false;
Wifi.wifiDisabledByWakelock = true;
stubWifiWakeLockManager.isHeld = false;
Wifi.wifiEnabled = true;
Wifi.wifiSleepMode = true;

assert.equal(Wifi.wifiSleepMode, true);

var stubMozAlarms = this.sinon.stub(navigator,
'mozAlarms', MockMozAlarms);
Expand All @@ -353,10 +372,49 @@ suite('WiFi > ', function() {
});

Wifi.maybeToggleWifi();
if (Wifi.wifiSleepMode == true) {
assert.equal(isSetSystemMessageHandlerCalled, true);
assert.equal(MockMozAlarms._timezone, 'ignoreTimezone');
assert.equal(MockMozAlarms._func, 'wifi-off');
}

navigator.battery = realBattery;
stubMozAlarms.restore();
stubSetSystemMessageHandler.restore();
stubMozWifiManager.restore();
});

test('Test starting with a timer if turn off wifi sleep mode', function() {
SettingsListener.mCallbacks['wifi.screen_off_timeout'](100);
SettingsListener.mCallbacks['wifi.sleepMode'](false);

ScreenManager.screenEnabled = false;
Wifi.wifiDisabledByWakelock = true;
stubWifiWakeLockManager.isHeld = false;
Wifi.wifiEnabled = true;
Wifi.wifiSleepMode = false;

assert.equal(isSetSystemMessageHandlerCalled, true);
assert.equal(MockMozAlarms._timezone, 'ignoreTimezone');
assert.equal(MockMozAlarms._func, 'wifi-off');
assert.equal(Wifi.wifiSleepMode, false);
var stubMozAlarms = this.sinon.stub(navigator,
'mozAlarms', MockMozAlarms);
var isSetSystemMessageHandlerCalled = false;
var stubSetSystemMessageHandler =
this.sinon.stub(Wifi, 'setSystemMessageHandler', function() {
isSetSystemMessageHandlerCalled = true;
});
navigator.battery = { charging: false };

var stubMozWifiManager = this.sinon.stub(navigator,
'mozWifiManager', {
setPowerSavingMode: function(enabled) {}
});

Wifi.maybeToggleWifi();
if (Wifi.wifiSleepMode == true) {
assert.equal(isSetSystemMessageHandlerCalled, true);
assert.equal(MockMozAlarms._timezone, 'ignoreTimezone');
assert.equal(MockMozAlarms._func, 'wifi-off');
}

navigator.battery = realBattery;
stubMozAlarms.restore();
Expand Down
1 change: 1 addition & 0 deletions build/config/common-settings.json
Expand Up @@ -237,6 +237,7 @@
"vibration.enabled": true,
"wifi.enabled": true,
"wifi.screen_off_timeout": 600000,
"wifi.sleepMode": false,
"wifi.suspended": false,
"wifi.disabled_by_wakelock": false,
"wifi.notification": false,
Expand Down

0 comments on commit 4d1d218

Please sign in to comment.