diff --git a/apps/sleeplogalarm/README.md b/apps/sleeplogalarm/README.md index 672c4238f..42c2d6074 100644 --- a/apps/sleeplogalarm/README.md +++ b/apps/sleeplogalarm/README.md @@ -7,22 +7,22 @@ This widget searches for active alarms and raises the alarm event up to the defi --- #### Inside the settings: !!! dummy entries !!! - - __Thresholds__ submenu + - __Thresholds__ submenu Changes take effect from now on, not retrospective! - - __Max Awake__ | maximal awake duration + - __Max Awake__ | maximal awake duration _10min_ / _20min_ / ... / __60min__ / ... / _120min_ - - __Min Consecutive__ | minimal consecutive sleep duration + - __Min Consecutive__ | minimal consecutive sleep duration _10min_ / _20min_ / ... / __30min__ / ... / _120min_ - - __Deep Sleep__ | deep sleep threshold + - __Deep Sleep__ | deep sleep threshold _30_ / _31_ / ... / __100__ / ... / _200_ - - __Light Sleep__ | light sleep threshold - _100_ / _110_ / ... / __200__ / ... / _400_ + - __Light Sleep__ | light sleep threshold + _100_ / _110_ / ... / __200__ / ... / _400_ - __Reset to Default__ | reset to bold values above - - __BreakToD__ | time of day to break view + - __BreakToD__ | time of day to break view _0:00_ / _1:00_ / ... / __12:00__ / ... / _23:00_ - - __App Timeout__ | app specific lock timeout + - __App Timeout__ | app specific lock timeout __0s__ / _10s_ / ... / _120s_ - - __Enabled__ | completely en-/disables the background service + - __Enabled__ | completely en-/disables the background service __on__ / _off_ --- @@ -30,8 +30,6 @@ This widget searches for active alarms and raises the alarm event up to the defi --- #### To do list -- widget.js -- settings.js - README.md #### Requests, Bugs and Feedback diff --git a/apps/sleeplogalarm/metadata.json b/apps/sleeplogalarm/metadata.json index 3ea566acb..198d8e07a 100644 --- a/apps/sleeplogalarm/metadata.json +++ b/apps/sleeplogalarm/metadata.json @@ -8,6 +8,7 @@ "type": "widget", "tags": "tool,widget", "supports": ["BANGLEJS2"], + "dependencies": {"sleeplog": "app"}, "readme": "README.md", "storage": [ {"name": "sleeplogalarm.settings.js", "url": "settings.js"}, diff --git a/apps/sleeplogalarm/settings.js b/apps/sleeplogalarm/settings.js index c4f13d63f..38a1e5ab5 100644 --- a/apps/sleeplogalarm/settings.js +++ b/apps/sleeplogalarm/settings.js @@ -1,19 +1,66 @@ (function(back) { // define settings filename - var filename = "sleeplogalarm.json"; + var filename = "sleeplogalarm.settings.json"; - // define default vaules - var defaults = { - }; - - // assign loaded settings to default values - var settings = Object.assign(defaults, require("Storage").readJSON(filename, true) || {}); + // define settings + var settings = Object.assign({ + enabled: true, + hide: false, + drawRange: true, + color: g.theme.dark ? 65504 : 31, // yellow or blue + from: 4, // 0400 + to: 8, // 0800 + earlier: 30, + disableOnAlarm: false, // !!! not available if alarm is at the next day + msgAsPrefix: true, + msg: "...\n", + vibrate: "..", + as: true + }, require("Storage").readJSON(filename, true) || {}); // write change to storage function writeSetting() { require("Storage").writeJSON(filename, settings); } + // show widget menu + function showWidMenu() { + // set menu + var widgetMenu = { + "": { + title: "Widget Settings" + }, + /*LANG*/"< Back": () => showMain(7), + /*LANG*/"hide complete": { + value: settings.hide, + onchange: v => { + settings.hide = v; + writeSetting(); + } + }, + /*LANG*/"draw time range": { + value: settings.drawRange, + onchange: v => { + settings.drawRange = v; + writeSetting(); + } + }, + /*LANG*/"color": { + colors: [63488, 65504, 2016, 2047, 31, 63519, 0, 65535], + value: this.colors.indexOf(settings.color), + min: 0, + max: this.colors.length -1, + wrap: true, + format: v => ["red", "yellow", "green", "cyan", "blue", "magenta", "black", "white"][v], + onchange: v => { + settings.color = this.colors[v]; + writeSetting(); + } + } + }; + var menu = E.showMenu(widgetMenu); + } + // show main menu function showMain(selected) { // set menu @@ -23,19 +70,82 @@ selected: selected }, /*LANG*/"< Back": () => back(), - /*LANG*/"up to": { + /*LANG*/"from": { + value: settings.from, + min: 0, + max: 23, + wrap: true, + noList: true, + format: v => v + ":00", + onchange: v => { + settings.from = v; + writeSetting(); + } + }, + /*LANG*/"to": { + value: settings.to, + min: 1, + max: 24, + wrap: true, + noList: true, + format: v => v + ":00", + onchange: v => { + settings.to = v; + writeSetting(); + } + }, + /*LANG*/"erlier": { value: settings.earlier, step: 10, min: 10, max: 120, wrap: true, noList: true, - format: v => v + "min earlier", + format: v => v + "min", onchange: v => { settings.earlier = v; writeSetting(); } }, + /*LANG*/"disable on alarm": { + value: settings.disableOnAlarm, + onchange: v => { + settings.disableOnAlarm = v; + writeSetting(); + } + }, + /*LANG*/"message as prefix": { + value: settings.msgAsPrefix, + onchange: v => { + settings.msgAsPrefix = v; + writeSetting(); + } + }, + /*LANG*/"msg": { + value: settings.msg, + format: v => !v ? "" : v.length > 6 ? v.substring(0, 6)+"..." : v, + // setTimeout required to load after menu refresh + onchange: () => setTimeout(msg => { + if (require("Storage").read("textinput")) { + g.clear(); + require("textinput").input({text: msg}).then(result => { + settings.msg = result; + writeSetting(); + showMenu(7); + }); + } else { + E.showAlert(/*LANG*/"No keyboard app installed").then(() => showMenu(7)); + } + }), + }, + /*LANG*/"vibration pattern": require("buzz_menu.js").pattern( + settings.vibrate, + v => { + settings.vibrate = v; + writeSetting(); + } + ), + /*LANG*/"Widget Settings": () => showWidMenu(), /*LANG*/"Enabled": { value: settings.enabled, onchange: v => {