Merge branch 'lightnin-master'

pull/318/head^2
Gordon Williams 2020-04-20 10:07:04 +01:00
commit 5bf3bfbca6
4 changed files with 54 additions and 27 deletions

View File

@ -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",

View File

@ -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'

View File

@ -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)
})

View File

@ -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);