BangleApps_old/apps/smartbatt/clkinfo.js

85 lines
2.0 KiB
JavaScript

(function() {
var batt;
//updates values
function getHrsFormatted(hrsLeft){
var daysLeft = hrsLeft / 24;
daysLeft = Math.round(daysLeft);
if(daysLeft >= 1) {
return daysLeft+"d";
}
else {
return Math.round(hrsLeft)+"h";
}
}
//draws battery icon and fill bar
function drawBatt(){
batt =E.getBattery();
var s=24,g=Graphics.createArrayBuffer(24,24,1,{msb:true});
g.fillRect(0,6,s-3,18).clearRect(2,8,s-5,16).fillRect(s-2,10,s,15).fillRect(3,9,3+batt*(s-9)/100,15);
g.transparent=0;
return g.asImage("string");
}
//calls both updates for values and icons.
//might split in the future since values updates once every five minutes so we dont need to call it in every minute while the battery can be updated once a minute.
function updateDisplay(){
drawBatt();
}
return {
name: "SmartBatt",
items: [
{ name : "BattStatus",
get : () => {
var img = drawBatt();
var data=require("smartbatt").get();
//update clock info according to batt state
if (Bangle.isCharging()) {
return { text: batt+"%", img };
}
else{
return { text: getHrsFormatted(data.hrsLeft), img };
}
},
show : function() {
this.interval = setInterval(()=>{
updateDisplay();
this.emit('redraw');
}, 300000);
},
hide : function() {
clearInterval(this.interval);
this.interval = undefined;
}
},
{ name : "AvgDrainage",
get : () => {
var img = drawBatt()
var data=require("smartbatt").get();
return { text: data.avgDrainage.toFixed(2)+"/h", img };
},
show : function() {
this.interval = setInterval(()=>{
this.emit('redraw');
}, 300000);
},
hide : function() {
clearInterval(this.interval);
this.interval = undefined;
}
}
]
};
})