--- /dev/null
+using System;
+
+namespace Fitness.Models
+{
+ /// <summary>
+ /// Describe difficulty level of the workout
+ /// </summary>
+ public enum DifficultyLevel
+ {
+ /// <summary>
+ /// Easy - for beginners
+ /// </summary>
+ Easy,
+
+ /// <summary>
+ /// Medium - for advanced users
+ /// </summary>
+ Medium,
+
+ /// <summary>
+ /// Hard - for experienced users
+ /// </summary>
+ Hard,
+ }
+}
--- /dev/null
+using System;
+
+namespace Fitness.Models
+{
+ /// <summary>
+ /// Workout's information.
+ /// </summary>
+ public class Workout
+ {
+ /// <summary>
+ /// Workout title
+ /// </summary>
+ public string Title { get; private set; }
+
+ /// <summary>
+ /// Full workout description
+ /// </summary>
+ public string Description { get; private set; }
+
+ /// <summary>
+ /// Duration of the workout
+ /// </summary>
+ public TimeSpan Duration { get; private set; }
+
+ /// <summary>
+ /// Predefined difficulty level of workout
+ /// </summary>
+ public DifficultyLevel Difficulty { get; private set; }
+
+ /// <summary>
+ /// True if workout is added is user's favourite
+ /// </summary>
+ public bool Favourite { get; private set; }
+
+ /// <summary>
+ /// Url to thumbnail of the workout
+ /// </summary>
+ public string ThumbnailUrl { get; private set; }
+
+ /// <summary>
+ /// Url to workout video
+ /// </summary>
+ public string VideoUrl { get; private set; }
+ }
+}
--- /dev/null
+using System;
+
+namespace Fitness.Models
+{
+ /// <summary>
+ /// Current state of workout
+ /// </summary>
+ public enum WorkoutState
+ {
+ /// <summary>
+ /// the workout has been paused, preserving current progress
+ /// </summary>
+ Paused,
+
+ /// <summary>
+ /// the workout is playing
+ /// </summary>
+ Playing,
+
+ /// <summary>
+ /// the workout has been stopped,
+ /// </summary>
+ Stopped,
+ }
+}
-using System;
+using System.Collections.ObjectModel;
+using Fitness.Models;
namespace Fitness.ViewModels
{
public class MainViewModel : BaseViewModel
{
- private string text;
-
public MainViewModel()
{
- Text = "Fitness App";
}
- public string Text
- {
- get
- {
- return text;
- }
-
- set
- {
- text = value;
- RaisePropertyChanged();
- }
- }
+ /// <summary>
+ /// List of all available workouts
+ /// </summary>
+ public ObservableCollection<Workout> Workouts { get; private set; }
}
}
--- /dev/null
+using System;
+using System.Windows.Input;
+using Fitness.Models;
+
+namespace Fitness.ViewModels
+{
+ public class WorkoutViewModel : BaseViewModel
+ {
+ /// <summary>
+ /// Current score
+ /// </summary>
+ public int Score { get; private set; }
+
+ /// <summary>
+ /// Repetitions made in current Workout
+ /// </summary>
+ public int Repetitions { get; private set; }
+
+ /// <summary>
+ /// Time left in current body pose to accept repetition.
+ /// </summary>
+ public TimeSpan Hold { get; private set; }
+
+ /// <summary>
+ /// TimeLeft in workout
+ /// </summary>
+ public TimeSpan TimeLeft { get; private set; }
+
+ /// <summary>
+ /// Current workout state
+ /// </summary>
+ public WorkoutState State { get; private set; }
+
+ /// <summary>
+ /// Pause workout
+ /// </summary>
+ public ICommand Pause { get; private set; }
+
+ /// <summary>
+ /// Stop workout
+ /// </summary>
+ public ICommand Stop { get; private set; }
+
+ /// <summary>
+ /// Start/Resume workout
+ /// </summary>
+ public ICommand Play { get; private set; }
+
+ /// <summary>
+ /// Url to video with workout
+ /// </summary>
+ public string WorkoutVideoUrl { get; private set; }
+
+ /// <summary>
+ /// Url to preview from device camera
+ /// </summary>
+ public string PreviewVideoUrl { get; private set; }
+ }
+}
<View.Layout>
<LinearLayout LinearOrientation="Vertical" CellPadding="50,50" LinearAlignment="Center"/>
</View.Layout>
- <TextLabel Text="{Binding Text}" HorizontalAlignment="Center" VerticalAlignment="Center" Size="300, 50" BackgroundColor="Cyan"/>
+ <TextLabel Text="Title" HorizontalAlignment="Center" VerticalAlignment="Center" Size="300, 50" BackgroundColor="Cyan"/>
</View>