From f93b91a8427222b5c570ae0d38a44d0313cbfa81 Mon Sep 17 00:00:00 2001 From: tumb1er Date: Fri, 15 Feb 2019 11:30:14 +0300 Subject: [PATCH] closes $47 settings --- resources/settings/properties.xml | 10 ++++++ resources/settings/settings.xml | 40 ++++++++++++++++++++++++ resources/strings/strings.xml | 13 ++++++++ source/ElPrimeroApp.mc | 13 +++++++- source/ElPrimeroView.mc | 12 ++++---- source/State.mc | 51 +++++++++++++++++++++++++------ 6 files changed, 123 insertions(+), 16 deletions(-) create mode 100644 resources/settings/properties.xml create mode 100644 resources/settings/settings.xml diff --git a/resources/settings/properties.xml b/resources/settings/properties.xml new file mode 100644 index 0000000..3925087 --- /dev/null +++ b/resources/settings/properties.xml @@ -0,0 +1,10 @@ + + 0.7.0 + 85 + true + true + true + true + 1.2 + 60 + diff --git a/resources/settings/settings.xml b/resources/settings/settings.xml new file mode 100644 index 0000000..08b4e7a --- /dev/null +++ b/resources/settings/settings.xml @@ -0,0 +1,40 @@ + + + + + + + + + @Strings.Black + @Strings.Blue + @Strings.Green + @Strings.Red + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/strings/strings.xml b/resources/strings/strings.xml index 2cb44b9..1ca37d0 100644 --- a/resources/strings/strings.xml +++ b/resources/strings/strings.xml @@ -4,4 +4,17 @@ JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC ZABSN + Application Version + Background color + Select background color + black + dark blue + dark green + dark red + 2Hz second hand + Enter power safe mode in dnd + Enter power safe mode if move bar is full + Enter power safe mode in resting HR + Resting heart rate multiplier for power safe mode detection + Delay before entering powersafe mode in seconds diff --git a/source/ElPrimeroApp.mc b/source/ElPrimeroApp.mc index 1c3895b..cfeab9a 100644 --- a/source/ElPrimeroApp.mc +++ b/source/ElPrimeroApp.mc @@ -2,6 +2,8 @@ using Toybox.Application; class ElPrimeroApp extends Application.AppBase { + var mView = null; + function initialize() { AppBase.initialize(); } @@ -16,7 +18,16 @@ class ElPrimeroApp extends Application.AppBase { // Return the initial view of your application here function getInitialView() { - return [ new ElPrimeroView() ]; + mView = new ElPrimeroView(); + return [ mView ]; + } + + function onSettingsChanged() { + if (mView == null || mView.mState == null) { + return; + } + mView.mState.readSettings(); + WatchUi.requestUpdate(); } } \ No newline at end of file diff --git a/source/ElPrimeroView.mc b/source/ElPrimeroView.mc index 9c5cc04..416fbdb 100644 --- a/source/ElPrimeroView.mc +++ b/source/ElPrimeroView.mc @@ -191,7 +191,7 @@ class ElPrimeroView extends WatchUi.WatchFace { System.println("invalidateHands: hour"); // erasing hour hand at previous position - dc.setColor(0x000055, cTransparent); + dc.setColor(mState.mBackgroundColor, cTransparent); mHourHand.drawVector(dc, mHourHand.mPos, cx - 120, cy + 1 - 120); } @@ -199,7 +199,7 @@ class ElPrimeroView extends WatchUi.WatchFace { System.println("invalidateHands: min"); // erasing minute hand at previous position - dc.setColor(0x000055, cTransparent); + dc.setColor(mState.mBackgroundColor, cTransparent); mMinuteHand.drawVector(dc, mMinuteHand.mPos, cx - 120, cy + 1 - 120); } @@ -393,9 +393,8 @@ class ElPrimeroView extends WatchUi.WatchFace { if (flags == State.ALL) { System.println("drawBackgrounds: all"); - bc.setColor(0xFFFFFF, 0x000055); + bc.setColor(0xFFFFFF, mState.mBackgroundColor); bc.clear(); - bc.setColor(0xFFFFFF, 0x000055); for (pos=0; pos < PosGlyphs; pos++) { coords = getXY(pos, cCoords); char = pos + 32; @@ -404,7 +403,7 @@ class ElPrimeroView extends WatchUi.WatchFace { } else if ((flags & State.MINUTE) && mMinuteHand.mPos != null) { System.println("drawBackgrounds: minute/ticks"); - bc.setColor(0xFFFFFF, 0x000055); + bc.setColor(0xFFFFFF, mState.mBackgroundColor); char = 32 + mMinuteHand.mPos / 3; coords = getXY(mMinuteHand.mPos / 3, cCoords); bc.drawText(10 + coords[0], -1 + coords[1], mBackgroundFont, char.toChar(), Graphics.TEXT_JUSTIFY_LEFT); @@ -570,7 +569,8 @@ class ElPrimeroView extends WatchUi.WatchFace { // Drawing image to device context if (flags == State.ALL) { System.println("Clear DC"); - dc.setColor(0xAAAAAA, 0x000055); + dc.setColor(0xAAAAAA, mState.mBackgroundColor); + dc.clearClip(); dc.clear(); } diff --git a/source/State.mc b/source/State.mc index 1fd2ac1..c02d31d 100644 --- a/source/State.mc +++ b/source/State.mc @@ -3,6 +3,7 @@ using Toybox.System; using Toybox.UserProfile; using Toybox.ActivityMonitor; using Toybox.SensorHistory; +using Toybox.Application.Properties; /** State computes differences to be drawn on watch face and current values. @@ -21,6 +22,16 @@ class State { var mIsPowersafeMode = false; var mBackgroundTime = null; + var mPowersafeModeDelay = 60; + + var mBackgroundColor = 0x000000; + + /** + 1 - enter power safe mode via dnd + 2 - enter power safe mode via movement + 4 - enter power safe mode via heart rate + */ + var mPowersafeFlags = 7; enum { // icons states @@ -56,6 +67,7 @@ class State { var mFlags = 0; function initialize() { + readSettings(); update(); } @@ -348,19 +360,26 @@ class State { return; } - // via do not disturb; - var flag = (mIcons && DND) > 0; - // via full movement scale; - flag = flag || mMovementFraction == 5; - // via missing heartbeat - flag = flag || mHeartRateValue == null; - // via low heartrate - flag = flag || mHeartRateValue != null && mSleepHRThreshold != null && mHeartRateValue < mSleepHRThreshold; + var flag = 0; + if (mPowersafeFlags & 1) { + // via do not disturb; + flag = flag || (mIcons && DND) > 0; + } + if (mPowersafeFlags & 2) { + // via full movement scale; + flag = flag || mMovementFraction == 5; + } + if (mPowersafeFlags & 4) { + // via missing heartbeat + flag = flag || mHeartRateValue == null; + // via low heartrate + flag = flag || mHeartRateValue != null && mSleepHRThreshold != null && mHeartRateValue < mSleepHRThreshold; + } // enter powersafe mode only from background mode flag = flag && mIsBackgroundMode; // enter powersafe mode 60 seconds later than background mode activated - flag = flag && mBackgroundTime != null && time.subtract(mBackgroundTime).value() >= 60; + flag = flag && mBackgroundTime != null && time.subtract(mBackgroundTime).value() >= mPowersafeModeDelay; if (mIsPowersafeMode != flag) { if (mIsPowersafeMode) { @@ -384,4 +403,18 @@ class State { mFlags = ALL; // System.println(["reset", isInBackground, mFlags.format("%x")]); } + + /** + Reads settings values and resets view + */ + function readSettings() { + mBackgroundColor = Properties.getValue("backgroundColor"); + mPowersafeFlags = 0; + mPowersafeFlags |= (Properties.getValue("powersafeViaDND"))? 1: 0; + mPowersafeFlags |= (Properties.getValue("powersafeViaMove"))? 2: 0; + mPowersafeFlags |= (Properties.getValue("powersafeViaHR"))? 4: 0; + mSleepHRMultiplier = Properties.getValue("heartRateMultiplier"); + mPowersafeModeDelay = Properties.getValue("powersafeModeDelay"); + mFlags = ALL; + } } \ No newline at end of file