Skip to content

Commit

Permalink
6.1.0 - Finalization time implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
dliedke committed Oct 4, 2023
1 parent 207a041 commit b270e38
Show file tree
Hide file tree
Showing 10 changed files with 139 additions and 20 deletions.
5 changes: 3 additions & 2 deletions Meditate/resources-por/strings/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
<string id="menuGlobalSettings_singleSession">Sessão Simples</string>
<string id="menuGlobalSettings_respirationRate">Taxa respiração</string>
<string id="menuGlobalSettings_prepareTime">Tempo Preparação</string>
<string id="menuGlobalSettings_finalizeTime">Tempo Finaliz.</string>
<string id="menuGlobalSettings_finalizeTime">Tempo Finalização</string>
<string id="menuGlobalSettings_respiration">Respiração: </string>
<string id="menuGlobalSettings_save">Salvar: </string>

Expand Down Expand Up @@ -74,7 +74,7 @@
<string id="menuPrepareTimeOptions_title">Preparação</string>
<string id="menuFinalizeTimeOptions_title">Finalização</string>
<string id="menuPrepareTimeOptions_0s">0 segs</string>
<string id="menuPrepareTimeOptions_15s">15 segs (Padrão)</string>
<string id="menuPrepareTimeOptions_15s">15 segs</string>
<string id="menuPrepareTimeOptions_30s">30 segs</string>
<string id="menuPrepareTimeOptions_45s">45 segs</string>
<string id="menuPrepareTimeOptions_1m">1 min</string>
Expand Down Expand Up @@ -136,6 +136,7 @@
<string id="activityDelayedFinishingText">Finalizando...</string>
<string id="meditateActivityPaused">[Pausado]</string>
<string id="meditateActivityPrepare">Relaxe para\niniciar meditação\nem</string>
<string id="meditateActivityFinalize">Finalizando\nmeditação\nem</string>

<string id="meditateYogaActivityName">Meditação</string>
<string id="meditateBreathActivityName">Meditação</string>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<menu id="finalizeTimeOptionsMenu" title="@Strings.menuFinalizeTimeOptions_title">
<menu-item id="time_0s" label="@Strings.menuPrepareTimeOptions_0s" />
<menu-item id="time_15s" label="@Strings.menuPrepareTimeOptions_15s" />
<menu-item id="time_30s" label="@Strings.menuPrepareTimeOptions_30s" />
<menu-item id="time_45s" label="@Strings.menuPrepareTimeOptions_45s" />
<menu-item id="time_1m" label="@Strings.menuPrepareTimeOptions_1m" />
<menu-item id="time_2m" label="@Strings.menuPrepareTimeOptions_2m" />
<menu-item id="time_3m" label="@Strings.menuPrepareTimeOptions_3m" />
<menu-item id="time_4m" label="@Strings.menuPrepareTimeOptions_4m" />
<menu-item id="time_5m" label="@Strings.menuPrepareTimeOptions_5m" />
</menu>
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<menu-item id="confirmSaveActivity" label="@Strings.menuGlobalSettings_confirmSaveActivity" />
<menu-item id="multiSession" label="@Strings.menuGlobalSettings_multiSession" />
<menu-item id="prepareTime" label="@Strings.menuGlobalSettings_prepareTime" />
<menu-item id="finalizeTime" label="@Strings.menuGlobalSettings_finalizeTime" />
<menu-item id="respirationRate" label="@Strings.menuGlobalSettings_respirationRate" />
<menu-item id="newActivityType" label="@Strings.menuGlobalSettings_newActivityType" />
</menu>
3 changes: 2 additions & 1 deletion Meditate/resources/strings/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
<string id="menuPrepareTimeOptions_title">Preparation</string>
<string id="menuFinalizeTimeOptions_title">Finalization</string>
<string id="menuPrepareTimeOptions_0s">0 secs</string>
<string id="menuPrepareTimeOptions_15s">15 secs (Default)</string>
<string id="menuPrepareTimeOptions_15s">15 secs</string>
<string id="menuPrepareTimeOptions_30s">30 secs</string>
<string id="menuPrepareTimeOptions_45s">45 secs</string>
<string id="menuPrepareTimeOptions_1m">1 min</string>
Expand Down Expand Up @@ -135,6 +135,7 @@
<string id="activityDelayedFinishingText">Finishing...</string>
<string id="meditateActivityPaused">[Paused]</string>
<string id="meditateActivityPrepare">Relax to start\nmeditate session\nin</string>
<string id="meditateActivityFinalize">Finishing\nmeditate session\nin</string>

<string id="meditateYogaActivityName">Meditating</string>
<string id="meditateBreathActivityName">Meditating</string>
Expand Down
17 changes: 16 additions & 1 deletion Meditate/source/activity/MeditateDelegate.mc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,22 @@ class MeditateDelegate extends Ui.BehaviorDelegate {
}

private function stopActivity() {
me.mMeditateActivity.stop();
me.mMeditateActivity.stop();

// If there is no finalize time, show delayed finished view
if (GlobalSettings.loadFinalizeTime()==0) {
onShowDelayedFinishedView();
return;
}

// Show finalize time view and delayed finished view session once the time is over
var meditatePrepareView = new MeditatePrepareView(method(:onShowDelayedFinishedView), 0);
var meditatePrepareDelegate = new MeditatePrepareDelegate(me, meditatePrepareView);
Ui.switchToView(meditatePrepareView, meditatePrepareDelegate, Ui.SLIDE_IMMEDIATE);
}

function onShowDelayedFinishedView()
{
var calculatingResultsView = new DelayedFinishingView(method(:onFinishActivity));
Ui.switchToView(calculatingResultsView, me, Ui.SLIDE_IMMEDIATE);
}
Expand Down
21 changes: 15 additions & 6 deletions Meditate/source/activity/MeditatePrepareDelegate.mc
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
using Toybox.WatchUi as Ui;
using Toybox.Lang;
using Toybox.WatchUi as Ui;
using Toybox.Application as App;

class MeditatePrepareDelegate extends Ui.BehaviorDelegate {

var mSessionPickerDelegate;
var mMeditatePrepareView;

function initialize(sessionPickerDelegate) {
function initialize(sessionPickerDelegate, meditatePrepareView) {
mSessionPickerDelegate = sessionPickerDelegate;
mMeditatePrepareView = meditatePrepareView;
Ui.BehaviorDelegate.initialize();
}

function onBack() {
return true;
}

function onKey(keyEvent) {
return true;
}

function onBack() {

// Starts the meditation session / saves the session
if (mMeditatePrepareView!=null) {
mMeditatePrepareView.continueToNextStep();
}

return true;
}
}
49 changes: 41 additions & 8 deletions Meditate/source/activity/MeditatePrepareView.mc
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,20 @@ class MeditatePrepareView extends Ui.View {
private var mMainDurationRenderer;
private var mSeconds;
private var mTotalSeconds;
private var mPrepare;
private var mviewDrawnTimer;

function initialize(onShow) {
function initialize(onShow, prepare) {
View.initialize();
me.mOnShow = onShow;
me.mPrepare = prepare;
mSeconds = 0;
mTotalSeconds = GlobalSettings.loadPrepareTime();

if (prepare == 1) {
mTotalSeconds = GlobalSettings.loadPrepareTime();
} else {
mTotalSeconds = GlobalSettings.loadFinalizeTime();
}
}

function onViewDrawn() {
Expand All @@ -32,8 +40,8 @@ class MeditatePrepareView extends Ui.View {
// Vibrate short to notify session starts
Vibe.vibrate(VibePattern.Blip);

// Starts the meditation session
me.mOnShow.invoke();
// Starts the meditation session / saves the session
continueToNextStep();

return;
}
Expand Down Expand Up @@ -70,8 +78,14 @@ class MeditatePrepareView extends Ui.View {
mainDurationArcWidth = mainDurationArcWidthConfig;
}

// Green color for preparation and red color for finalization
var color = Gfx.COLOR_GREEN;
if (mPrepare == 0) {
color = Gfx.COLOR_DK_RED;
}

// Configure the arc render for progress
me.mMainDurationRenderer = new ElapsedDurationRenderer(Gfx.COLOR_BLUE, durationArcRadius, mainDurationArcWidth);
me.mMainDurationRenderer = new ElapsedDurationRenderer(color, durationArcRadius, mainDurationArcWidth);
}

private function renderBackground(dc) {
Expand All @@ -82,8 +96,8 @@ class MeditatePrepareView extends Ui.View {
}

function onShow() {
var viewDrawnTimer = new Timer.Timer();
viewDrawnTimer.start(method(:onViewDrawn), 1000, true);
mviewDrawnTimer = new Timer.Timer();
mviewDrawnTimer.start(method(:onViewDrawn), 1000, true);
}

function onUpdate(dc) {
Expand All @@ -100,17 +114,36 @@ class MeditatePrepareView extends Ui.View {
var remainingSeconds = mTotalSeconds - mSeconds;
var minutes = remainingSeconds / 60;
var seconds = remainingSeconds % 60;
var textString;

// Prepare or finalize text to display
if (mPrepare == 1) {
textString = Ui.loadResource(Rez.Strings.meditateActivityPrepare);
} else {
textString = Ui.loadResource(Rez.Strings.meditateActivityFinalize);
}

// Render main text with the remaining time in the format M:SS
dc.setColor(Gfx.COLOR_WHITE, Gfx.COLOR_TRANSPARENT);
dc.drawText(centerX,
centerY-centerY/3,
Gfx.FONT_SYSTEM_TINY,
Ui.loadResource(Rez.Strings.meditateActivityPrepare) + " " + minutes + ":" + (seconds < 10 ? "0" : "") + seconds,
textString + " " + minutes + ":" + (seconds < 10 ? "0" : "") + seconds,
Graphics.TEXT_JUSTIFY_CENTER);

}

function onHide() {

// Abort the timer when view is closed
mviewDrawnTimer.stop();
mviewDrawnTimer = null;
}


function continueToNextStep() {

// Starts the meditation session / saves the session
me.mOnShow.invoke();
}
}
16 changes: 16 additions & 0 deletions Meditate/source/globalSettings/GlobalSettings.mc
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,22 @@ class GlobalSettings {
static function savePrepareTime(prepareTime) {
App.Storage.setValue(PrepareTimeKey, prepareTime);
}

private static const FinalizeTimeKey = "globalSettings_finalizeTime";

static function loadFinalizeTime() {
var finalizeTime = App.Storage.getValue(FinalizeTimeKey);
if (finalizeTime == null) {
return 0;
}
else {
return finalizeTime;
}
}

static function saveFinalizeTime(finalizeTime) {
App.Storage.setValue(FinalizeTimeKey, finalizeTime);
}
}

module ConfirmSaveActivity {
Expand Down
32 changes: 32 additions & 0 deletions Meditate/source/globalSettings/GlobalSettingsMenuDelegate.mc
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ class GlobalSettingsMenuDelegate extends Ui.MenuInputDelegate {
var prepareTimeDelegate = new MenuOptionsDelegate(method(:onPrepareTimePicked));
Ui.pushView(new Rez.Menus.prepareTimeOptionsMenu(), prepareTimeDelegate, Ui.SLIDE_LEFT);
}
else if (item ==:finalizeTime) {
var finalizeTimeDelegate = new MenuOptionsDelegate(method(:onFinalizeTimePicked));
Ui.pushView(new Rez.Menus.finalizeTimeOptionsMenu(), finalizeTimeDelegate, Ui.SLIDE_LEFT);
}
}

function onConfirmSaveActivityPicked(item) {
Expand Down Expand Up @@ -104,6 +108,34 @@ class GlobalSettingsMenuDelegate extends Ui.MenuInputDelegate {
mOnGlobalSettingsChanged.invoke();
}

function onFinalizeTimePicked(item) {
if (item == :time_0s) {
GlobalSettings.saveFinalizeTime(0);
}
else if (item == :time_15s) {
GlobalSettings.saveFinalizeTime(15);
}
else if (item == :time_30s) {
GlobalSettings.saveFinalizeTime(30);
}
else if (item == :time_1m) {
GlobalSettings.saveFinalizeTime(60);
}
else if (item == :time_2m) {
GlobalSettings.saveFinalizeTime(120);
}
else if (item == :time_3m) {
GlobalSettings.saveFinalizeTime(180);
}
else if (item == :time_4m) {
GlobalSettings.saveFinalizeTime(240);
}
else if (item == :time_5m) {
GlobalSettings.saveFinalizeTime(300);
}
mOnGlobalSettingsChanged.invoke();
}

function onRespirationRateDisabledPicked(item) {
mOnGlobalSettingsChanged.invoke();
}
Expand Down
4 changes: 2 additions & 2 deletions Meditate/source/sessionSettings/SessionPickerDelegate.mc
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@ class SessionPickerDelegate extends ScreenPicker.ScreenPickerDelegate {
}

// Show preparation time view and start meditation session once the time is over
var meditatePrepareView = new MeditatePrepareView(method(:startMeditationSession));
var meditatePrepareDelegate = new MeditatePrepareDelegate(me);
var meditatePrepareView = new MeditatePrepareView(method(:startMeditationSession), 1);
var meditatePrepareDelegate = new MeditatePrepareDelegate(me, meditatePrepareView);
Ui.switchToView(meditatePrepareView, meditatePrepareDelegate, Ui.SLIDE_IMMEDIATE);
}

Expand Down

0 comments on commit b270e38

Please sign in to comment.