From 36766e69c542246b1273b74aec1210ddd8e5593a Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Thu, 17 Nov 2022 02:27:08 +0100 Subject: [PATCH] First commit --- apps/sevenmin/ChangeLog | 1 + apps/sevenmin/README.md | 19 +++++++ apps/sevenmin/app-icon.js | 1 + apps/sevenmin/app.js | 106 ++++++++++++++++++++++++++++++++++++ apps/sevenmin/icon.png | Bin 0 -> 1597 bytes apps/sevenmin/metadata.json | 16 ++++++ 6 files changed, 143 insertions(+) create mode 100644 apps/sevenmin/ChangeLog create mode 100644 apps/sevenmin/README.md create mode 100644 apps/sevenmin/app-icon.js create mode 100644 apps/sevenmin/app.js create mode 100644 apps/sevenmin/icon.png create mode 100644 apps/sevenmin/metadata.json diff --git a/apps/sevenmin/ChangeLog b/apps/sevenmin/ChangeLog new file mode 100644 index 000000000..1a3bc1757 --- /dev/null +++ b/apps/sevenmin/ChangeLog @@ -0,0 +1 @@ +0.01: New app! diff --git a/apps/sevenmin/README.md b/apps/sevenmin/README.md new file mode 100644 index 000000000..dfcd21999 --- /dev/null +++ b/apps/sevenmin/README.md @@ -0,0 +1,19 @@ +Do a seven minute workout - or three! + +Touch the screen to start the workout and follow the instructions. + +Once the workout is finished the screen can be touched to go again - but get a minute or two of rest inbetween! + +Search the web if you want further instructions, videos are helpful! + +TODO: +- Add visible countdowns +- Add tracking of excercises, number of repetitions done etc. (Integration with BanglExercise app?) +- Add tracking of workouts over time. +- Move the whole app into BangleExercise app? +- + +Creator: +Thyttan + +Jump icon by Icons8 diff --git a/apps/sevenmin/app-icon.js b/apps/sevenmin/app-icon.js new file mode 100644 index 000000000..2e8f63f7e --- /dev/null +++ b/apps/sevenmin/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwhC/AFfd7oWUhoXB6AuVGCoX/CQZwDO4wGBRJ4uESpYLCBg4KKLQw+EBBAYK6Wq1UtPaAPC7QXB1qSRLAMqC4OiLZQYIC4YWRAAIWBAALvTC/7DLCySoBAASPSCgPc5owSFwXM5gwSFwQXBGCQuC4EMGARGSAoJIRIwXAAoMMJB4uFGCIuFGCIuGGAhGM7gKHGAJIKC4IMIBRRHDAYUzAAQKGABUDCwYABmDvPC4IFDC6IAYJAhGSAAwZNCwQQEA44WJBQ4YMgYLWAH4AaA==")) diff --git a/apps/sevenmin/app.js b/apps/sevenmin/app.js new file mode 100644 index 000000000..be2d4ae11 --- /dev/null +++ b/apps/sevenmin/app.js @@ -0,0 +1,106 @@ +/* +'Jumping jacks', +'Wall sit', +'Pushups', +'Crunches', +'Step-up onto chair, alternating legs', +'Squats', +'Triceps dips, using a chair or bench', +'Forearm plank', +'High-knees or running in place', +'Lunges, alternating legs', +'Pushups with rotation, alternating sides', +'Side plank', + +Once you've completed all 12 exercises, take a break for 1–2 minutes and repeat the circuit another 2–3 times. + +*/ +{ + + let R = Bangle.appRect; + let instructions = ['Rest\n\nNext up:\n\n', + 'Tap to start!', + 'Get ready!\nFirst up:\n', + 'Jumping jacks', + 'Wall sit', + 'Pushups', + 'Crunches', + 'Step-up onto\nchair,\nalternating legs', + 'Squats', + 'Triceps dips,\n using\ a\nchair or bench', + 'Forearm plank', + 'High-knees or\nrunning in place', + 'Lunges,\nalternating legs', + 'Pushups with\nrotation,\nalternating sides', + 'Side plank', + 'Workout done!' + ]; + + Bangle.setLCDTimeout(0); + Bangle.setLocked(false); + + let draw = function(instruction) { + g.reset(); + g.clearRect(R); + + g.setFont12x20(); + g.setFontAlign(0,0,0); + g.drawString(instruction, R.w/2, R.h/2); + }; + + let endWorkout = function(interval) { + draw(instructions[instructions.length-1]); + clearInterval(interval); + ongoing = false; + }; + + let cycle = 40; // standard cycle is 40 seconds + let scaling = cycle/40; // scaling if changing cycle length + let ongoing = false; + let touchHandler = function() { + if (!ongoing) { + Bangle.buzz(); + ongoing = true; + // Get ready! + draw(instructions[2]+instructions[3]); + let i = 3; + // buzzes before start + setTimeout(()=>{let j = 0; let buzzes = setInterval(()=>{Bangle.buzz(200*scaling); j++; if (j==5) clearInterval(buzzes);}, 1*1000*scaling);}, 4*1000*scaling); + // timeout till first excercise + let timeout = setTimeout(()=>{draw(instructions[i]);i++;}, 10*1000*scaling); + // buzzes before first rest + setTimeout(()=>{let j = 0; let buzzes = setInterval(()=>{Bangle.buzz(200*scaling); j++; if (j==5) clearInterval(buzzes);}, 1*1000*scaling);}, 34*1000*scaling); + // interval containing rest and excercises 10+30=40 + let interval = setInterval(()=>{ + if (i==instructions.length-1) { + endWorkout(interval); + } else { + // draw pause message + draw(instructions[0]+instructions[i]); + // buzzes before next excercise + setTimeout(()=>{let j = 0; let buzzes = setInterval(()=>{Bangle.buzz(200*scaling); j++; if (j==5) clearInterval(buzzes);}, 1*1000*scaling);}, 4*1000*scaling); + // timeout till next excercise + setTimeout(()=>{draw(instructions[i]);i++;}, 10*1000*scaling); + // buzzes before next rest + setTimeout(()=>{let j = 0; let buzzes = setInterval(()=>{Bangle.buzz(200*scaling); j++; if (j==5) clearInterval(buzzes);}, 1*1000*scaling);}, 34*1000*scaling); + } + }, 40*1000*scaling); + } + }; + + let swipeHandler = function() { + + }; + + let uiMode = { + mode : 'custom', + back : load, + touch : touchHandler, + //swipe : swipeHandler + }; + Bangle.setUI(uiMode); + + Bangle.loadWidgets(); + // Tap to start! + draw(instructions[1]); +} diff --git a/apps/sevenmin/icon.png b/apps/sevenmin/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c842459558040714c6015fe8d62b8efea386f353 GIT binary patch literal 1597 zcmV-D2EzG?P)af<;EO!AGc8MKeSkUSUwX~k)2OK;nI z?>T$ez5;fH*2l^|NqzBXP>>#hCvMCmkk*RQvG1&7{vD?=!~w=HaxmW zayK7#Tg&wZI?a3c0~ryiMr^%a3O0Z5rk>>{89?Vhe~x*847~D!+j8zVaQ3n334P__ z!T>aY4ghDb7>EY`(|by`xh>|6rbxHWorvg4AO)oiuV=MPD>>R@v2hk-d8Ps*A~KB# zi+k1Bes>nO^9VvA;K!IpC9mwu{=7x?7SfOAR089}LJqNXU5NV8^QF&||n;0a4tO78j_-D;p3xVo40QH0evzJE*J+jUX# zeR$7kJfVkB9s#m?DXW&;^*Q}e@$jGx)0u>O=FddZQ21 zfXXg}RRsJSq@cVl8eehk#JY7}HsU-0*29sr(h$gC`Jtj7$2~c26(f@yBf~8S>rnGA z$t|ml)k{K03ElC)5JK$*owLGpfbI2D*?FSp3Hn`T1=B9xd0Kie$|~@!l^JjOQ`1EW|iDt_O%)}etut{J8|*C8(q~L zh@JSnVz7aq8?HW&`c!@qDzElkM3Fqdd9_=b?!AQ;{(d52eF`M^BN@WtHu-z`=Wgh_ z(t!SL)+j<|4=^S?-qv^m5K=NOicpn0kO{JM)A2;L6J7(lvz`d^fz}q9>uYJQ zKSrSSRKy@1jWK1qq%bK_{lph>+t6je)bNlU=%A_gTP_%u_Q{a6^es)b-(Uv=-Ny-& z@V75bR6enz#KMBR5nUS|Gmb;Uw+HbJN!gyhu6jB^ z9v^W%Lb@nF9m7V#%>&K#wOGESjgjU7(o3smS>k!8<%e^wg@$0sJG!7?WISGCZa|kT zu`se0xI8@WZ~Rf!IA!T22maXG*!1<)e{w>>4Q(g?A9-HN!qQSLER1}<`bF$B;NSCX z*Z1og1X@q26KH=cz2v~`{)T6iR?i8x``-+14G(6RVw=)_^`$a2Ki@!^hdd zfYWyJ$A6}+sr*YUT+R24e>rtz=3^dTa`?Zli2Om8mcJVNs|=rKvbp z^8jgY?|(AT+*GW_*kNHo^`%&N64(bMWQRKDr@p?sI9`U-*LN4&9c_<+gw94arklN} zF1EtBA424{&fn&Vq?dQRe>zoP^XXU{Z=S*gfg8YNf@A<*gp;T?0##sDT53KVojv6% z5z(YqK6yCt(1O5pYkDn3u_b|jd1HB^?Xcu&+ zVtrHR=^ln%H`gvA9-Yf~Zad()>e5xTSyop*wcCVm@IKRh7EKUu3Is zCMoMZXr;9#Qqaj$`6hbnHunEOPS1zZ|0jSBB6 zvgWdJlXu5M5K{wHRaHsDy-oLv>f^u-VX5Q5XTTSV)>z1Qc2G~WdNTX~!)YGs@sjCa zF1HNVsBkmF6qHeC7?gc#v7*IJUz3xQ6Lh@+Rh91#{dXT{uh|<=ebb1PUOH~_UJ;4u z{jI9j@tR#X8_UcSG?5RF7%W00000NkvXXu0mjfg?9%b literal 0 HcmV?d00001 diff --git a/apps/sevenmin/metadata.json b/apps/sevenmin/metadata.json new file mode 100644 index 000000000..f39b23bce --- /dev/null +++ b/apps/sevenmin/metadata.json @@ -0,0 +1,16 @@ +{ "id": "sevenmin", + "name": "Seven minute workout", + "shortName": "7 min wo", + "version": "0.01", + "description": "A basic implementation of the famous consice workout", + "icon": "icon.png", + "type":"app", + "tags": "Training, Workout", + "supports": ["BANGLEJS2"], + "readme": "README.md", + "allow_emulator":true, + "storage": [ + {"name":"sevenmin.app.js", "url":"app.js"}, + {"name":"sevenmin.img", "url":"app-icon.js","evaluate":true} + ] +}