diff --git a/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj b/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj index a32a1a9..9492bb8 100644 --- a/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj +++ b/src/BeerTrade/BeerTrade.Android/BeerTrade.Android.csproj @@ -63,6 +63,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..239ea6a 100644 --- a/src/BeerTrade/BeerTrade.Android/linker.xml +++ b/src/BeerTrade/BeerTrade.Android/linker.xml @@ -26,5 +26,10 @@ + + + + + \ 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..6128b10 100644 --- a/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj +++ b/src/BeerTrade/BeerTrade.iOS/BeerTrade.iOS.csproj @@ -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..239ea6a 100644 --- a/src/BeerTrade/BeerTrade.iOS/linker.xml +++ b/src/BeerTrade/BeerTrade.iOS/linker.xml @@ -26,5 +26,10 @@ + + + + + \ 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..d8b93cf 100644 --- a/src/BeerTrade/BeerTrade/BeerTrade.csproj +++ b/src/BeerTrade/BeerTrade/BeerTrade.csproj @@ -13,14 +13,22 @@ latest + + TRACE;RELEASE;NETSTANDARD;NETSTANDARD2_0;DISABLE_XAMARINFORMSLIVE + + + + + + \ 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..f84d75e 100644 --- a/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs +++ b/src/BeerTrade/BeerTrade/ViewModels/FeedPageViewModel.cs @@ -1,12 +1,60 @@ -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); + + if (IsActive) + 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"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +