MainMenu & Workout ViewModel API draft
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Tue, 13 Oct 2020 09:33:56 +0000 (11:33 +0200)
committerPiotr Czaja <p.czaja@samsung.com>
Tue, 14 Sep 2021 11:01:33 +0000 (13:01 +0200)
Fitness/Models/DifficultyLevel.cs [new file with mode: 0644]
Fitness/Models/Workout.cs [new file with mode: 0644]
Fitness/Models/WorkoutState.cs [new file with mode: 0644]
Fitness/ViewModels/MainViewModel.cs
Fitness/ViewModels/WorkoutViewModel.cs [new file with mode: 0644]
Fitness/res/layout/1280x720/MainView.xaml

diff --git a/Fitness/Models/DifficultyLevel.cs b/Fitness/Models/DifficultyLevel.cs
new file mode 100644 (file)
index 0000000..6a06dec
--- /dev/null
@@ -0,0 +1,25 @@
+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,
+    }
+}
diff --git a/Fitness/Models/Workout.cs b/Fitness/Models/Workout.cs
new file mode 100644 (file)
index 0000000..1d06c68
--- /dev/null
@@ -0,0 +1,45 @@
+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; }
+    }
+}
diff --git a/Fitness/Models/WorkoutState.cs b/Fitness/Models/WorkoutState.cs
new file mode 100644 (file)
index 0000000..03435fa
--- /dev/null
@@ -0,0 +1,25 @@
+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,
+    }
+}
index 65c48c8..6363941 100644 (file)
@@ -1,28 +1,17 @@
-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; }
     }
 }
diff --git a/Fitness/ViewModels/WorkoutViewModel.cs b/Fitness/ViewModels/WorkoutViewModel.cs
new file mode 100644 (file)
index 0000000..42f3f32
--- /dev/null
@@ -0,0 +1,59 @@
+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; }
+    }
+}
index ceedc22..b6a2b6f 100644 (file)
@@ -10,5 +10,5 @@
   <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>