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. - -![](description.png) +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. - -![](timersimple-scr1.png) -![](timersimple-scr2.png) - -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