diff --git a/Meditate/manifest.xml b/Meditate/manifest.xml index 0779439..defaff0 100644 --- a/Meditate/manifest.xml +++ b/Meditate/manifest.xml @@ -1,7 +1,7 @@ - + diff --git a/Meditate/source/TimeFormatter.mc b/Meditate/source/TimeFormatter.mc index 073c378..78a9506 100644 --- a/Meditate/source/TimeFormatter.mc +++ b/Meditate/source/TimeFormatter.mc @@ -13,6 +13,25 @@ class TimeFormatter { return formattedTime; } + static function formatHours(timeInSec) { + var timeCalc = timeInSec; + var seconds = timeCalc % 60; + timeCalc /= 60; + var minutes = timeCalc % 60; + timeCalc /= 60; + var hours = timeCalc % 24; + + var formattedTime; + + if (hours == 1) { + formattedTime = Lang.format("$1$ hour", [hours.format("%02d")]); + } else { + formattedTime = Lang.format("$1$ hours", [hours.format("%02d")]); + } + + return formattedTime; + } + static function formatMinutes(timeInSec) { var timeCalc = timeInSec; var seconds = timeCalc % 60; diff --git a/Meditate/source/activity/MeditateActivity.mc b/Meditate/source/activity/MeditateActivity.mc index ab87786..04f0883 100644 --- a/Meditate/source/activity/MeditateActivity.mc +++ b/Meditate/source/activity/MeditateActivity.mc @@ -13,11 +13,34 @@ class MediteActivity extends HrvAlgorithms.HrvAndStressActivity { function initialize(meditateModel, heartbeatIntervalsSensor) { var fitSessionSpec; - fitSessionSpec = HrvAlgorithms.FitSessionSpec.createCardio("Meditating"); + var sessionTime = meditateModel.getSessionTime(); + fitSessionSpec = HrvAlgorithms.FitSessionSpec.createCardio(createSessionName(sessionTime, "Meditating")); me.mMeditateModel = meditateModel; HrvAlgorithms.HrvAndStressActivity.initialize(fitSessionSpec, meditateModel.getHrvTracking(), heartbeatIntervalsSensor); } + + protected function createSessionName(sessionTime, activityName) { + + // Calculate session minutes and hours + var sessionTimeMinutes = Math.round(sessionTime / 60); + var sessionTimeHours = Math.round(sessionTimeMinutes / 60); + var sessionName; + + // Create the Connect activity name showing the number of hours/minutes for the meditate session + if (sessionTimeHours == 0) { + sessionName = Lang.format("$1$ $2$min 🙏", [activityName, sessionTimeMinutes]); + } else { + sessionTimeMinutes = sessionTimeMinutes % 60; + if (sessionTimeMinutes == 0){ + sessionName = Lang.format("$1$ $2$h 🙏", [activityName, sessionTimeHours]); + } else { + sessionName = Lang.format("$1$ $2$h $3$min 🙏", [activityName, sessionTimeHours, sessionTimeMinutes]); + } + } + + return sessionName; + } protected function onBeforeStart(fitSession) { mMeditateModel.isTimerRunning = true; diff --git a/Meditate/source/sessionSettings/SessionModel.mc b/Meditate/source/sessionSettings/SessionModel.mc index 2462fd9..ab3cf85 100644 --- a/Meditate/source/sessionSettings/SessionModel.mc +++ b/Meditate/source/sessionSettings/SessionModel.mc @@ -95,33 +95,31 @@ class SessionModel { me.activityType = "Meditate"; } - // 15s for testing + // 45min if (index == 6) { + me.time = 45 * 60; + me.color = Gfx.COLOR_GREEN; + me.vibePattern = VibePattern.LongContinuous; + me.activityType = "Meditate"; + } + + // 1h + if (index == 7) { + me.time = 60 * 60; + me.color = Gfx.COLOR_YELLOW; + me.vibePattern = VibePattern.LongContinuous; + me.activityType = "Meditate"; + } + + // 15s for testing + if (index == 8) { me.time = 15; me.color = Gfx.COLOR_GREEN; me.vibePattern = VibePattern.LongContinuous; me.activityType = "Meditate"; } } - - function copyNonNullFieldsFromSession(otherSession) { - if (otherSession.time != null) { - me.time = otherSession.time; - } - if (otherSession.color != null) { - me.color = otherSession.color; - } - if (otherSession.vibePattern != null) { - me.vibePattern = otherSession.vibePattern; - } - if (otherSession.activityType != null) { - me.activityType = otherSession.activityType; - } - if (otherSession.hrvTracking != null) { - me.hrvTracking = otherSession.hrvTracking; - } - } - + var time; var color; var vibePattern; diff --git a/Meditate/source/sessionSettings/SessionPickerDelegate.mc b/Meditate/source/sessionSettings/SessionPickerDelegate.mc index 13f9175..a9c9a8c 100644 --- a/Meditate/source/sessionSettings/SessionPickerDelegate.mc +++ b/Meditate/source/sessionSettings/SessionPickerDelegate.mc @@ -149,8 +149,10 @@ class SessionPickerDelegate extends ScreenPicker.ScreenPickerDelegate { details.title = activityTypeText + " " + (me.mSelectedPageIndex + 1); details.titleColor = session.color; - if (session.time > 59) { - details.detailLines[1].value.text = " " + TimeFormatter.formatMinutes(session.time); + if (session.time >= 60*60) { + details.detailLines[1].value.text = " " + TimeFormatter.formatHours(session.time); + } else if (session.time > 59) { + details.detailLines[1].value.text = " " + TimeFormatter.formatMinutes(session.time); } else { details.detailLines[1].value.text = " " + TimeFormatter.formatSeconds(session.time); } diff --git a/Meditate/source/storage/SessionStorage.mc b/Meditate/source/storage/SessionStorage.mc index 25a8983..a75134d 100644 --- a/Meditate/source/storage/SessionStorage.mc +++ b/Meditate/source/storage/SessionStorage.mc @@ -4,7 +4,7 @@ using Toybox.Graphics as Gfx; class SessionStorage { function initialize() { mSelectedSessionIndex = 0; - me.mSessionsCount = 7; + me.mSessionsCount = 9; me.loadSelectedSession(); } @@ -13,21 +13,30 @@ class SessionStorage { function selectSession(index) { me.mSelectedSessionIndex = index; + App.getApp().setProperty("meditateApp_selectedSession", index); } function loadSelectedSession() { + + var sessionIndex = App.getApp().getProperty("meditateApp_selectedSession"); + + if (sessionIndex == null) { + me.mSelectedSessionIndex = 0; + } else { + me.mSelectedSessionIndex = sessionIndex; + } + var session = new SessionModel(); session.reset(me.mSelectedSessionIndex); return session; - } function getSessionsCount() { - return 7; + return 9; } function getSelectedSessionIndex() { - return 0; + return me.mSelectedSessionIndex; } }