diff --git a/UndoAssessment/UndoAssessment.Android/Properties/AndroidManifest.xml b/UndoAssessment/UndoAssessment.Android/Properties/AndroidManifest.xml index 29e5082..943f5b2 100644 --- a/UndoAssessment/UndoAssessment.Android/Properties/AndroidManifest.xml +++ b/UndoAssessment/UndoAssessment.Android/Properties/AndroidManifest.xml @@ -3,4 +3,5 @@ + \ No newline at end of file diff --git a/UndoAssessment/UndoAssessment.Android/Resources/Resource.designer.cs b/UndoAssessment/UndoAssessment.Android/Resources/Resource.designer.cs index ca95bb7..ce89eae 100644 --- a/UndoAssessment/UndoAssessment.Android/Resources/Resource.designer.cs +++ b/UndoAssessment/UndoAssessment.Android/Resources/Resource.designer.cs @@ -2,7 +2,6 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +14,7 @@ namespace UndoAssessment.Droid { - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.0.93")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "13.2.1.111")] public partial class Resource { diff --git a/UndoAssessment/UndoAssessment/AppShell.xaml b/UndoAssessment/UndoAssessment/AppShell.xaml index 9b3603b..fa18b42 100644 --- a/UndoAssessment/UndoAssessment/AppShell.xaml +++ b/UndoAssessment/UndoAssessment/AppShell.xaml @@ -32,6 +32,7 @@ + + diff --git a/UndoAssessment/UndoAssessment/AppShell.xaml.cs b/UndoAssessment/UndoAssessment/AppShell.xaml.cs index abbe3ed..bf57141 100644 --- a/UndoAssessment/UndoAssessment/AppShell.xaml.cs +++ b/UndoAssessment/UndoAssessment/AppShell.xaml.cs @@ -13,6 +13,8 @@ public AppShell() InitializeComponent(); Routing.RegisterRoute(nameof(ItemDetailPage), typeof(ItemDetailPage)); Routing.RegisterRoute(nameof(NewItemPage), typeof(NewItemPage)); + Routing.RegisterRoute(nameof(AssessmentPage), typeof(AssessmentPage)); + Routing.RegisterRoute(nameof(UserPage), typeof(UserPage)); } } diff --git a/UndoAssessment/UndoAssessment/Models/ResponseModel.cs b/UndoAssessment/UndoAssessment/Models/ResponseModel.cs new file mode 100644 index 0000000..7818e35 --- /dev/null +++ b/UndoAssessment/UndoAssessment/Models/ResponseModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace UndoAssessment.Models +{ + public class ResponseModel + { + public string ErrorCode { get; set; } + public string Message { get; set; } + public string Date { get; set; } + } +} diff --git a/UndoAssessment/UndoAssessment/Services/RequestService.cs b/UndoAssessment/UndoAssessment/Services/RequestService.cs new file mode 100644 index 0000000..48ad385 --- /dev/null +++ b/UndoAssessment/UndoAssessment/Services/RequestService.cs @@ -0,0 +1,24 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using UndoAssessment.Models; + +namespace UndoAssessment.Services +{ + public class RequestService + { + public RequestService() { } + + public async Task SendRequest(string url) + { + HttpClient client = new HttpClient(); + var result = await client.GetAsync(url); + var stringResult = await result.Content.ReadAsStringAsync(); + var jsonResult = JsonConvert.DeserializeObject(stringResult); + return jsonResult; + } + } +} diff --git a/UndoAssessment/UndoAssessment/UndoAssessment.csproj b/UndoAssessment/UndoAssessment/UndoAssessment.csproj index 95a3587..224d37c 100644 --- a/UndoAssessment/UndoAssessment/UndoAssessment.csproj +++ b/UndoAssessment/UndoAssessment/UndoAssessment.csproj @@ -6,7 +6,17 @@ + + + + + MSBuild:UpdateDesignTimeXaml + + + MSBuild:UpdateDesignTimeXaml + + \ No newline at end of file diff --git a/UndoAssessment/UndoAssessment/ViewModels/AssessmentContextViewModel.cs b/UndoAssessment/UndoAssessment/ViewModels/AssessmentContextViewModel.cs new file mode 100644 index 0000000..621f95c --- /dev/null +++ b/UndoAssessment/UndoAssessment/ViewModels/AssessmentContextViewModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace UndoAssessment.ViewModels +{ + public static class AssessmentContextViewModel + { + private static AssessmentViewModel _assessmentViewModel = new AssessmentViewModel(); + public static AssessmentViewModel AssessmentViewModel + { + get + { + return _assessmentViewModel; + } + } + } +} diff --git a/UndoAssessment/UndoAssessment/ViewModels/AssessmentViewModel.cs b/UndoAssessment/UndoAssessment/ViewModels/AssessmentViewModel.cs new file mode 100644 index 0000000..da5f21f --- /dev/null +++ b/UndoAssessment/UndoAssessment/ViewModels/AssessmentViewModel.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using UndoAssessment.Models; +using UndoAssessment.Services; +using UndoAssessment.Views; +using Xamarin.Forms; +using static System.Net.Mime.MediaTypeNames; + +namespace UndoAssessment.ViewModels +{ + public class AssessmentViewModel : BaseViewModel + { + public Command SuccessServiceCommand { get; } + public Command ErrorServiceCommand { get; } + public Command AddUserCommand { get; } + public Command AddCommand { get; } + + private RequestService _service { get; set; } + + private string userName; + private int age; + + public AssessmentViewModel() + { + SuccessServiceCommand = new Command(async () => await sendSuccessRequest()); + ErrorServiceCommand = new Command(async () => await sendErrorRequest()); + AddUserCommand = new Command(async () => await goToAddUser()); + AddCommand = new Command(async () => await addUser()); + _service = new RequestService(); + } + + private async Task sendSuccessRequest() + { + IsBusy = true; + var model = await _service.SendRequest("https://malkarakundostagingpublicapi.azurewebsites.net/success"); + IsBusy = false; + if (model == null) + { + Device.BeginInvokeOnMainThread(async () => { + await Shell.Current.DisplayAlert("Error", "System error occurred!", "Ok"); + }); + } + + await showSuccessMessage(model); + } + + private async Task sendErrorRequest() + { + IsBusy = true; + var model = await _service.SendRequest("https://malkarakundostagingpublicapi.azurewebsites.net/fail"); + IsBusy = false; + if (model == null) + { + await Shell.Current.DisplayAlert("Error", "System error occurred!", "Ok"); + } + + await showErrorMessage(model); + } + + private async Task goToAddUser() + { + await Shell.Current.GoToAsync($"//{nameof(UserPage)}"); + } + + private async Task showSuccessMessage(ResponseModel model) + { + await Shell.Current.DisplayAlert("Success", $"{model.Message} {model.Date}", "OK"); + } + + private async Task showErrorMessage(ResponseModel model) + { + await Shell.Current.DisplayAlert("Error", $"{model.ErrorCode} {model.Message} {model.Date}", "Ok"); + } + + public string UserName + { + get => userName; + set => SetProperty(ref userName, value); + } + + public int Age + { + get => age; + set => SetProperty(ref age, value); + } + + private async Task addUser() + { + await Shell.Current.GoToAsync(".."); + } + } +} \ No newline at end of file diff --git a/UndoAssessment/UndoAssessment/Views/AssessmentPage.xaml b/UndoAssessment/UndoAssessment/Views/AssessmentPage.xaml new file mode 100644 index 0000000..d560ebe --- /dev/null +++ b/UndoAssessment/UndoAssessment/Views/AssessmentPage.xaml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UndoAssessment/UndoAssessment/Views/AssessmentPage.xaml.cs b/UndoAssessment/UndoAssessment/Views/AssessmentPage.xaml.cs new file mode 100644 index 0000000..5453449 --- /dev/null +++ b/UndoAssessment/UndoAssessment/Views/AssessmentPage.xaml.cs @@ -0,0 +1,16 @@ +using UndoAssessment.ViewModels; +using Xamarin.Forms; +using Xamarin.Forms.Xaml; + +namespace UndoAssessment.Views +{ + [XamlCompilation(XamlCompilationOptions.Compile)] + public partial class AssessmentPage : ContentPage + { + public AssessmentPage() + { + InitializeComponent(); + BindingContext = AssessmentContextViewModel.AssessmentViewModel; + } + } +} \ No newline at end of file diff --git a/UndoAssessment/UndoAssessment/Views/UserPage.xaml b/UndoAssessment/UndoAssessment/Views/UserPage.xaml new file mode 100644 index 0000000..9521548 --- /dev/null +++ b/UndoAssessment/UndoAssessment/Views/UserPage.xaml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/UndoAssessment/UndoAssessment/Views/UserPage.xaml.cs b/UndoAssessment/UndoAssessment/Views/UserPage.xaml.cs new file mode 100644 index 0000000..9254077 --- /dev/null +++ b/UndoAssessment/UndoAssessment/Views/UserPage.xaml.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UndoAssessment.ViewModels; +using Xamarin.Forms; +using Xamarin.Forms.Xaml; + +namespace UndoAssessment.Views +{ + [XamlCompilation(XamlCompilationOptions.Compile)] + public partial class UserPage : ContentPage + { + public UserPage() + { + InitializeComponent(); + BindingContext = AssessmentContextViewModel.AssessmentViewModel; + } + } +} \ No newline at end of file