-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathcodeSecondsinZone.txt
146 lines (123 loc) · 5.22 KB
/
codeSecondsinZone.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using Toybox.System as System;
using Toybox.WatchUi as Ui;
using Toybox.Graphics as Gfx;
using Toybox.Application as App;
using Toybox.UserProfile as UserProfile;
using Toybox.Time as Time;
using Toybox.Time.Gregorian as Gregorian;
class HrZonesField extends Ui.DataField {
hidden var zoneThresholdTime = 120;
hidden var zoneLowerBound = [0, 120, 140, 160, 180];
hidden var secondsInZone = [0, 0, 0, 0, 0];
hidden var zoneFrameColor = Gfx.COLOR_DK_GRAY;
hidden var zoneFontColor = Gfx.COLOR_DK_GRAY;
hidden var zoneFrameColors = [zoneFrameColor, zoneFrameColor, zoneFrameColor, zoneFrameColor, zoneFrameColor];
hidden var zoneFillColors = [Gfx.COLOR_BLUE, Gfx.COLOR_GREEN, Gfx.COLOR_YELLOW, Gfx.COLOR_ORANGE, Gfx.COLOR_RED];
hidden var zoneFontColors = [zoneFontColor, zoneFontColor, zoneFontColor, zoneFontColor, zoneFontColor];
function initialize() {
var profile = UserProfile.getProfile();
var userAge = Gregorian.info(Time.now(), Time.FORMAT_SHORT).year - profile.birthYear;
var maxHr = 208 - 0.7 * userAge;
zoneLowerBound = [0, maxHr * 0.6, maxHr * 0.76, maxHr * 0.88, maxHr * 0.96];
}
function onShow() {
}
function compute(info) {
if (info.currentHeartRate != null) {
var zoneId = getZoneIdForHr(info.currentHeartRate) - 1;
secondsInZone[zoneId] += 1;
}
}
hidden function getZoneIdForHr(hr) {
var i;
for (i = 0; i < zoneLowerBound.size() && hr > zoneLowerBound[i]; ++i) { }
return i;
}
function onUpdate(dc) {
var zoneCount = secondsInZone.size();
var minX = 0;
var maxX = dc.getWidth();
var minY = 0;
var maxY = dc.getHeight();
var obscurity = getObscurityFlags();
if (obscurity == (OBSCURE_LEFT | OBSCURE_TOP)) {
minX += dc.getWidth() * 0.10;
minY += dc.getHeight() * 0.16;
} else if (obscurity == (OBSCURE_RIGHT | OBSCURE_TOP)) {
maxX -= dc.getWidth() * 0.10;
minY += dc.getHeight() * 0.16;
} else if (obscurity == (OBSCURE_LEFT | OBSCURE_BOTTOM)) {
minX += dc.getWidth() * 0.20;
maxY -= dc.getHeight() * 0.25;
} else if (obscurity == (OBSCURE_RIGHT | OBSCURE_BOTTOM)) {
maxX -= dc.getWidth() * 0.20;
maxY -= dc.getHeight() * 0.25;
} else if (obscurity == (OBSCURE_LEFT | OBSCURE_RIGHT | OBSCURE_TOP)) {
minX += dc.getWidth() * 0.13;
maxX -= dc.getWidth() * 0.13;
minY += dc.getHeight() * 0.25;
} else if (obscurity == (OBSCURE_LEFT | OBSCURE_RIGHT | OBSCURE_BOTTOM)) {
minX += dc.getWidth() * 0.13;
maxX -= dc.getWidth() * 0.13;
maxY -= dc.getHeight() * 0.30;
} else if (obscurity == (OBSCURE_LEFT | OBSCURE_RIGHT | OBSCURE_BOTTOM | OBSCURE_TOP)) {
minX += dc.getWidth() * 0.10;
maxX -= dc.getWidth() * 0.10;
minY += dc.getHeight() * 0.16;
maxY -= dc.getHeight() * 0.16;
}
var barHeight = maxY - minY;
var barSpaceCoef = 0.3;
var barWidth = (maxX - minX) / (zoneCount + 1 * barSpaceCoef * (zoneCount - 1));
var barSpacing = barWidth * barSpaceCoef;
dc.setColor(Gfx.COLOR_WHITE, Gfx.COLOR_WHITE);
dc.fillRectangle(0, 0, dc.getWidth(), dc.getHeight());
dc.setColor(Gfx.COLOR_BLACK, Gfx.COLOR_TRANSPARENT);
var maxTimeInZone = secondsInZone[0];
for (var i = 1; i < secondsInZone.size(); ++i) {
if (secondsInZone[i] > maxTimeInZone) {
maxTimeInZone = secondsInZone[i];
}
}
if (maxTimeInZone == 0) {
dc.drawText((maxX + minX) / 2, (maxY + minY) / 2,
Gfx.FONT_MEDIUM, "NO DATA", Gfx.TEXT_JUSTIFY_CENTER | Gfx.TEXT_JUSTIFY_VCENTER);
return;
}
if (maxTimeInZone < zoneThresholdTime) {
maxTimeInZone = zoneThresholdTime;
}
dc.setPenWidth(1);
for (var i = 0; i < secondsInZone.size(); ++i) {
var currentBarHeight = ((secondsInZone[i] / maxTimeInZone.toFloat()) * barHeight).toLong();
var currentBarLeft = minX + barWidth * i + barSpacing * i;
dc.setColor(zoneFillColors[i], Gfx.COLOR_WHITE);
dc.fillRectangle(currentBarLeft, maxY - currentBarHeight, barWidth, currentBarHeight);
dc.setColor(zoneFrameColors[i], Gfx.COLOR_WHITE);
dc.drawRectangle(currentBarLeft, maxY - currentBarHeight, barWidth, currentBarHeight);
dc.setColor(zoneFontColors[i], Gfx.COLOR_TRANSPARENT);
var zoneName = "Z" + (i + 1).format("%1d");
var textDimensions = dc.getTextDimensions(zoneName, Gfx.FONT_XTINY);
var textOffsetX = (barWidth - textDimensions[0]) / 2;
var textOffsetY = textDimensions[1] + 3;
if (textOffsetX > 0) {
dc.drawText(currentBarLeft + textOffsetX, maxY - textOffsetY,
Gfx.FONT_XTINY, zoneName, Gfx.TEXT_JUSTIFY_LEFT);
}
}
}
}
class HrZonesApp extends App.AppBase {
//! onStart() is called on application start up
function onStart() {
}
//! onStop() is called when your application is exiting
function onStop() {
}
//! Return the initial view of your application here
function getInitialView() {
return [ new HrZonesField() ];
}
}
Wat is er nodig qua data, dat aan hilversum aangeven en dan inlezen op test of iets dergelijks.
Dan aan Roelof doorgeven, die gaat dan de app testen (en ook aanpassen ivm modernisering en uitfaseren service).