From 2e8744ca22f42d699792a786e58eb3ed532caa94 Mon Sep 17 00:00:00 2001
From: sir-indy <53864146+sir-indy@users.noreply.github.com>
Date: Sun, 1 May 2022 18:02:15 +0100
Subject: [PATCH] Move changes to smpltmr
---
apps/smpltmr/ChangeLog | 3 +-
apps/smpltmr/README.md | 15 +-
apps/smpltmr/app.js | 255 ++++++++++++++---------
apps/smpltmr/description.png | Bin 7771 -> 0 bytes
apps/smpltmr/metadata.json | 4 +-
apps/timersimple/ChangeLog | 1 -
apps/timersimple/README.md | 12 --
apps/timersimple/icons8-time-span-48.png | Bin 1933 -> 0 bytes
apps/timersimple/metadata.json | 18 --
apps/timersimple/timersimple-scr1.png | Bin 3232 -> 0 bytes
apps/timersimple/timersimple-scr2.png | Bin 3017 -> 0 bytes
apps/timersimple/timersimple.app.js | 185 ----------------
apps/timersimple/timersimple.icon.js | 1 -
13 files changed, 159 insertions(+), 335 deletions(-)
delete mode 100644 apps/smpltmr/description.png
delete mode 100644 apps/timersimple/ChangeLog
delete mode 100644 apps/timersimple/README.md
delete mode 100644 apps/timersimple/icons8-time-span-48.png
delete mode 100644 apps/timersimple/metadata.json
delete mode 100644 apps/timersimple/timersimple-scr1.png
delete mode 100644 apps/timersimple/timersimple-scr2.png
delete mode 100644 apps/timersimple/timersimple.app.js
delete mode 100644 apps/timersimple/timersimple.icon.js
diff --git a/apps/smpltmr/ChangeLog b/apps/smpltmr/ChangeLog
index 07afedd21..bf128e2fb 100644
--- a/apps/smpltmr/ChangeLog
+++ b/apps/smpltmr/ChangeLog
@@ -1 +1,2 @@
-0.01: Release
\ No newline at end of file
+0.01: Release
+0.02: Rewrite with new interface
\ No newline at end of file
diff --git a/apps/smpltmr/README.md b/apps/smpltmr/README.md
index 1296166e2..2c6e6f9ab 100644
--- a/apps/smpltmr/README.md
+++ b/apps/smpltmr/README.md
@@ -1,21 +1,12 @@
# Simple Timer
-A simple app to set a timer quickly. Simply tab on top/bottom/left/right
-to select the minutes and tab in the middle of the screen to start/stop
-the timer. Note that this timer depends on qalarm.
-
-# Overview
-If you open the app, you can simply control the timer
-by clicking on top, bottom, left or right of the screen.
-If you tab at the middle of the screen, the timer is
-started / stopped.
-
-
+A simple app to set a timer quickly. Drag or tap on the up and down buttons over the hour, minute or second to set the time.
+This app uses the `sched` library, which allows the timer to continue to run in the background when this app is closed.
# Creator
[David Peer](https://github.com/peerdavid)
-
+[Sir Indy](https://github.com/sir-indy)
# Thanks to...
Time icon created by CreativeCons - Flaticon
\ No newline at end of file
diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js
index eb01e27d0..5f893b054 100644
--- a/apps/smpltmr/app.js
+++ b/apps/smpltmr/app.js
@@ -1,124 +1,173 @@
-/*
- * SIMPLE TIMER
- *
- * Creator: David Peer
- * Date: 02/2022
- */
+const secondsToTime = (s) => new Object({h:Math.floor((s/3600) % 24), m:Math.floor((s/60) % 60), s:Math.floor(s % 60)});
+const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
+function formatTime(s) {
+ var t = secondsToTime(s);
+ if (t.h) {
+ return t.h + ':' + ("0" + t.m).substr(-2) + ':' + ("0" + t.s).substr(-2);
+ } else {
+ return t.m + ':' + ("0" + t.s).substr(-2);
+ }
+}
+const timerID = "simpletimer";
Bangle.loadWidgets();
+Bangle.drawWidgets();
+var Layout = require("Layout");
+var seconds = 5 * 60; // Default to 5 minutes
+var drawTimeout;
+var imgArrow = Graphics.createImage(`
+ x
+ xxx
+ xxx
+ xxxxx
+ xxxxx
+ xxx xxx
+ xxx xxx
+xxx xxx
+xxx xxx
+`);
-const alarm = require("sched");
+const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/w==");
+const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA==");
-const TIMER_IDX = "smpltmr";
-const screenWidth = g.getWidth();
-const screenHeight = g.getHeight();
-const cx = parseInt(screenWidth/2);
-const cy = parseInt(screenHeight/2)-12;
-var minutes = 5;
-var interval; //used for the 1 second interval timer
-
-
-function isTimerEnabled(){
- var alarmObj = alarm.getAlarm(TIMER_IDX);
- if(alarmObj===undefined || !alarmObj.on){
- return false;
+function onDrag(event) {
+ Bangle.buzz(20, 0.3);
+ var diff = -Math.round(event.dy/5);
+ if (event.x < timePickerLayout.hours.w) {
+ diff *= 3600;
+ } else if (event.x > timePickerLayout.mins.x && event.x < timePickerLayout.secs.x) {
+ diff *= 60;
}
-
- return true;
+ updateTimePicker(diff);
}
-function getTimerMin(){
- var alarmObj = alarm.getAlarm(TIMER_IDX);
- return Math.round(alarm.getTimeToAlarm(alarmObj)/(60*1000));
-}
-
-function setTimer(minutes){
- alarm.setAlarm(TIMER_IDX, {
- // msg : "Simple Timer",
- timer : minutes*60*1000,
- });
- alarm.reload();
-}
-
-function deleteTimer(){
- alarm.setAlarm(TIMER_IDX, undefined);
- alarm.reload();
-}
-
-setWatch(_=>load(), BTN1);
-function draw(){
- g.clear(1);
- Bangle.drawWidgets();
-
- if (interval) {
- clearInterval(interval);
+function onTouch(button, xy) {
+ var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2;
+ var diff = 0;
+ if (xy.y > 24 && xy.y < touchMidpoint - 10) {
+ Bangle.buzz(40, 0.3);
+ diff = 1;
+ } else if (xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) {
+ Bangle.buzz(40, 0.3);
+ diff = -1;
+ } else if (xy.y > timePickerLayout.btnStart.y) {
+ Bangle.buzz(40, 0.6);
+ runTimer();
+ return;
}
- interval = undefined;
-
- // Write time
- g.setFontAlign(0, 0, 0);
- g.setFont("Vector", 32).setFontAlign(0,-1);
-
- var started = isTimerEnabled();
- var text = minutes + " min.";
- if(started){
- var min = getTimerMin();
- text = min + " min.";
+ if (xy.x < timePickerLayout.hours.w) {
+ diff *= 3600;
+ } else if (xy.x > timePickerLayout.mins.x && xy.x < timePickerLayout.secs.x) {
+ diff *= 60;
}
+ updateTimePicker(diff);
+}
- var rectWidth = parseInt(g.stringWidth(text) / 2);
-
- if(started){
- interval = setInterval(draw, 1000);
- g.setColor("#ff0000");
+function onButton() {
+ var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID));
+ g.clearRect(Bangle.appRect);
+ if (timeToNext != undefined) {
+ runTimer();
} else {
- g.setColor(g.theme.fg);
+ runTimePicker();
}
- g.fillRect(cx-rectWidth-5, cy-5, cx+rectWidth, cy+30);
-
- g.setColor(g.theme.bg);
- g.drawString(text, cx, cy);
}
+function updateTimePicker(diff) {
+ seconds = clamp(seconds + (diff || 0), 0, 24 * 3600 - 1);
+ var set_time = secondsToTime(seconds);
+ updateLayoutField(timePickerLayout, 'hours', set_time.h);
+ updateLayoutField(timePickerLayout, 'mins', set_time.m);
+ updateLayoutField(timePickerLayout, 'secs', set_time.s);
+}
-Bangle.on('touch', function(btn, e){
- var left = parseInt(g.getWidth() * 0.25);
- var right = g.getWidth() - left;
- var upper = parseInt(g.getHeight() * 0.25);
- var lower = g.getHeight() - upper;
+function updateLayoutField(layout, field, value) {
+ layout.clear(layout[field]);
+ layout[field].label = value;
+ layout.render(layout[field]);
+}
- var isLeft = e.x < left;
- var isRight = e.x > right;
- var isUpper = e.y < upper;
- var isLower = e.y > lower;
- var isMiddle = !isLeft && !isRight && !isUpper && !isLower;
- var started = isTimerEnabled();
+function updateTimer() {
+ var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID));
+ updateLayoutField(timerLayout, 'timer', formatTime(timeToNext / 1000));
+ queueDraw(1000);
+}
- if(isRight && !started){
- minutes += 1;
- Bangle.buzz(40, 0.3);
- } else if(isLeft && !started){
- minutes -= 1;
- Bangle.buzz(40, 0.3);
- } else if(isUpper && !started){
- minutes += 5;
- Bangle.buzz(40, 0.3);
- } else if(isLower && !started){
- minutes -= 5;
- Bangle.buzz(40, 0.3);
- } else if(isMiddle) {
- if(!started){
- setTimer(minutes);
- } else {
- deleteTimer();
- }
- Bangle.buzz(80, 0.6);
- }
- minutes = Math.max(0, minutes);
+function queueDraw(millisecs) {
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = setTimeout(function() {
+ drawTimeout = undefined;
+ updateTimer();
+ }, millisecs - (Date.now() % millisecs));
+}
- draw();
+function timerStop() {
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = undefined;
+ seconds = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) / 1000;
+ require("sched").setAlarm(timerID, undefined);
+ require("sched").reload();
+ runTimePicker();
+}
+
+function runTimePicker() {
+ g.clearRect(Bangle.appRect);
+ Bangle.setUI({
+ mode : "custom",
+ touch : function(n,e) {onTouch(n,e);},
+ drag : function(e) {onDrag(e);},
+ btn : function(n) {onButton();},
+ });
+ timePickerLayout.render();
+ updateTimePicker();
+ //timePickerLayout.debug();
+}
+
+function runTimer() {
+ require("sched").setAlarm(timerID, {
+ vibrate : ".-.-",
+ hidden: true,
+ timer : seconds * 1000
+ });
+ require("sched").reload();
+ g.clearRect(Bangle.appRect);
+ timerLayout.render();
+ updateTimer();
+}
+
+var timePickerLayout = new Layout({
+ type:"v", c: [
+ {type:undefined, height:2},
+ {type:"h", c: [
+ {type:"v", width:g.getWidth()/3, c: [
+ {type:"txt", font:"6x8", label:/*LANG*/"Hours", col:g.theme.fg2},
+ {type:"img", pad:8, src:imgArrow, col:g.theme.fg2},
+ {type:"txt", font:"20%", label:"00", id:"hours", filly:1, fillx:1},
+ {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2}
+ ]},
+ {type:"v", width:g.getWidth()/3, c: [
+ {type:"txt", font:"6x8", label:/*LANG*/"Minutes", col:g.theme.fg2},
+ {type:"img", pad:8, src:imgArrow, col:g.theme.fg2},
+ {type:"txt", font:"20%", label:"00", id:"mins", filly:1, fillx:1},
+ {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2}
+ ]},
+ {type:"v", width:g.getWidth()/3, c: [
+ {type:"txt", font:"6x8", label:/*LANG*/"Seconds", col:g.theme.fg2},
+ {type:"img", pad:8, src:imgArrow, col:g.theme.fg2},
+ {type:"txt", font:"20%", label:"00", id:"secs", filly:1, fillx:1},
+ {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2}
+ ]},
+ ]},
+ {type:"btn", src:imgPlay, id:"btnStart", fillx:1 }
+ ], filly:1
});
-g.reset();
-draw();
\ No newline at end of file
+var timerLayout = new Layout({
+ type:"v", c: [
+ {type:"txt", font:"22%", label:"0:00", id:"timer", fillx:1, filly:1 },
+ {type:"btn", src:imgPause, cb: l=>timerStop(), fillx:1 }
+ ], filly:1
+});
+
+onButton();
\ No newline at end of file
diff --git a/apps/smpltmr/description.png b/apps/smpltmr/description.png
deleted file mode 100644
index 1286d1ab94e56658995ba8dabe08bfc7dea51bc6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 7771
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
SWZ<+Iq^bmYRH|V9`ab}V`IlM%
diff --git a/apps/smpltmr/metadata.json b/apps/smpltmr/metadata.json
index 06bad962d..ee5c7ce9b 100644
--- a/apps/smpltmr/metadata.json
+++ b/apps/smpltmr/metadata.json
@@ -2,10 +2,10 @@
"id": "smpltmr",
"name": "Simple Timer",
"shortName": "Simple Timer",
- "version": "0.01",
+ "version": "0.02",
"description": "A very simple app to start a timer.",
"icon": "app.png",
- "tags": "tool",
+ "tags": "tool,alarm,timer",
"dependencies": {"scheduler":"type"},
"supports": ["BANGLEJS2"],
"screenshots": [{"url":"screenshot.png"}, {"url": "screenshot_2.png"}],
diff --git a/apps/timersimple/ChangeLog b/apps/timersimple/ChangeLog
deleted file mode 100644
index 7b83706bf..000000000
--- a/apps/timersimple/ChangeLog
+++ /dev/null
@@ -1 +0,0 @@
-0.01: First release
diff --git a/apps/timersimple/README.md b/apps/timersimple/README.md
deleted file mode 100644
index 894a46e7a..000000000
--- a/apps/timersimple/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Simple Timer
-
-TESTING - DO NOT INSTALL, MAY BE BROKEN
-
-Does one thing well. Set a time in hours, minutes and seconds, and alerts you when time is up. Opening the app while the timer is running (or just leaving the app open) shows how much time is left on the timer. This is the part I felt was missing from the Alarms and Timer app.
-
-Drag or tap on the up and down buttons over the hour, minute or second to set the time.
-
-
-
-
-Written by: [Sir Indy](https://github.com/sir-indy) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/)
diff --git a/apps/timersimple/icons8-time-span-48.png b/apps/timersimple/icons8-time-span-48.png
deleted file mode 100644
index 9a9dfb6abd1801997481d40bd41e475afe845f1a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1933
zcmV;82Xgp{P)}f;`d3
z{4|bF%roc{(>PYg>)2T4uNQwW0+8Ygn
zw6{|X*_#deBv!4>$$!2UDtwRtR+g1(ggqUDi`B3w1D||bZ8oxLjVqIK^H_${Y^z~l
z4qgh>@{lV8OUG!WT9`-!KJBimUYE47XSH$tg5tx3jsS-xFyB^uwzDMC;IL=l!y5-<
z9+954uQIM*AISi#lMCP$CvkuJ4u)O*aEx9--^e9+r0Ecf=!uc#t|RYnvWwyLAC`go
z?%yS^GUR=enP|!kU-~Re#w|gd=<}d^s2vxspT^kKkXqR19O8=wOG^ls-(f)m?_4{g
zFW`RgpNxbx8DS|_K+V7$d{n|$jx%WMJqbznDr)IjZYFiFu&+^B5r751fyc1Hwpj5C
zfh8P%XxfioJo9HP)2AqE$&bX?v9}lML({h39gzCC-!JN^E^y&m@Z=oN4bkCgbVMQwY=
z*zAbfFN;ZmOl8~{`+A-uz>|e9nCd!CJ0_IvRcAnwn3n+P0ASKRj=tMAtW3&7f<7H2
zI>#qXY|Z(Z@>SCLAit>AHpqY=2n+~H{kd(AmO#hGAuWClRwX@&1bsTFOrxvX4>~Ru
zJ95hcI0}>%e^MOu#snGg6E*WLM0JofT47ge>o>5KdAF#$Bv=7xfvTbZp6TV6R*5nj$K=3XG9ERMqDlz
z>g(%q>((vJb~&kmV-sNE8K6L}e|dR=DX3#Y2rL#0Y&IL3o12lJpO1k7CtiQ`D4u(!
z6ixMQkfp%o_x}C+sH>~PzJ2?UnVE?L2M(a2p+VC?#n0qV=B
z!M~vA;xz{W0ES^;u~^XA*$J!F3bWaakvk(Ot9l%zZ?1#gZigs}U>F8lw{AsMRTZvX
zyM_}dPH6V4=Yz&xrX-?rBbfukFeoi8MM+5s($muc3Q(Csuh*lxx*EmB#aOW-=&3FV
zY6d0&%kx24*)GTc-?{xVK<8gx
zuQY?JL+Ac4BDK&x)CR9K<4+B+o!jinc50_lnSj*$a~H0khL1+~tfK{=Ea80rX$4E_
z)l!kF_W_obYXHn=1IDI?@Rj3CbX98LOGhKdrvnxo4+X7JYpZHN*wZmcfm(mAt@k9H
z<2}(+83NAn9-Qkt6~Iy8gGx)gY62^OsT7&SwJ%$GR
z8<6CH6YUreIpm!qk|9-Y~btXXO?+BBgadZuyMRxK!B*jK2-{l-V))ssgCmz0~7A7~9{puZA!bcD6>M4aR)Z`rw@fW8YLWV&yWxJwCsS^1Op#z=x9{zFq~
zY5UkGlC_kO_W*bzjaPw(0`GD>zcy0wz!HD*mA4dTF~Ca{v=ksKBa5a^fU#20noyfm
zIEc<~RzYCIg7cdI6#g&uVFr+e@9x)=00sf{fxt#&($02nvq$4M>q9)m_Z|NQLRok`
Trm{7g00000NkvXXu0mjfz&ofF
diff --git a/apps/timersimple/metadata.json b/apps/timersimple/metadata.json
deleted file mode 100644
index 5d0e5d5e4..000000000
--- a/apps/timersimple/metadata.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "id":"timersimple",
- "name":"Timer Simple",
- "shortName": "Timer Simple",
- "version": "0.01",
- "description": "Sets a single timer, and tells you how long left.",
- "readme": "README.md",
- "icon":"icons8-time-span-48.png",
- "screenshots": [{"url":"timersimple-scr1.png"},{"url":"timersimple-scr2.png"}],
- "tags": "tool,alarm,timer",
- "supports": ["BANGLEJS2"],
- "dependencies": {"scheduler":"type"},
- "allow_emulator": true,
- "storage": [
- {"name":"timersimple.app.js","url":"timersimple.app.js"},
- {"name":"timersimple.img","url":"timersimple.icon.js","evaluate":true}
- ]
- }
\ No newline at end of file
diff --git a/apps/timersimple/timersimple-scr1.png b/apps/timersimple/timersimple-scr1.png
deleted file mode 100644
index 5556f8ecc0f2b0c0e343e144f53b2a90741e55c3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3232
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
diff --git a/apps/timersimple/timersimple.app.js b/apps/timersimple/timersimple.app.js
deleted file mode 100644
index 1c775b908..000000000
--- a/apps/timersimple/timersimple.app.js
+++ /dev/null
@@ -1,185 +0,0 @@
-const secondsToTime = (s) => new Object({h:Math.floor((s/3600) % 24), m:Math.floor((s/60) % 60), s:Math.floor(s % 60)});
-const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
-function formatTime(s) {
- var t = secondsToTime(s);
- if (t.h) {
- return t.h + ':' + ("0" + t.m).substr(-2) + ':' + ("0" + t.s).substr(-2);
- } else {
- return t.m + ':' + ("0" + t.s).substr(-2);
- }
-}
-const timerID = "simpletimer";
-
-Bangle.loadWidgets();
-Bangle.drawWidgets();
-
-var Layout = require("Layout");
-var seconds = 5 * 60; // Default to 5 minutes
-var drawTimeout;
-var timerLayout;
-var timePickerLayout;
-var imgArrow = Graphics.createImage(`
- x
- xxx
- xxx
- xxxxx
- xxxxx
- xxx xxx
- xxx xxx
-xxx xxx
-xxx xxx
-`);
-
-const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/w==");
-const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA==");
-
-function onDrag(event) {
- Bangle.buzz(20, 0.3);
- var diff = -Math.round(event.dy/5);
- if (event.x < timePickerLayout.hours.w) {
- diff *= 3600;
- } else if (event.x > timePickerLayout.mins.x && event.x < timePickerLayout.secs.x) {
- diff *= 60;
- }
- updateTimePicker(diff);
-}
-
-function onTouch(button, xy) {
- var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2;
- var diff = 0;
- if (xy.y > 24 && xy.y < touchMidpoint - 10) {
- Bangle.buzz(40, 0.3);
- diff = 1;
- } else if (xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) {
- Bangle.buzz(40, 0.3);
- diff = -1;
- } else if (xy.y > timePickerLayout.btnStart.y) {
- Bangle.buzz(40, 0.6);
- runTimer();
- return;
- }
- if (xy.x < timePickerLayout.hours.w) {
- diff *= 3600;
- } else if (xy.x > timePickerLayout.mins.x && xy.x < timePickerLayout.secs.x) {
- diff *= 60;
- }
- updateTimePicker(diff);
-}
-
-function updateTimePicker(diff) {
- seconds = clamp(seconds + (diff || 0), 0, 24 * 3600 - 1);
- var set_time = secondsToTime(seconds);
- updateLayoutField(timePickerLayout, 'hours', set_time.h);
- updateLayoutField(timePickerLayout, 'mins', set_time.m);
- updateLayoutField(timePickerLayout, 'secs', set_time.s);
-}
-
-function updateLayoutField(layout, field, value) {
- layout.clear(layout[field]);
- layout[field].label = value;
- layout.render(layout[field]);
-}
-
-function updateTimer() {
- var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID));
- updateLayoutField(timerLayout, 'timer', formatTime(timeToNext / 1000));
- //var d = new Date();
- //updateLayoutField(timerLayout, 'time', require("locale").time(d,1));
- queueDraw(1000);
-}
-
-function queueDraw(millisecs) {
- if (drawTimeout) clearTimeout(drawTimeout);
- drawTimeout = setTimeout(function() {
- drawTimeout = undefined;
- updateTimer();
- }, millisecs - (Date.now() % millisecs));
-}
-
-function timerStop() {
- if (drawTimeout) clearTimeout(drawTimeout);
- drawTimeout = undefined;
- seconds = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) / 1000;
- require("sched").setAlarm(timerID, undefined);
- require("sched").reload();
- runTimePicker();
-}
-
-var timePickerLayoutCode = {
- type:"v", c: [
- {type:undefined, height:2},
- //{type:"txt", font:"15%", label:"TIMER", id:"title"},
- {type:"h", c: [
- {type:"v", width:g.getWidth()/3, c: [
- {type:"txt", font:"6x8", label:/*LANG*/"Hours", col:g.theme.fg2},
- {type:"img", pad:8, src:imgArrow, col:g.theme.fg2},
- {type:"txt", font:"20%", label:"00", id:"hours", filly:1, fillx:1},
- {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2}
- ]},
- {type:"v", width:g.getWidth()/3, c: [
- {type:"txt", font:"6x8", label:/*LANG*/"Minutes", col:g.theme.fg2},
- {type:"img", pad:8, src:imgArrow, col:g.theme.fg2},
- {type:"txt", font:"20%", label:"00", id:"mins", filly:1, fillx:1},
- {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2}
- ]},
- {type:"v", width:g.getWidth()/3, c: [
- {type:"txt", font:"6x8", label:/*LANG*/"Seconds", col:g.theme.fg2},
- {type:"img", pad:8, src:imgArrow, col:g.theme.fg2},
- {type:"txt", font:"20%", label:"00", id:"secs", filly:1, fillx:1},
- {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2}
- ]},
- ]},
- {type:"btn", src:imgPlay, id:"btnStart", fillx:1 }
- //{type:"btn", label:'Start', font:"20%", id:"btnStart", fillx:0 }
- ], filly:1
-};
-
-var timerLayoutCode = {
- type:"v", c: [
- {type:undefined, height:8},
- //{type:"txt", font:"6x8", label:/*LANG*/"Timer", id:"title", col:g.theme.fg2},
- {type:"txt", font:"22%", label:"0:00", id:"timer", fillx:1, filly:1 },
- //{type:"h", c: [
- // {type:"txt", font:"6x8", pad:8, label:/*LANG*/"Time Now:", halign:-1, col:g.theme.fg2},
- // {type:"txt", font:"6x8", label:"00:00", id:"time", halign:1, col:g.theme.fg2},
- //]},
- {type:"btn", src:imgPause, cb: l=>timerStop(), fillx:1 }
- ], filly:1
-};
-
-function runTimePicker() {
- g.clearRect(Bangle.appRect);
- timePickerLayout = new Layout(timePickerLayoutCode);
- Bangle.setUI({
- mode : "custom",
- touch : function(n,e) {onTouch(n,e);},
- drag : function(e) {onDrag(e);},
- btn : function(n) {runTimer();},
- });
- timePickerLayout.render();
- updateTimePicker();
- //timePickerLayout.debug();
-}
-
-function runTimer() {
- require("sched").setAlarm(timerID, {
- vibrate : ".-.-",
- hidden: true,
- timer : seconds * 1000
- });
- require("sched").reload();
- g.clearRect(Bangle.appRect);
- timerLayout = new Layout(timerLayoutCode);
- timerLayout.render();
- updateTimer();
-}
-
-var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID));
-if (timeToNext != undefined) {
- g.clearRect(Bangle.appRect);
- timerLayout = new Layout(timerLayoutCode);
- timerLayout.render();
- updateTimer();
-} else {
- runTimePicker();
-}
diff --git a/apps/timersimple/timersimple.icon.js b/apps/timersimple/timersimple.icon.js
deleted file mode 100644
index cd40303a0..000000000
--- a/apps/timersimple/timersimple.icon.js
+++ /dev/null
@@ -1 +0,0 @@
-require("heatshrink").decompress(atob("mEwwcBkmSpIC/ARf//9JkQRMCAIRBAwIRKv4RFpARIz4QCCIdJiREJAAgJCCI0nCI3+BgOJCIs/CI3/9MkyJoIAAxuGp4RJ8gRQ/mSogRDu4RJNwKSEqXfCJPSCImSrYRJ+SkEyVfCJP6CIo1B4wRHUgIREA4MAj4SHCIeUCIP//EAt4RHkQRF//ggIDB+EHCJf/wEAAAQRM/0CoAmCCJf/4VDI5pcCNwoRKNZ4RMUIQRLYowAIYozpRrYRJ+QREqVLCJPSpGSCIdJv5GIyQREpVJfA///mSogRDpNJloRH8mSBwQRDku/CIwMBCIspkmXCAvpkmRCIslAYKkETwMkxIRFkmkyVLNwYJCBwgCDAwyeEAQqSBAwiMEAQwGFBxACDygDBkQOKAX4CD"))
\ No newline at end of file