Skip to content

Commit 92ff72c

Browse files
authored
Merge pull request espruino#3829 from bobrippling/fix/pace-menu
pace: fix menu rendering
2 parents 0a67619 + 53eb2d9 commit 92ff72c

File tree

5 files changed

+36
-18
lines changed

5 files changed

+36
-18
lines changed

apps/pace/ChangeLog

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
0.02: Show elapsed time on pause screen
33
0.03: Avoid initial GPS skew and allow reset of time/splits
44
0.04: Bump exstats module - show active time, not elapsed
5+
0.05: Fix menu display - don't draw over the menu and vice-versa. Require
6+
double-tap for menu

apps/pace/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ A running pace app, useful for races. Will also record your splits and display t
55
Drag up/down on the pause menu to scroll through your splits.
66
Press the button to pause/resume - when resumed, pressing the button will pause instantly, regardless of whether the screen is locked.
77

8+
Double tap the pause screen to access a menu for finer control
9+
810
# Todo
911

1012
- Load splits on app start, button to reset (exs is always reset)
11-
- Show total time on pause screen

apps/pace/app.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
});
1111
var S_1 = require("Storage");
1212
var drawTimeout_1;
13+
var menuShown_1 = false;
1314
var splits_1 = [];
1415
var splitOffset_1 = 0, splitOffsetPx_1 = 0;
1516
var GPS_TIMEOUT_MS_1 = 30000;
@@ -113,12 +114,10 @@
113114
};
114115
var pauseRun_1 = function () {
115116
exs_1.stop();
116-
Bangle.setGPSPower(0, "pace");
117117
draw_1();
118118
};
119119
var resumeRun_1 = function () {
120120
exs_1.resume();
121-
Bangle.setGPSPower(1, "pace");
122121
g.clearRect(Bangle.appRect);
123122
layout_1.forgetLazyState();
124123
draw_1();
@@ -129,6 +128,12 @@
129128
else
130129
resumeRun_1();
131130
};
131+
var hideMenu_1 = function () {
132+
if (!menuShown_1)
133+
return;
134+
Bangle.setUI();
135+
menuShown_1 = false;
136+
};
132137
exs_1.start();
133138
exs_1.stats.dist.on("notify", function (dist) {
134139
var prev = { time: 0, dist: 0 };
@@ -156,7 +161,7 @@
156161
});
157162
setWatch(function () { return onButton_1(); }, BTN1, { repeat: true });
158163
Bangle.on('drag', function (e) {
159-
if (exs_1.state.active || e.b === 0)
164+
if (exs_1.state.active || e.b === 0 || menuShown_1)
160165
return;
161166
splitOffsetPx_1 -= e.dy;
162167
if (splitOffsetPx_1 > 20) {
@@ -174,32 +179,34 @@
174179
Bangle.on('twist', function () {
175180
Bangle.setBacklight(1);
176181
});
177-
Bangle.on('tap', function (_e) {
178-
if (exs_1.state.active)
182+
Bangle.on('tap', function (e) {
183+
if (exs_1.state.active || menuShown_1 || !e.double)
179184
return;
185+
menuShown_1 = true;
180186
var menu = {
181187
"": {
182188
remove: function () {
183189
draw_1();
184190
},
185191
},
186192
"< Back": function () {
187-
Bangle.setUI();
193+
hideMenu_1();
188194
},
189195
"Zero time": function () {
190196
exs_1.start();
191197
exs_1.stop();
192-
Bangle.setUI();
198+
hideMenu_1();
193199
},
194200
"Clear splits": function () {
195201
splits_1.splice(0, splits_1.length);
196-
Bangle.setUI();
202+
hideMenu_1();
197203
},
198204
};
199205
E.showMenu(menu);
200206
});
201207
Bangle.loadWidgets();
202208
Bangle.drawWidgets();
209+
Bangle.setGPSPower(1, "pace");
203210
g.clearRect(Bangle.appRect);
204211
draw_1();
205212
}

apps/pace/app.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const exs = require("exstats").getStats(
1414
const S = require("Storage");
1515

1616
let drawTimeout: TimeoutId | undefined;
17+
let menuShown = false;
1718

1819
type Dist = number & { brand: 'dist' };
1920
type Time = number & { brand: 'time' };
@@ -151,13 +152,11 @@ const drawSplit = (i: number, y: number, pace: number | string) =>
151152

152153
const pauseRun = () => {
153154
exs.stop();
154-
Bangle.setGPSPower(0, "pace")
155155
draw();
156156
};
157157

158158
const resumeRun = () => {
159159
exs.resume();
160-
Bangle.setGPSPower(1, "pace");
161160

162161
g.clearRect(Bangle.appRect); // splits -> layout, clear. layout -> splits, fine
163162
layout.forgetLazyState();
@@ -171,6 +170,12 @@ const onButton = () => {
171170
resumeRun();
172171
};
173172

173+
const hideMenu = () => {
174+
if (!menuShown) return;
175+
Bangle.setUI(); // calls `remove`, which handles redrawing
176+
menuShown = false;
177+
}
178+
174179
exs.start(); // aka reset
175180

176181
exs.stats.dist.on("notify", (dist) => {
@@ -209,7 +214,7 @@ Bangle.on('lock', locked => {
209214
setWatch(() => onButton(), BTN1, { repeat: true });
210215

211216
Bangle.on('drag', e => {
212-
if (exs.state.active || e.b === 0) return;
217+
if (exs.state.active || e.b === 0 || menuShown) return;
213218

214219
splitOffsetPx -= e.dy;
215220
if (splitOffsetPx > 20) {
@@ -226,26 +231,28 @@ Bangle.on('twist', () => {
226231
Bangle.setBacklight(1);
227232
});
228233

229-
Bangle.on('tap', _e => {
230-
if(exs.state.active) return;
234+
Bangle.on('tap', e => {
235+
// require a double tap, to avoid picking up menu "< Back" taps
236+
if(exs.state.active || menuShown || !e.double) return;
231237

238+
menuShown = true;
232239
const menu: Menu = {
233240
"": {
234241
remove: () => {
235242
draw();
236243
},
237244
},
238245
"< Back": () => {
239-
Bangle.setUI(); // calls `remove`, which handles redrawing
246+
hideMenu();
240247
},
241248
"Zero time": () => {
242249
exs.start(); // calls reset
243250
exs.stop(); // re-pauses
244-
Bangle.setUI();
251+
hideMenu();
245252
},
246253
"Clear splits": () => {
247254
splits.splice(0, splits.length);
248-
Bangle.setUI();
255+
hideMenu();
249256
},
250257
};
251258

@@ -254,6 +261,7 @@ Bangle.on('tap', _e => {
254261

255262
Bangle.loadWidgets();
256263
Bangle.drawWidgets();
264+
Bangle.setGPSPower(1, "pace");
257265

258266
g.clearRect(Bangle.appRect);
259267
draw();

apps/pace/metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"id": "pace",
33
"name": "Pace",
4-
"version": "0.04",
4+
"version": "0.05",
55
"description": "Show pace and time running splits",
66
"icon": "app.png",
77
"tags": "run,running,fitness,outdoors",

0 commit comments

Comments
 (0)