From e06c1d78ea21ffe97feaa14295eb16b1ca718fb6 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 Jul 2024 15:57:00 +0100 Subject: [PATCH 1/5] runplus: pull out `tick` logic --- apps/runplus/app.js | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/apps/runplus/app.js b/apps/runplus/app.js index e83112219..93b341a51 100644 --- a/apps/runplus/app.js +++ b/apps/runplus/app.js @@ -143,7 +143,7 @@ function zoom(statID) { .clearRect(R) .setFontAlign(0, 0); - layout.render(layout.bottom); + tick(); const value = exs.state.active ? stat.getString() : "____"; @@ -217,6 +217,20 @@ Bangle.on("GPS", function(fix) { } }); +const tick = () => { + layout.clock.label = locale.time(new Date(),1); + switch (screen) { + case "main": + layout.render(); + break; + case "zoom": + layout.render(layout.bottom); + break; + case "menu": + break; + } +}; + function setScreen(to) { if (screen === "karvonen") { require("runplus_karvonen").stop(); @@ -235,12 +249,8 @@ function setScreen(to) { layout.render(); layout.lazy = true; // We always call ourselves once a second to update - if (!runInterval){ - runInterval = setInterval(function() { - layout.clock.label = locale.time(new Date(),1); - if (screen !== "menu") layout.render(); - }, 1000); - } + if (!runInterval) + runInterval = setInterval(tick, 1000); break; case "karvonen": From a38fecd20b43b2217d4b7b6af1de02948ddf19e5 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Thu, 17 Apr 2025 22:34:16 +0100 Subject: [PATCH 2/5] runplus: only reacquire layout UI if recorder might've rendered timings for start/stop: 13:38:15.996Z: onStartStop() 13:38:16.006Z: setRecording() 13:38:16.728Z: setRecording() done 13:38:16.732Z: layout.render() 13:38:17.154Z: layout.render() done 13:38:17.157Z: exs.start/stop/resume() 13:38:17.161Z: exs.start/stop/resume() done 13:38:17.462Z: setStatus() 13:38:19.027Z: onStartStop() 13:38:19.199Z: exs.start/stop/resume() 13:38:19.202Z: exs.start/stop/resume() done 13:38:19.495Z: setStatus() 13:38:24.795Z: onStartStop() 13:38:24.805Z: setRecording() 13:38:25.483Z: setRecording() done 13:38:25.487Z: layout.render() 13:38:25.913Z: layout.render() done 13:38:25.915Z: exs.start/stop/resume() 13:38:25.919Z: exs.start/stop/resume() done 13:38:26.218Z: setStatus() 13:38:27.842Z: onStartStop() 13:38:28.010Z: exs.start/stop/resume() 13:38:28.012Z: exs.start/stop/resume() done 13:38:28.309Z: setStatus() in summary: setRecording: ~700ms layout.render(): ~420ms --- apps/runplus/app.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/runplus/app.js b/apps/runplus/app.js index 93b341a51..e15a4bd34 100644 --- a/apps/runplus/app.js +++ b/apps/runplus/app.js @@ -92,9 +92,12 @@ function onStartStop() { then(() => WIDGETS["recorder"].setRecording(true, { force : shouldResume?"append":undefined })). then(() => { screen = "main"; - layout.setUI(); // grab our input handling again - layout.forgetLazyState(); - layout.render(); + if(!shouldResume){ + // setRecording might have rendered - need to grab UI + layout.setUI(); // grab our input handling again + layout.forgetLazyState(); + layout.render(); + } }); } else { promise = promise.then( From 1ac4622b277edafd96c366f6b7ed894ba83e96d4 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Fri, 18 Apr 2025 14:50:53 +0100 Subject: [PATCH 3/5] runplus: fix bug keeping track of screen state --- apps/runplus/app.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/runplus/app.js b/apps/runplus/app.js index e15a4bd34..ea46c5b95 100644 --- a/apps/runplus/app.js +++ b/apps/runplus/app.js @@ -87,10 +87,11 @@ function onStartStop() { // an overwrite before we start tracking exstats if (settings.record && WIDGETS["recorder"]) { if (running) { - screen = "menu"; promise = promise. - then(() => WIDGETS["recorder"].setRecording(true, { force : shouldResume?"append":undefined })). then(() => { + screen = "menu"; + return WIDGETS["recorder"].setRecording(true, { force : shouldResume?"append":undefined }); + }).then(() => { screen = "main"; if(!shouldResume){ // setRecording might have rendered - need to grab UI From 84ca0ae43433926f7792f86a40e963eafdc5c3c5 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Fri, 18 Apr 2025 15:02:50 +0100 Subject: [PATCH 4/5] runplus: changelog --- apps/runplus/ChangeLog | 2 ++ apps/runplus/metadata.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/runplus/ChangeLog b/apps/runplus/ChangeLog index 645f6cf76..652e8ec36 100644 --- a/apps/runplus/ChangeLog +++ b/apps/runplus/ChangeLog @@ -28,3 +28,5 @@ Write to correct settings file, fixing settings not working. 0.25: Fix step count bug when runs are resumed after a long time 0.26: Add ability to zoom in on a single stat by tapping it 0.27: Allow setting to alway resume an activity +0.28: Optimise UI: only redraw if we showed a recorder menu and correctly + track screen state diff --git a/apps/runplus/metadata.json b/apps/runplus/metadata.json index fe59050db..dab94890b 100644 --- a/apps/runplus/metadata.json +++ b/apps/runplus/metadata.json @@ -1,7 +1,7 @@ { "id": "runplus", "name": "Run+", - "version": "0.27", + "version": "0.28", "description": "Displays distance, time, steps, cadence, pace and more for runners. Based on the Run app, but extended with additional screens for heart rate interval training and individual stat focus.", "icon": "app.png", "tags": "run,running,fitness,outdoors,gps,karvonen,karvonnen", From edb0cf2ddf19af721960b5e0cee1476059d96713 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 20 Apr 2025 17:50:07 +0200 Subject: [PATCH 5/5] Update metadata.json --- apps/runplus/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/runplus/metadata.json b/apps/runplus/metadata.json index dab94890b..4c405b922 100644 --- a/apps/runplus/metadata.json +++ b/apps/runplus/metadata.json @@ -1,7 +1,7 @@ { "id": "runplus", "name": "Run+", - "version": "0.28", + "version": "0.29", "description": "Displays distance, time, steps, cadence, pace and more for runners. Based on the Run app, but extended with additional screens for heart rate interval training and individual stat focus.", "icon": "app.png", "tags": "run,running,fitness,outdoors,gps,karvonen,karvonnen",