forked from FOSS/BangleApps
Merge branch 'espruino:master' into master
commit
c1ccc1d8e5
|
@ -0,0 +1 @@
|
||||||
|
0.01: First version
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"id": "widsleepstatus",
|
||||||
|
"name": "Sleep Status Widget",
|
||||||
|
"version": "0.01",
|
||||||
|
"description": "Shows current status of sleep from sleeplog app.",
|
||||||
|
"icon": "widget.png",
|
||||||
|
"type": "widget",
|
||||||
|
"tags": "widget,sleep",
|
||||||
|
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||||
|
"dependencies" : { "sleeplog":"app" },
|
||||||
|
"storage": [
|
||||||
|
{"name":"widsleepstatus.wid.js","url":"widget.js"},
|
||||||
|
{"name":"widsleepstatus.settings.js","url":"settings.js"}
|
||||||
|
],
|
||||||
|
"data": [{"name":"widsleepstatus.json"}]
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**
|
||||||
|
* @param {function} back Use back() to return to settings menu
|
||||||
|
*/
|
||||||
|
(function(back) {
|
||||||
|
const SETTINGS_FILE = "widsleepstatus.json";
|
||||||
|
const storage = require("Storage");
|
||||||
|
|
||||||
|
let s = {
|
||||||
|
hidewhenawake: true
|
||||||
|
};
|
||||||
|
const saved = storage.readJSON(SETTINGS_FILE, 1) || {};
|
||||||
|
for(const key in saved) {
|
||||||
|
s[key] = saved[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
function save(key) {
|
||||||
|
return function(value) {
|
||||||
|
s[key] = value;
|
||||||
|
storage.write(SETTINGS_FILE, s);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const menu = {
|
||||||
|
"": {"title": "Sleep Status Widget"},
|
||||||
|
"< Back": back,
|
||||||
|
"Hide when awake": {
|
||||||
|
value: s.hidewhenawake,
|
||||||
|
onchange: save("hidewhenawake"),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
E.showMenu(menu);
|
||||||
|
});
|
|
@ -0,0 +1,38 @@
|
||||||
|
(function(){
|
||||||
|
if (!sleeplog) return; // sleeplog not installed
|
||||||
|
|
||||||
|
const SETTINGS_FILE = 'widsleepstatus.json';
|
||||||
|
let settings;
|
||||||
|
function loadSettings() {
|
||||||
|
settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {};
|
||||||
|
const DEFAULTS = {
|
||||||
|
'hidewhenawake': true
|
||||||
|
};
|
||||||
|
Object.keys(DEFAULTS).forEach(k=>{
|
||||||
|
if (settings[k]===undefined) settings[k]=DEFAULTS[k];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const status = sleeplog.status || 0;
|
||||||
|
WIDGETS["sleepstatus"]={area:"tr",width:status >= 2 ? 24 : 0,draw:function(w) {
|
||||||
|
g.reset();
|
||||||
|
// Icons from https://icons8.com/icon/set/household/small
|
||||||
|
switch (status) {
|
||||||
|
case 0: // unknown
|
||||||
|
case 1: // not worn
|
||||||
|
// No icon here. Width is set to 0
|
||||||
|
break;
|
||||||
|
case 2: // awake
|
||||||
|
loadSettings();
|
||||||
|
if (settings && !settings["hidewhenawake"]) g.drawImage(atob("GBjBAP//AAAAAAAAAAAADAAAPgAAIwABIzABsmABnmAMwMAef4AePwAeIwAeIwAeIwAeIwAf//gb//gYNhgftvgftngeNngAAAAAAAAAAAA="), w.x, w.y);
|
||||||
|
break;
|
||||||
|
case 3: // light sleep
|
||||||
|
g.drawImage(atob("GBjBAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAABgAABgAABgAABnH/xnv/xlsARnsAZnMAZ///5gAAZgAAZgAAYAAAAAAAAAAAA="), w.x, w.y);
|
||||||
|
break;
|
||||||
|
case 4: // deep sleep
|
||||||
|
g.drawImage(atob("GBjBAP//AAAAAAAAAAAAAeAD8OAD8cAA4fABwAADgABj8ABgAABgAABgAABnH/xnv/xlsARnsAZnMAZ///5gAAZgAAZgAAYAAAAAAAAAAAA="), w.x, w.y);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
})()
|
Binary file not shown.
After Width: | Height: | Size: 698 B |
Loading…
Reference in New Issue