Merge branch 'espruino:master' into master

pull/1726/head
sir-indy 2022-04-21 17:08:32 +01:00 committed by GitHub
commit ecb0c372f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 62 additions and 55 deletions

3
.gitignore vendored
View File

@ -9,4 +9,5 @@ appdates.csv
_config.yml
tests/Layout/bin/tmp.*
tests/Layout/testresult.bmp
apps.local.json
apps.local.json
_site

View File

@ -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) {

View File

@ -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

View File

@ -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<<n)?d:".").join(""),
onchange: () => 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);

View File

@ -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",

14
apps/launch/README.md Normal file
View File

@ -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`.

View File

@ -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",

View File

@ -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

View File

@ -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();
}

View File

@ -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",

View File

@ -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

View File

@ -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);
};
};
// 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);
}

View File

@ -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",

View File

@ -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 {

View File

@ -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

View File

@ -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));

View File

@ -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}

2
core

@ -1 +1 @@
Subproject commit b04f32553935f1479ad226ce1b2cff4f4b2e1a6f
Subproject commit 89049a5c7c80d2b56dc235d135fc63b80789db96