From 7d65d66cc820d7a3f0488fd5bfd98c7325916502 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Tue, 9 Dec 2025 21:08:12 -0500 Subject: [PATCH 1/9] Add animation for expanding circle on boot --- apps/loadanim/boot.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 apps/loadanim/boot.js diff --git a/apps/loadanim/boot.js b/apps/loadanim/boot.js new file mode 100644 index 0000000000..464f908c4e --- /dev/null +++ b/apps/loadanim/boot.js @@ -0,0 +1,30 @@ +function animateExpandCircle(x, y, startR, endR, duration,color) { + var r=startR; + var fps=15 + var rChangeRate=(endR-startR)/(duration*fps) + var interval; + var time=0; + interval=setInterval(function(){ + time+=1/fps + r+=rChangeRate; + g.setColor(color); + + g.fillEllipse(x-r,y-r,x+r,y+r) + if(Math.round(r)==Math.round(endR)||time>duration){ + clearInterval(interval) + } + },1/fps) + +}; + +Bangle.load=(function(name) { + if (Bangle.uiRemove) { + var animTime=0.3; //seconds + animateExpandCircle(g.getWidth()/2,g.getHeight()/2,0,150,animTime,g.theme.bg) + Bangle.setUI(); // remove all existing UI (and call Bangle.uiRemove) + __FILE__=name; + if (!name) name = ".bootcde"; + setTimeout(eval,animTime*1000,require("Storage").read(name)); // Load app without a reboot + } else load((name!=".bootcde")?name:undefined); +}); + From 141a56114a3bf3ad89984c5eedadab8eb6edd758 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Tue, 9 Dec 2025 21:16:49 -0500 Subject: [PATCH 2/9] Add README for Loading Animation app This README provides information about the loading animation feature, its purpose, and known bugs. --- apps/loadanim/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 apps/loadanim/README.md diff --git a/apps/loadanim/README.md b/apps/loadanim/README.md new file mode 100644 index 0000000000..98f80dbd4c --- /dev/null +++ b/apps/loadanim/README.md @@ -0,0 +1,13 @@ +# Loading Animation (beta) +This is a test to make the UI feel more responsive and fluid, by adding an animation when loading from the clock to a launcher. This app is still in beta, and is in regards to [this discussion](https://github.com/orgs/espruino/discussions/7871). + +This modifies the boot code for `Bangle.load()` function, and first shows a 0.15 second animation of an expanding circle, transitioning smoothly between current and the next loaded app. This takes up minimal battery and processing power. + +Give it a try, and tag `@RKBoss6` with any improvements or ideas! + +## Known bugs +* Memory can run out slightly faster +* A hang will result in a blank screen until the user long-presses the button +## Creator +RKBoss6 + From 7fdeb17e342cca7989b9cf76a0650d37515d8f55 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Tue, 9 Dec 2025 21:24:05 -0500 Subject: [PATCH 3/9] Add metadata.json for loading animation app --- apps/loadanim/metadata.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/loadanim/metadata.json diff --git a/apps/loadanim/metadata.json b/apps/loadanim/metadata.json new file mode 100644 index 0000000000..3ed5f13f8e --- /dev/null +++ b/apps/loadanim/metadata.json @@ -0,0 +1,16 @@ +{ + "id": "loadanim", + "name": "Loading Animation", + "shortName":"Load Anim", + "icon": "icon.png", + "version":"0.01", + "description": "Shows an animation to transition into the next loaded app (beta)", + "type":"bootloader", + "tags": "tool,system", + "author":"RKBoss6", + "supports": ["BANGLEJS2"], + "readme":"README.md", + "storage": [ + {"name":"loadanim.boot.js","url":"boot.js"} + ] +} From deca8ba871f5331f0a35f078759c2101c7fff86d Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Tue, 9 Dec 2025 21:25:26 -0500 Subject: [PATCH 4/9] Add files via upload --- apps/loadanim/icon.png | Bin 0 -> 25777 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/loadanim/icon.png diff --git a/apps/loadanim/icon.png b/apps/loadanim/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..67d236916bf794ef3e6c37cd3c07d946363f2957 GIT binary patch literal 25777 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%0D+F!gM0iGpDg>zA*w8Orz} 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 h00006Nkl2*6002ovPDHLkV1l0jhFJgr literal 0 HcmV?d00001 From 540ed04b19f3d5149a41d64568231cc7e8989168 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Tue, 9 Dec 2025 22:16:31 -0500 Subject: [PATCH 5/9] Add initial ChangeLog for loadanim app --- apps/loadanim/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/loadanim/ChangeLog diff --git a/apps/loadanim/ChangeLog b/apps/loadanim/ChangeLog new file mode 100644 index 0000000000..a995b99ea1 --- /dev/null +++ b/apps/loadanim/ChangeLog @@ -0,0 +1 @@ +0.01: New test app From 7b81ac356711c15da624cfc116d147c2189a7753 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Tue, 9 Dec 2025 22:17:19 -0500 Subject: [PATCH 6/9] Fix syntax error in boot.js --- apps/loadanim/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/loadanim/boot.js b/apps/loadanim/boot.js index 464f908c4e..c8e1f91d79 100644 --- a/apps/loadanim/boot.js +++ b/apps/loadanim/boot.js @@ -15,7 +15,7 @@ function animateExpandCircle(x, y, startR, endR, duration,color) { } },1/fps) -}; +} Bangle.load=(function(name) { if (Bangle.uiRemove) { From 39ae1586e74547e835c18af6e815cad759d94624 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Wed, 10 Dec 2025 09:53:42 -0500 Subject: [PATCH 7/9] Update apps/loadanim/boot.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/loadanim/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/loadanim/boot.js b/apps/loadanim/boot.js index c8e1f91d79..cfcab54990 100644 --- a/apps/loadanim/boot.js +++ b/apps/loadanim/boot.js @@ -13,7 +13,7 @@ function animateExpandCircle(x, y, startR, endR, duration,color) { if(Math.round(r)==Math.round(endR)||time>duration){ clearInterval(interval) } - },1/fps) + },1000/fps) } From e681ec655cb52b54df740688b10ec59a69ec6546 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Wed, 10 Dec 2025 09:54:47 -0500 Subject: [PATCH 8/9] Update apps/loadanim/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/loadanim/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/loadanim/README.md b/apps/loadanim/README.md index 98f80dbd4c..5e28e19e4c 100644 --- a/apps/loadanim/README.md +++ b/apps/loadanim/README.md @@ -1,7 +1,7 @@ # Loading Animation (beta) This is a test to make the UI feel more responsive and fluid, by adding an animation when loading from the clock to a launcher. This app is still in beta, and is in regards to [this discussion](https://github.com/orgs/espruino/discussions/7871). -This modifies the boot code for `Bangle.load()` function, and first shows a 0.15 second animation of an expanding circle, transitioning smoothly between current and the next loaded app. This takes up minimal battery and processing power. +This modifies the boot code for `Bangle.load()` function, and first shows a 0.3 second animation of an expanding circle, transitioning smoothly between current and the next loaded app. This takes up minimal battery and processing power. Give it a try, and tag `@RKBoss6` with any improvements or ideas! From 4e9a880332a2cfd2d94d6da3739b47cf826aa73f Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Wed, 10 Dec 2025 21:36:27 -0500 Subject: [PATCH 9/9] Update README.md --- apps/loadanim/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/loadanim/README.md b/apps/loadanim/README.md index 5e28e19e4c..17cb37caa1 100644 --- a/apps/loadanim/README.md +++ b/apps/loadanim/README.md @@ -5,6 +5,12 @@ This modifies the boot code for `Bangle.load()` function, and first shows a 0.3 Give it a try, and tag `@RKBoss6` with any improvements or ideas! +You should see an animation: +* If you have a clock that supports fast-loading +* From a launcher that also supports fast-loading or calls Bangle.load + +If you don't see an animation, try using a clock with fast loading, or install fastload utils and see if that works. + ## Known bugs * Memory can run out slightly faster * A hang will result in a blank screen until the user long-presses the button