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 55099ee..0391353 100644 Binary files a/bin/SnapshotWatch.prg and b/bin/SnapshotWatch.prg differ 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); }