BangleApps/apps/widbatwarn/widget.js

62 lines
1.8 KiB
JavaScript
Raw Normal View History

2020-07-20 19:57:09 +00:00
(function() {
const SETTINGS_FILE = "widbatwarn.json";
let settings;
function loadSettings() {
settings = require("Storage").readJSON(SETTINGS_FILE, 1) || {};
const DEFAULTS = {
buzz: true,
percentage: 10,
};
Object.keys(DEFAULTS).forEach(k => {
if (settings[k]===undefined) settings[k] = DEFAULTS[k];
});
}
function setting(key) {
if (!settings) { loadSettings(); }
return settings[key];
}
let warning = false; // did we show the warning already?
function check() {
if (Bangle.isCharging()
|| E.getBattery()>setting("percentage")) {
require("notify").hide({id: "widbatwarn"});
warning = false;
return;
}
if (warning) return; // already warned
warning = true; // only show once (until we recharge)
require("notify").show({
size: 56, id: "widbatwarn",
// battery-low.png
icon: require("heatshrink").decompress(atob("jEYwgfchnM5nABaQJCBoQLSAhAL/Bf6bHAAYLpACgA==")),
title: "Low Battery",
render: a => {
g.setFont("6x8", 2).setFontAlign(-1, 0)
.setColor(-1).drawString("Battery: ", a.x+8, a.y+a.h/2)
.setColor(0xF800).drawString(`${E.getBattery()}%`, a.x+8+100, a.y+a.h/2);
},
});
2021-03-23 18:55:28 +00:00
if (setting("buzz")
&& !(require('Storage').readJSON('setting.json',1)||{}).quiet) {
Bangle.buzz();
}
2020-07-20 19:57:09 +00:00
}
Bangle.on("charging", check);
function reload() {
loadSettings();
// check right away, so user sees it work when fiddling with settings
check();
}
// we never draw anything, but 'area' and 'draw' are required
WIDGETS["batwarn"] = {width: 0, reload: reload, area: "tl", draw: () => {}};
// check every minute
// deliberately not right away, to prevent instant notifications in settings
setTimeout(check, 60000);
})();