mirror of https://github.com/espruino/BangleApps
Merge branch 'lightnin-master'
commit
5bf3bfbca6
|
@ -354,7 +354,7 @@
|
|||
"name": "Battery Level Widget (with percentage)",
|
||||
"shortName": "Battery Widget",
|
||||
"icon": "widget.png",
|
||||
"version":"0.09",
|
||||
"version":"0.10",
|
||||
"description": "Show the current battery level and charging status in the top right of the clock, with charge percentage",
|
||||
"tags": "widget,battery",
|
||||
"type":"widget",
|
||||
|
@ -1372,7 +1372,7 @@
|
|||
{"name":"hidcam.img","url":"app-icon.js","evaluate":true}
|
||||
]
|
||||
},
|
||||
{
|
||||
{
|
||||
"id": "rclock",
|
||||
"name": "Round clock with seconds, minutes and date",
|
||||
"shortName":"Round Clock",
|
||||
|
|
|
@ -6,3 +6,4 @@
|
|||
0.07: Add settings: percentage/color/charger icon
|
||||
0.08: Draw percentage as inverted on monochrome battery
|
||||
0.09: Fix regression stopping correct widget updates
|
||||
0.10: Add 'hide if charge greater than'
|
||||
|
|
|
@ -11,21 +11,22 @@
|
|||
'color': COLORS[0],
|
||||
'percentage': true,
|
||||
'charger': true,
|
||||
'hideifmorethan': 100,
|
||||
}
|
||||
// ...and overwrite them with any saved values
|
||||
// This way saved values are preserved if a new version adds more settings
|
||||
const storage = require('Storage')
|
||||
const saved = storage.readJSON(SETTINGS_FILE, 1) || {}
|
||||
for (const key in saved) {
|
||||
s[key] = saved[key]
|
||||
s[key] = saved[key];
|
||||
}
|
||||
|
||||
// creates a function to safe a specific setting, e.g. save('color')(1)
|
||||
function save(key) {
|
||||
return function (value) {
|
||||
s[key] = value
|
||||
storage.write(SETTINGS_FILE, s)
|
||||
WIDGETS["batpc"].reload()
|
||||
s[key] = value;
|
||||
storage.write(SETTINGS_FILE, s);
|
||||
WIDGETS["batpc"].reload();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,8 +52,16 @@
|
|||
const newIndex = (oldIndex + 1) % COLORS.length
|
||||
s.color = COLORS[newIndex]
|
||||
save('color')(s.color)
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
'Hide if >': {
|
||||
value: s.hideifmorethan||100,
|
||||
min: 10,
|
||||
max : 100,
|
||||
step: 10,
|
||||
format: x => x+"%",
|
||||
onchange: save('hideifmorethan'),
|
||||
},
|
||||
}
|
||||
E.showMenu(menu)
|
||||
})
|
||||
|
|
|
@ -1,9 +1,4 @@
|
|||
(function(){
|
||||
const DEFAULTS = {
|
||||
'color': 'By Level',
|
||||
'percentage': true,
|
||||
'charger': true,
|
||||
}
|
||||
const COLORS = {
|
||||
'white': -1,
|
||||
'charging': 0x07E0, // "Green"
|
||||
|
@ -16,10 +11,19 @@ const SETTINGS_FILE = 'widbatpc.settings.json'
|
|||
let settings
|
||||
function loadSettings() {
|
||||
settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {}
|
||||
const DEFAULTS = {
|
||||
'color': 'By Level',
|
||||
'percentage': true,
|
||||
'charger': true,
|
||||
'hideifmorethan': 100,
|
||||
};
|
||||
Object.keys(DEFAULTS).forEach(k=>{
|
||||
if (settings[k]===undefined) settings[k]=DEFAULTS[k]
|
||||
});
|
||||
}
|
||||
function setting(key) {
|
||||
if (!settings) { loadSettings() }
|
||||
return (key in settings) ? settings[key] : DEFAULTS[key]
|
||||
return settings[key];
|
||||
}
|
||||
|
||||
const levelColor = (l) => {
|
||||
|
@ -45,16 +49,27 @@ const levelColor = (l) => {
|
|||
const chargerColor = () => {
|
||||
return (setting('color') === 'Monochrome') ? COLORS.white : COLORS.charging
|
||||
}
|
||||
|
||||
// sets width, returns true if it changed
|
||||
function setWidth() {
|
||||
WIDGETS["batpc"].width = 40;
|
||||
if (Bangle.isCharging() && setting('charger')) {
|
||||
WIDGETS["batpc"].width += 16;
|
||||
}
|
||||
var w = 40;
|
||||
if (Bangle.isCharging() && setting('charger'))
|
||||
w += 16;
|
||||
if (E.getBattery() > setting('hideifmorethan'))
|
||||
w = 0;
|
||||
var changed = WIDGETS["batpc"].width != w;
|
||||
WIDGETS["batpc"].width = w;
|
||||
return changed;
|
||||
}
|
||||
function draw() {
|
||||
// if hidden, don't draw
|
||||
if (!WIDGETS["batpc"].width) return;
|
||||
// else...
|
||||
var s = 39;
|
||||
var x = this.x, y = this.y;
|
||||
const l = E.getBattery(),
|
||||
c = levelColor(l);
|
||||
const xl = x+4+l*(s-12)/100
|
||||
|
||||
if (Bangle.isCharging() && setting('charger')) {
|
||||
g.setColor(chargerColor()).drawImage(atob(
|
||||
"DhgBHOBzgc4HOP////////////////////3/4HgB4AeAHgB4AeAHgB4AeAHg"),x,y);
|
||||
|
@ -64,9 +79,7 @@ function draw() {
|
|||
g.fillRect(x,y+2,x+s-4,y+21);
|
||||
g.clearRect(x+2,y+4,x+s-6,y+19);
|
||||
g.fillRect(x+s-3,y+10,x+s,y+14);
|
||||
const l = E.getBattery(),
|
||||
c = levelColor(l);
|
||||
const xl = x+4+l*(s-12)/100
|
||||
|
||||
g.setColor(c).fillRect(x+4,y+6,xl,y+17);
|
||||
g.setColor(-1);
|
||||
if (!setting('percentage')) {
|
||||
|
@ -97,20 +110,24 @@ function reload() {
|
|||
g.clear();
|
||||
Bangle.drawWidgets();
|
||||
}
|
||||
// update widget - redraw just widget, or all widgets if size changed
|
||||
function update() {
|
||||
if (setWidth()) Bangle.drawWidgets();
|
||||
else WIDGETS["batpc"].draw();
|
||||
}
|
||||
|
||||
Bangle.on('charging',function(charging) {
|
||||
if(charging) Bangle.buzz();
|
||||
setWidth();
|
||||
Bangle.drawWidgets(); // relayout widgets
|
||||
update();
|
||||
g.flip();
|
||||
});
|
||||
var batteryInterval;
|
||||
Bangle.on('lcdPower', function(on) {
|
||||
if (on) {
|
||||
WIDGETS["batpc"].draw();
|
||||
update();
|
||||
// refresh once a minute if LCD on
|
||||
if (!batteryInterval)
|
||||
batteryInterval = setInterval(()=>WIDGETS["batpc"].draw(), 60000);
|
||||
batteryInterval = setInterval(update, 60000);
|
||||
} else {
|
||||
if (batteryInterval) {
|
||||
clearInterval(batteryInterval);
|
||||
|
|
Loading…
Reference in New Issue