Add 'hide if charge greater than'
Move 'DEFAULTS' to try and reduce memory usage a littlemaster
parent
9cc58597cd
commit
20bb1aed84
|
|
@ -354,7 +354,7 @@
|
||||||
"name": "Battery Level Widget (with percentage)",
|
"name": "Battery Level Widget (with percentage)",
|
||||||
"shortName": "Battery Widget",
|
"shortName": "Battery Widget",
|
||||||
"icon": "widget.png",
|
"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",
|
"description": "Show the current battery level and charging status in the top right of the clock, with charge percentage",
|
||||||
"tags": "widget,battery",
|
"tags": "widget,battery",
|
||||||
"type":"widget",
|
"type":"widget",
|
||||||
|
|
|
||||||
|
|
@ -6,3 +6,4 @@
|
||||||
0.07: Add settings: percentage/color/charger icon
|
0.07: Add settings: percentage/color/charger icon
|
||||||
0.08: Draw percentage as inverted on monochrome battery
|
0.08: Draw percentage as inverted on monochrome battery
|
||||||
0.09: Fix regression stopping correct widget updates
|
0.09: Fix regression stopping correct widget updates
|
||||||
|
0.10: Add 'hide if charge greater than'
|
||||||
|
|
|
||||||
|
|
@ -11,22 +11,22 @@
|
||||||
'color': COLORS[0],
|
'color': COLORS[0],
|
||||||
'percentage': true,
|
'percentage': true,
|
||||||
'charger': true,
|
'charger': true,
|
||||||
'hideifmorethan20pct': false,
|
'hideifmorethan': 100,
|
||||||
}
|
}
|
||||||
// ...and overwrite them with any saved values
|
// ...and overwrite them with any saved values
|
||||||
// This way saved values are preserved if a new version adds more settings
|
// This way saved values are preserved if a new version adds more settings
|
||||||
const storage = require('Storage')
|
const storage = require('Storage')
|
||||||
const saved = storage.readJSON(SETTINGS_FILE, 1) || {}
|
const saved = storage.readJSON(SETTINGS_FILE, 1) || {}
|
||||||
for (const key in saved) {
|
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)
|
// creates a function to safe a specific setting, e.g. save('color')(1)
|
||||||
function save(key) {
|
function save(key) {
|
||||||
return function (value) {
|
return function (value) {
|
||||||
s[key] = value
|
s[key] = value;
|
||||||
storage.write(SETTINGS_FILE, s)
|
storage.write(SETTINGS_FILE, s);
|
||||||
WIDGETS["batpc"].reload()
|
WIDGETS["batpc"].reload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -54,10 +54,13 @@
|
||||||
save('color')(s.color)
|
save('color')(s.color)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'Hide when \> 20\%': {
|
'Hide if >': {
|
||||||
value: s.hideifmorethan20pct,
|
value: s.hideifmorethan||100,
|
||||||
format: onOffFormat,
|
min: 10,
|
||||||
onchange: save('hideifmorethan20pct'),
|
max : 100,
|
||||||
|
step: 10,
|
||||||
|
format: x => x+"%",
|
||||||
|
onchange: save('hideifmorethan'),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
E.showMenu(menu)
|
E.showMenu(menu)
|
||||||
|
|
|
||||||
|
|
@ -1 +0,0 @@
|
||||||
{"color":"By Level","percentage":true,"charger":true,"hideifmorethan20pct":false}
|
|
||||||
|
|
@ -1,10 +1,4 @@
|
||||||
(function(){
|
(function(){
|
||||||
const DEFAULTS = {
|
|
||||||
'color': 'By Level',
|
|
||||||
'percentage': true,
|
|
||||||
'charger': true,
|
|
||||||
'hideifmorethan20pct': false,
|
|
||||||
}
|
|
||||||
const COLORS = {
|
const COLORS = {
|
||||||
'white': -1,
|
'white': -1,
|
||||||
'charging': 0x07E0, // "Green"
|
'charging': 0x07E0, // "Green"
|
||||||
|
|
@ -17,10 +11,19 @@ const SETTINGS_FILE = 'widbatpc.settings.json'
|
||||||
let settings
|
let settings
|
||||||
function loadSettings() {
|
function loadSettings() {
|
||||||
settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {}
|
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) {
|
function setting(key) {
|
||||||
if (!settings) { loadSettings() }
|
if (!settings) { loadSettings() }
|
||||||
return (key in settings) ? settings[key] : DEFAULTS[key]
|
return settings[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
const levelColor = (l) => {
|
const levelColor = (l) => {
|
||||||
|
|
@ -46,24 +49,27 @@ const levelColor = (l) => {
|
||||||
const chargerColor = () => {
|
const chargerColor = () => {
|
||||||
return (setting('color') === 'Monochrome') ? COLORS.white : COLORS.charging
|
return (setting('color') === 'Monochrome') ? COLORS.white : COLORS.charging
|
||||||
}
|
}
|
||||||
|
// sets width, returns true if it changed
|
||||||
function setWidth() {
|
function setWidth() {
|
||||||
WIDGETS["batpc"].width = 40;
|
var w = 40;
|
||||||
if (Bangle.isCharging() && setting('charger')) {
|
if (Bangle.isCharging() && setting('charger'))
|
||||||
WIDGETS["batpc"].width += 16;
|
w += 16;
|
||||||
}
|
if (E.getBattery() > setting('hideifmorethan'))
|
||||||
|
w = 0;
|
||||||
|
var changed = WIDGETS["batpc"].width != w;
|
||||||
|
WIDGETS["batpc"].width = w;
|
||||||
|
return changed;
|
||||||
}
|
}
|
||||||
function draw() {
|
function draw() {
|
||||||
|
// if hidden, don't draw
|
||||||
|
if (!WIDGETS["batpc"].width) return;
|
||||||
|
// else...
|
||||||
var s = 39;
|
var s = 39;
|
||||||
var x = this.x, y = this.y;
|
var x = this.x, y = this.y;
|
||||||
const l = E.getBattery(),
|
const l = E.getBattery(),
|
||||||
c = levelColor(l);
|
c = levelColor(l);
|
||||||
const xl = x+4+l*(s-12)/100
|
const xl = x+4+l*(s-12)/100
|
||||||
|
|
||||||
if(!Bangle.isCharging() && setting('hideifmorethan20pct') && l > 20){
|
|
||||||
return;}
|
|
||||||
|
|
||||||
if (Bangle.isCharging() && setting('charger')) {
|
if (Bangle.isCharging() && setting('charger')) {
|
||||||
g.setColor(chargerColor()).drawImage(atob(
|
g.setColor(chargerColor()).drawImage(atob(
|
||||||
"DhgBHOBzgc4HOP////////////////////3/4HgB4AeAHgB4AeAHgB4AeAHg"),x,y);
|
"DhgBHOBzgc4HOP////////////////////3/4HgB4AeAHgB4AeAHgB4AeAHg"),x,y);
|
||||||
|
|
@ -104,20 +110,24 @@ function reload() {
|
||||||
g.clear();
|
g.clear();
|
||||||
Bangle.drawWidgets();
|
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) {
|
Bangle.on('charging',function(charging) {
|
||||||
if(charging) Bangle.buzz();
|
if(charging) Bangle.buzz();
|
||||||
setWidth();
|
update();
|
||||||
Bangle.drawWidgets(); // relayout widgets
|
|
||||||
g.flip();
|
g.flip();
|
||||||
});
|
});
|
||||||
var batteryInterval;
|
var batteryInterval;
|
||||||
Bangle.on('lcdPower', function(on) {
|
Bangle.on('lcdPower', function(on) {
|
||||||
if (on) {
|
if (on) {
|
||||||
WIDGETS["batpc"].draw();
|
update();
|
||||||
// refresh once a minute if LCD on
|
// refresh once a minute if LCD on
|
||||||
if (!batteryInterval)
|
if (!batteryInterval)
|
||||||
batteryInterval = setInterval(()=>WIDGETS["batpc"].draw(), 60000);
|
batteryInterval = setInterval(update, 60000);
|
||||||
} else {
|
} else {
|
||||||
if (batteryInterval) {
|
if (batteryInterval) {
|
||||||
clearInterval(batteryInterval);
|
clearInterval(batteryInterval);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue