diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Assets/Fonts/Font Awesome 5 Free-Solid-900.otf b/CollectionViewChallenge/CollectionViewChallenge.Android/Assets/Fonts/Font Awesome 5 Free-Solid-900.otf
new file mode 100644
index 0000000..6e94624
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Assets/Fonts/Font Awesome 5 Free-Solid-900.otf differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj b/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj
index d2c42fc..56df89e 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj
+++ b/CollectionViewChallenge/CollectionViewChallenge.Android/CollectionViewChallenge.Android.csproj
@@ -15,7 +15,6 @@
Properties\AndroidManifest.xml
Resources
Assets
- false
v8.1
true
Xamarin.Android.Net.AndroidClientHandler
@@ -93,18 +92,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- {BA39825E-3CF8-4A31-B120-782B2A651542}
+ {9A9DDEE5-8C48-4274-82D7-22EB79C97206}
CollectionViewChallenge
+
+
+
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml b/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml
index 8a8223a..0a62e2d 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml
+++ b/CollectionViewChallenge/CollectionViewChallenge.Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
+
-
-
-
+
+
+
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix1.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix1.jpeg
new file mode 100644
index 0000000..ff24615
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix1.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix2.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix2.jpeg
new file mode 100644
index 0000000..937cfa4
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix2.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix3.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix3.jpeg
new file mode 100644
index 0000000..f6cea6d
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix3.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix4.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix4.jpeg
new file mode 100644
index 0000000..7abd5d2
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/daily_mix4.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/home_icon.png b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/home_icon.png
new file mode 100644
index 0000000..4abe6b1
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/home_icon.png differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/library_icon.png b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/library_icon.png
new file mode 100644
index 0000000..4897e3e
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/library_icon.png differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/main_cover.jpg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/main_cover.jpg
new file mode 100644
index 0000000..0a50ffa
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/main_cover.jpg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played1.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played1.jpeg
new file mode 100644
index 0000000..c782109
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played1.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played2.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played2.jpeg
new file mode 100644
index 0000000..602a46b
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played2.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played3.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played3.jpeg
new file mode 100644
index 0000000..6c899d9
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played3.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played4.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played4.jpeg
new file mode 100644
index 0000000..20a07e0
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/recently_played4.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/search_icon.png b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/search_icon.png
new file mode 100644
index 0000000..c05eba9
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/search_icon.png differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along1.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along1.jpeg
new file mode 100644
index 0000000..e2b9aad
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along1.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along2.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along2.jpeg
new file mode 100644
index 0000000..af7d8fa
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along2.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along3.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along3.jpeg
new file mode 100644
index 0000000..05fbfb6
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along3.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along4.jpeg b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along4.jpeg
new file mode 100644
index 0000000..cbdcaff
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.Android/Resources/drawable/sing_along4.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj b/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj
index 49a7105..ecd05fa 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj
+++ b/CollectionViewChallenge/CollectionViewChallenge.iOS/CollectionViewChallenge.iOS.csproj
@@ -123,6 +123,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -139,8 +156,11 @@
- {BA39825E-3CF8-4A31-B120-782B2A651542}
+ {9A9DDEE5-8C48-4274-82D7-22EB79C97206}
CollectionViewChallenge
+
+
+
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Info.plist b/CollectionViewChallenge/CollectionViewChallenge.iOS/Info.plist
index 82bd07d..7b33b76 100644
--- a/CollectionViewChallenge/CollectionViewChallenge.iOS/Info.plist
+++ b/CollectionViewChallenge/CollectionViewChallenge.iOS/Info.plist
@@ -2,37 +2,41 @@
- UIDeviceFamily
-
- 1
- 2
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- MinimumOSVersion
- 8.0
- CFBundleDisplayName
- CollectionViewChallenge
- CFBundleIdentifier
- com.companyname.CollectionViewChallenge
- CFBundleVersion
- 1.0
- UILaunchStoryboardName
- LaunchScreen
- CFBundleName
- CollectionViewChallenge
- XSAppIconAssets
- Assets.xcassets/AppIcon.appiconset
+ UIDeviceFamily
+
+ 1
+ 2
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ MinimumOSVersion
+ 8.0
+ CFBundleDisplayName
+ CollectionViewChallenge
+ CFBundleIdentifier
+ com.companyname.CollectionViewChallenge
+ CFBundleVersion
+ 1.0
+ UILaunchStoryboardName
+ LaunchScreen
+ CFBundleName
+ CollectionViewChallenge
+ XSAppIconAssets
+ Assets.xcassets/AppIcon.appiconset
+ UIAppFonts
+
+ Fonts/Font Awesome 5 Free-Solid-900.otf
+
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/Fonts/Font Awesome 5 Free-Solid-900.otf b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/Fonts/Font Awesome 5 Free-Solid-900.otf
new file mode 100644
index 0000000..6e94624
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/Fonts/Font Awesome 5 Free-Solid-900.otf differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix1.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix1.jpeg
new file mode 100644
index 0000000..ff24615
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix1.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix2.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix2.jpeg
new file mode 100644
index 0000000..937cfa4
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix2.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix3.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix3.jpeg
new file mode 100644
index 0000000..f6cea6d
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix3.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix4.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix4.jpeg
new file mode 100644
index 0000000..7abd5d2
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/daily_mix4.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/home_icon.png b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/home_icon.png
new file mode 100644
index 0000000..4abe6b1
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/home_icon.png differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/library_icon.png b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/library_icon.png
new file mode 100644
index 0000000..4897e3e
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/library_icon.png differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/main_cover.jpg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/main_cover.jpg
new file mode 100644
index 0000000..0a50ffa
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/main_cover.jpg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played1.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played1.jpeg
new file mode 100644
index 0000000..c782109
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played1.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played2.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played2.jpeg
new file mode 100644
index 0000000..602a46b
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played2.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played3.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played3.jpeg
new file mode 100644
index 0000000..6c899d9
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played3.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played4.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played4.jpeg
new file mode 100644
index 0000000..20a07e0
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/recently_played4.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/search_icon.png b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/search_icon.png
new file mode 100644
index 0000000..c05eba9
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/search_icon.png differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along1.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along1.jpeg
new file mode 100644
index 0000000..e2b9aad
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along1.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along2.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along2.jpeg
new file mode 100644
index 0000000..af7d8fa
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along2.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along3.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along3.jpeg
new file mode 100644
index 0000000..05fbfb6
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along3.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along4.jpeg b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along4.jpeg
new file mode 100644
index 0000000..cbdcaff
Binary files /dev/null and b/CollectionViewChallenge/CollectionViewChallenge.iOS/Resources/sing_along4.jpeg differ
diff --git a/CollectionViewChallenge/CollectionViewChallenge/App.xaml b/CollectionViewChallenge/CollectionViewChallenge/App.xaml
index 5477c51..7cd3013 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/App.xaml
+++ b/CollectionViewChallenge/CollectionViewChallenge/App.xaml
@@ -1,8 +1,99 @@
-
+
-
+
+ #28A745
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml b/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml
index 9364c60..eecc485 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml
+++ b/CollectionViewChallenge/CollectionViewChallenge/AppShell.xaml
@@ -8,72 +8,43 @@
FlyoutBehavior="Disabled"
Title="CollectionViewChallenge"
x:Class="CollectionViewChallenge.AppShell">
-
-
-
-
- #2196F3
+
+
-
+
+
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj b/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj
index 3ccfc60..4d4612b 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj
+++ b/CollectionViewChallenge/CollectionViewChallenge/CollectionViewChallenge.csproj
@@ -24,5 +24,7 @@
+
+
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Models/CollectionItemViewModel.cs b/CollectionViewChallenge/CollectionViewChallenge/Models/CollectionItemViewModel.cs
new file mode 100644
index 0000000..b72b6a8
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge/Models/CollectionItemViewModel.cs
@@ -0,0 +1,12 @@
+using Xamarin.Forms;
+
+namespace CollectionViewChallenge.Models
+{
+ public class CollectionItemViewModel
+ {
+ public string Title { get; set; }
+ public string Description { get; set; }
+ public ImageSource CoverUrl { get; set; }
+ public GridLength DescRowHeight { get; set; }
+ }
+}
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Models/Enums/CollectionTypes.cs b/CollectionViewChallenge/CollectionViewChallenge/Models/Enums/CollectionTypes.cs
new file mode 100644
index 0000000..3b6b94d
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge/Models/Enums/CollectionTypes.cs
@@ -0,0 +1,9 @@
+namespace CollectionViewChallenge.Models.Enums
+{
+ public enum CollectionTypes
+ {
+ SingAlong,
+ MadeForUser,
+ RecentlyPlayed
+ }
+}
diff --git a/CollectionViewChallenge/CollectionViewChallenge/ViewModels/BaseViewModel.cs b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/BaseViewModel.cs
new file mode 100644
index 0000000..b942268
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/BaseViewModel.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+
+namespace CollectionViewChallenge.ViewModels
+{
+ public class BaseViewModel : INotifyPropertyChanged
+ {
+ protected bool SetProperty(ref T backingStore, T value,
+ [CallerMemberName]string propertyName = "",
+ Action onChanged = null)
+ {
+ if (EqualityComparer.Default.Equals(backingStore, value))
+ return false;
+
+ backingStore = value;
+ onChanged?.Invoke();
+ OnPropertyChanged(propertyName);
+ return true;
+ }
+
+ #region INotifyPropertyChanged
+ public event PropertyChangedEventHandler PropertyChanged;
+ protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
+ {
+ var changed = PropertyChanged;
+ if (changed == null)
+ return;
+
+ changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ #endregion
+ }
+}
diff --git a/CollectionViewChallenge/CollectionViewChallenge/ViewModels/CollectionViewChallengeViewModel.cs b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/CollectionViewChallengeViewModel.cs
new file mode 100644
index 0000000..94231cb
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge/ViewModels/CollectionViewChallengeViewModel.cs
@@ -0,0 +1,233 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Timers;
+using System.Windows.Input;
+using CollectionViewChallenge.Models;
+using CollectionViewChallenge.Models.Enums;
+using Xamarin.Forms;
+
+namespace CollectionViewChallenge.ViewModels
+{
+ public class CollectionViewChallengeViewModel : BaseViewModel
+ {
+ private ICommand _actionCommand;
+ private ObservableCollection _singAlongItemSource;
+ private ObservableCollection _madeForUserItemSource;
+ private ObservableCollection _recentlyPlayedItemSource;
+ private string _username;
+ private double _playingLength;
+ private bool _isPlaying;
+ private bool _isFavourite;
+
+ public CollectionViewChallengeViewModel()
+ {
+ _singAlongItemSource = new ObservableCollection();
+ _madeForUserItemSource = new ObservableCollection();
+ _recentlyPlayedItemSource = new ObservableCollection();
+
+ _username = string.Empty;
+ _playingLength = 0;
+
+ _isPlaying = false;
+ _isFavourite = false;
+ }
+
+ internal void InitializeView()
+ {
+ SingAlongItemSource = new ObservableCollection();
+ MadeForUserItemSource = new ObservableCollection();
+ RecentlyPlayedItemSource = new ObservableCollection();
+
+ Username = "Hachiko";
+ PlayingLength = 0;
+
+ IsPlaying = false;
+ IsFavourite = false;
+
+ SingAlongItemSource = PopulateCollectionData(CollectionTypes.SingAlong);
+ MadeForUserItemSource = PopulateCollectionData(CollectionTypes.MadeForUser);
+ RecentlyPlayedItemSource = PopulateCollectionData(CollectionTypes.RecentlyPlayed);
+ }
+
+ private ObservableCollection PopulateCollectionData(CollectionTypes types)
+ {
+ var populatedData = new ObservableCollection();
+ var titles = new List();
+ var coverUrls = new List();
+ var descriptions = new List();
+
+ switch (types)
+ {
+ case CollectionTypes.SingAlong:
+ titles = new List
+ {
+ "Songs to Sing in the Car",
+ "So You Think You Can Sing",
+ "Sing Along K-Pop",
+ "Sing-along: 90's to Now"
+ };
+
+ coverUrls = new List
+ {
+ "sing_along1.jpeg",
+ "sing_along2.jpeg",
+ "sing_along3.jpeg",
+ "sing_along4.jpeg"
+ };
+
+ descriptions = new List
+ {
+ "Shawn Mendes, Lady Gaga, Ariana Grande, Khalid, Queen",
+ "Calum Scott, Beyoncé, Sia, Bruno Mars, David Guetta",
+ "BTS, BLACKPINK, EXO, Red Velvet, SHINee, BIGBANG",
+ "Kelly Clarkson, Beyoncé, Miley Cyrus, Rihanna, Ne-Yo"
+ };
+ break;
+ case CollectionTypes.MadeForUser:
+ titles = new List
+ {
+ "Daily Mix 1",
+ "Daily Mix 2",
+ "Daily Mix 3",
+ "Daily Mix 4"
+ };
+
+ coverUrls = new List
+ {
+ "daily_mix1.jpeg",
+ "daily_mix2.jpeg",
+ "daily_mix3.jpeg",
+ "daily_mix4.jpeg"
+ };
+
+ descriptions = new List
+ {
+ "JJ Lin, Leehom Wang, Kimberley Chen and more",
+ "Glee Cast, Shawn Mendes, Katy Perry and more",
+ "A.R. Rahman, Penn Masala, Pritam and more",
+ "Andra & The Backbone, Gita Gutawa, Ungu and more"
+ };
+ break;
+ case CollectionTypes.RecentlyPlayed:
+ titles = new List
+ {
+ "This is Shawn Mendes",
+ "This is JJ Lin",
+ "All Out 00s",
+ "Blast from the Past"
+ };
+
+ coverUrls = new List
+ {
+ "recently_played1.jpeg",
+ "recently_played2.jpeg",
+ "recently_played3.jpeg",
+ "recently_played4.jpeg"
+ };
+
+ descriptions = new List
+ {
+ "",
+ "",
+ "",
+ ""
+ };
+ break;
+ }
+
+ for (int i = 0; i < titles.Count; i++)
+ populatedData.Add(new CollectionItemViewModel
+ {
+ Title = titles[i],
+ CoverUrl = coverUrls[i],
+ Description = descriptions[i],
+ DescRowHeight = string.IsNullOrWhiteSpace(descriptions[i]) ? new GridLength(30) : new GridLength(50)
+ });
+
+ return populatedData;
+ }
+
+ #region Binding properties
+ public ObservableCollection SingAlongItemSource
+ {
+ get { return _singAlongItemSource; }
+ set { SetProperty(ref _singAlongItemSource, value); }
+ }
+
+ public ObservableCollection MadeForUserItemSource
+ {
+ get { return _madeForUserItemSource; }
+ set { SetProperty(ref _madeForUserItemSource, value); }
+ }
+
+ public ObservableCollection RecentlyPlayedItemSource
+ {
+ get { return _recentlyPlayedItemSource; }
+ set { SetProperty(ref _recentlyPlayedItemSource, value); }
+ }
+
+ public string Username
+ {
+ get { return _username; }
+ set { SetProperty(ref _username, value); }
+ }
+
+ public double PlayingLength
+ {
+ get { return _playingLength; }
+ set { SetProperty(ref _playingLength, value); }
+ }
+
+ public bool IsPlaying
+ {
+ get { return _isPlaying; }
+ set { SetProperty(ref _isPlaying, value); }
+ }
+
+ public bool IsFavourite
+ {
+ get { return _isFavourite; }
+ set { SetProperty(ref _isFavourite, value); }
+ }
+ #endregion
+
+ #region ActionCommand
+ public ICommand ActionCommand
+ {
+ get { return _actionCommand ?? (_actionCommand = new Command(ExecuteActionCommand)); }
+ }
+
+ private void ExecuteActionCommand(string parameter)
+ {
+ switch (parameter)
+ {
+ case "PlayPause":
+ PlayPauseMusic();
+ break;
+ case "Favourite":
+ IsFavourite = !IsFavourite;
+ break;
+ }
+ }
+
+ private void PlayPauseMusic()
+ {
+ IsPlaying = !IsPlaying;
+
+ Device.StartTimer(TimeSpan.FromMilliseconds(50), () =>
+ {
+ if (PlayingLength.Equals(400))
+ {
+ IsPlaying = false;
+ PlayingLength = 0;
+ }
+
+ PlayingLength++;
+
+ return IsPlaying; // True = Repeat again, False = Stop the timer
+ });
+ }
+ #endregion
+ }
+}
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml
index f2da7f7..dec2a14 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml
+++ b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml
@@ -1,32 +1,154 @@
-
+
-
-
-
-
-
-
- This is a CollectionView!
- Your feedback on the experience of converting a ListView to a CollectionView is incredibly appreciated.
- Here are three general questions:
- 1. How was the experience of converting your existing ListView to a CollectionView?
- 2. How is the performance compared to the ListView?
- 3. Is there a specific piece of functionality that you'd like to see?
-
-
-
-
-
-
-
-
-
-
-
-
+ x:Class="CollectionViewChallenge.Views.CollectionViewChallengePage"
+ Shell.SetPaddingInsets="true"
+ BackgroundColor="Black">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs
index 701124f..4b9117d 100644
--- a/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs
+++ b/CollectionViewChallenge/CollectionViewChallenge/Views/CollectionViewChallengePage.xaml.cs
@@ -1,9 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
+using CollectionViewChallenge.ViewModels;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
@@ -12,9 +7,16 @@ namespace CollectionViewChallenge.Views
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class CollectionViewChallengePage : ContentPage
{
+ private readonly CollectionViewChallengeViewModel _vm;
+
public CollectionViewChallengePage()
{
InitializeComponent();
+
+ BindingContext = new CollectionViewChallengeViewModel();
+ _vm = BindingContext as CollectionViewChallengeViewModel;
+
+ _vm.InitializeView();
}
}
}
\ No newline at end of file
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/Templates/CollectionDataTemplate.xaml b/CollectionViewChallenge/CollectionViewChallenge/Views/Templates/CollectionDataTemplate.xaml
new file mode 100644
index 0000000..47dc344
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge/Views/Templates/CollectionDataTemplate.xaml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CollectionViewChallenge/CollectionViewChallenge/Views/Templates/CollectionDataTemplate.xaml.cs b/CollectionViewChallenge/CollectionViewChallenge/Views/Templates/CollectionDataTemplate.xaml.cs
new file mode 100644
index 0000000..5003124
--- /dev/null
+++ b/CollectionViewChallenge/CollectionViewChallenge/Views/Templates/CollectionDataTemplate.xaml.cs
@@ -0,0 +1,14 @@
+using Xamarin.Forms;
+using Xamarin.Forms.Xaml;
+
+namespace CollectionViewChallenge.Views.Templates
+{
+ [XamlCompilation(XamlCompilationOptions.Compile)]
+ public partial class CollectionDataTemplate : DataTemplate
+ {
+ public CollectionDataTemplate()
+ {
+ InitializeComponent();
+ }
+ }
+}