diff --git a/Clone Android Screenshot 1.png b/Clone Android Screenshot 1.png
new file mode 100755
index 0000000..65a74c3
Binary files /dev/null and b/Clone Android Screenshot 1.png differ
diff --git a/Clone Android Screenshot 2.png b/Clone Android Screenshot 2.png
new file mode 100755
index 0000000..4fff991
Binary files /dev/null and b/Clone Android Screenshot 2.png differ
diff --git a/Clone iOS Screenshot 1.png b/Clone iOS Screenshot 1.png
new file mode 100644
index 0000000..d5fea9b
Binary files /dev/null and b/Clone iOS Screenshot 1.png differ
diff --git a/Clone iOS Screenshot 2.png b/Clone iOS Screenshot 2.png
new file mode 100644
index 0000000..cf3f49c
Binary files /dev/null and b/Clone iOS Screenshot 2.png differ
diff --git a/Notes.md b/Notes.md
new file mode 100644
index 0000000..c16d97d
--- /dev/null
+++ b/Notes.md
@@ -0,0 +1,27 @@
+# TV Time clone
+
+- https://itunes.apple.com/us/app/tv-time-track-what-you-watch/id431065232?mt=8
+- https://play.google.com/store/apps/details?id=com.tozelabs.tvshowtime&hl=en
+
+## Notes
+- In Material the Frame had no shadow by default so I had to build a custom visual renderer to reproduce the shadow effect.
+- CollectionView is powerful!!!
+- Button's shadow was great still I'd like to be able to edit the elevation without a custom renderer or effect.
+- Liked the fact that I could use custom visual and that I could swap between Default and Material.
+
+## Screenshots
+
+### Original TV Time App iOS
+
+-----------------------------------------------------------------------
+
+
+### Clone Android
+
+-----------------------------------------------------------------------
+
+
+### Clone iOS
+
+-----------------------------------------------------------------------
+
diff --git a/TV Time Screenshot 1.jpg b/TV Time Screenshot 1.jpg
new file mode 100644
index 0000000..c8a69a4
Binary files /dev/null and b/TV Time Screenshot 1.jpg differ
diff --git a/TV Time Screenshot 2.JPG b/TV Time Screenshot 2.JPG
new file mode 100644
index 0000000..5d4fa94
Binary files /dev/null and b/TV Time Screenshot 2.JPG differ
diff --git a/VisualChallenge/VisualChallenge.Android/Renderers/FrameRendererDroid.cs b/VisualChallenge/VisualChallenge.Android/Renderers/FrameRendererDroid.cs
new file mode 100644
index 0000000..0db4b99
--- /dev/null
+++ b/VisualChallenge/VisualChallenge.Android/Renderers/FrameRendererDroid.cs
@@ -0,0 +1,25 @@
+using System;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.Android;
+using VisualChallenge.Droid.Renderers;
+using VisualChallenge;
+using Android.Content;
+using Android.Graphics.Drawables;
+
+[assembly: ExportRenderer(typeof(Frame), typeof(FrameRendererDroid), new[] { typeof(CustomVisual) })]
+namespace VisualChallenge.Droid.Renderers
+{
+ public class FrameRendererDroid : FrameRenderer
+ {
+ public FrameRendererDroid(Context context) : base(context)
+ {
+ }
+
+ protected override void OnElementChanged(ElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+ ViewGroup.SetBackgroundResource(Resource.Drawable.shadow_frame);
+ ViewGroup.Elevation = 22;
+ }
+ }
+}
diff --git a/VisualChallenge/VisualChallenge.Android/Resources/Resource.designer.cs b/VisualChallenge/VisualChallenge.Android/Resources/Resource.designer.cs
index 1f086b3..6c2aea4 100644
--- a/VisualChallenge/VisualChallenge.Android/Resources/Resource.designer.cs
+++ b/VisualChallenge/VisualChallenge.Android/Resources/Resource.designer.cs
@@ -8196,26 +8196,26 @@ public partial class Drawable
// aapt resource value: 0x7f020054
public const int avd_hide_password = 2130837588;
- // aapt resource value: 0x7f020139
- public const int avd_hide_password_1 = 2130837817;
-
// aapt resource value: 0x7f02013a
- public const int avd_hide_password_2 = 2130837818;
+ public const int avd_hide_password_1 = 2130837818;
// aapt resource value: 0x7f02013b
- public const int avd_hide_password_3 = 2130837819;
+ public const int avd_hide_password_2 = 2130837819;
+
+ // aapt resource value: 0x7f02013c
+ public const int avd_hide_password_3 = 2130837820;
// aapt resource value: 0x7f020055
public const int avd_show_password = 2130837589;
- // aapt resource value: 0x7f02013c
- public const int avd_show_password_1 = 2130837820;
-
// aapt resource value: 0x7f02013d
- public const int avd_show_password_2 = 2130837821;
+ public const int avd_show_password_1 = 2130837821;
// aapt resource value: 0x7f02013e
- public const int avd_show_password_3 = 2130837822;
+ public const int avd_show_password_2 = 2130837822;
+
+ // aapt resource value: 0x7f02013f
+ public const int avd_show_password_3 = 2130837823;
// aapt resource value: 0x7f020056
public const int design_bottom_navigation_item_background = 2130837590;
@@ -8877,11 +8877,11 @@ public partial class Drawable
// aapt resource value: 0x7f020131
public const int notification_icon_background = 2130837809;
- // aapt resource value: 0x7f020137
- public const int notification_template_icon_bg = 2130837815;
-
// aapt resource value: 0x7f020138
- public const int notification_template_icon_low_bg = 2130837816;
+ public const int notification_template_icon_bg = 2130837816;
+
+ // aapt resource value: 0x7f020139
+ public const int notification_template_icon_low_bg = 2130837817;
// aapt resource value: 0x7f020132
public const int notification_tile_bg = 2130837810;
@@ -8890,13 +8890,16 @@ public partial class Drawable
public const int notify_panel_notification_icon_bg = 2130837811;
// aapt resource value: 0x7f020134
- public const int tooltip_frame_dark = 2130837812;
+ public const int shadow_frame = 2130837812;
// aapt resource value: 0x7f020135
- public const int tooltip_frame_light = 2130837813;
+ public const int tooltip_frame_dark = 2130837813;
// aapt resource value: 0x7f020136
- public const int xamagon_preview = 2130837814;
+ public const int tooltip_frame_light = 2130837814;
+
+ // aapt resource value: 0x7f020137
+ public const int xamagon_preview = 2130837815;
static Drawable()
{
diff --git a/VisualChallenge/VisualChallenge.Android/Resources/drawable/ic_settings.png b/VisualChallenge/VisualChallenge.Android/Resources/drawable/ic_settings.png
new file mode 100644
index 0000000..3795328
Binary files /dev/null and b/VisualChallenge/VisualChallenge.Android/Resources/drawable/ic_settings.png differ
diff --git a/VisualChallenge/VisualChallenge.Android/Resources/drawable/shadow_frame.xml b/VisualChallenge/VisualChallenge.Android/Resources/drawable/shadow_frame.xml
new file mode 100644
index 0000000..91da220
--- /dev/null
+++ b/VisualChallenge/VisualChallenge.Android/Resources/drawable/shadow_frame.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/VisualChallenge/VisualChallenge.Android/VisualChallenge.Android.csproj b/VisualChallenge/VisualChallenge.Android/VisualChallenge.Android.csproj
index e209480..e94da74 100644
--- a/VisualChallenge/VisualChallenge.Android/VisualChallenge.Android.csproj
+++ b/VisualChallenge/VisualChallenge.Android/VisualChallenge.Android.csproj
@@ -57,6 +57,7 @@
+
@@ -85,6 +86,7 @@
+
@@ -93,5 +95,8 @@
VisualChallenge
+
+
+
\ No newline at end of file
diff --git a/VisualChallenge/VisualChallenge.iOS/Renderers/FrameRendererIos.cs b/VisualChallenge/VisualChallenge.iOS/Renderers/FrameRendererIos.cs
new file mode 100644
index 0000000..0a74050
--- /dev/null
+++ b/VisualChallenge/VisualChallenge.iOS/Renderers/FrameRendererIos.cs
@@ -0,0 +1,23 @@
+using System;
+using VisualChallenge;
+using VisualChallenge.iOS.Renderers;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.iOS;
+using CoreGraphics;
+
+[assembly:ExportRenderer(typeof(Frame), typeof(FrameRendererIos), new[] { typeof(CustomVisual) })]
+namespace VisualChallenge.iOS.Renderers
+{
+ public class FrameRendererIos : FrameRenderer
+ {
+ protected override void OnElementChanged(ElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+ if(Layer != null)
+ {
+ Layer.ShadowRadius = 8f;
+ Layer.ShadowColor = Color.Silver.ToCGColor();
+ }
+ }
+ }
+}
diff --git a/VisualChallenge/VisualChallenge.iOS/VisualChallenge.iOS.csproj b/VisualChallenge/VisualChallenge.iOS/VisualChallenge.iOS.csproj
index d711192..fa85caf 100644
--- a/VisualChallenge/VisualChallenge.iOS/VisualChallenge.iOS.csproj
+++ b/VisualChallenge/VisualChallenge.iOS/VisualChallenge.iOS.csproj
@@ -70,6 +70,7 @@
+
@@ -144,4 +145,7 @@
VisualChallenge
+
+
+
\ No newline at end of file
diff --git a/VisualChallenge/VisualChallenge/CustomVisual.cs b/VisualChallenge/VisualChallenge/CustomVisual.cs
new file mode 100644
index 0000000..0334bad
--- /dev/null
+++ b/VisualChallenge/VisualChallenge/CustomVisual.cs
@@ -0,0 +1,11 @@
+using System;
+using Xamarin.Forms;
+namespace VisualChallenge
+{
+ public class CustomVisual : IVisual
+ {
+ public CustomVisual()
+ {
+ }
+ }
+}
diff --git a/VisualChallenge/VisualChallenge/Resources/cover_photo.jpg b/VisualChallenge/VisualChallenge/Resources/cover_photo.jpg
new file mode 100644
index 0000000..3ee899e
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/cover_photo.jpg differ
diff --git a/VisualChallenge/VisualChallenge/Resources/dark.jpg b/VisualChallenge/VisualChallenge/Resources/dark.jpg
new file mode 100644
index 0000000..7d2b1a4
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/dark.jpg differ
diff --git a/VisualChallenge/VisualChallenge/Resources/ic_bell.png b/VisualChallenge/VisualChallenge/Resources/ic_bell.png
new file mode 100644
index 0000000..80dd932
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/ic_bell.png differ
diff --git a/VisualChallenge/VisualChallenge/Resources/ic_help.png b/VisualChallenge/VisualChallenge/Resources/ic_help.png
new file mode 100644
index 0000000..84c9016
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/ic_help.png differ
diff --git a/VisualChallenge/VisualChallenge/Resources/ic_link.png b/VisualChallenge/VisualChallenge/Resources/ic_link.png
new file mode 100644
index 0000000..eb69f67
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/ic_link.png differ
diff --git a/VisualChallenge/VisualChallenge/Resources/leftovers.jpg b/VisualChallenge/VisualChallenge/Resources/leftovers.jpg
new file mode 100644
index 0000000..6e637ed
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/leftovers.jpg differ
diff --git a/VisualChallenge/VisualChallenge/Resources/mirror.jpg b/VisualChallenge/VisualChallenge/Resources/mirror.jpg
new file mode 100644
index 0000000..a6fa8ed
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/mirror.jpg differ
diff --git a/VisualChallenge/VisualChallenge/Resources/peaky.jpg b/VisualChallenge/VisualChallenge/Resources/peaky.jpg
new file mode 100644
index 0000000..d8163a8
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/peaky.jpg differ
diff --git a/VisualChallenge/VisualChallenge/Resources/profile_photo.png b/VisualChallenge/VisualChallenge/Resources/profile_photo.png
new file mode 100644
index 0000000..374a906
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/profile_photo.png differ
diff --git a/VisualChallenge/VisualChallenge/Resources/umbrella.jpg b/VisualChallenge/VisualChallenge/Resources/umbrella.jpg
new file mode 100644
index 0000000..7ead381
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/umbrella.jpg differ
diff --git a/VisualChallenge/VisualChallenge/Resources/vikings.jpg b/VisualChallenge/VisualChallenge/Resources/vikings.jpg
new file mode 100644
index 0000000..47fa925
Binary files /dev/null and b/VisualChallenge/VisualChallenge/Resources/vikings.jpg differ
diff --git a/VisualChallenge/VisualChallenge/VisualChallenge.csproj b/VisualChallenge/VisualChallenge/VisualChallenge.csproj
index c971abe..accf856 100644
--- a/VisualChallenge/VisualChallenge/VisualChallenge.csproj
+++ b/VisualChallenge/VisualChallenge/VisualChallenge.csproj
@@ -20,4 +20,33 @@
VisualChallengePage.xaml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/VisualChallenge/VisualChallenge/VisualChallengePage.xaml b/VisualChallenge/VisualChallenge/VisualChallengePage.xaml
index 305cee4..909d170 100644
--- a/VisualChallenge/VisualChallenge/VisualChallengePage.xaml
+++ b/VisualChallenge/VisualChallenge/VisualChallengePage.xaml
@@ -1,23 +1,239 @@
-
+
-
-
+ Shell.NavBarIsVisible="False"
+ BackgroundColor="White">
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/VisualChallenge/VisualChallenge/VisualChallengePageViewModel.cs b/VisualChallenge/VisualChallenge/VisualChallengePageViewModel.cs
new file mode 100644
index 0000000..0949ffb
--- /dev/null
+++ b/VisualChallenge/VisualChallenge/VisualChallengePageViewModel.cs
@@ -0,0 +1,50 @@
+using System;
+using Xamarin.Forms;
+using System.ComponentModel;
+using System.Collections.ObjectModel;
+using System.Linq;
+namespace VisualChallenge
+{
+ public class VisualChallengePageViewModel
+ {
+ private static readonly string RESOURCES = "VisualChallenge.Resources.";
+
+ public ImageSource CoverPhoto { get; } = ImageSource.FromResource(RESOURCES + "cover_photo.jpg");
+ public ImageSource HelpIcon { get; } = ImageSource.FromResource(RESOURCES + "ic_help.png");
+ public ImageSource BellIcon { get; } = ImageSource.FromResource(RESOURCES + "ic_bell.png");
+ public ImageSource ProfilePhoto { get; } = ImageSource.FromResource(RESOURCES + "profile_photo.png");
+
+
+ public ObservableCollection ShowsList { get; }
+ public ObservableCollection FavouriteShowsList { get; }
+ public ObservableCollection MiscObjectsList { get; }
+
+ public VisualChallengePageViewModel()
+ {
+ ShowsList = new ObservableCollection
+ {
+ ImageSource.FromResource(RESOURCES + "dark.jpg"),
+ ImageSource.FromResource(RESOURCES + "mirror.jpg"),
+ ImageSource.FromResource(RESOURCES + "peaky.jpg"),
+ ImageSource.FromResource(RESOURCES + "leftovers.jpg"),
+ ImageSource.FromResource(RESOURCES + "umbrella.jpg")
+ };
+ FavouriteShowsList = new ObservableCollection(ShowsList.Reverse());
+ MiscObjectsList = new ObservableCollection
+ {
+ new MiscObject{ Title = "Custom lists" , Count = 3},
+ new MiscObject{ Title = "Followers" , Count = 16},
+ new MiscObject{ Title = "Followings" , Count = 18},
+ new MiscObject{ Title = "Comments" , Count = 34},
+ new MiscObject{ Title = "Stats" , Count = 2}
+ };
+ }
+
+ }
+ public class MiscObject
+ {
+ public string Title { get; set; }
+ public int Count { get; set; }
+ }
+}
+