diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml
index 9a5c14319..9ef10872e 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml
@@ -112,9 +112,9 @@
+ Value="{StaticResource BlackColor}" />
+ Value="{StaticResource BlackColor}" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/CartButton.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/CartButton.xaml.cs
new file mode 100644
index 000000000..b46235a66
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/CartButton.xaml.cs
@@ -0,0 +1,12 @@
+using Xamarin.Forms;
+
+namespace eShopOnContainers.Core.Controls
+{
+ public partial class CartButton : ContentView
+ {
+ public CartButton()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/CustomSwitch.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/CustomSwitch.cs
new file mode 100644
index 000000000..e659a6977
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/CustomSwitch.cs
@@ -0,0 +1,25 @@
+using Xamarin.Forms;
+
+namespace eShopOnContainers.Core.Controls
+{
+ public class CustomSwitch : Switch
+ {
+ public static readonly BindableProperty TextOnProperty = BindableProperty.Create("TextOn",
+ typeof(string), typeof(CustomSwitch), string.Empty);
+
+ public static readonly BindableProperty TextOffProperty = BindableProperty.Create("TextOff",
+ typeof(string), typeof(CustomSwitch), string.Empty);
+
+ public string TextOn
+ {
+ get { return (string)this.GetValue(TextOnProperty); }
+ set { this.SetValue(TextOnProperty, value); }
+ }
+
+ public string TextOff
+ {
+ get { return (string)this.GetValue(TextOffProperty); }
+ set { this.SetValue(TextOffProperty, value); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Effects/LineColorEffect.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Effects/LineColorEffect.cs
index 3c1759c24..2635b3a3f 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Effects/LineColorEffect.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Effects/LineColorEffect.cs
@@ -59,7 +59,7 @@ namespace eShopOnContainers.Core.Effects
class EntryLineColorEffect : RoutingEffect
{
- public EntryLineColorEffect() : base("BikeSharing.EntryLineColorEffect")
+ public EntryLineColorEffect() : base("eShopOnContainers.EntryLineColorEffect")
{
}
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs
index 69669af9c..aacae349b 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs
@@ -154,6 +154,7 @@ namespace eShopOnContainers.Services
_mappings.Add(typeof(MainViewModel), typeof(MainView));
_mappings.Add(typeof(OrderDetailViewModel), typeof(OrderDetailView));
_mappings.Add(typeof(ProfileViewModel), typeof(ProfileView));
+ _mappings.Add(typeof(SettingsViewModel), typeof(SettingsView));
}
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs
index 578bfe482..e9d5d1ea2 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs
@@ -41,6 +41,7 @@ namespace eShopOnContainers.ViewModels.Base
_unityContainer.RegisterType();
_unityContainer.RegisterType();
_unityContainer.RegisterType();
+ _unityContainer.RegisterType();
}
public T Resolve()
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs
index cf7d8032d..2cc8a9585 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/MainViewModel.cs
@@ -3,13 +3,18 @@ using eShopOnContainers.ViewModels.Base;
using eShopOnContainers.Core.Models.Navigation;
using Xamarin.Forms;
using eShopOnContainers.Core.ViewModels.Base;
+using System.Windows.Input;
namespace eShopOnContainers.Core.ViewModels
{
public class MainViewModel : ViewModelBase
{
+ public ICommand SettingsCommand => new Command(Settings);
+
public override Task InitializeAsync(object navigationData)
{
+ IsBusy = true;
+
if (navigationData is TabParameter)
{
var tabIndex = ((TabParameter)navigationData).TabIndex;
@@ -18,5 +23,10 @@ namespace eShopOnContainers.Core.ViewModels
return base.InitializeAsync(navigationData);
}
+
+ private void Settings()
+ {
+ NavigationService.NavigateToAsync();
+ }
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs
new file mode 100644
index 000000000..659a921c8
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs
@@ -0,0 +1,9 @@
+using eShopOnContainers.ViewModels.Base;
+
+namespace eShopOnContainers.Core.ViewModels
+{
+ public class SettingsViewModel : ViewModelBase
+ {
+
+ }
+}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationPage.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationPage.xaml
index 477ac142f..793425447 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationPage.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationPage.xaml
@@ -2,5 +2,7 @@
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/FiltersView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/FiltersView.xaml
index ba6f4b0fa..e91b27527 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/FiltersView.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/FiltersView.xaml
@@ -21,7 +21,9 @@
+ Value="Fill" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml.cs
new file mode 100644
index 000000000..f7ad31a47
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Xamarin.Forms;
+
+namespace eShopOnContainers.Core.Views
+{
+ public partial class SettingsView : ContentPage
+ {
+ public SettingsView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/OrderItemTemplate.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/OrderItemTemplate.xaml
index 5d9b3a218..c1bdcb006 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/OrderItemTemplate.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/OrderItemTemplate.xaml
@@ -57,6 +57,7 @@
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/ProductTemplate.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/ProductTemplate.xaml
index b98ebff53..6dbb31b5f 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/ProductTemplate.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/ProductTemplate.xaml
@@ -3,6 +3,7 @@
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
+ xmlns:controls="clr-namespace:eShopOnContainers.Core.Controls;assembly=eShopOnContainers.Core"
x:Class="eShopOnContainers.Core.Views.Templates.ProductTemplate">
@@ -80,27 +81,9 @@
Grid.Row="0"
Grid.RowSpan="2"
Style="{StaticResource AddButtonStyle}">
-
-
-
-
-
-
-
-
-
+
+
+
+
+ CartButton.xaml
+
+
@@ -96,6 +100,7 @@
+
CartView.xaml
@@ -123,6 +128,9 @@
ProfileView.xaml
+
+ SettingsView.xaml
+
CartOrderItemTemplate.xaml
@@ -294,6 +302,18 @@
Designer
+
+
+ MSBuild:UpdateDesignTimeXaml
+ Designer
+
+
+
+
+ MSBuild:UpdateDesignTimeXaml
+ Designer
+
+
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomSwitchRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomSwitchRenderer.cs
new file mode 100644
index 000000000..a22a2936a
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomSwitchRenderer.cs
@@ -0,0 +1,58 @@
+using System;
+using Xamarin.Forms.Platform.Android;
+using Xamarin.Forms;
+using eShopOnContainers.Core.Controls;
+
+namespace eShopOnContainers.Droid.Renderers
+{
+ public class CustomSwitchRenderer : ViewRenderer
+ {
+ protected override void OnElementChanged(ElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+
+ if (e.OldElement != null)
+ {
+ this.Element.Toggled -= ElementToggled;
+ return;
+ }
+
+ if (this.Element == null)
+ {
+ return;
+ }
+
+ var switchControl = new Android.Widget.Switch(Forms.Context)
+ {
+ TextOn = this.Element.TextOn,
+ TextOff = this.Element.TextOff
+ };
+
+ switchControl.CheckedChange += ControlValueChanged;
+ this.Element.Toggled += ElementToggled;
+
+ this.SetNativeControl(switchControl);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ this.Control.CheckedChange -= this.ControlValueChanged;
+ this.Element.Toggled -= ElementToggled;
+ }
+
+ base.Dispose(disposing);
+ }
+
+ private void ElementToggled(object sender, ToggledEventArgs e)
+ {
+ this.Control.Checked = this.Element.IsToggled;
+ }
+
+ private void ControlValueChanged(object sender, EventArgs e)
+ {
+ this.Element.IsToggled = this.Control.Checked;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj
index ab50f052c..cb65dfd5f 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/eShopOnContainers.Droid.csproj
@@ -203,6 +203,7 @@
+
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml
index 059e72563..51f9ddfc0 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/App.xaml
@@ -6,9 +6,9 @@
RequestedTheme="Light">
-
+
#00A69C
-
+
+
+
+
+
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Assets/circle_button_background.png b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Assets/circle_button_background.png
new file mode 100644
index 000000000..23f6dbbcb
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Assets/circle_button_background.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Effects/EntryLineColorEffect.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Effects/EntryLineColorEffect.cs
index ce7f69f98..a35eb4970 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Effects/EntryLineColorEffect.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Effects/EntryLineColorEffect.cs
@@ -10,6 +10,7 @@ using Windows.UI.Xaml.Controls;
using eShopOnContainers.Windows.Effects;
using eShopOnContainers.Core.Effects;
+[assembly: ResolutionGroupName("eShopOnContainers")]
[assembly: ExportEffect(typeof(EntryLineColorEffect), "EntryLineColorEffect")]
namespace eShopOnContainers.Windows.Effects
{
@@ -51,7 +52,7 @@ namespace eShopOnContainers.Windows.Effects
var lineColor = XamarinFormColorToWindowsColor(LineColorEffect.GetLineColor(Element));
control.BorderBrush = new Media.SolidColorBrush(lineColor);
- var style = App.Current.Resources["FormTextBoxStyle"] as Xaml.Style;
+ var style = Xaml.Application.Current.Resources["FormTextBoxStyle"] as Xaml.Style;
control.Style = style;
}
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomSwitchRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomSwitchRenderer.cs
new file mode 100644
index 000000000..76379eefd
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomSwitchRenderer.cs
@@ -0,0 +1,60 @@
+using eShopOnContainers.Core.Controls;
+using eShopOnContainers.Windows.Renderers;
+using Windows.UI.Xaml.Controls;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.UWP;
+
+[assembly: ExportRenderer(typeof(CustomSwitch), typeof(CustomSwitchRenderer))]
+namespace eShopOnContainers.Windows.Renderers
+{
+ public class CustomSwitchRenderer : ViewRenderer
+ {
+ protected override void OnElementChanged(ElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+
+ if (this.Element == null)
+ {
+ return;
+ }
+
+ if (e.OldElement != null)
+ {
+ this.Element.Toggled -= ElementToggled;
+ return;
+ }
+
+ var toggleSwitchControl = new ToggleSwitch
+ {
+ OnContent = this.Element.TextOn,
+ OffContent = this.Element.TextOff
+ };
+
+ toggleSwitchControl.Toggled += ControlToggled;
+ this.Element.Toggled += ElementToggled;
+
+ this.SetNativeControl(toggleSwitchControl);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ this.Control.Toggled -= this.ControlToggled;
+ this.Element.Toggled -= ElementToggled;
+ }
+
+ base.Dispose(disposing);
+ }
+
+ private void ElementToggled(object sender, ToggledEventArgs e)
+ {
+ this.Control.IsOn = this.Element.IsToggled;
+ }
+
+ private void ControlToggled(object sender, global::Windows.UI.Xaml.RoutedEventArgs e)
+ {
+ this.Element.IsToggled = this.Control.IsOn;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomTabbedPageRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomTabbedPageRenderer.cs
index 1c213748e..7adfd7a10 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomTabbedPageRenderer.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/Renderers/CustomTabbedPageRenderer.cs
@@ -9,6 +9,5 @@ namespace eShopOnContainers.Windows.Renderers
[Preserve]
public class CustomTabbedPageRenderer : TabbedPageRenderer
{
-
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj
index 1cd8baba5..fa7a70dcc 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Windows/eShopOnContainers.Windows.csproj
@@ -110,6 +110,7 @@
MainPage.xaml
+
@@ -120,6 +121,7 @@
+
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Effects/EntryLineColorEffect.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Effects/EntryLineColorEffect.cs
index 3d6508142..2e370e1ed 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Effects/EntryLineColorEffect.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Effects/EntryLineColorEffect.cs
@@ -9,6 +9,7 @@ using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
+[assembly: ResolutionGroupName("eShopOnContainers")]
[assembly: ExportEffect(typeof(EntryLineColorEffect), "EntryLineColorEffect")]
namespace eShopOnContainers.iOS.Effects
{
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomSwitchRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomSwitchRenderer.cs
new file mode 100644
index 000000000..7b3841029
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomSwitchRenderer.cs
@@ -0,0 +1,56 @@
+using eShopOnContainers.Core.Controls;
+using eShopOnContainers.iOS.Renderers;
+using UIKit;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.iOS;
+
+[assembly: ExportRenderer(typeof(CustomSwitch), typeof(CustomSwitchRenderer))]
+namespace eShopOnContainers.iOS.Renderers
+{
+ public class CustomSwitchRenderer : ViewRenderer
+ {
+ protected override void OnElementChanged(ElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+
+ if (e.OldElement != null)
+ {
+ this.Element.Toggled -= ElementToggled;
+ return;
+ }
+
+ if (this.Element == null)
+ {
+ return;
+ }
+
+ var uiSwitchControl = new UISwitch();
+
+ uiSwitchControl.ValueChanged += ControlValueChanged;
+ this.Element.Toggled += ElementToggled;
+
+ this.SetNativeControl(uiSwitchControl);
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ this.Control.ValueChanged -= this.ControlValueChanged;
+ this.Element.Toggled -= ElementToggled;
+ }
+
+ base.Dispose(disposing);
+ }
+
+ private void ElementToggled(object sender, ToggledEventArgs e)
+ {
+ this.Control.On = Element.IsToggled;
+ }
+
+ private void ControlValueChanged(object sender, System.EventArgs e)
+ {
+ this.Element.IsToggled = this.Control.On;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs
index 1ea673426..afb244925 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/CustomTabbedPageRenderer.cs
@@ -1,10 +1,110 @@
-using Foundation;
+using eShopOnContainers.Core.Controls;
+using eShopOnContainers.iOS.Renderers;
+using Foundation;
+using System.Threading.Tasks;
+using UIKit;
+using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
+[assembly: ExportRenderer(typeof(TabbedPage), typeof(CustomTabbedPageRenderer))]
namespace eShopOnContainers.iOS.Renderers
{
[Preserve]
public class CustomTabbedPageRenderer : TabbedRenderer
{
+ public override void ViewWillAppear(bool animated)
+ {
+ base.ViewWillAppear(animated);
+
+ for (var i = 0; i < TabBar.Items.Length; i++)
+ {
+ AddTabBadge(i);
+ }
+
+ Element.ChildAdded += OnTabAdded;
+ Element.ChildRemoved += OnTabRemoved;
+ }
+
+ private void AddTabBadge(int tabIndex)
+ {
+ var element = Tabbed.Children[tabIndex];
+ element.PropertyChanged += OnTabbedPagePropertyChanged;
+
+ if (TabBar.Items.Length > tabIndex)
+ {
+ var tabBarItem = TabBar.Items[tabIndex];
+ UpdateTabBadgeText(tabBarItem, element);
+
+ var tabColor = CustomTabbedPage.GetBadgeColor(element);
+ if (tabColor != Color.Default)
+ {
+ tabBarItem.BadgeColor = tabColor.ToUIColor();
+ }
+ }
+ }
+
+ private void UpdateTabBadgeText(UITabBarItem tabBarItem, Element element)
+ {
+ var text = CustomTabbedPage.GetBadgeText(element);
+
+ tabBarItem.BadgeValue = string.IsNullOrEmpty(text) ? null : text;
+ }
+
+ private void OnTabbedPagePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
+ {
+ var page = sender as Page;
+ if (page == null)
+ return;
+
+ if (e.PropertyName == CustomTabbedPage.BadgeTextProperty.PropertyName)
+ {
+ var tabIndex = Tabbed.Children.IndexOf(page);
+
+ if (tabIndex < TabBar.Items.Length)
+ UpdateTabBadgeText(TabBar.Items[tabIndex], page);
+
+ return;
+ }
+
+ if (e.PropertyName == CustomTabbedPage.BadgeColorProperty.PropertyName)
+ {
+ var tabIndex = Tabbed.Children.IndexOf(page);
+ if (tabIndex < TabBar.Items.Length)
+ TabBar.Items[tabIndex].BadgeColor = CustomTabbedPage.GetBadgeColor(page).ToUIColor();
+ }
+ }
+
+ private async void OnTabAdded(object sender, ElementEventArgs e)
+ {
+ await Task.Delay(10);
+
+ var page = e.Element as Page;
+ if (page == null)
+ return;
+
+ var tabIndex = Tabbed.Children.IndexOf(page);
+ AddTabBadge(tabIndex);
+ }
+
+ private void OnTabRemoved(object sender, ElementEventArgs e)
+ {
+ e.Element.PropertyChanged -= OnTabbedPagePropertyChanged;
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ if (Tabbed != null)
+ {
+ foreach (var tab in Tabbed.Children)
+ {
+ tab.PropertyChanged -= OnTabbedPagePropertyChanged;
+ }
+
+ Tabbed.ChildAdded -= OnTabAdded;
+ Tabbed.ChildRemoved -= OnTabRemoved;
+ }
+
+ base.Dispose(disposing);
+ }
}
-}
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/SlideDownMenuPageRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/SlideDownMenuPageRenderer.cs
new file mode 100644
index 000000000..61539fa66
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Renderers/SlideDownMenuPageRenderer.cs
@@ -0,0 +1,68 @@
+using System;
+using CoreGraphics;
+using eShopOnContainers.Core.Views;
+using eShopOnContainers.iOS;
+using SlideOverKit.iOS;
+using UIKit;
+using Xamarin.Forms;
+using Xamarin.Forms.Platform.iOS;
+
+[assembly: ExportRenderer(typeof(CatalogView), typeof(SlideDownMenuPageRenderer))]
+namespace eShopOnContainers.iOS
+{
+ public class SlideDownMenuPageRenderer : PageRenderer, ISlideOverKitPageRendereriOS
+ {
+ public Action ViewDidAppearEvent { get; set; }
+
+ public Action OnElementChangedEvent { get; set; }
+
+ public Action ViewDidLayoutSubviewsEvent { get; set; }
+
+ public Action ViewDidDisappearEvent { get; set; }
+
+ public Action ViewWillTransitionToSizeEvent { get; set; }
+
+ public SlideDownMenuPageRenderer()
+ {
+ new SlideOverKitiOSHandler().Init(this);
+ }
+
+ protected override void OnElementChanged(VisualElementChangedEventArgs e)
+ {
+ base.OnElementChanged(e);
+
+ if (OnElementChangedEvent != null)
+ OnElementChangedEvent(e);
+ }
+
+ public override void ViewDidLayoutSubviews()
+ {
+ base.ViewDidLayoutSubviews();
+ if (ViewDidLayoutSubviewsEvent != null)
+ ViewDidLayoutSubviewsEvent();
+
+ }
+
+ public override void ViewDidAppear(bool animated)
+ {
+ base.ViewDidAppear(animated);
+ if (ViewDidAppearEvent != null)
+ ViewDidAppearEvent(animated);
+
+ }
+
+ public override void ViewDidDisappear(bool animated)
+ {
+ base.ViewDidDisappear(animated);
+ if (ViewDidDisappearEvent != null)
+ ViewDidDisappearEvent(animated);
+ }
+
+ public override void ViewWillTransitionToSize(CGSize toSize, IUIViewControllerTransitionCoordinator coordinator)
+ {
+ base.ViewWillTransitionToSize(toSize, coordinator);
+ if (ViewWillTransitionToSizeEvent != null)
+ ViewWillTransitionToSizeEvent(toSize, coordinator);
+ }
+ }
+}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-568h@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-568h@2x.png
index 26c6461e5..88dea20a2 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-568h@2x.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-568h@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait.png
index 5d0d1ab4c..75f5affe1 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait@2x.png
index 0ee2688e8..93f84020f 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait@2x.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default-Portrait@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default.png
index b74643c0a..7fdc6b020 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default@2x.png
index dbd6bd3e8..6183accf3 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default@2x.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Default@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76.png
index 587982e2a..184f82e7e 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76@2x.png
index cd4e2c8fe..fb7fb25dc 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76@2x.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-76@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small.png
index 33db7e714..14883f78f 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@2x.png
index bf45e2592..889a42be9 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@2x.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@3x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@3x.png
index 7ad3891b9..a268cb974 100644
Binary files a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@3x.png and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/Icon-Small@3x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart.png
new file mode 100644
index 000000000..47597bfbf
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart@2x.png
new file mode 100644
index 000000000..c47f6a3a2
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart@3x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart@3x.png
new file mode 100644
index 000000000..ee3ac0277
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_cart@3x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter.png
new file mode 100644
index 000000000..fe44cded2
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter@2x.png
new file mode 100644
index 000000000..8c666e02f
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter@3x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter@3x.png
new file mode 100644
index 000000000..3ff32e6c7
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_filter@3x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile.png
new file mode 100644
index 000000000..79b6936cb
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile@2x.png
new file mode 100644
index 000000000..1f52329b2
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile@3x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile@3x.png
new file mode 100644
index 000000000..345b49b16
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/menu_profile@3x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add.png
new file mode 100644
index 000000000..9c21daa07
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add@2x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add@2x.png
new file mode 100644
index 000000000..f4f078f09
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add@2x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add@3x.png b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add@3x.png
new file mode 100644
index 000000000..85a140362
Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/Resources/product_add@3x.png differ
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/eShopOnContainers.iOS.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/eShopOnContainers.iOS.csproj
index 00d8357dd..2f9ed0528 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/eShopOnContainers.iOS.csproj
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.iOS/eShopOnContainers.iOS.csproj
@@ -24,8 +24,20 @@
4
false
i386, x86_64
- None
- true
+ SdkOnly
+ True
+ 10.1
+ False
+ False
+ False
+ False
+ False
+ False
+ False
+ True
+ Default
+ HttpClientHandler
+ False
none
@@ -100,7 +112,9 @@
Resources\fonts\SourceSansPro-Regular.ttf
+
+
@@ -246,6 +260,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+