From a76cc9cf7f89c2798fa6e90041dd5e9632e36122 Mon Sep 17 00:00:00 2001 From: Ione Souza Junior Date: Wed, 22 May 2019 00:16:50 -0300 Subject: [PATCH 1/4] :smiley: Added feed page --- .../BeerTrade.Android.csproj | 7 ++ .../BeerTrade.Android/MainActivity.cs | 1 + src/BeerTrade/BeerTrade.Android/linker.xml | 7 ++ src/BeerTrade/BeerTrade.iOS/AppDelegate.cs | 1 + .../BeerTrade.iOS/BeerTrade.iOS.csproj | 8 +- src/BeerTrade/BeerTrade.iOS/linker.xml | 7 ++ src/BeerTrade/BeerTrade/App.xaml.cs | 3 + src/BeerTrade/BeerTrade/BeerTrade.csproj | 6 ++ src/BeerTrade/BeerTrade/Interfaces/IApi.cs | 12 +++ src/BeerTrade/BeerTrade/Models/FeedItem.cs | 12 +++ .../BeerTrade/Services/ApiServiceFake.cs | 42 ++++++++++ .../BeerTrade/ViewModels/FeedPageViewModel.cs | 55 +++++++++++++- src/BeerTrade/BeerTrade/Views/FeedPage.xaml | 76 ++++++++++++++++++- 13 files changed, 231 insertions(+), 6 deletions(-) create mode 100644 src/BeerTrade/BeerTrade/Interfaces/IApi.cs create mode 100644 src/BeerTrade/BeerTrade/Models/FeedItem.cs create mode 100644 src/BeerTrade/BeerTrade/Services/ApiServiceFake.cs diff --git a/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj b/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj index a32a1a9..f3a26fa 100644 --- a/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj +++ b/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj @@ -31,6 +31,7 @@ prompt 4 latest + SdkOnly true @@ -63,6 +64,12 @@ 4.0.0.394984-pre10 + + 2.4.11.982 + + + 2.4.11.982 + diff --git a/src/BeerTrade/BeerTrade.Android/MainActivity.cs b/src/BeerTrade/BeerTrade.Android/MainActivity.cs index 24d1b28..26bb00c 100644 --- a/src/BeerTrade/BeerTrade.Android/MainActivity.cs +++ b/src/BeerTrade/BeerTrade.Android/MainActivity.cs @@ -20,6 +20,7 @@ protected override void OnCreate(Bundle savedInstanceState) base.OnCreate(savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); + FFImageLoading.Forms.Platform.CachedImageRenderer.Init(enableFastRenderer: false); LoadApplication(new App()); } public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) diff --git a/src/BeerTrade/BeerTrade.Android/linker.xml b/src/BeerTrade/BeerTrade.Android/linker.xml index ba4d2ea..2463dea 100644 --- a/src/BeerTrade/BeerTrade.Android/linker.xml +++ b/src/BeerTrade/BeerTrade.Android/linker.xml @@ -27,4 +27,11 @@ + + + + + + + \ No newline at end of file diff --git a/src/BeerTrade/BeerTrade.iOS/AppDelegate.cs b/src/BeerTrade/BeerTrade.iOS/AppDelegate.cs index 6cf868d..c6d5a38 100644 --- a/src/BeerTrade/BeerTrade.iOS/AppDelegate.cs +++ b/src/BeerTrade/BeerTrade.iOS/AppDelegate.cs @@ -24,6 +24,7 @@ public override bool FinishedLaunching(UIApplication app, NSDictionary options) { Xamarin.Calabash.Start(); global::Xamarin.Forms.Forms.Init(); + FFImageLoading.Forms.Platform.CachedImageRenderer.Init(); LoadApplication(new App()); return base.FinishedLaunching(app, options); diff --git a/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj b/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj index d0c5d61..e564671 100644 --- a/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj +++ b/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj @@ -25,7 +25,7 @@ 4 false x86_64 - Full + SdkOnly true latest @@ -138,6 +138,12 @@ 4.0.0.394984-pre10 + + 2.4.11.982 + + + 2.4.11.982 + diff --git a/src/BeerTrade/BeerTrade.iOS/linker.xml b/src/BeerTrade/BeerTrade.iOS/linker.xml index ba4d2ea..9636dc3 100644 --- a/src/BeerTrade/BeerTrade.iOS/linker.xml +++ b/src/BeerTrade/BeerTrade.iOS/linker.xml @@ -26,5 +26,12 @@ + + + + + + + \ No newline at end of file diff --git a/src/BeerTrade/BeerTrade/App.xaml.cs b/src/BeerTrade/BeerTrade/App.xaml.cs index 45e36d6..7087d11 100644 --- a/src/BeerTrade/BeerTrade/App.xaml.cs +++ b/src/BeerTrade/BeerTrade/App.xaml.cs @@ -1,4 +1,6 @@ using System.Threading.Tasks; +using BeerTrade.Interfaces; +using BeerTrade.Services; using BeerTrade.ViewModels; using BeerTrade.Views; using Prism; @@ -31,6 +33,7 @@ protected override void RegisterTypes(IContainerRegistry containerRegistry) containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); + containerRegistry.RegisterSingleton(); } protected override void OnStart() diff --git a/src/BeerTrade/BeerTrade/BeerTrade.csproj b/src/BeerTrade/BeerTrade/BeerTrade.csproj index b0c730f..2d60563 100644 --- a/src/BeerTrade/BeerTrade/BeerTrade.csproj +++ b/src/BeerTrade/BeerTrade/BeerTrade.csproj @@ -17,10 +17,16 @@ + + + + + + \ No newline at end of file diff --git a/src/BeerTrade/BeerTrade/Interfaces/IApi.cs b/src/BeerTrade/BeerTrade/Interfaces/IApi.cs new file mode 100644 index 0000000..3ca4d54 --- /dev/null +++ b/src/BeerTrade/BeerTrade/Interfaces/IApi.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using BeerTrade.Models; + +namespace BeerTrade.Interfaces +{ + public interface IApi + { + Task> GetFeed(); + } +} diff --git a/src/BeerTrade/BeerTrade/Models/FeedItem.cs b/src/BeerTrade/BeerTrade/Models/FeedItem.cs new file mode 100644 index 0000000..bbbe367 --- /dev/null +++ b/src/BeerTrade/BeerTrade/Models/FeedItem.cs @@ -0,0 +1,12 @@ +using System; + +namespace BeerTrade.Models +{ + public class FeedItem + { + public string BeerPhoto { get; set; } + public string AvatarPhoto { get; set; } + public string Nickname { get; set; } + public string Location { get; set; } + } +} diff --git a/src/BeerTrade/BeerTrade/Services/ApiServiceFake.cs b/src/BeerTrade/BeerTrade/Services/ApiServiceFake.cs new file mode 100644 index 0000000..41b5bca --- /dev/null +++ b/src/BeerTrade/BeerTrade/Services/ApiServiceFake.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using BeerTrade.Interfaces; +using BeerTrade.Models; + +namespace BeerTrade.Services +{ + public class ApiServiceFake : IApi + { + public async Task> GetFeed() + { + var feed = new List(); + + feed.Add(new FeedItem + { + BeerPhoto = "https://cdn-b.william-reed.com/var/wrbm_gb_hospitality/storage/images/publications/hospitality/bighospitality.co.uk/article/2018/04/26/beer-quiz-25-questions-to-test-your-knowledge/2807204-1-eng-GB/Beer-quiz-25-questions-to-test-your-knowledge_wrbm_large.jpg", + AvatarPhoto = "https://avatars3.githubusercontent.com/u/519642?v=4&s=460", + Nickname = "ionixjunior", + Location = "Joinville, SC, Brazil" + }); + + feed.Add(new FeedItem + { + BeerPhoto = "https://cdn-b.william-reed.com/var/wrbm_gb_hospitality/storage/images/publications/hospitality/bighospitality.co.uk/article/2018/04/26/beer-quiz-25-questions-to-test-your-knowledge/2807204-1-eng-GB/Beer-quiz-25-questions-to-test-your-knowledge_wrbm_large.jpg", + AvatarPhoto = "https://avatars3.githubusercontent.com/u/519642?v=4&s=460", + Nickname = "ionixjunior", + Location = "Joinville, SC, Brazil" + }); + + feed.Add(new FeedItem + { + BeerPhoto = "https://cdn-b.william-reed.com/var/wrbm_gb_hospitality/storage/images/publications/hospitality/bighospitality.co.uk/article/2018/04/26/beer-quiz-25-questions-to-test-your-knowledge/2807204-1-eng-GB/Beer-quiz-25-questions-to-test-your-knowledge_wrbm_large.jpg", + AvatarPhoto = "https://avatars3.githubusercontent.com/u/519642?v=4&s=460", + Nickname = "ionixjunior", + Location = "Joinville, SC, Brazil" + }); + + return await Task.FromResult(feed); + } + } +} diff --git a/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs b/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs index cd2e116..f41d324 100644 --- a/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs +++ b/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs @@ -1,12 +1,59 @@ -using Prism.Navigation; +using System; +using System.Collections.ObjectModel; +using System.Threading.Tasks; +using BeerTrade.Interfaces; +using BeerTrade.Models; +using Prism; +using Prism.Navigation; namespace BeerTrade.ViewModels { - public sealed class FeedPageViewModel : BaseViewModel - { - public FeedPageViewModel(INavigationService navigationService) + public class FeedPageViewModel : BaseViewModel, IActiveAware + { + private readonly IApi _api; + + public ObservableCollection Items { get; private set; } + + public FeedPageViewModel( + INavigationService navigationService, + IApi api) : base(navigationService) + { + _api = api; + Items = new ObservableCollection(); + } + + public event EventHandler IsActiveChanged; + + private bool _isActive; + public bool IsActive + { + get { return _isActive; } + set { SetProperty(ref _isActive, value, RaiseIsActiveChanged); } + } + + protected virtual async void RaiseIsActiveChanged() + { + IsActiveChanged?.Invoke(this, EventArgs.Empty); + + await GetFeed(); + } + + private async Task GetFeed() { + try + { + var feed = await _api.GetFeed(); + + Items.Clear(); + + foreach (var item in feed) + Items.Add(item); + } + catch (Exception exception) + { + System.Diagnostics.Debug.WriteLine(exception.Message); + } } } } \ No newline at end of file diff --git a/src/BeerTrade/BeerTrade/Views/FeedPage.xaml b/src/BeerTrade/BeerTrade/Views/FeedPage.xaml index 3a66deb..8384876 100644 --- a/src/BeerTrade/BeerTrade/Views/FeedPage.xaml +++ b/src/BeerTrade/BeerTrade/Views/FeedPage.xaml @@ -4,9 +4,83 @@ xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" prism:ViewModelLocator.AutowireViewModel="True" + xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms" + xmlns:fftransformations="clr-namespace:FFImageLoading.Transformations;assembly=FFImageLoading.Transformations" x:Class="BeerTrade.Views.FeedPage" Title="Home"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From d48820916731d772931a973478a9ab0576d37ac8 Mon Sep 17 00:00:00 2001 From: Ione Souza Junior Date: Thu, 23 May 2019 23:10:54 -0300 Subject: [PATCH 2/4] :muscle: Enable linker again --- .../BeerTrade.Android/BeerTrade.Android.csproj | 1 - src/BeerTrade/BeerTrade.Android/linker.xml | 12 +++++------- src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj | 2 +- src/BeerTrade/BeerTrade.iOS/linker.xml | 4 +--- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj b/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj index f3a26fa..9492bb8 100644 --- a/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj +++ b/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj @@ -31,7 +31,6 @@ prompt 4 latest - SdkOnly true diff --git a/src/BeerTrade/BeerTrade.Android/linker.xml b/src/BeerTrade/BeerTrade.Android/linker.xml index 2463dea..239ea6a 100644 --- a/src/BeerTrade/BeerTrade.Android/linker.xml +++ b/src/BeerTrade/BeerTrade.Android/linker.xml @@ -26,12 +26,10 @@ + + + + + - - - - - - - \ No newline at end of file diff --git a/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj b/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj index e564671..6128b10 100644 --- a/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj +++ b/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj @@ -25,7 +25,7 @@ 4 false x86_64 - SdkOnly + Full true latest diff --git a/src/BeerTrade/BeerTrade.iOS/linker.xml b/src/BeerTrade/BeerTrade.iOS/linker.xml index 9636dc3..239ea6a 100644 --- a/src/BeerTrade/BeerTrade.iOS/linker.xml +++ b/src/BeerTrade/BeerTrade.iOS/linker.xml @@ -29,9 +29,7 @@ - - - + \ No newline at end of file From d083a6d781603ca58ed5ced32fbd04df6bd36e6a Mon Sep 17 00:00:00 2001 From: Ione Souza Junior Date: Thu, 23 May 2019 23:21:49 -0300 Subject: [PATCH 3/4] :wrench: Validate tab active to load data --- src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs b/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs index f41d324..f84d75e 100644 --- a/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs +++ b/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs @@ -36,7 +36,8 @@ protected virtual async void RaiseIsActiveChanged() { IsActiveChanged?.Invoke(this, EventArgs.Empty); - await GetFeed(); + if (IsActive) + await GetFeed(); } private async Task GetFeed() From 03692c0b23a32c9010d06fac8b27ad66e51622ce Mon Sep 17 00:00:00 2001 From: Ione Souza Junior Date: Thu, 23 May 2019 23:32:33 -0300 Subject: [PATCH 4/4] :hammer: Disable LiveXAML in Release mode --- src/BeerTrade/BeerTrade/BeerTrade.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/BeerTrade/BeerTrade/BeerTrade.csproj b/src/BeerTrade/BeerTrade/BeerTrade.csproj index 2d60563..d8b93cf 100644 --- a/src/BeerTrade/BeerTrade/BeerTrade.csproj +++ b/src/BeerTrade/BeerTrade/BeerTrade.csproj @@ -13,6 +13,8 @@ latest + + TRACE;RELEASE;NETSTANDARD;NETSTANDARD2_0;DISABLE_XAMARINFORMSLIVE