click-info can now return a value 'range' if some kind of guage is to be drawn

master
Gordon Williams 2022-11-10 13:55:31 +00:00
parent 38ec9aecaa
commit a6ae5240bd
1 changed files with 26 additions and 13 deletions

View File

@ -10,10 +10,13 @@ that can be scrolled through on the clock face.
Note that each item is an object with: Note that each item is an object with:
* 'item.name' : friendly name to identify an item (e.g. temperature) * 'item.name' : friendly name to identify an item (e.g. temperature)
* 'item.hasRange' : if `true`, `.get` returns `v/min/max` values (for progress bar/guage)
* 'item.get' : function that resolves with: * 'item.get' : function that resolves with:
{ {
'text' : the text to display for this item 'text' : the text to display for this item
'img' : a 24x24px image to display for this item 'img' : a 24x24px image to display for this item
'v' : (if hasRange==true) a numerical value
'min','max' : (if hasRange==true) a minimum and maximum numerical value (if this were to be displayed as a guage)
} }
* 'item.show' : called when item should be shown. Enables updates. Call BEFORE 'get' * 'item.show' : called when item should be shown. Enables updates. Call BEFORE 'get'
* 'item.hide' : called when item should be hidden. Disables updates. * 'item.hide' : called when item should be hidden. Disables updates.
@ -30,7 +33,7 @@ example.clkinfo.js :
img: atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA==") }), img: atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA==") }),
items: [ items: [
{ name : "Item1", { name : "Item1",
get : () => ({ text : "TextOfItem1", get : () => ({ text : "TextOfItem1", v : 10, min : 0, max : 100,
img : atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA==") }), img : atob("GBiBAAD+AAH+AAH+AAH+AAH/AAOHAAYBgAwAwBgwYBgwYBgwIBAwOBAwOBgYIBgMYBgAYAwAwAYBgAOHAAH/AAH+AAH+AAH+AAD+AA==") }),
show : () => {}, show : () => {},
hide : () => {} hide : () => {}
@ -63,21 +66,29 @@ exports.load = function() {
img: atob("GBiBAf8B//4B//4B//4B//4A//x4//n+f/P/P+fPn+fPn+fP3+/Px+/Px+fn3+fzn+f/n/P/P/n+f/x4//4A//4B//4B//4B//8B/w=="), img: atob("GBiBAf8B//4B//4B//4B//4A//x4//n+f/P/P+fPn+fPn+fP3+/Px+/Px+fn3+fzn+f/n/P/P/n+f/x4//4A//4B//4B//4B//8B/w=="),
items: [ items: [
{ name : "Battery", { name : "Battery",
get : () => ({ hasRange : true,
text : E.getBattery() + "%", get : () => { let v = E.getBattery(); return {
img : atob(Bangle.isCharging() ? "GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==" : "GBiBAAAAAAAAAAAAAAAAAAAAAD//+P///IAAAr//Ar//Ar//A7//A7//A7//A7//Ar//AoAAAv///D//+AAAAAAAAAAAAAAAAAAAAA==") }), text : v + "%", v : v, min:0, max:100,
img : atob(Bangle.isCharging() ? "GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==" : "GBiBAAAAAAAAAAAAAAAAAAAAAD//+P///IAAAr//Ar//Ar//A7//A7//A7//A7//Ar//AoAAAv///D//+AAAAAAAAAAAAAAAAAAAAA==")
}},
show : function() { this.interval = setInterval(()=>this.emit('redraw'), 60000); Bangle.on("charging", batteryUpdateHandler); batteryUpdateHandler(); }, show : function() { this.interval = setInterval(()=>this.emit('redraw'), 60000); Bangle.on("charging", batteryUpdateHandler); batteryUpdateHandler(); },
hide : function() { clearInterval(this.interval); delete this.interval; Bangle.removeListener("charging", batteryUpdateHandler); }, hide : function() { clearInterval(this.interval); delete this.interval; Bangle.removeListener("charging", batteryUpdateHandler); },
}, },
{ name : "Steps", get : () => ({ { name : "Steps",
text : Bangle.getHealthStatus("day").steps, hasRange : true,
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==") }), get : () => { let v = Bangle.getHealthStatus("day").steps; return {
text : v, v : v, min : 0, max : 10000, // TODO: do we have a target step amount anywhere?
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==")
}},
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); }, show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
hide : function() { Bangle.removeListener("step", stepUpdateHandler); }, hide : function() { Bangle.removeListener("step", stepUpdateHandler); },
}, },
{ name : "HRM", get : () => ({ { name : "HRM",
text : Math.round(Bangle.getHealthStatus("last").bpm) + " bpm", hasRange : true,
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==") }), get : () => { let v = Math.round(Bangle.getHealthStatus("last").bpm); return {
text : v + " bpm", v : v, min : 40, max : 200,
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==")
}},
show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus("last").bpm); hrmUpdateHandler(); }, show : function() { Bangle.setHRMPower(1,"clkinfo"); Bangle.on("HRM", hrmUpdateHandler); hrm = Math.round(Bangle.getHealthStatus("last").bpm); hrmUpdateHandler(); },
hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = "--"; }, hide : function() { Bangle.setHRMPower(0,"clkinfo"); Bangle.removeListener("HRM", hrmUpdateHandler); hrm = "--"; },
} }
@ -86,9 +97,11 @@ exports.load = function() {
var bangleItems = menu[0].items; var bangleItems = menu[0].items;
if (Bangle.getPressure){ // Altimeter may not exist if (Bangle.getPressure){ // Altimeter may not exist
bangleItems.push({ name : "Altitude", get : () => ({ bangleItems.push({ name : "Altitude",
text : alt, get : () => ({
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAAACAAAGAAAPAAEZgAOwwAPwQAZgYAwAMBgAGBAACDAADGAABv///////wAAAAAAAAAAAAAAAAAAAA==") }), text : alt, v : alt,
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAAACAAAGAAAPAAEZgAOwwAPwQAZgYAwAMBgAGBAACDAADGAABv///////wAAAAAAAAAAAAAAAAAAAA==")
}),
show : function() { this.interval = setInterval(altUpdateHandler, 60000); alt = "--"; altUpdateHandler(); }, show : function() { this.interval = setInterval(altUpdateHandler, 60000); alt = "--"; altUpdateHandler(); },
hide : function() { clearInterval(this.interval); delete this.interval; }, hide : function() { clearInterval(this.interval); delete this.interval; },
}); });