From 51d699d6dd1f9d7faf94d394fcc6f491408723bd Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 22 Oct 2020 17:02:35 +0100 Subject: [PATCH] Added automatic charge animation --- apps.json | 12 ++++++++++++ apps/chargeanim/ChangeLog | 1 + apps/chargeanim/app-icon.js | 1 + apps/chargeanim/app.js | 28 ++++++++++++++++++++++++++++ apps/chargeanim/boot.js | 1 + apps/chargeanim/icon.png | Bin 0 -> 1178 bytes 6 files changed, 43 insertions(+) create mode 100644 apps/chargeanim/ChangeLog create mode 100644 apps/chargeanim/app-icon.js create mode 100644 apps/chargeanim/app.js create mode 100644 apps/chargeanim/boot.js create mode 100644 apps/chargeanim/icon.png diff --git a/apps.json b/apps.json index 49d1422d9..bfae0931a 100644 --- a/apps.json +++ b/apps.json @@ -447,6 +447,18 @@ {"name": "weather.json"} ] }, + { "id": "chargeanim", + "name": "Charge Animation", + "icon": "icon.png", + "version":"0.01", + "description": "When charging, show a sideways charging animation and keep the screen on. When removed from the charger load the clock again.", + "tags": "battery", + "storage": [ + {"name":"chargeanim.app.js","url":"app.js"}, + {"name":"chargeanim.boot.js","url":"boot.js"}, + {"name":"chargeanim.img","url":"app-icon.js","evaluate":true} + ] + }, { "id": "widbat", "name": "Battery Level Widget", "icon": "widget.png", diff --git a/apps/chargeanim/ChangeLog b/apps/chargeanim/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/chargeanim/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/chargeanim/app-icon.js b/apps/chargeanim/app-icon.js new file mode 100644 index 000000000..0252d9ac2 --- /dev/null +++ b/apps/chargeanim/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4ASwoAIF/4pZABYuuGDIv/F/4v/F/4vt1Ivt6Zft1Ivu6fNF9nT6a+JF8SNBF9ouBXxQvhFwQvrRoTuLF8BeDXxQvfFwYAFGgwvdRoYAGd840GX84AC5rCLF8ReLF8wMJF8K+CRpAvmNhQvhdwIuKF8SNLF8guLF8JdML8Yv/F/4v/F/4v/GDguYAH4A/AGYA==")) diff --git a/apps/chargeanim/app.js b/apps/chargeanim/app.js new file mode 100644 index 000000000..c2702337a --- /dev/null +++ b/apps/chargeanim/app.js @@ -0,0 +1,28 @@ +g.clear().flip(); +var imgbat = require("heatshrink").decompress(atob("nlWhH+AH4A/AH4AHwoAQHXQ8pHf47rF6YAXHXQ8OHVo8NHf47/Hf47/Hf47/Hf47/Hf47/Hf47r1I766Y756Z351I766ayTHco6BHfCxBHfI6CdyY7jHQQ73WIayUHcQ6DHew6EHeqxEdyo7gOwo70HQqyVHbyxFHeo6GHeY6Hdyo7cWI47zHQ6yWHbY6IHeKxIABa9MHbI6TQJo7YHUI7YWMKzbQKQYOHdYYPHcK9IWJw7sDKA7hHTA7pWKA7qDKQ7gdwwaTHcyxSHcR2ZHcwZUHcqxUHcLuEHSo7kHSw7gWLI7kHS47iHTA7fdwKxYHcQ6ZHb46bO8A76ADg7/Hf47/Hf47/Hf47/Hf47/Hf47/HbY8uHRg8tHRwA/AH4AsA==")); +var imgbubble = require("heatshrink").decompress(atob("ikQhH+AAc0AAgKEAAwRFCpgMDnVerwULCIuCCYoUGCQQQBnQ9MA4Q3GChI5DEpATIJYISKCY46LCYwANCa4UObJ7INeCoSOCpAOI")); + + var W=240,H=240; +var bubbles = []; +for (var i=0;i<10;i++) { + bubbles.push({y:Math.random()*H,ly:0,x:(0.5+(i<5?i:i+8))*W/18,v:0.6+Math.random(),s:0.5+Math.random()}); +} + +function anim() { + /* we don't use any kind of buffering here. Just draw one image + at a time (image contains a background) too, and there is minimal + flicker. */ + var mx = 120, my = 120; + bubbles.forEach(f=>{ + f.y-=f.v;if (f.y<-24) f.y=H+8; + g.drawImage(imgbubble,f.y,f.x,{scale:f.s}); + }); + g.drawImage(imgbat, mx,my,{rotate:Math.sin(getTime()*2)*0.5-Math.PI/2}); + g.flip(); +} + +setInterval(anim,20); + +Bangle.on("charging", isCharging => { + if (!isCharging) load(); +}); diff --git a/apps/chargeanim/boot.js b/apps/chargeanim/boot.js new file mode 100644 index 000000000..cbc78681b --- /dev/null +++ b/apps/chargeanim/boot.js @@ -0,0 +1 @@ +Bangle.on("charging", isCharging => { if (isCharging) load("chargeanim.app.js"); }); diff --git a/apps/chargeanim/icon.png b/apps/chargeanim/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9860c323dd336b65a32e11d571957d677cc16701 GIT binary patch literal 1178 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lNlIT{5@S9 zLn`LHog0{cIZWjE|8J#}mX$`Wbn=~`)_Be9wuE%Qhlhb^)UJ<=-y|P2ikta9R`&7m zxqaMW&(>QZQ5qgKjh(y_3*N0%(qx*rEH@_U_q&D0UX!g#!{YB(ANsjhb!$!k-_L*N zU)~bR*p?^(Ms_ATcUg}VK7P0~U-2V%!zo4o(5*}M{QA4|e*W^n@LM-_ad)WBoz2f6 zni;u&S%IAD3~hzEv*im-jutQNI>}_mVf2#Ger?U?iEnS%GZ*nWXm*?OJ2D@b#Pe3Z z{zulsov)5g;l8o==QVkTW1;J(8s)ca*uSSNEz$R>(kbPP?6cdz?AIIb+_33p_7k z#O8Vl7vvl{{!vgqdf!I-SMQP%Sf1o|?(`CVZS7R9S!-y(wCuER&oieG+o`uaEsK(|h#`eZ*QHP z{QlnlWn%UWiHxj@hSA@??Qvhr$lSs@XMV<_Dcs-p9Jf|bR*RLN|KI%U7H6Og3#&-W z5ucqmzuFyT;}H-kNIdkqORgd955o}_pIvr-TYPQb2IL%IPz0OyvTq*8J;tt?n&uC! z?p_pj+{no60#v43V|L5-t4l!c0R~1!SHVX~{Vy0Bq%Qtp=it~8aPMG;a3_z< ztRSUUyZ&Ff>^GHliGQHS8QHIVb^;~R1`HC>KYf;VCJNer-BO&IrF^ll-n?i=ytJK9 z?Gue)DYH)RSPffXancw@W(l+MLZlRA^z6jfT zR_>a3e6yS0)#7EXg|-QGxe}i_`-*nSqvF>fBgI+ zSMI+6&|yhTf9|e)E_xT}<|HO3oqak<=?sh1n|c_ob8g)AlE(*VieP|