diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs index 6f765e18c..638a71f15 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs @@ -54,9 +54,9 @@ namespace eShopOnContainers.Services public async Task NavigateBackAsync() { - if (CurrentApplication.MainPage is HomeView) + if (CurrentApplication.MainPage is CatalogView) { - var mainPage = CurrentApplication.MainPage as HomeView; + var mainPage = CurrentApplication.MainPage as CatalogView; await mainPage.Navigation.PopAsync(); } else if (CurrentApplication.MainPage != null) @@ -148,7 +148,7 @@ namespace eShopOnContainers.Services private void CreatePageViewModelMappings() { _mappings.Add(typeof(CartViewModel), typeof(CartView)); - _mappings.Add(typeof(ProductsViewModel), typeof(HomeView)); + _mappings.Add(typeof(CatalogViewModel), typeof(CatalogView)); _mappings.Add(typeof(LoginViewModel), typeof(LoginView)); _mappings.Add(typeof(MainViewModel), typeof(MainView)); _mappings.Add(typeof(OrderDetailViewModel), typeof(OrderDetailView)); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs index 72346c05f..bf42cbc69 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs @@ -33,7 +33,7 @@ namespace eShopOnContainers.ViewModels.Base // view models _unityContainer.RegisterType(); - _unityContainer.RegisterType(); + _unityContainer.RegisterType(); _unityContainer.RegisterType(); _unityContainer.RegisterType(); _unityContainer.RegisterType(); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CartViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CartViewModel.cs index caf192fb8..36ee027fa 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CartViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CartViewModel.cs @@ -41,7 +41,7 @@ namespace eShopOnContainers.Core.ViewModels public override async Task InitializeAsync(object navigationData) { - MessagingCenter.Subscribe(this, MessengerKeys.AddProduct, (sender) => + MessagingCenter.Subscribe(this, MessengerKeys.AddProduct, (sender) => { BadgeCount++; }); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/pRODUCTSViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs similarity index 92% rename from src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/pRODUCTSViewModel.cs rename to src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs index 2881c2bc6..0c5f904d4 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/pRODUCTSViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs @@ -8,14 +8,14 @@ using eShopOnContainers.Core.Services.Catalog; namespace eShopOnContainers.Core.ViewModels { - public class ProductsViewModel : ViewModelBase + public class CatalogViewModel : ViewModelBase { private ObservableCollection _products; private CatalogItem _product; private ICatalogService _productsService; - public ProductsViewModel(ICatalogService productsService) + public CatalogViewModel(ICatalogService productsService) { _productsService = productsService; } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/HomeView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml similarity index 96% rename from src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/HomeView.xaml rename to src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml index 4b926758f..3edd45fe8 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/HomeView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml @@ -1,12 +1,12 @@  + Title="Catalog"> @@ -68,7 +68,7 @@ NumberOfTapsRequired="1" /> - + - - + - - + + - + - + - + - + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml.cs index 9d20714a4..95a067d2e 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/MainView.xaml.cs @@ -15,7 +15,7 @@ namespace eShopOnContainers.Core.Views { base.OnAppearing(); - var homeViewModel = ViewModelLocator.Instance.Resolve(); + var homeViewModel = ViewModelLocator.Instance.Resolve(); await homeViewModel.InitializeAsync(null); HomeView.BindingContext = homeViewModel; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj index 3a76920ae..32768bf32 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj @@ -76,7 +76,7 @@ - + @@ -90,8 +90,8 @@ FiltersView.xaml - - HomeView.xaml + + CatalogView.xaml LoginView.xaml @@ -190,7 +190,7 @@ - + MSBuild:UpdateDesignTimeXaml Designer diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs index f068f9567..a04024b35 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Activities/MainActivity.cs @@ -1,8 +1,8 @@ - using Android.App; using Android.OS; using Android.Content.PM; using Android.Views; +using Xamarin.Forms.Platform.Android; namespace eShopOnContainers.Droid.Activities { @@ -12,15 +12,20 @@ namespace eShopOnContainers.Droid.Activities Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] - public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity + public class MainActivity : FormsAppCompatActivity { protected override void OnCreate(Bundle bundle) { - TabLayoutResource = Resource.Layout.Tabbar; - ToolbarResource = Resource.Layout.Toolbar; + FormsAppCompatActivity.ToolbarResource = Resource.Layout.Toolbar; + FormsAppCompatActivity.TabLayoutResource = Resource.Layout.Tabs; base.OnCreate(bundle); + SupportActionBar.SetDisplayShowHomeEnabled(true); // Show or hide the default home button + SupportActionBar.SetDisplayHomeAsUpEnabled(true); + SupportActionBar.SetDisplayShowCustomEnabled(true); // Enable overriding the default toolbar layout + SupportActionBar.SetDisplayShowTitleEnabled(false); + global::Xamarin.Forms.Forms.Init(this, bundle); LoadApplication(new App()); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs index 848c4a075..f952f66ec 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/CustomTabbedPageRenderer.cs @@ -10,6 +10,9 @@ using Xamarin.Forms.Platform.Android; using eShopOnContainers.Droid.Extensions; using eShopOnContainers.Core.Controls; using eShopOnContainers.Droid.Renderers; +using Android.Support.V4.View; +using Android.Graphics; +using static Android.Widget.ImageView; [assembly: ExportRenderer(typeof(TabbedPage), typeof(CustomTabbedPageRenderer))] namespace eShopOnContainers.Droid.Renderers @@ -20,6 +23,9 @@ namespace eShopOnContainers.Droid.Renderers protected readonly Dictionary BadgeViews = new Dictionary(); private TabLayout _tabLayout; private TabLayout.SlidingTabStrip _tabStrip; + private ViewPager _viewPager; + private TabbedPage _tabbedPage; + private bool _firstTime = true; protected override void OnElementChanged(ElementChangedEventArgs e) { @@ -33,6 +39,32 @@ namespace eShopOnContainers.Droid.Renderers return; } + _tabbedPage = e.NewElement as TabbedPage; + _viewPager = (ViewPager)GetChildAt(0); + + _tabLayout.TabSelected += (s, a) => + { + var page = _tabbedPage.Children[a.Tab.Position]; + + if (page is TabbedPage) + { + var tabPage = (TabbedPage)page; + SetTab(a.Tab, tabPage.Icon.File); + } + + _viewPager.SetCurrentItem(a.Tab.Position, false); + }; + + _tabLayout.TabUnselected += (s, a) => + { + var page = _tabbedPage.Children[a.Tab.Position]; + + if (page is TabbedPage) + { + SetTab(a.Tab, page.Icon.File); + } + }; + _tabStrip = _tabLayout.FindChildOfType(); for (var i = 0; i < _tabLayout.TabCount; i++) @@ -44,6 +76,56 @@ namespace eShopOnContainers.Droid.Renderers Element.ChildRemoved += OnTabRemoved; } + + private void SetTab(TabLayout.Tab tab, string name) + { + try + { + int id = Resources.GetIdentifier(name, "drawable", Context.PackageName); + tab.CustomView.FindViewById(Resource.Id.tab_icon).SetImageResource(id); + tab.SetCustomView(Resource.Layout.TabLayout); + tab.SetIcon(null); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(ex.StackTrace); + } + } + + protected override void DispatchDraw(Canvas canvas) + { + base.DispatchDraw(canvas); + + if (!_firstTime) + { + return; + } + + for (int i = 0; i < _tabLayout.TabCount; i++) + { + var tab = _tabLayout.GetTabAt(i); + var page = _tabbedPage.Children[tab.Position]; + + if (page is TabbedPage) + { + var tabbedPage = (TabbedPage)page; + + SetTab(tab, tabbedPage.Icon.File); + } + else + { + SetTab(tab, page.Icon.File); + } + + if (!string.IsNullOrEmpty(_tabbedPage.Title)) + { + tab.SetText(string.Empty); + } + } + + _firstTime = false; + } + private void AddTabBadge(int tabIndex) { var element = Element.Children[tabIndex]; @@ -71,11 +153,12 @@ namespace eShopOnContainers.Droid.Renderers // Set color if not default var tabColor = CustomTabbedPage.GetBadgeColor(element); - if (tabColor != Color.Default) + + if (tabColor != Xamarin.Forms.Color.Default) { badgeView.BadgeColor = tabColor.ToAndroid(); } - + element.PropertyChanged += OnTabbedPagePropertyChanged; } @@ -114,6 +197,7 @@ namespace eShopOnContainers.Droid.Renderers await Task.Delay(DeleayBeforeTabAdded); var page = e.Element as Page; + if (page == null) return; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/SlideDownMenuPageRenderer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/SlideDownMenuPageRenderer.cs index 123aa4589..23b15207e 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/SlideDownMenuPageRenderer.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Renderers/SlideDownMenuPageRenderer.cs @@ -5,7 +5,7 @@ using System; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; -[assembly: ExportRenderer(typeof(HomeView), typeof(SlideDownMenuPageRenderer))] +[assembly: ExportRenderer(typeof(CatalogView), typeof(SlideDownMenuPageRenderer))] namespace eShopOnContainers.Droid.Renderers { public class SlideDownMenuPageRenderer : PageRenderer, ISlideOverKitPageRendererDroid diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/Resource.Designer.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/Resource.Designer.cs index f9a24ffe7..35b579245 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/Resource.Designer.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/Resource.Designer.cs @@ -1166,32 +1166,32 @@ namespace eShopOnContainers.Droid public partial class Color { - // aapt resource value: 0x7f0b0048 - public const int abc_background_cache_hint_selector_material_dark = 2131427400; - // aapt resource value: 0x7f0b0049 - public const int abc_background_cache_hint_selector_material_light = 2131427401; + public const int abc_background_cache_hint_selector_material_dark = 2131427401; // aapt resource value: 0x7f0b004a - public const int abc_color_highlight_material = 2131427402; + public const int abc_background_cache_hint_selector_material_light = 2131427402; + + // aapt resource value: 0x7f0b004b + public const int abc_color_highlight_material = 2131427403; // aapt resource value: 0x7f0b0004 public const int abc_input_method_navigation_guard = 2131427332; - // aapt resource value: 0x7f0b004b - public const int abc_primary_text_disable_only_material_dark = 2131427403; - // aapt resource value: 0x7f0b004c - public const int abc_primary_text_disable_only_material_light = 2131427404; + public const int abc_primary_text_disable_only_material_dark = 2131427404; // aapt resource value: 0x7f0b004d - public const int abc_primary_text_material_dark = 2131427405; + public const int abc_primary_text_disable_only_material_light = 2131427405; // aapt resource value: 0x7f0b004e - public const int abc_primary_text_material_light = 2131427406; + public const int abc_primary_text_material_dark = 2131427406; // aapt resource value: 0x7f0b004f - public const int abc_search_url_text = 2131427407; + public const int abc_primary_text_material_light = 2131427407; + + // aapt resource value: 0x7f0b0050 + public const int abc_search_url_text = 2131427408; // aapt resource value: 0x7f0b0005 public const int abc_search_url_text_normal = 2131427333; @@ -1202,11 +1202,11 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f0b0007 public const int abc_search_url_text_selected = 2131427335; - // aapt resource value: 0x7f0b0050 - public const int abc_secondary_text_material_dark = 2131427408; - // aapt resource value: 0x7f0b0051 - public const int abc_secondary_text_material_light = 2131427409; + public const int abc_secondary_text_material_dark = 2131427409; + + // aapt resource value: 0x7f0b0052 + public const int abc_secondary_text_material_light = 2131427410; // aapt resource value: 0x7f0b0008 public const int accent_material_dark = 2131427336; @@ -1406,11 +1406,11 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f0b003b public const int switch_thumb_disabled_material_light = 2131427387; - // aapt resource value: 0x7f0b0052 - public const int switch_thumb_material_dark = 2131427410; - // aapt resource value: 0x7f0b0053 - public const int switch_thumb_material_light = 2131427411; + public const int switch_thumb_material_dark = 2131427411; + + // aapt resource value: 0x7f0b0054 + public const int switch_thumb_material_light = 2131427412; // aapt resource value: 0x7f0b003c public const int switch_thumb_normal_material_dark = 2131427388; @@ -1418,6 +1418,9 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f0b003d public const int switch_thumb_normal_material_light = 2131427389; + // aapt resource value: 0x7f0b0048 + public const int white = 2131427400; + static Color() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); @@ -2299,8 +2302,8 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f0200a8 public const int mr_ic_play_light = 2130837672; - // aapt resource value: 0x7f0200ad - public const int notification_template_icon_bg = 2130837677; + // aapt resource value: 0x7f0200ae + public const int notification_template_icon_bg = 2130837678; // aapt resource value: 0x7f0200a9 public const int product_add = 2130837673; @@ -2314,6 +2317,9 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f0200ac public const int splash_drawable = 2130837676; + // aapt resource value: 0x7f0200ad + public const int user_profile = 2130837677; + static Drawable() { global::Android.Runtime.ResourceIdManager.UpdateIdValues(); @@ -2711,8 +2717,8 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f070013 public const int showTitle = 2131165203; - // aapt resource value: 0x7f07009c - public const int sliding_tabs = 2131165340; + // aapt resource value: 0x7f07009d + public const int sliding_tabs = 2131165341; // aapt resource value: 0x7f07006c public const int snackbar_action = 2131165292; @@ -2750,6 +2756,9 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f07000d public const int tabMode = 2131165197; + // aapt resource value: 0x7f07009c + public const int tab_icon = 2131165340; + // aapt resource value: 0x7f070099 public const int text = 2131165337; @@ -2771,8 +2780,8 @@ namespace eShopOnContainers.Droid // aapt resource value: 0x7f070048 public const int title_template = 2131165256; - // aapt resource value: 0x7f07009d - public const int toolbar = 2131165341; + // aapt resource value: 0x7f07009e + public const int toolbar = 2131165342; // aapt resource value: 0x7f070032 public const int top = 2131165234; @@ -3051,10 +3060,13 @@ namespace eShopOnContainers.Droid public const int support_simple_spinner_dropdown_item = 2130903097; // aapt resource value: 0x7f03003a - public const int Tabbar = 2130903098; + public const int TabLayout = 2130903098; // aapt resource value: 0x7f03003b - public const int Toolbar = 2130903099; + public const int Tabs = 2130903099; + + // aapt resource value: 0x7f03003c + public const int Toolbar = 2130903100; static Layout() { diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/drawable-xxxhdpi/menu_cart.png b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/drawable-xxxhdpi/menu_cart.png new file mode 100644 index 000000000..7c9c64cb3 Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/drawable-xxxhdpi/menu_cart.png differ diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/drawable-xxxhdpi/user_profile.png b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/drawable-xxxhdpi/user_profile.png new file mode 100644 index 000000000..b6aa8e0bc Binary files /dev/null and b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/drawable-xxxhdpi/user_profile.png differ diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/TabLayout.axml b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/TabLayout.axml new file mode 100644 index 000000000..d4df97857 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/TabLayout.axml @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Tabbar.axml b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Tabbar.axml deleted file mode 100644 index ad1f87d81..000000000 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Tabbar.axml +++ /dev/null @@ -1,11 +0,0 @@ - - diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Tabs.axml b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Tabs.axml new file mode 100644 index 000000000..ce512330f --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Tabs.axml @@ -0,0 +1,12 @@ + + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Toolbar.axml b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Toolbar.axml index aabd0a3b7..fb51f3f27 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Toolbar.axml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/layout/Toolbar.axml @@ -1,9 +1,12 @@ - - + + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/values/colors.xml b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/values/colors.xml new file mode 100644 index 000000000..4ef94eb5d --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/values/colors.xml @@ -0,0 +1,3 @@ + + #FFFFFF + \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/values/styles.xml b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/values/styles.xml index 5a43d2ac9..0a97a7eb4 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/values/styles.xml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Droid/Resources/values/styles.xml @@ -3,6 +3,7 @@ +