power => cadence, field rearrangement

This commit is contained in:
Gyuri Horák 2023-09-25 19:36:06 +02:00
parent 54096eb012
commit 2a8a1e66c3
Signed by: dyuri
GPG Key ID: 4993F07B3EAE8D38
3 changed files with 57 additions and 56 deletions

View File

@ -1,7 +1,5 @@
- power gauge
- icons - icons
- settings - settings
- configurable theme color - configurable theme color
- pace/speed based on sport - pace/speed based on sport
- imperial unit support - imperial unit support
- cadence => power (for devices w/o power)

View File

@ -21,8 +21,9 @@
<label id="mhr" x="68%" y="18" color="0x888888" justification="Graphics.TEXT_JUSTIFY_CENTER" font="Graphics.FONT_TINY" /> <label id="mhr" x="68%" y="18" color="0x888888" justification="Graphics.TEXT_JUSTIFY_CENTER" font="Graphics.FONT_TINY" />
<!-- time/timer --> <!-- time/timer -->
<label id="time" x="center" y="370" color="Graphics.COLOR_LT_GRAY" justification="Graphics.TEXT_JUSTIFY_CENTER" font="Graphics.FONT_XTINY" /> <label id="timerHM" x="132" y="258" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_MEDIUM" />
<label id="timer" x="center" y="330" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_CENTER" font="Graphics.FONT_SMALL" /> <label id="timerS" x="134" y="278" color="Graphics.COLOR_LT_GRAY" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_XTINY" />
<label id="time" x="center" y="330" color="0xDDFF88" justification="Graphics.TEXT_JUSTIFY_CENTER" font="Graphics.FONT_LARGE" />
<!-- distance/pace/avg pace --> <!-- distance/pace/avg pace -->
<label id="pace" x="82%" y="80" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_NUMBER_MEDIUM" text="12.34"/> <label id="pace" x="82%" y="80" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_NUMBER_MEDIUM" text="12.34"/>
@ -32,16 +33,18 @@
<label id="distance" x="82%" y="224" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_NUMBER_MEDIUM" /> <label id="distance" x="82%" y="224" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_NUMBER_MEDIUM" />
<label id="distanceLabel" x="83%" y="272" color="0x004488" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_TINY" text="km"/> <label id="distanceLabel" x="83%" y="272" color="0x004488" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_TINY" text="km"/>
<!-- elevation, egain --> <!-- cadence -->
<label id="elevation" x="13%" y="92" color="0x0088FF" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_MEDIUM"/> <label id="cadence" x="13%" y="92" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_MEDIUM" />
<label id="elevationLabel" x="12%" y="98" color="0x004488" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_SMALL" text="e"/> <label id="cadenceLabel" x="12%" y="98" color="0x004488" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_SMALL" text="c"/>
<label id="elevationGain" x="13%" y="132" color="0x0088FF" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_MEDIUM"/>
<label id="elevationGainLabel" x="12%" y="138" color="0x004488" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_SMALL" text="+"/> <!-- elevation, egain -->
<label id="elevationLoss" x="13%" y="172" color="0x0088FF" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_MEDIUM"/> <label id="elevation" x="13%" y="132" color="0x0088FF" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_MEDIUM"/>
<label id="elevationLossLabel" x="12%" y="178" color="0x004488" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_SMALL" text="-"/> <label id="elevationLabel" x="12%" y="138" color="0x004488" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_SMALL" text="e"/>
<label id="elevationGain" x="13%" y="172" color="0x0088FF" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_MEDIUM"/>
<label id="elevationGainLabel" x="12%" y="178" color="0x004488" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_SMALL" text="+"/>
<label id="elevationLoss" x="13%" y="212" color="0x0088FF" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_MEDIUM"/>
<label id="elevationLossLabel" x="12%" y="218" color="0x004488" justification="Graphics.TEXT_JUSTIFY_RIGHT" font="Graphics.FONT_SMALL" text="-"/>
<!-- power -->
<label id="power" x="13%" y="260" color="Graphics.COLOR_WHITE" justification="Graphics.TEXT_JUSTIFY_LEFT" font="Graphics.FONT_LARGE" text="234"/>
</layout> </layout>
<!-- Layouts used for the for the four quadrants. --> <!-- Layouts used for the for the four quadrants. -->

View File

@ -11,7 +11,9 @@ class RepaFieldView extends WatchUi.DataField {
hidden var ahrValue as Numeric; hidden var ahrValue as Numeric;
hidden var mhrValue as Numeric; hidden var mhrValue as Numeric;
hidden var hrZones as Array<Numeric>; hidden var hrZones as Array<Numeric>;
hidden var powerZones as Array<Numeric>; hidden var hrZoneColors as Array<Numeric>;
hidden var cadenceZones as Array<Numeric>;
hidden var cadenceZoneColors as Array<Numeric>;
hidden var toDestination as Float; hidden var toDestination as Float;
hidden var distance as Float; hidden var distance as Float;
hidden var timer as Numeric; hidden var timer as Numeric;
@ -22,7 +24,7 @@ class RepaFieldView extends WatchUi.DataField {
hidden var altitude as Float; hidden var altitude as Float;
hidden var egain as Number; hidden var egain as Number;
hidden var edrop as Number; hidden var edrop as Number;
hidden var power as Number; hidden var cadence as Number;
function initialize() { function initialize() {
DataField.initialize(); DataField.initialize();
@ -30,7 +32,9 @@ class RepaFieldView extends WatchUi.DataField {
ahrValue = 0; ahrValue = 0;
mhrValue = 0; mhrValue = 0;
hrZones = UserProfile.getHeartRateZones(UserProfile.getCurrentSport()); hrZones = UserProfile.getHeartRateZones(UserProfile.getCurrentSport());
powerZones = [105, 227, 280, 315, 350, 400]; // TODO not implemented yet in the API, so this is based on my TP of 350W ;) hrZoneColors = [Graphics.COLOR_BLACK, Graphics.COLOR_LT_GRAY, Graphics.COLOR_BLUE, Graphics.COLOR_GREEN, Graphics.COLOR_YELLOW, Graphics.COLOR_RED, Graphics.COLOR_DK_RED];
cadenceZones = [153, 163, 173, 183];
cadenceZoneColors = [Graphics.COLOR_RED, Graphics.COLOR_YELLOW, Graphics.COLOR_GREEN, Graphics.COLOR_BLUE, Graphics.COLOR_PURPLE];
toDestination = 0.0f; toDestination = 0.0f;
distance = 0.0f; distance = 0.0f;
timer = 0; timer = 0;
@ -41,34 +45,25 @@ class RepaFieldView extends WatchUi.DataField {
altitude = 0.0f; altitude = 0.0f;
egain = 0; egain = 0;
edrop = 0; edrop = 0;
power = 0; cadence = 0;
} }
function calculateZoneColor(v as Numeric, zones as Array<Numeric>) as Numeric { function calculateZoneColor(v as Numeric, zones as Array<Numeric>, zoneColors as Array<Numeric>) as Numeric {
var vColor = Graphics.COLOR_BLACK; for (var i = 0; i < zones.size(); i++) {
if (v < zones[1]) { if (v < zones[i]) {
vColor = Graphics.COLOR_LT_GRAY; return zoneColors[i];
} else if (v < zones[2]) { }
vColor = Graphics.COLOR_BLUE;
} else if (v < zones[3]) {
vColor = Graphics.COLOR_GREEN;
} else if (v < zones[4]) {
vColor = Graphics.COLOR_YELLOW;
} else if (v < zones[5]) {
vColor = Graphics.COLOR_RED;
} else {
vColor = Graphics.COLOR_DK_RED;
} }
return vColor; return zoneColors[zoneColors.size() - 1];
} }
function darken(color as Numeric) as Numeric { function darken(color as Numeric, factor as Numeric) as Numeric {
var r = (color >> 16) & 0xFF; var r = (color >> 16) & 0xFF;
var g = (color >> 8) & 0xFF; var g = (color >> 8) & 0xFF;
var b = color & 0xFF; var b = color & 0xFF;
r = r * 0.5f; r = r / factor.toFloat();
g = g * 0.5f; g = g / factor.toFloat();
b = b * 0.5f; b = b / factor.toFloat();
return (r.toLong() << 16) | (g.toLong() << 8) | b.toLong(); return (r.toLong() << 16) | (g.toLong() << 8) | b.toLong();
} }
@ -163,10 +158,10 @@ class RepaFieldView extends WatchUi.DataField {
} else { } else {
edrop = 0; edrop = 0;
} }
if (info.currentPower != null) { if (info.currentCadence != null) {
power = info.currentPower as Number; cadence = info.currentCadence as Number;
} else { } else {
power = 0; cadence = 0;
} }
} }
@ -177,15 +172,15 @@ class RepaFieldView extends WatchUi.DataField {
// (View.findDrawableById("Background") as Background).setColor(getBackgroundColor()); // (View.findDrawableById("Background") as Background).setColor(getBackgroundColor());
// HR value // HR value
var hrColor = calculateZoneColor(hrValue, hrZones); var hrColor = calculateZoneColor(hrValue, hrZones, hrZoneColors);
var hr = View.findDrawableById("hr") as Text; var hr = View.findDrawableById("hr") as Text;
hr.setColor(hrColor); hr.setColor(hrColor);
hr.setText(hrValue.format("%d")); hr.setText(hrValue.format("%d"));
var ahr = View.findDrawableById("ahr") as Text; var ahr = View.findDrawableById("ahr") as Text;
ahr.setColor(darken(calculateZoneColor(ahrValue, hrZones))); ahr.setColor(darken(calculateZoneColor(ahrValue, hrZones, hrZoneColors), 2));
ahr.setText(ahrValue.format("%d")); ahr.setText(ahrValue.format("%d"));
var mhr = View.findDrawableById("mhr") as Text; var mhr = View.findDrawableById("mhr") as Text;
mhr.setColor(darken(calculateZoneColor(mhrValue, hrZones))); mhr.setColor(darken(calculateZoneColor(mhrValue, hrZones, hrZoneColors), 2));
mhr.setText(mhrValue.format("%d")); mhr.setText(mhrValue.format("%d"));
var hrGraph = View.findDrawableById("HeartRate") as HeartRate; var hrGraph = View.findDrawableById("HeartRate") as HeartRate;
if (hrGraph != null) { if (hrGraph != null) {
@ -208,19 +203,24 @@ class RepaFieldView extends WatchUi.DataField {
var time = System.getClockTime(); var time = System.getClockTime();
timeField.setText(time.hour.format("%02d") + ":" + time.min.format("%02d")); timeField.setText(time.hour.format("%02d") + ":" + time.min.format("%02d"));
} }
var timerField = View.findDrawableById("timer") as Text; var timerField = View.findDrawableById("timerHM") as Text;
var timerSecField = View.findDrawableById("timerS") as Text;
if (timerField != null) { if (timerField != null) {
var trh = timer / 3600; var trh = timer / 3600;
var trm = (timer % 3600) / 60; var trm = (timer % 3600) / 60;
var trs = timer % 60; var trs = timer % 60;
var timerColor = Graphics.COLOR_RED;
if (timerState == Activity.TIMER_STATE_ON) { if (timerState == Activity.TIMER_STATE_ON) {
timerField.setColor(Graphics.COLOR_WHITE); timerColor = Graphics.COLOR_WHITE;
} else if (timerState == Activity.TIMER_STATE_PAUSED) { } else if (timerState == Activity.TIMER_STATE_PAUSED) {
timerField.setColor(Graphics.COLOR_YELLOW); timerColor = Graphics.COLOR_YELLOW;
} else { }
timerField.setColor(Graphics.COLOR_RED); timerField.setColor(timerColor);
timerField.setText(trh.format("%02d") + ":" + trm.format("%02d"));
if (timerSecField != null) {
timerSecField.setColor(darken(timerColor, 1.5));
timerSecField.setText(trs.format("%02d"));
} }
timerField.setText(trh.format("%02d") + ":" + trm.format("%02d") + ":" + trs.format("%02d"));
} }
// distance // distance
@ -271,15 +271,15 @@ class RepaFieldView extends WatchUi.DataField {
eDropField.setText(edrop.format("%d")); eDropField.setText(edrop.format("%d"));
} }
// power // cadence
var powerColor = calculateZoneColor(power, powerZones); var cadenceColor = darken(calculateZoneColor(cadence, cadenceZones, cadenceZoneColors), 1.5);
var powerField = View.findDrawableById("power") as Text; var cadenceField = View.findDrawableById("cadence") as Text;
powerField.setColor(powerColor); cadenceField.setColor(cadenceColor);
if (powerField != null) { if (cadenceField != null) {
if (power != 0) { if (cadence != 0) {
powerField.setText(power.format("%d")); cadenceField.setText(cadence.format("%d"));
} else { } else {
powerField.setText("-"); cadenceField.setText("-");
} }
} }