From 312bed6491d7a9341c7f9de4d1f309e2f85b3fe5 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:00:58 +0900 Subject: [PATCH 01/10] Create app.js --- apps/a_speech_timer/app.js | 173 +++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 apps/a_speech_timer/app.js diff --git a/apps/a_speech_timer/app.js b/apps/a_speech_timer/app.js new file mode 100644 index 000000000..dae2545b2 --- /dev/null +++ b/apps/a_speech_timer/app.js @@ -0,0 +1,173 @@ +Graphics.prototype.setFontMichroma36 = function() { +g.setFontCustom(atob("AAAAAAAAAAAAAAAAeAAAAAeAAAAAeAAAAAeAAAAAAAAAAAAAAAAAAAAAAAGAAAAA+AAAAD+AAAAP+AAAA/8AAAD/wAAAf/AAAB/4AAAH/gAAAf+AAAB/4AAAH/gAAAf+AAAAfwAAAAfAAAAAcAAAAAAAAAAAAAAAAAAAAAAAA///AAD///wAH///4AP///8APwAD+APAAAeAeAAAeAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAeAPAAAeAPwAD+AP///8AH///4AD///wAA///AAAAAAAAAAAAAAAAAAAAAEAAAAAOAAAAAfAAAAA+AAAAB8AAAAD8AAAAH4AAAAPwAAAAPgAAAAfAAAAAf///+Af///+Af///+Af///+AAAAAAAAAAAAAAAAAAAAAAAAAA/Af+AD/A/+AH/B/+AP/D/+APwD4eAPADweAfADweAeADweAeADweAeADweAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAPgeAeAPAeAeAPAeAeAPAeAeAPAeAfAPAeAPw/AeAP/+AeAH/+AeAD/8AeAB/wAOAAAAAAAAAAAAAAAAAAAAAAAAAB8APgAD8AP4AH8AP8AP8AP8APgAB+AfAAAeAeAAAeAeAAAPAeAAAPAeAAAPAeAAAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAeAfAeAeAPx/h+AP///+AH///8AD///4AB/h/gAAAAAAAAAAAAAAAAAAAAAAeAAAAA/AAAAA/AAAAB/AAAAD/AAAAH/AAAAPvAAAAPPAAAAfPAAAA+PAAAB8PAAAD4PAAADwPAAAHwPAAAPgPAAAfAPAAA+APAAA8APAAB8APAAD4APAAHwAPAAPgAPAAPAAPAAfAAPAAf///+Af///+Af///+Af///+AAAAPAAAAAPAAAAAPAAAAAPAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAf/8PgAf/8P4Af/8P8Af/8P8AeB4A+AeB4AeAeDwAeAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAfAeDwAeAeD4A+AeD+D+AeB//8AeB//4AeA//4AAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAA///AAD///wAH///4AH///8AP4fB+APAeAeAfA8AeAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAfA8APAPA+AeAPgeAeAP8fh+AH8f/8AD8P/8AA8H/4AAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAeAAAAAeAAAAAeAAAAAeAAAAAeAAACAeAAAGAeAAAOAeAAAeAeAAA+AeAAD+AeAAH8AeAAP4AeAAfwAeAA/gAeAB/AAeAD+AAeAP4AAeAfwAAeA/gAAeB/AAAeD+AAAeH8AAAefwAAAe/gAAAf/AAAAf+AAAAf8AAAAf4AAAAfgAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAMAAB+B/wAD/j/4AH/3/8AP///+AP//A+AfB+AeAeA+AeAeA+APAeA+APAeA+APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA+APAeA+APAeA+APAeA+AOAeA+AeAPh/A+AP///+AP/3/8AH/3/8AB/D/wAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAD/4HAAH/8HwAP/+H4AP5/H8AfAfA8AeAPAeAeAPAeAeAPAeAeAHgfAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHAPAeAPAOAeAPAeAPAPAeAPwfB+AP///8AH///4AD///wAA///AAAAAAAAAAAAAAAAAAAAAAAAAAAB8DwAAB8HwAAB8HwAAB8DwAAAAAAAAAAAAA"), 46, atob("CBIkESMjJCMjIyMjCA=="), 36+(1<<8)+(1<<16)); +}; + +Graphics.prototype.setFontMichroma16 = function(scale) { +g.setFontCustom(atob("AAAAGAAYAAAAGAB4A/APwD4AeADgAAAAAAA/8H/4YBjAGMAcwBzAHMAcwBzAHMAYYBh/+D/wAAAAABgAOABwAGAA//h/+AAAAAA4+Hn4YZjhmMOYw5jDmMMYwxjDGOMYYxh/GD4YAAAAADBwcHhgGOAYwBzHHMccxxzHHMcc5xhnGH/4PfAAAAAAAOAB4APgB2AGYAxgHGA4YDBgYGD/+P/4AOAAYAAAAAD+cP547BjsGOwc7BzsHOwc7BzsHOwY7zjv+APgAAAAAD/wf/hmGOYYxhzGHMYcxhzGHOYYZhh3uDP4AeAAAEAA4ADgAOAI4DjgeODw4eDjgOcA7gD8APgA8AAAAAAAAAA58H/4bxjmGMYcxhzGHMYcxhzGHOYYbxh/+DnwAAAAADxgfnBnOOMYwxjDHMMcwxzDHMMY4xhjOH/4P/AAAAAABnAGcAAA"), 46, atob("BAgQCBAQEBAQEBAQBA=="), 16+(scale<<8)+(1<<16)); +}; + +function timeToString(duration) { + var hrs = ~~(duration / 3600); + var mins = ~~((duration % 3600) / 60); + var secs = ~~duration % 60; + var ret = ""; + if (hrs > 0) { + ret += "" + hrs + ":" + (mins < 10 ? "0" : ""); + } + ret += "" + mins + ":" + (secs < 10 ? "0" : ""); + ret += "" + secs; + return ret; +} + +var newtimer_left_from = 60; +var newtimer_left_to = 2*60; + +var newtimer_right_from = 5*60; +var newtimer_right_to = 7*60; + +var current_from = 5*60; +var current_mid = 6*60; +var current_to = 7*60; +var current_value = 0; + +var timerinterval; +var istimeron = false; + +var islocked = false; + +function countDown() { + current_value++; + draw(); + + if (current_value == current_from) { + Bangle.buzz(500); + } else if (current_value == current_mid) { + Bangle.buzz(400).then(()=>{ + return new Promise(resolve=>setTimeout(resolve, 800)); + }).then(()=>{ + return Bangle.buzz(500); + }); + } else if (current_value == current_to) { + Bangle.buzz(300).then(()=>{ + return new Promise(resolve=>setTimeout(resolve, 600)); + }).then(()=>{ + Bangle.buzz(300).then(()=>{ + return new Promise(resolve=>setTimeout(resolve, 600)); + }).then(()=>{ + return Bangle.buzz(500); + }); + }); + } + +} + +Bangle.on('touch',(touchside, touchdata)=>{ + if (!islocked && istimeron && touchdata.y > (100+10)) { + Bangle.buzz(40); + istimeron = false; + clearInterval(timerinterval); + } else if (touchdata.y > 24 && touchdata.y < (100-10)) { + Bangle.buzz(40); + islocked = !islocked; + } else if (!islocked && touchdata.y > (100+10) && touchdata.x > 88 + 10) { + Bangle.buzz(40); + current_from = newtimer_right_from; + current_to = newtimer_right_to; + current_mid = (current_from + current_to) / 2; + current_value = 0; + if (timerinterval) clearInterval(timerinterval); + timerinterval = setInterval(countDown, 1000); + istimeron = true; + } else if (!islocked && touchdata.y > (100+10) && touchdata.x < 88 - 10) { + Bangle.buzz(40); + current_from = newtimer_left_from; + current_to = newtimer_left_to; + current_mid = (current_from + current_to) / 2; + current_value = 0; + if (timerinterval) clearInterval(timerinterval); + timerinterval = setInterval(countDown, 1000); + istimeron = true; + } + showInstructions = false; + draw(); +}); + +Bangle.on('swipe',(swiperight, swipedown)=>{ + console.log(swiperight); + console.log(swipedown); + + if (swiperight == -1) { + if (newtimer_left_from >= 60) { + newtimer_left_from += 60; + newtimer_left_to += 60; + } else { // special case for 0:30 to 1:00 + newtimer_left_from = 60; + newtimer_left_to = 120; + } + newtimer_right_from += 60; + newtimer_right_to += 60; + draw(); + } else if (swiperight == 1) { + if (newtimer_left_from > 60) { + newtimer_left_from -= 60; + newtimer_left_to -= 60; + } else { // special case for 0:30 to 1:00 + newtimer_left_from = 30; + newtimer_left_to = 60; + } + + if (newtimer_right_from > 120) { + newtimer_right_from -= 60; + newtimer_right_to -= 60; + } + draw(); + } +}); + +var drawTimeout; +var showInstructions = true; + +function draw() { + g.reset(); + if (current_value >= current_to) { g.setBgColor("#F00"); } + else if (current_value >= current_mid) { g.setBgColor("#FF0"); } + else if (current_value >= current_from) { g.setBgColor("#8F8"); } + g.clearRect(0,24,176,176); + + g.reset(); + g.setFontAlign(0, 0); + + g.setFont("Michroma36").drawString(timeToString(current_value), 88, 62); + + g.setFont("HaxorNarrow7x17"); + g.drawString(timeToString(current_from), 44, 62+26); + g.drawString(timeToString(current_mid), 88, 62+26); + g.drawString(timeToString(current_to), 132, 62+26); + + if (current_value >= current_from) { g.drawRect(44-1,62+26+9,44+1,62+26+9+1); } + if (current_value >= current_mid) { g.drawRect(88-1,62+26+9,88+1,62+26+9+1); } + if (current_value >= current_to) { g.drawRect(132-1,62+26+9,132+1,62+26+9+1); } + + if (showInstructions) { + g.setFont("6x8").drawString("Tapping timer locks buttons", 88, 100+5); + g.setFont("6x8").drawString("<= Swipe to change time =>", 88, 168); + } + + g.setColor(islocked ? "#444" : "#000"); + g.setFont("Michroma16"); + g.drawString(timeToString(newtimer_left_from), 44, 138-9); + g.drawString(timeToString(newtimer_left_to), 44, 138+9); + g.drawString(timeToString(newtimer_right_from), 132, 138-9); + g.drawString(timeToString(newtimer_right_to), 132, 138+9); + + g.drawRect(0+8,138-24, 88-9+1, 138+22+1); + g.drawRect(0+8,138-24, 88-9, 138+22); + g.drawRect(88+8,138-24, 176-10+1, 138+22+1); + g.drawRect(88+8,138-24, 176-10, 138+22); +} + +require("FontHaxorNarrow7x17").add(Graphics); +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +draw(); From 673fa8820f779a79bcfa46819990e5717a4d49ba Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:01:48 +0900 Subject: [PATCH 02/10] Add files via upload --- apps/a_speech_timer/app.png | Bin 0 -> 3036 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/a_speech_timer/app.png diff --git a/apps/a_speech_timer/app.png b/apps/a_speech_timer/app.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb777fa7988b5d0a44e31d7238925f0ca47027a GIT binary patch literal 3036 zcmaJ@3p`Z$7r!HUj7_!?B{4>i$zz^u&6t_Q$XoJCMH*&gm7T#^Y#jC4Ec1rSneYmM!f8k4B7!W3=T`g;)ob59BV=ZWegs`71mpW zD&=6Cy*vO=0XH2|=zlRJNH2(<$bM!H+ ze;g*D1uuZ+ld<3E051S(=FRrM#EQWHUHCS$rnjNa!yrz6kXE zFW?fz5+Im+q9a&|bQ+&VrSTaQS@|1damE;|8(97(cp}Es5JMo!Qu{C4&v-0D86d+K zSmv8(Da#VeFL7`~-MCy9<=;KM;KMw6(Pj}&Ldz<8Nrf-8&-^afKNKj4{JR$^(23~i zJ^)adwx#ZH^HjcdR%o+lzgnYYD!(Q1uAQq?6ESlhF}fq!qhPi4bsWnFSrnj`506*+ zdQ?>81vNOTu7ZQ+2Z)e{2Kxf=sT!w~>?Bj+;}bzo%x>4c?~Q1?MG;JkM&_P3pPeA% zdH&D6*1aDb-C|_K8hEz1%s+K&RGNz;siY&|&kygrud_$GE5>W0X1xaRc>GEo(i$Bd z)n|z3lmX@TWKDD~Nr>YQwLhy%xLGvPbA#vZ-dUHh(wm-QnG57GYGWWOnkfFBts#B& z7k8bjy1&M{E_D?G6VNWcV4qc`vU%gijhi;fwp(Iy$q^oV_cGlI3IxRVHky$@psxTRdE~h>`Z{(6U104+r9Bn$P0T?@V=(rtq0lZ^;fx(Itn|4G+>k%)R41zRD{|5NaB%~Lw>w$Qt!dRL9I5}S`y>w?Qahq_sNRbS1)o_Yw!Cd z`D|CgiSsR|r2UN|kq&uA^mL`w^vI)2fkU@pv4dAye((Iz-rk;Ed{gkMZ*t_(_NbYM z)k2=?!$y&=9;wwdX}J;A;R^7g2bo$c(%t@H?tM9@H@x`_);`mS*;#zrVQ%gno_QyE zmFC(X){@vqxX}?lr@}`_h419UUF%85y>@399R*HBk}q zA~}0SKbvQ2`HcISm6q5mzD`c6zs%L2fWbC7Y>Rx0dHnk2fnz;4#2c#p zTXU58rVqCMY)2iuOslI38&~ZGQ~6{d59M8De%JC8OIp4KfrwK*?M{n+_j+*PUd8}< zXnOqVAv&FEZCwT-_PSnlQa+dWs=slz#WEIR{)@uB}_@7b(;2x8vredha zJe7jC+4mH?NlbbDdYiYTsr}}knPhBgQ2cP0=A9KM9gezN?s^ zEf>_9L#T9r1hX@fvv9N9q~iROs`j?uI7fDh)|>5==4}7AX3Xb#6VpoX!tqjL^`osJ z^7V2BX4Eb2;G5ZK=wjmaRod!%=fFO)x3Ov0tbOFGLqimbj(4QRbX{PTTP16-g6^Kw zGxR7y8W=!FqhngFVxF9(UpYMD5heW9QYY=DG5?)&nm#;pcWlp3`zy{{iy9gl`qIE} zOmAg~rLnoXRzzXj~B%aEQKeqLAH00wSCC`!wh8i%#MVt_U|M>}vK{Q@Gu{N<&}W+cQ9m7-o`4 zsLFJ(p_8KLwz*x>R8`@Pf!xQ=f0xx3SlM;2%WH^)AmVN_YFmR#N%*#S32VjC~%Lglw6 z#l^)r{Xks1QpxqLw(IWQu>NpWGqqmnqH+6nH*gYU# yJ4%fcGfsA|u23h2XeHGe^>e7deLFk-@M$Mu_WQQ7zPGYpR9h=2YN^G+xW54KKFVwW literal 0 HcmV?d00001 From 9033db08bf1a56d1f852a60795eb75d2bdee0f70 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:03:45 +0900 Subject: [PATCH 03/10] Create app-icon.js --- apps/a_speech_timer/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/a_speech_timer/app-icon.js diff --git a/apps/a_speech_timer/app-icon.js b/apps/a_speech_timer/app-icon.js new file mode 100644 index 000000000..1fdb2c509 --- /dev/null +++ b/apps/a_speech_timer/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgP//kAj//AAP5/+PApH7//PAonvAoXzAonj//nApHggEHAoWAgA5BAAJCCAoU/IYIFCv///w0CAonrv/HAoXLv+DAogLFgPeAoV+nlOAoV4/8+AoV79+eFIVzAof7u/v5xBCs4FL84FE//O74FBu4FB64FD73TAoNz/+eAoV5IIIFCvl8vwFCv8A/wFDO4IFFFIQFCGoSVFUIqtDh65D/1vYof+Y4LLDw7dD/0ndIYRCeoQFC/P/z/+i///oFBGoX8gEfAgI=")) From da133e2ccd7ee837d078430095733180929fff4b Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:09:06 +0900 Subject: [PATCH 04/10] Create ChangeLog --- apps/a_speech_timer/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/a_speech_timer/ChangeLog diff --git a/apps/a_speech_timer/ChangeLog b/apps/a_speech_timer/ChangeLog new file mode 100644 index 000000000..4a8e3fbe7 --- /dev/null +++ b/apps/a_speech_timer/ChangeLog @@ -0,0 +1 @@ +1.00: Release (2021/12/01) From 18c3461e6e4191433897f3b1e10a9f68f7b97fa8 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:20:41 +0900 Subject: [PATCH 05/10] Create README.md --- apps/a_speech_timer/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/a_speech_timer/README.md diff --git a/apps/a_speech_timer/README.md b/apps/a_speech_timer/README.md new file mode 100644 index 000000000..98d2d4517 --- /dev/null +++ b/apps/a_speech_timer/README.md @@ -0,0 +1,12 @@ +# A Speech Timer + +* A timer designed to help keeping your speeches and presentations to time +* Vibrates 1-2-3 times and changes screen color within the target time range. + * Example for a 5 to 7 minutes speech: vibrates once at 5:00 (green), twice at 6:00 (yellow), thrice at 7:00 (red). +* Use the buttons to start a timer +* Swipe left or right to choose different target times + +![](screenshot.png) + +## Creator +[@alainsaas](https://github.com/alainsaas) From 13b01fe82955ca3ba595ed115fd1bfc6acd7a4fc Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:20:52 +0900 Subject: [PATCH 06/10] Add files via upload --- apps/a_speech_timer/screenshot0.png | Bin 0 -> 3276 bytes apps/a_speech_timer/screenshot1.png | Bin 0 -> 3457 bytes apps/a_speech_timer/screenshot2.png | Bin 0 -> 3401 bytes apps/a_speech_timer/screenshot3.png | Bin 0 -> 3374 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/a_speech_timer/screenshot0.png create mode 100644 apps/a_speech_timer/screenshot1.png create mode 100644 apps/a_speech_timer/screenshot2.png create mode 100644 apps/a_speech_timer/screenshot3.png diff --git a/apps/a_speech_timer/screenshot0.png b/apps/a_speech_timer/screenshot0.png new file mode 100644 index 0000000000000000000000000000000000000000..ee3ababc1abf849d688e97c5ceb8d3ae8180f05c GIT binary patch literal 3276 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 literal 0 HcmV?d00001 diff --git a/apps/a_speech_timer/screenshot1.png b/apps/a_speech_timer/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..69ea91e95332e8b97e6de3205f72319215bd6195 GIT binary patch literal 3457 zcmcha`8(U&_QyY;h@n)>s#=2RrKVPWmC~YU(?Lm9)liY5XoDycjwzw$8jh>S(1TK{ z12IoErso)Iu1W|(Rcc5KHN?!#xqrd^>HEXp>)C7Vz4m^d_g?#X?RbWm@xwibDCcww-%j#y)Tm$-BBTa$Q{?iNGNrpGgui6BmmvV-JC)AEdrEL-CIqOA* zQGkwV7lzP38K3(5_10*%_r=%5!~LE0{G&pOnbfudPprEV5ISSdc(62iQUIve-Ee}78x&u-!5@2b>FodGrTBRFnRg;#O7Ih3`VI4WXfw?&>O{*~1(AA7ESqWl{GjC9}s_^6T+B5@SVMgf1j)+xt)Kzz9wMXw>U#{8<=Myj{Pvr5>6^ zD4nSpwDZ&#Z}h>9Dv=VV)vb8(N?V19Zw=JqboyLm_x6^HYE^qG`NVWGg@q~Y7 zKo@4iCQ#?}~QjPDAuFF-5K;Km7NGfCQ`T3wBmA87$~%SQ>M@-ks~@0|&r;o%D02j>A4Tt3X7*na+ggmaPE3Nw(zwda^r>{6~HRC{flNXW$lRKFjc?@Io zX^MtmJzKgsGqrIuTgru{JsJ5_+Dpv!*z?a_3pT7-Cfc(aL({o5OR8WYY4-KnVd8qS zsGd@M3G(z-l~1IYuqC(+i_=^UZ(na!+A#KnpLG$L2_R>OV2$CEjawA`#d`#n)aZ`~ z2~<{|0L)h5FmMJYZS{ftzyv5Oi%{}aRUpaDbO$s;AVFcmk`ZPg$QHFKVo8ZoSlB#) z(}Dt+*q{qeWh4OY%yVrTWdazsr7Z;WLRWWXRUxqu$f#nj1x;OnM5CFA=}U@IV87fN z&>+~wmElc6f$2?M6cok_EjPQIRrx z_6ITzK8m?+-5_~Li5`=@JB?<0wstiQF>Vy!r@{Gs-NdlhGVSdo8#ng`-OY4#Xk!(+ zR+TKA+eA%PARJ1f5qrX8%q`fxaAf=!?VX%dY(V0tBP1R(FwvDDTfxt>BK4XVbIy}- z?u^@JB6>@PgrFn@QPjdXCXZUpE^RIFX2jz-@~NUi(+Le#KGNTq1Yr9Xyj|>A9&O7N zOkNgeyip1|>FYjuLqHr?+C`kjgA*v)JsUoT7^%R=!KyUX_d*M=FF-ky&1PwD)a|?h z+)c*tNq{^wbHQQW3a$X3-z`N=p3DGXP#Gz4klxVWl5VzFho00XG?s`_L?HUIuT+v% zA$GtKYWj(&5C+`89iehngTxQ!KFfCWn694Fpp4SObo`Rm6iINtRgIwa>XluJGQ@3#1g(-LKP=3*vcKO0xM?o`urxJVUKZ^Qf6_NUl*}=qrMjoH0+%1h z3z5UT_>;4TGh<(!w{;>Orvw^#o}Y}f zf1dDV8$-IThwOWKV!Z4kS}w7mxs>cj>sScp$u|@^xDE|2*0t06MMA--&`FyQWQz zMvq-)G>vsFD#+U&iK+|+-mP(_c2scsc3x9Gxol#9$f)cl%Ae7Yz%3zgFI@wgG`)j& z?EI6y?Xa8@stn2qB15uP*BH)UbNOaqVUtnbHh#+A&;E_e0iNw%AiFroT(BJuDd)G) z9xvr7aMe6p95H_B+oKd(+AMP4>^I`*}W&KmF@!(0cpYx&?`FiOz3$-+%aQWHMVb7dfBcE*4*L@p%9|ul zcsiNqA#s3eYa8dOZ(2~YN~Cw&GCZ5b9(Dfu-rlPvSHI~?T~t_@vpQ7Pnye;2)X3?o zl{J|RXql_jv)KJjJh9A2z>Y; zcEpxjQL&I`MG$?-e)a)Jg{-B@%vm>3@lz^+hTK%pOXPJUu)mGwez3ph72#*uM; zhc4n~?Nx*v>Qs`e%OfbOZ-OoVR-`auq>R}?zwdl8_Jdr#WW$+$&(BSVO&s$6_4S*2 zO`Qxuz2Qv<6=gcMsKpUT6c69U+qyyfw15>G5!>-WSW}vUSVgTU!j zUJ2B`=zXeATA~YLV%EXownAw~1e$!;}PPN(Ijn7w_=!>=BU#ki2+ z2|dp)K@to*Q$tm5xXQ_g^UyP4wf66IY&IdK^0oCHj1*vo?p)}NENmCOnx)5IrI|- z%!w+Ihw&Sfx?;w0^>bI2p_x+6*>`Un+Pt*qsG|RSDMD`<>uz5U+w_4^Jy`CTrS*L~ z?>asiuzJ@(-A|HIyq+@gnp?<*A1MhMq$Q;)u6B*JQ_|d1k7`{gCIhutb&}kxiXuqn z{Vx^CQucEHbsLmBIpY5j`2*nohhK^7HCz6Fw7-qV>~U5eYp><%oOL@;_}=`ooe16n ztQ1TEE76MYkS9W5ve2E}wb=CJr#;=5 zvC&+pik`t@Te%2UmVa5p#soMg>Fl`21-Ecv=A(Qr&*g8^>0EH*U{ytgxNf0#8a14Y iV9sX0*}bPYpZr(h--R)ASGj*G;N~?;^HNhx1>If>1T2iXeEo@4xroTW`Iy);W8fv(Mgpt-a6w?R}CR?X3l1r(gg8 z2-sY`;>4kK|4d#U&RW|vkK_>Wo|CmXP%|LC%(=v6bH&Uh3b|T{h?tiFCS}%^pX?PEUcb);MXNsa((1YP$Le zezB2yL+bA!;l-q&(W>o*!vjzPdh3@tSLq}7Uf-~^VEykGtEp|mLW6YZ`=C&n!ES0$ z-+=q6fG-RPYiB5~ur59zmMcf#VT62$_{jUImk}R#iP1UdypPTipekQj#rioV&08dW6O@P30Dr~Dzai%+aF$HPV7IE@EyG_ zjpcHmGP_zjzV+kgi`4gzGH1y|K@~YQO~O&&WyOXMmyZRrJVVsQXw9xkjEc)v7J|*71K9!}W}AxEW#)GJ z8=4^eG``N4i6zc&gEGv`H`5ve7y({GEP?4G=B_9*W7s7jiydF9fa2aD-@)(?ho5x+ zns84x{Xr<9c;Dt4oU$yoF^OPUAc({-nKD?}PGFiX5zI{?Ri;O)D4zOS?{Ne1kxv&1 zv~5Rn>F-qL#ARv0Xd^Sq`)bdjgz#UflTE3c95=}dgr%IjC?yiwu6z)y6Pbp^A~=R} zfgC-ZyQ8N~;v~2J)Pv?FcNy@U_5ZO|4jwn5I#<3c>-5T47H)1sNe$yQ9ZN>}`@fK^ zHyg&QcLNyLdpw)9+LF=t-}t*5e7vW}kAGo%P#c;4k<|u7uObetc7%)>*Bx#}tiAq; z*pRJ5w{@+LBoSsbwc~=QMX+y7xFt47p*G|dg*BT@PIiR(IY2LWv?Gf($4ykiN+A$d zFR^d=1r8A7w}#8%GVF^B#3{bCKq&Xd@N)Jh#N)VhH4eCJ5c>-fNJ%IW6{J{~I}Grn zw8DrS*`*(S4?s1ZbT?B#w(#;L4O|yx7{*I08C7CH>m>BOKrkkJZ@v`})`5R=_8r|DLMk4LzvM8Otko}QI9K9jnoA3Kc|M`cfGnp1j0fSys%WUTUi49G9_jP z;(m|Vh6{UQz#unz(d!bgEsbZ%3x%n_1a+J*2khIKQhbXo>9n@Rkc9fK?vp+CjR=U* z9`DVpFdig`nLP!GGKb#zB1(beIHBC2jW|T~IckAbS=5A-r7f}8EY$?R+v?|?zT}5Q3ynmm;?gD9cD&y2G<1E z*MRkh6& zZZ!D28?K2q5QB5><^`kB-Ki7_D>4#Yzli}isQKdOK2asyP%F)NQULCvpFowHMo2^y zEQ?E@d$dXzQFNMUIwl`C@cMqRU5uCyy8L?Wv&&vgED|BL*dTD;$=lJUxK~&{ zgSh}>QUau6gnqeJVgAA!$>pagCl-$mwpaV<>2J@4Pgs<@R#u#KYmQ=oQ?4i%(K!XJ zn)fXcems=a4$P7M$m~d(|D^ByTyAysW2QRTI6bfV;hj9MAwHPTNg18F1_`S)k%Cuw z5B@v_rmA)olZT3x#Fsq2sZ3rJCnMhkF7HuK;y+(zge>J0*Vm_iZ_-^C0(yET`2d~6 z#b?@NNXfR6`vWw^GSi)$d=rq8^F z{2nr3`h$Z-+ zpz^;XmMP9|79AEoR#>$u2TuUm6UD&y2(n&6iJkFqTjWSr&1sg%2{eb-Tg}b9@H0N+?a2&urr`g<{6zB- zwDP;VY;CMf{#gLg-up;0|EaTW_+9A+E5RXcT@n+RSkdx2p*a8h*~Mv(TI0zH>bY-T z37@?Gg3t;F(HRDME9^2|?u70=A>o0&u5|dq-{^QO?#7(s>;)$pI(UVx0Mxiz5w!@1 z<@C1gCaxTz#O0O|lZB_keMP*1e|hNLoZu$JGufo=%2K~jAU9?q=FZ%0#^=h%r~)gX zJpKuOxx}7JVyg(EKdFn)Kh8t>D3eS6r0Uvg=#Jv9Eh8}(ITp!cuNHV~f|If!2vf6U z-}JF48EW?D3wZQr^Gw&B zdB=_r2-T`1ovqukQcejs=0;cEm`5?tBWEhKSO{%5<{9)@P6GS zc(=Hl`^mF_YJ;*4sUFrlUbmH&PZvinW%7J{pe}`WkNqU^ryI>>>6v~t-{t^=q|r5g z%3)&TG!{O6?E}0pGqAd7F9g(tv3{%&dU^A_fzK+kghmVahW*3TjmM&%z|@BTPM{-# zO?~5u zHL9i5Ymr%C+aiHTu}nd>NI&;&N+ksviqOXH603&phf||g)oGqr);^ef%=vX|`}xj} zGLhI)erM^|05z_47@jnKXb1t}M;)CrS=Ya6Im zi{?lUPG9gmD6Y_3$p<20wD{nE0EcdrSK@{dDwMX!3sT_~&=zOt0C?}&XUuu%#v|1_ zpb`JZ-$+<u{-<^}P2yM?izkEGV_n2{f#Yw)miqop^ z3GVrZfV4#t@x=JBz-&#l4x#l&4xc7Gda~qogtAK8x2%qTKMH2)<~$8uSk-uG;*wo{ z0x5&;N18c>;vV|S31|s`lsW3%@(hO7Dex0|Art4dtEz!U^gjCSQ#IVGd;=%D$&HYS zmy&2zoM)Ld-6P92;h*Dw(%Tgp5!jsvL%FH+=)3v5qR733Mi*$K#*tbIo>5?SW+f#t zKqch}@*G$*O$65Dd~d-@)w!bz(0QIP7N?1d6S(-7Ij6@mXOf6MAoy+EQAf?i6wnay fvD^PYu@6C|G?r|FX*!YfHv()d?XT3BqaOYXrs`nl literal 0 HcmV?d00001 diff --git a/apps/a_speech_timer/screenshot3.png b/apps/a_speech_timer/screenshot3.png new file mode 100644 index 0000000000000000000000000000000000000000..7b67b6f0156354dc839f5194e1a1fbc1c54ed9a1 GIT binary patch literal 3374 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 bvNGFCP4eAd222Y+K)?liN4u7DzS;i;FilcV literal 0 HcmV?d00001 From 8f0856d8716af6e1058a9923e0e5850734303d72 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:21:21 +0900 Subject: [PATCH 07/10] Update README.md --- apps/a_speech_timer/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/a_speech_timer/README.md b/apps/a_speech_timer/README.md index 98d2d4517..a6568649f 100644 --- a/apps/a_speech_timer/README.md +++ b/apps/a_speech_timer/README.md @@ -6,7 +6,10 @@ * Use the buttons to start a timer * Swipe left or right to choose different target times -![](screenshot.png) +![](screenshot0.png) +![](screenshot1.png) +![](screenshot2.png) +![](screenshot3.png) ## Creator [@alainsaas](https://github.com/alainsaas) From 541adf4c16c7bf2e522c3343b7675831b9e13343 Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:22:44 +0900 Subject: [PATCH 08/10] Update README.md --- apps/a_speech_timer/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/a_speech_timer/README.md b/apps/a_speech_timer/README.md index a6568649f..098c352f3 100644 --- a/apps/a_speech_timer/README.md +++ b/apps/a_speech_timer/README.md @@ -5,6 +5,7 @@ * Example for a 5 to 7 minutes speech: vibrates once at 5:00 (green), twice at 6:00 (yellow), thrice at 7:00 (red). * Use the buttons to start a timer * Swipe left or right to choose different target times +* Touching the timer on the upper part of the screen locks (or unlocks) the buttons to prevent accidental changes ![](screenshot0.png) ![](screenshot1.png) From 3507dcde457b78beede4ee033af1f38090a1a71d Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:26:52 +0900 Subject: [PATCH 09/10] Update apps.json --- apps.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/apps.json b/apps.json index 36102264e..cb8a460f7 100644 --- a/apps.json +++ b/apps.json @@ -4557,5 +4557,19 @@ { "name": "sensible.app.js", "url": "sensible.js" }, { "name": "sensible.img", "url": "sensible-icon.js", "evaluate": true } ] +}, +{ + "id":"a_speech_timer", + "name":"A Speech TImer", + "icon": "app.png", + "version":"1.00", + "description": "A timer designed to help keeping your speeches and presentations to time.", + "tags": "tool,timer", + "readme":"README.md", + "supports":["BANGLEJS2"], + "storage": [ + {"name":"a_speech_timer.app.js","url":"app.js"}, + {"name":"a_speech_timer.img","url":"app-icon.js","evaluate":true} + ] } ] From 3c7d6b795d50aac5d6c3945a4a9af1ee013154ad Mon Sep 17 00:00:00 2001 From: Alain Saas Date: Wed, 1 Dec 2021 15:28:23 +0900 Subject: [PATCH 10/10] Update apps.json --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index cb8a460f7..50f02c953 100644 --- a/apps.json +++ b/apps.json @@ -4560,7 +4560,7 @@ }, { "id":"a_speech_timer", - "name":"A Speech TImer", + "name":"A Speech Timer", "icon": "app.png", "version":"1.00", "description": "A timer designed to help keeping your speeches and presentations to time.",