Add files via upload
parent
e068ba789a
commit
29933cb4e8
|
|
@ -1 +1 @@
|
|||
|
||||
0.01: New App!
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
# Sleep Quiet
|
||||
|
||||
Set Quiet mode (or alarms only mode), when the sleep tracking app detects sleep (each 10 min evaluated)
|
||||
|
||||
## Usage
|
||||
|
||||
When activated, app disables all notifications / all except alarms when sleep detected.
|
||||
|
||||
## Controls
|
||||
|
||||
In the app you can activate / deactivate the functionality and define if all notifications / all except alarms are to be silenced.
|
||||
|
||||
## Creator
|
||||
|
||||
[jla-42](https://github.com/jla-42)
|
||||
|
||||
## Note
|
||||
The app is based upon the [sleeplog](https://github.com/espruino/BangleApps/tree/master/apps/sleeplog) app.
|
||||
|
||||
It reuses the widget from [Quiet Mode Schedule and Widget](https://github.com/espruino/BangleApps/tree/master/apps/qmsched), as it does exactly what I needed, so why reinvent the wheel.
|
||||
|
||||
## ToDos
|
||||
-further code clean up
|
||||
|
||||
-optimization of code (and check if needed)
|
||||
|
||||
-feedback is always welcome
|
||||
|
|
@ -0,0 +1 @@
|
|||
require("heatshrink").decompress(atob("mEw4UA///jc+tfUvk+Jf8AhWoBhUoBZWgBRMCwAvKHa5bTG5UqJ4OqBY+qBYJpIBYRpIBYRRIBYQAIBbJhJBYIBBktVAAVoBYmoj//AAXWBYsdC4d1BZVdGwILO0ALIAAWdBY+vIQILI04LBrojKAAoLyX40CBeUqBZD1HAH8AA="))
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
const SETTINGS_FILE = "quietSwitch.json";
|
||||
const storage = require("Storage");
|
||||
let settings = storage.readJSON('setting.json', 1);
|
||||
let saved = storage.readJSON(SETTINGS_FILE, 1) || {};
|
||||
|
||||
// Main menu
|
||||
var mainmenu = {
|
||||
"" : {
|
||||
"title" : "Quiet Switch"
|
||||
},
|
||||
|
||||
"Quiet Switch" : {
|
||||
value : saved.quietWhenSleep,
|
||||
format : v => v?"On":"Off",
|
||||
min:0,max:1,step:1,
|
||||
onchange :v=>{
|
||||
saved.quietWhenSleep = v;
|
||||
storage.writeJSON(SETTINGS_FILE,saved);
|
||||
}
|
||||
},
|
||||
"Quiet Mode" : {
|
||||
value : saved.quietMode,
|
||||
format : v => v?"Alerts":"Silent",
|
||||
min:0,max:1,step:1,
|
||||
onchange :v=>{
|
||||
saved.quietMode = v;
|
||||
storage.writeJSON(SETTINGS_FILE,saved);
|
||||
}
|
||||
},
|
||||
"Exit" : function() {load();},
|
||||
};
|
||||
|
||||
// Actually display the menu
|
||||
E.showMenu(mainmenu);
|
||||
|
||||
// Function to fix time format
|
||||
function fixTime(h, m) {
|
||||
if (h.toString().length <2) {
|
||||
h = "0" + h.toString();
|
||||
}
|
||||
if (m.toString().length <2) {
|
||||
m = "0" + m.toString();
|
||||
}
|
||||
return h.toString() +":" + m.toString();
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
|
|
@ -0,0 +1,52 @@
|
|||
// first ensure that the sleeplog trigger object is available (sleeplog is enabled)
|
||||
if (typeof (global.sleeplog || {}).trigger === "object") {
|
||||
// then add your parameters with the function to call as object into the trigger object
|
||||
|
||||
sleeplog.trigger["quietMode"] = {
|
||||
onChange: true, // false as default, if true call fn only on a status change
|
||||
from: 0, // 0 as default, in ms, first time fn will be called
|
||||
// to: 24*60*60*1000, // 24h as default, in ms, last time fn will be called
|
||||
to: 0,
|
||||
// reference time to from & to is rounded to full minutes
|
||||
fn: function(data, thisTriggerEntry) {
|
||||
aSettings = require('Storage').readJSON('quietSwitch.json', 1) || {};
|
||||
const DEFAULTS = {
|
||||
'quietWhenSleep': false,
|
||||
'quietMode': 1
|
||||
};
|
||||
Object.keys(DEFAULTS).forEach(k => {
|
||||
if (aSettings[k] === undefined) aSettings[k] = DEFAULTS[k];
|
||||
});
|
||||
|
||||
if (aSettings && aSettings['quietWhenSleep']){
|
||||
console.log("the sleep status is: "+data.status);
|
||||
quietMode = aSettings['quietMode'];
|
||||
delete aSettings;
|
||||
if ((data.status === 3 || data.status === 4)
|
||||
&& (data.prevStatus !== 3 && data.prevStatus !== 4 )) {
|
||||
bSettings = require("Storage").readJSON('setting.json',true)||{};
|
||||
current = 0|bSettings.quiet;
|
||||
console.log("quiet mode is:" + current);
|
||||
if (current !== quietMode ){
|
||||
console.log("fallen asleep");
|
||||
bSettings.quiet = quietMode;
|
||||
require("Storage").writeJSON("setting.json", bSettings);
|
||||
}
|
||||
delete bSettings;
|
||||
}
|
||||
if ((data.status === 2 || data.status === 1)
|
||||
&& (data.prevStatus !== 2 && data.prevStatus !== 1 )) {
|
||||
bSettings = require("Storage").readJSON('setting.json',true)||{};
|
||||
current = 0|bSettings.quiet;
|
||||
console.log("quiet mode is:" + current);
|
||||
if (current !== 0 ){
|
||||
console.log("woken up");
|
||||
bSettings.quiet = 0;
|
||||
require("Storage").writeJSON("setting.json", bSettings);
|
||||
}
|
||||
delete bSettings;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
{ "id": "slpquiet",
|
||||
"name": "Sleep Quiet (activate quiet mode when asleep)",
|
||||
"shortName":"Sleep Quiet",
|
||||
"version":"0.01",
|
||||
"description": "Set Quiet mode (or alarms only mode), when the sleep tracking app detects sleep (each 10 min evaluated)",
|
||||
"icon": "app.png",
|
||||
"tags": "tool,widget",
|
||||
"supports" : ["BANGLEJS2"],
|
||||
"readme": "README.md",
|
||||
"storage": [
|
||||
{"name":"slpquiet.app.js","url":"app.js"},
|
||||
{"name":"slpquiet.boot.js","url":"boot.js"},
|
||||
{"name":"slpquiet.img","url":"app-icon.js","evaluate":true},
|
||||
{"name":"slpquiet.wid.js","url":"widget.js"}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
(function() {
|
||||
WIDGETS["qmsched"] = {
|
||||
area: "tl",
|
||||
width: ((require("Storage").readJSON("setting.json", 1) || {}).quiet|0) ? 24 : 0,
|
||||
draw: function() {
|
||||
const mode = (require("Storage").readJSON("setting.json", 1) || {}).quiet|0;
|
||||
if (mode===0) { // Off
|
||||
if (this.width!==0) {
|
||||
this.width = 0;
|
||||
Bangle.drawWidgets();
|
||||
}
|
||||
return;
|
||||
}
|
||||
// not Off: make sure width is correct
|
||||
if (this.width!==24) {
|
||||
this.width = 24;
|
||||
Bangle.drawWidgets();
|
||||
return; // drawWidgets will call draw again
|
||||
}
|
||||
let x = this.x, y = this.y;
|
||||
g.reset().clearRect(x, y, x+23, y+23);
|
||||
// quiet mode: draw red one-way-street sign (dim red on Bangle.js 1)
|
||||
x = this.x+11;y = this.y+11; // center of widget
|
||||
g.setColor(process.env.HWVERSION===2 ? 1 : 0.8, 0, 0).fillCircle(x, y, 8);
|
||||
g.setColor(g.theme.bg).fillRect(x-6, y-2, x+6, y+2);
|
||||
if (mode>1) {return;} // no alarms
|
||||
// alarms still on: draw alarm icon in bottom-right corner
|
||||
x = this.x+18;y = this.y+17; // center of alarm
|
||||
g.setColor(1, 1, 0)
|
||||
.fillCircle(x, y, 3) // alarm body
|
||||
.fillRect(x-5, y+2, x+5, y+3) // bottom ridge
|
||||
.fillRect(x-1, y-5, x+1, y+5).drawLine(x, y-6, x, y+6) // top+bottom
|
||||
.drawLine(x+5, y-3, x+3, y-5).drawLine(x-5, y-3, x-3, y-5); // wriggles
|
||||
},
|
||||
};
|
||||
})();
|
||||
Loading…
Reference in New Issue