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