Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
187
assets/webapps/system.gaiamobile.org/js/power_save.js
Normal file
187
assets/webapps/system.gaiamobile.org/js/power_save.js
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
'use strict';
|
||||
/* global MozActivity, NotificationHelper, SettingsListener */
|
||||
|
||||
(function(exports) {
|
||||
|
||||
function PowerSave(batteryOverlay) {
|
||||
this.batteryOverlay = batteryOverlay;
|
||||
}
|
||||
|
||||
PowerSave.prototype = {
|
||||
_powerSaveResume: {},
|
||||
|
||||
_powerSaveEnabled: false,
|
||||
|
||||
_states: {
|
||||
'wifi.enabled': false,
|
||||
'ril.data.enabled': false,
|
||||
'bluetooth.enabled': false,
|
||||
'geolocation.enabled': false
|
||||
},
|
||||
|
||||
_powerSaveEnabledLock: false,
|
||||
|
||||
start: function() {
|
||||
SettingsListener.observe('powersave.enabled', false, value => {
|
||||
var enabled = value;
|
||||
if (enabled) {
|
||||
this.enablePowerSave();
|
||||
} else {
|
||||
this.disablePowerSave();
|
||||
}
|
||||
this._powerSaveEnabled = enabled;
|
||||
});
|
||||
|
||||
SettingsListener.observe('powersave.threshold', -1, value => {
|
||||
this.doCheckThreshold(value);
|
||||
});
|
||||
|
||||
function getState(state, value) {
|
||||
/* jshint validthis: true */
|
||||
this._states[state] = value;
|
||||
}
|
||||
|
||||
// Monitor the states of various modules
|
||||
for (var j in this._states) {
|
||||
SettingsListener.observe(j, true, getState.bind(this, j));
|
||||
}
|
||||
},
|
||||
|
||||
// XXX Break down obj keys in a for each loop because mozSettings
|
||||
// does not currently supports multiple keys in one set()
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=779381
|
||||
setMozSettings: function(keypairs) {
|
||||
var setlock = SettingsListener.getSettingsLock();
|
||||
for (var key in keypairs) {
|
||||
// not set bluetooth key because we'll handle it separately
|
||||
// for API compatibility
|
||||
if ('bluetooth.enabled' !== key) {
|
||||
var obj = {};
|
||||
obj[key] = keypairs[key];
|
||||
setlock.set(obj);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
enablePowerSave: function() {
|
||||
// Keep the original states of various modules
|
||||
for (var j in this._states) {
|
||||
this._powerSaveResume[j] = this._states[j];
|
||||
}
|
||||
|
||||
var settingsToSet = {
|
||||
// Turn off Wifi
|
||||
'wifi.enabled': false,
|
||||
// Turn off Data
|
||||
'ril.data.enabled': false,
|
||||
// Turn off Geolocation
|
||||
'geolocation.enabled': false
|
||||
};
|
||||
|
||||
this.setMozSettings(settingsToSet);
|
||||
// Turn off Bluetooth
|
||||
window.dispatchEvent(new CustomEvent('request-disable-bluetooth'));
|
||||
|
||||
this._powerSaveEnabledLock = false;
|
||||
},
|
||||
|
||||
disablePowerSave: function() {
|
||||
var settingsToSet = {};
|
||||
|
||||
for (var state in this._powerSaveResume) {
|
||||
if (this._powerSaveResume[state] === true) {
|
||||
settingsToSet[state] = true;
|
||||
}
|
||||
}
|
||||
if (this._powerSaveResume['bluetooth.enabled'] === true) {
|
||||
// Turn on Bluetooth
|
||||
window.dispatchEvent(new CustomEvent('request-enable-bluetooth'));
|
||||
}
|
||||
|
||||
this.setMozSettings(settingsToSet);
|
||||
},
|
||||
|
||||
showPowerSavingNotification: function() {
|
||||
var clickCB = function() {
|
||||
var activityRequest = new MozActivity({
|
||||
name: 'configure',
|
||||
data: {
|
||||
target: 'device',
|
||||
section: 'battery'
|
||||
}
|
||||
});
|
||||
activityRequest.onsuccess = () => {};
|
||||
};
|
||||
|
||||
NotificationHelper.send('notification-powersaving-mode-on-title', {
|
||||
'bodyL10n': 'notification-powersaving-mode-on-description',
|
||||
'icon': 'style/icons/Power_saving_mode.png',
|
||||
'mozbehavior': {
|
||||
showOnlyOnce: true
|
||||
}
|
||||
}).then(function(notification) {
|
||||
notification.addEventListener('click', clickCB);
|
||||
});
|
||||
},
|
||||
|
||||
checkThreshold: function() {
|
||||
var key = 'powersave.threshold';
|
||||
var lock = navigator.mozSettings.createLock();
|
||||
var req = lock.get(key);
|
||||
req.onerror = function(e) {
|
||||
console.error('Error while quering setting ' + key + ': ' + e);
|
||||
};
|
||||
|
||||
req.onsuccess = (function() {
|
||||
this.doCheckThreshold(req.result[key] || -1);
|
||||
}).bind(this);
|
||||
},
|
||||
|
||||
doCheckThreshold: function(value) {
|
||||
var battery = this.batteryOverlay._battery;
|
||||
|
||||
// If 'turn on automatically' is set to 'never', don't change the
|
||||
// power saving state
|
||||
if (value == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (battery.level <= value && !this._powerSaveEnabled) {
|
||||
this.setMozSettings({
|
||||
'powersave.enabled': true
|
||||
});
|
||||
if (!this._powerSaveEnabledLock) {
|
||||
this.showPowerSavingNotification();
|
||||
this._powerSaveEnabledLock = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (battery.level > value && this._powerSaveEnabled) {
|
||||
this.setMozSettings({
|
||||
'powersave.enabled': false
|
||||
});
|
||||
return;
|
||||
}
|
||||
},
|
||||
|
||||
onBatteryChange: function() {
|
||||
var battery = this.batteryOverlay._battery;
|
||||
|
||||
if (battery.charging) {
|
||||
if (this._powerSaveEnabled) {
|
||||
this.setMozSettings({
|
||||
'powersave.enabled': false
|
||||
});
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
this.checkThreshold();
|
||||
}
|
||||
};
|
||||
|
||||
exports.PowerSave = PowerSave;
|
||||
|
||||
}(window));
|
||||
Loading…
Reference in a new issue