From a0ddb69649e3cd840cad34981fe7c10925819f7c Mon Sep 17 00:00:00 2001 From: Darren Croton Date: Wed, 20 Sep 2017 23:49:41 +1000 Subject: [PATCH] Option to change the time length of HR graph from 60-240 minutes --- bin/SnapshotWatch-settings.json | 2 +- bin/SnapshotWatch.prg | Bin 64498 -> 64994 bytes bin/SnapshotWatch.prg.debug.xml | 873 ++++++++++++++++---------------- resources/resources.xml | 5 + source/SnapshotWatchView.mc | 69 ++- 5 files changed, 491 insertions(+), 458 deletions(-) diff --git a/bin/SnapshotWatch-settings.json b/bin/SnapshotWatch-settings.json index 653123f..c74c2ba 100644 --- a/bin/SnapshotWatch-settings.json +++ b/bin/SnapshotWatch-settings.json @@ -1 +1 @@ -{"settings":[{"key":"code","valueType":"string","defaultValue":"get code at app store page","configTitle":"CodeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"alphaNumeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showHeartRate","valueType":"boolean","defaultValue":true,"configTitle":"ShowHeartRateLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"graphColour","valueType":"number","defaultValue":0,"configTitle":"GraphColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"list","configReadonly":false,"configRequired":true,"configOptions":[{"display":"DK_GRAY","value":0},{"display":"RED","value":1},{"display":"DK_RED","value":2},{"display":"ORANGE","value":3},{"display":"YELLOW","value":4},{"display":"GREEN","value":5},{"display":"DK_GREEN","value":6},{"display":"BLUE","value":7},{"display":"DK_BLUE","value":8},{"display":"PURPLE","value":9},{"display":"PINK","value":10}],"configMin":null,"configMax":null,"configMaxLength":null},{"key":"useZonesColour","valueType":"boolean","defaultValue":true,"configTitle":"UseZonesColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showMoveBar","valueType":"boolean","defaultValue":false,"configTitle":"ShowMoveBarLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSteps","valueType":"boolean","defaultValue":false,"configTitle":"ShowStepsLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showRiseSet","valueType":"boolean","defaultValue":false,"configTitle":"ShowRiseSetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSecondTime","valueType":"boolean","defaultValue":false,"configTitle":"ShowSecondTimeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"secondTimeOffset","valueType":"number","defaultValue":0,"configTitle":"SecondTimeOffsetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"numeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null}],"languages":{"valyrian":{"UseZonesColourLabel":"Additionally colour code graph by profile heart rate zones","ShowRiseSetLabel":"[PRO] Show sunrise/sunset","DK_GRAY":"Dark Gray","DK_GREEN":"Dark Green","BLUE":"Blue","SecondTimeOffsetLabel":"[PRO] Second (digital) time hour offset (integer, +-24)","PURPLE":"Purple","GREEN":"Green","ShowMoveBarLabel":"Colour graph red when move bar alert is on (or orange if red set above)","DK_RED":"Dark Red","DK_BLUE":"Dark Blue","AppName":"SnapshotWatch","RED":"Red","PINK":"Pink","CodeLabel":"Activation code for PRO features","ShowHeartRateLabel":"Show heart rate, graph, and min/max values","GraphColourLabel":"Heart rate graph colour","ShowSecondTimeLabel":"[PRO] Show second (digital) time","YELLOW":"Yellow","ORANGE":"Orange","ShowStepsLabel":"[PRO] Show steps/step goal"}}} \ No newline at end of file +{"settings":[{"key":"code","valueType":"string","defaultValue":"get code at app store page","configTitle":"CodeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"alphaNumeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showHeartRate","valueType":"boolean","defaultValue":true,"configTitle":"ShowHeartRateLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"graphLength","valueType":"number","defaultValue":240,"configTitle":"GraphLengthLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"numeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"graphColour","valueType":"number","defaultValue":0,"configTitle":"GraphColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"list","configReadonly":false,"configRequired":true,"configOptions":[{"display":"DK_GRAY","value":0},{"display":"RED","value":1},{"display":"DK_RED","value":2},{"display":"ORANGE","value":3},{"display":"YELLOW","value":4},{"display":"GREEN","value":5},{"display":"DK_GREEN","value":6},{"display":"BLUE","value":7},{"display":"DK_BLUE","value":8},{"display":"PURPLE","value":9},{"display":"PINK","value":10}],"configMin":null,"configMax":null,"configMaxLength":null},{"key":"useZonesColour","valueType":"boolean","defaultValue":true,"configTitle":"UseZonesColourLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showMoveBar","valueType":"boolean","defaultValue":false,"configTitle":"ShowMoveBarLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSteps","valueType":"boolean","defaultValue":false,"configTitle":"ShowStepsLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showRiseSet","valueType":"boolean","defaultValue":false,"configTitle":"ShowRiseSetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"showSecondTime","valueType":"boolean","defaultValue":false,"configTitle":"ShowSecondTimeLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"boolean","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null},{"key":"secondTimeOffset","valueType":"number","defaultValue":0,"configTitle":"SecondTimeOffsetLabel","configPrompt":null,"configHelpUrl":null,"configError":null,"configType":"numeric","configReadonly":false,"configRequired":false,"configOptions":null,"configMin":null,"configMax":null,"configMaxLength":null}],"languages":{"valyrian":{"UseZonesColourLabel":"Additionally colour code graph by profile heart rate zones","ShowRiseSetLabel":"[PRO] Show sunrise/sunset","DK_GRAY":"Dark Gray","DK_GREEN":"Dark Green","BLUE":"Blue","SecondTimeOffsetLabel":"[PRO] Second (digital) time hour offset (integer, +-24)","PURPLE":"Purple","GREEN":"Green","ShowMoveBarLabel":"Colour graph red when move bar alert is on (or orange if red set above)","DK_RED":"Dark Red","DK_BLUE":"Dark Blue","AppName":"SnapshotWatch","RED":"Red","PINK":"Pink","CodeLabel":"Activation code for PRO features","ShowHeartRateLabel":"Show heart rate, graph, and min/max values","GraphLengthLabel":"Number of past minutes to show in heart rate graph (minimum 15, maximum 240)","GraphColourLabel":"Heart rate graph colour","ShowSecondTimeLabel":"[PRO] Show second (digital) time","YELLOW":"Yellow","ORANGE":"Orange","ShowStepsLabel":"[PRO] Show steps/step goal"}}} \ No newline at end of file diff --git a/bin/SnapshotWatch.prg b/bin/SnapshotWatch.prg index 55099eeb2090fb598273ece80cbb639375c2d532..03913532d04e07402e54c4177a2f2df5f9c9f64f 100644 GIT binary patch delta 24453 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 T9&v3q^Uh4dEzH9mc1oL1G~{c?Kp3vI8ntd=={ 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 IZ~YAa2lx6ZiU0rr diff --git a/bin/SnapshotWatch.prg.debug.xml b/bin/SnapshotWatch.prg.debug.xml index f8f7fcd..b30c06f 100644 --- a/bin/SnapshotWatch.prg.debug.xml +++ b/bin/SnapshotWatch.prg.debug.xml @@ -35,410 +35,421 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - - + + - + - + - - + + - + + - + + - + - + - + - - - - - - + + + + + + - - - + + + - + - + - - + + - - + + - - - - - + + + + + - - - + + + - + - + - + - - + + - + - - - + + + - + - + - + - - - - - + + + + + @@ -455,99 +466,101 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -671,8 +684,8 @@ - - - + + + diff --git a/resources/resources.xml b/resources/resources.xml index f82312d..714493b 100644 --- a/resources/resources.xml +++ b/resources/resources.xml @@ -3,6 +3,7 @@ get code at app store page true + 240 0 true false @@ -15,6 +16,7 @@ Activation code for PRO features Show heart rate, graph, and min/max values + Number of past minutes to show in heart rate graph (minimum 15, maximum 240) Heart rate graph colour Dark Gray Red @@ -42,6 +44,9 @@ + + + @Strings.DK_GRAY diff --git a/source/SnapshotWatchView.mc b/source/SnapshotWatchView.mc index 8f319b8..e2da70b 100644 --- a/source/SnapshotWatchView.mc +++ b/source/SnapshotWatchView.mc @@ -27,6 +27,7 @@ class SnapshotWatchView extends Ui.WatchFace { var showSecondTime = false; var secondTimeOffset = 0; + var graphLength = 240; var arrayColours = new [11]; var graphColour = 0; var useZonesColour = true; @@ -41,8 +42,8 @@ class SnapshotWatchView extends Ui.WatchFace { var hashMarksArray = new [60]; var heartNow; - var heartMin; - var heartMax; + var heartMin = 1000; + var heartMax = 0; var proFeatures; @@ -88,6 +89,7 @@ class SnapshotWatchView extends Ui.WatchFace { { code = Application.getApp().getProperty("code"); showHeartRate = Application.getApp().getProperty("showHeartRate"); + graphLength = Application.getApp().getProperty("graphLength"); graphColour = Application.getApp().getProperty("graphColour"); useZonesColour = Application.getApp().getProperty("useZonesColour"); showMoveBar = Application.getApp().getProperty("showMoveBar"); @@ -118,14 +120,12 @@ class SnapshotWatchView extends Ui.WatchFace { secondTimeOffset = 0; } } - + // Clear screen dc.setColor(background_color, Gfx.COLOR_WHITE); dc.fillRectangle(0,0, width_screen, height_screen); heartNow = 0; - heartMin = 0; - heartMax = 0; // Plot heart rate graph plotHRgraph(dc); @@ -222,6 +222,9 @@ class SnapshotWatchView extends Ui.WatchFace { function plotHRgraph(dc) { + var curHeartMin = 0; + var curHeartMax = 0; + var sample = Sensor.getHeartRateHistory( {:order=>Sensor.ORDER_NEWEST_FIRST} ); if (sample != null) { @@ -231,13 +234,17 @@ class SnapshotWatchView extends Ui.WatchFace { if (showHeartRate) { - if (sample.getMin() != null) - { heartMin = sample.getMin(); } - - if (sample.getMax() != null) - { heartMax = sample.getMax(); } - - var maxSecs = 14355; //14400 = 4 hours + curHeartMin = heartMin; + curHeartMax = heartMax; + heartMin = 1000; + heartMax = 0; + + var maxSecs = graphLength * 60; + if (maxSecs < 900) + { maxSecs = 900; } // 900sec = 15min + else if (maxSecs > 14355) + { maxSecs = 14355; } // 14400sec = 4hrs + var totHeight = 44; var totWidth = 165; var binPixels = 1; @@ -312,23 +319,31 @@ class SnapshotWatchView extends Ui.WatchFace { // only plot bar if we have valid values if (heartBinMax > 0 && heartBinMax >= heartBinMin) { - var heartBinMid = (heartBinMax+heartBinMin)/2; - var height = (heartBinMid-heartMin*0.9) / (heartMax-heartMin*0.9) * totHeight; - var xVal = (width_screen-totWidth)/2 + totWidth - i*binPixels -2; - var yVal = height_screen/2+28 + totHeight - height; - - if (showMoveBar && ActMon.getInfo().moveBarLevel > 0) - { - if (graphColour == 1) - { dc.setColor(Gfx.COLOR_ORANGE, Gfx.COLOR_TRANSPARENT); } - else - { dc.setColor(Gfx.COLOR_RED, Gfx.COLOR_TRANSPARENT); } - } else + if (curHeartMax > 0 && curHeartMax > curHeartMin) { - dc.setColor(arrayColours[getHRColour(heartBinMid)], Gfx.COLOR_TRANSPARENT); + var heartBinMid = (heartBinMax+heartBinMin)/2; + var height = (heartBinMid-curHeartMin*0.9) / (curHeartMax-curHeartMin*0.9) * totHeight; + var xVal = (width_screen-totWidth)/2 + totWidth - i*binPixels -2; + var yVal = height_screen/2+28 + totHeight - height; + + if (showMoveBar && ActMon.getInfo().moveBarLevel > 0) + { + if (graphColour == 1) + { dc.setColor(Gfx.COLOR_ORANGE, Gfx.COLOR_TRANSPARENT); } + else + { dc.setColor(Gfx.COLOR_RED, Gfx.COLOR_TRANSPARENT); } + } else + { + dc.setColor(arrayColours[getHRColour(heartBinMid)], Gfx.COLOR_TRANSPARENT); + } + + dc.fillRectangle(xVal, yVal, binPixels, height); } - - dc.fillRectangle(xVal, yVal, binPixels, height); + + if (heartBinMin < heartMin) + { heartMin = heartBinMin; } + if (heartBinMax > heartMax) + { heartMax = heartBinMax; } // Sys.println(i + ": " + binWidthSecs + " " + secsBin + " " + heartBinMin + " " + heartBinMax); }