diff --git a/.gitignore b/.gitignore index 523dc5f20..fce2efb1a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ appdates.csv _config.yml tests/Layout/bin/tmp.* tests/Layout/testresult.bmp -apps.local.json \ No newline at end of file +apps.local.json +_site diff --git a/apps/activityreminder/app.js b/apps/activityreminder/app.js index 39c5bc71f..9fb52e9ac 100644 --- a/apps/activityreminder/app.js +++ b/apps/activityreminder/app.js @@ -1,5 +1,5 @@ function drawAlert(){ - E.showPrompt("Innactivity detected",{ + E.showPrompt("Inactivity detected",{ title:"Activity reminder", buttons : {"Ok": true,"Dismiss": false} }).then(function(v) { diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 3f56f4c20..e3b69e76e 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -19,3 +19,5 @@ 0.18: Cope with >1 identical alarm at once (#1667) 0.19: Ensure rescheduled alarms that already fired have 'last' reset 0.20: Use the new 'sched' factories to initialize new alarms/timers +0.21: Fix time reset after a day of week change (#1676) +0.22: Refactor some methods to scheduling library \ No newline at end of file diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 1fc32ecb9..15a4c3774 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -4,23 +4,6 @@ Bangle.drawWidgets(); // An array of alarm objects (see sched/README.md) let alarms = require("sched").getAlarms(); -// time in ms -> { hrs, mins } -function decodeTime(t) { - t = 0 | t; // sanitise - let hrs = 0 | (t / 3600000); - return { hrs: hrs, mins: Math.round((t - hrs * 3600000) / 60000) }; -} - -// time in { hrs, mins } -> ms -function encodeTime(o) { - return o.hrs * 3600000 + o.mins * 60000; -} - -function formatTime(t) { - let o = decodeTime(t); - return o.hrs + ":" + ("0" + o.mins).substr(-2); -} - function getCurrentTime() { let time = new Date(); return ( @@ -48,10 +31,10 @@ function showMainMenu() { var type,txt; // a leading space is currently required (JS error in Espruino 2v12) if (alarm.timer) { type = /*LANG*/"Timer"; - txt = " "+formatTime(alarm.timer); + txt = " "+require("sched").formatTime(alarm.timer); } else { type = /*LANG*/"Alarm"; - txt = " "+formatTime(alarm.t); + txt = " "+require("sched").formatTime(alarm.t); } if (alarm.rp) txt += "\0"+atob("FBaBAAABgAAcAAHn//////wAHsABzAAYwAAMAADAAAAAAwAAMAADGAAzgAN4AD//////54AAOAABgAA="); // rename duplicate alarms @@ -94,7 +77,7 @@ function editAlarm(alarmIndex, alarm) { let a = require("sched").newDefaultAlarm(); if (!newAlarm) Object.assign(a, alarms[alarmIndex]); if (alarm) Object.assign(a,alarm); - let t = decodeTime(a.t); + let t = require("sched").decodeTime(a.t); const menu = { '': { 'title': /*LANG*/'Alarm' }, @@ -119,7 +102,11 @@ function editAlarm(alarmIndex, alarm) { }, /*LANG*/'Days': { value: "SMTWTFS".split("").map((d,n)=>a.dow&(1< editDOW(a.dow, d=>{a.dow=d;editAlarm(alarmIndex,a)}) + onchange: () => editDOW(a.dow, d => { + a.dow = d; + a.t = encodeTime(t); + editAlarm(alarmIndex, a); + }) }, /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), /*LANG*/'Auto Snooze': { @@ -129,7 +116,7 @@ function editAlarm(alarmIndex, alarm) { } }; menu[/*LANG*/"Save"] = function() { - a.t = encodeTime(t); + a.t = require("sched").encodeTime(t); a.last = (a.t < getCurrentTime()) ? (new Date()).getDate() : 0; if (newAlarm) alarms.push(a); else alarms[alarmIndex] = a; @@ -151,7 +138,7 @@ function editTimer(alarmIndex, alarm) { let a = require("sched").newDefaultTimer(); if (!newAlarm) Object.assign(a, alarms[alarmIndex]); if (alarm) Object.assign(a,alarm); - let t = decodeTime(a.timer); + let t = require("sched").decodeTime(a.timer); const menu = { '': { 'title': /*LANG*/'Timer' }, @@ -172,7 +159,7 @@ function editTimer(alarmIndex, alarm) { /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), }; menu[/*LANG*/"Save"] = function() { - a.timer = encodeTime(t); + a.timer = require("sched").encodeTime(t); a.t = getCurrentTime() + a.timer; a.last = 0; if (newAlarm) alarms.push(a); diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index db36b3ca9..906df810f 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.20", + "version": "0.22", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", diff --git a/apps/launch/README.md b/apps/launch/README.md new file mode 100644 index 000000000..4e6185dea --- /dev/null +++ b/apps/launch/README.md @@ -0,0 +1,14 @@ +Launcher +======== + +This is the default launcher but you can replace it with a customised launcher. + +The app is needed to display a menu with all the apps installed on your Bangle. You can launch an app by touching its name/icon. + +Settings +-------- + +- `Font` - The font used (`4x6`, `6x8`, `12x20`, `6x15` or `Vector`). Default `12x20`. +- `Vector Font Size` - The size of the font if `Font` is set to `Vector`. Default `10`. +- `Show Clocks` - If set to `No` then clocks won't appear in the app list. Default `Yes`. +- `Fullscreen` - If set to `Yes` then widgets won't be loaded. Default `No`. diff --git a/apps/launch/metadata.json b/apps/launch/metadata.json index ab218412d..da76fc4bb 100644 --- a/apps/launch/metadata.json +++ b/apps/launch/metadata.json @@ -4,6 +4,7 @@ "shortName": "Launcher", "version": "0.13", "description": "This is needed to display a menu allowing you to choose your own applications. You can replace this with a customised launcher.", + "readme": "README.md", "icon": "app.png", "type": "launch", "tags": "tool,system,launcher", diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index a96f125d3..a3ee37326 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -46,3 +46,4 @@ 0.31: Option to disable icon flashing 0.32: Added an option to allow quiet mode to override message auto-open 0.33: Timeout from the message list screen if the message being displayed is removed and there is a timer going +0.34: Don't buzz for 'map' update messages diff --git a/apps/messages/app.js b/apps/messages/app.js index 617801f61..85d818bd5 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -52,7 +52,8 @@ var MESSAGES = require("Storage").readJSON("messages.json",1)||[]; if (!Array.isArray(MESSAGES)) MESSAGES=[]; var onMessagesModified = function(msg) { // TODO: if new, show this new one - if (msg && msg.id!=="music" && msg.new && !((require('Storage').readJSON('setting.json', 1) || {}).quiet)) { + if (msg && msg.id!=="music" && msg.new && active!="map" && + !((require('Storage').readJSON('setting.json', 1) || {}).quiet)) { if (WIDGETS["messages"]) WIDGETS["messages"].buzz(); else Bangle.buzz(); } diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 228e44d35..ffb4f8b8a 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.33", + "version": "0.34", "description": "App to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 0f935caf8..7372f9c4a 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -3,3 +3,4 @@ 0.03: Fix `getTimeToAlarm` for a timer already used at same day, don't set `last` for timers. 0.04: Fix `getTimeToAlarm` to check for next dow if alarm.t lower currentTime. 0.05: Export new functions (`newDefaultAlarm/Timer`), add Settings page +0.06: Refactor some methods to library diff --git a/apps/sched/lib.js b/apps/sched/lib.js index bfad1ac2d..58ba5daf0 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -106,4 +106,21 @@ exports.getSettings = function () { // Write the updated settings back to storage exports.setSettings = function(settings) { require("Storage").writeJSON("sched.settings.json", settings); -}; \ No newline at end of file +}; + +// time in ms -> { hrs, mins } +exports.decodeTime = function(t) { + t = 0 | t; // sanitise + let hrs = 0 | (t / 3600000); + return { hrs: hrs, mins: Math.round((t - hrs * 3600000) / 60000) }; +} + +// time in { hrs, mins } -> ms +exports.encodeTime = function(o) { + return o.hrs * 3600000 + o.mins * 60000; +} + +exports.formatTime = function(t) { + let o = exports.decodeTime(t); + return o.hrs + ":" + ("0" + o.mins).substr(-2); +} diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index 3454d2397..5f61d7d04 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.05", + "version": "0.06", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", diff --git a/apps/sched/sched.js b/apps/sched/sched.js index 83f03ac01..7c97600d9 100644 --- a/apps/sched/sched.js +++ b/apps/sched/sched.js @@ -5,23 +5,11 @@ if (Bangle.SCHED) { delete Bangle.SCHED; } -// time in ms -> { hrs, mins } -function decodeTime(t) { - t = 0|t; // sanitise - var hrs = 0|(t/3600000); - return { hrs : hrs, mins : Math.round((t-hrs*3600000)/60000) }; -} - -function formatTime(t) { - var o = decodeTime(t); - return o.hrs+":"+("0"+o.mins).substr(-2); -} - function showAlarm(alarm) { const settings = require("sched").getSettings(); let msg = ""; - msg += alarm.timer ? formatTime(alarm.timer) : formatTime(alarm.t); + msg += alarm.timer ? require("sched").formatTime(alarm.timer) : require("sched").formatTime(alarm.t); if (alarm.msg) { msg += "\n"+alarm.msg; } else { diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index b07c5b9f7..875b3c1da 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -2,3 +2,4 @@ 0.02: Respect Quiet Mode 0.03: Add compatibility for Bangle.js 2 and new firmware, added "Alarm at " for the alarm time 0.04: Read alarms from new scheduling library, account for higher acceleration sensor noise on Bangle.js 2 +0.05: Refactor decodeTime() to scheduling library diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index dcd176617..236b71c0b 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -38,19 +38,11 @@ function calc_ess(acc_magn) { } } -// copied from alarm app -// time in ms -> { hrs, mins } -function decodeTime(t) { - t = 0|t; // sanitise - var hrs = 0|(t/3600000); - return { hrs : hrs, mins : Math.round((t-hrs*3600000)/60000) }; -} - // locate next alarm var nextAlarm; active.forEach(alarm => { const now = new Date(); - const t = decodeTime(alarm.t); + const t = require("sched").decodeTime(alarm.t); var dateAlarm = new Date(now.getFullYear(), now.getMonth(), now.getDate(), t.hrs, t.mins); if (dateAlarm < now) { // dateAlarm in the past, add 24h dateAlarm.setTime(dateAlarm.getTime() + (24*60*60*1000)); diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index bc75027c2..aecfa36e4 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -2,11 +2,12 @@ "id": "sleepphasealarm", "name": "SleepPhaseAlarm", "shortName": "SleepPhaseAlarm", - "version": "0.04", + "version": "0.05", "description": "Uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments (ESS, see https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en). This app will read the next alarm from the alarm application and will wake you up to 30 minutes early at the best guessed time when you are almost already awake.", "icon": "app.png", "tags": "alarm", "supports": ["BANGLEJS","BANGLEJS2"], + "dependencies": {"scheduler":"type"}, "storage": [ {"name":"sleepphasealarm.app.js","url":"app.js"}, {"name":"sleepphasealarm.img","url":"app-icon.js","evaluate":true} diff --git a/core b/core index b04f32553..89049a5c7 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit b04f32553935f1479ad226ce1b2cff4f4b2e1a6f +Subproject commit 89049a5c7c80d2b56dc235d135fc63b80789db96