diff --git a/CodingCoach/CodingCoach.Android/CodingCoach.Android.csproj b/CodingCoach/CodingCoach.Android/CodingCoach.Android.csproj
index 65dba3d..c1a92cb 100644
--- a/CodingCoach/CodingCoach.Android/CodingCoach.Android.csproj
+++ b/CodingCoach/CodingCoach.Android/CodingCoach.Android.csproj
@@ -15,7 +15,6 @@
Properties\AndroidManifest.xml
Resources
Assets
- false
v8.1
Xamarin.Android.Net.AndroidClientHandler
@@ -68,6 +67,9 @@
+
+ 1.1.0
+
@@ -114,7 +116,7 @@
- {629F997C-32F2-490C-AAA4-4A7A90FFC498}
+ {6E5D64F0-404D-4831-B324-F5A6D2171988}
CodingCoach
diff --git a/CodingCoach/CodingCoach.Android/MainActivity.cs b/CodingCoach/CodingCoach.Android/MainActivity.cs
index 7b496a8..fb3d0ce 100644
--- a/CodingCoach/CodingCoach.Android/MainActivity.cs
+++ b/CodingCoach/CodingCoach.Android/MainActivity.cs
@@ -1,11 +1,7 @@
-using System;
-
using Android.App;
using Android.Content.PM;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
using Android.OS;
+using Android.Runtime;
using ImageCircle.Forms.Plugin.Droid;
namespace CodingCoach.Droid
@@ -19,9 +15,16 @@ protected override void OnCreate(Bundle savedInstanceState)
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
+ Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
ImageCircleRenderer.Init();
- LoadApplication(new App());
+ LoadApplication(new App());
+ }
+
+ public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
+ {
+ Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
+ base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach.Android/Properties/AndroidManifest.xml b/CodingCoach/CodingCoach.Android/Properties/AndroidManifest.xml
index 6ae3b3d..1fbc58d 100644
--- a/CodingCoach/CodingCoach.Android/Properties/AndroidManifest.xml
+++ b/CodingCoach/CodingCoach.Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
-
+
-
-
-
+
+
+
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach.iOS/CodingCoach.iOS.csproj b/CodingCoach/CodingCoach.iOS/CodingCoach.iOS.csproj
index 0a81beb..2629934 100644
--- a/CodingCoach/CodingCoach.iOS/CodingCoach.iOS.csproj
+++ b/CodingCoach/CodingCoach.iOS/CodingCoach.iOS.csproj
@@ -164,11 +164,14 @@
3.0.0.5
+
+ 1.1.0
+
- {629F997C-32F2-490C-AAA4-4A7A90FFC498}
+ {6E5D64F0-404D-4831-B324-F5A6D2171988}
CodingCoach
diff --git a/CodingCoach/CodingCoach/CodingCoach.csproj b/CodingCoach/CodingCoach/CodingCoach.csproj
index 9b8d9e2..9105896 100644
--- a/CodingCoach/CodingCoach/CodingCoach.csproj
+++ b/CodingCoach/CodingCoach/CodingCoach.csproj
@@ -32,6 +32,7 @@
+
@@ -41,9 +42,6 @@
-
- Never
-
MSBuild:UpdateDesignTimeXaml
diff --git a/CodingCoach/CodingCoach/Models/Constants.cs b/CodingCoach/CodingCoach/Models/Constants.cs
new file mode 100644
index 0000000..e0c45aa
--- /dev/null
+++ b/CodingCoach/CodingCoach/Models/Constants.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace CodingCoach.Models.Constants
+{
+ public class Urls
+ {
+ public const string Slack = "https://join.slack.com/t/coding-coach/shared_invite/enQtNDYxNTcwMjk4MDcwLThiZjY1MTM2YTU1YzM2MGI1N2Y1NDI3ZGM1MGRhNjdiZjU0MzE1YjMxZjdlZmVlNDdhNmFhN2RhNGIxZmE1YTI";
+ }
+
+ public class Emails
+ {
+ public const string Contact = "codingcoachio@gmail.com";
+ }
+}
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach/Models/HomeMenuItem.cs b/CodingCoach/CodingCoach/Models/HomeMenuItem.cs
index 754df8c..30389c3 100644
--- a/CodingCoach/CodingCoach/Models/HomeMenuItem.cs
+++ b/CodingCoach/CodingCoach/Models/HomeMenuItem.cs
@@ -1,18 +1,16 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace CodingCoach.Models
+namespace CodingCoach.Models
{
- public enum MenuItemType
- {
- Browse,
- About
- }
- public class HomeMenuItem
- {
- public MenuItemType Id { get; set; }
+ public enum MenuItemType
+ {
+ Browse,
+ About,
+ Contact
+ }
+
+ public class HomeMenuItem
+ {
+ public MenuItemType Id { get; set; }
- public string Title { get; set; }
- }
-}
+ public string Title { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach/ViewModels/ContactViewModel.cs b/CodingCoach/CodingCoach/ViewModels/ContactViewModel.cs
new file mode 100644
index 0000000..7758b69
--- /dev/null
+++ b/CodingCoach/CodingCoach/ViewModels/ContactViewModel.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using Xamarin.Essentials;
+using Xamarin.Forms;
+
+namespace CodingCoach.ViewModels
+{
+ public class ContactViewModel : BaseViewModel
+ {
+ private ICommand _slackCommand;
+ public ICommand SlackCommand => _slackCommand ?? (_slackCommand = new Command(OpenSlack));
+
+ private ICommand _emailCommand;
+ public ICommand EmailCommand => _emailCommand ?? (_emailCommand = new Command(async () => await ComposeEmail()));
+
+ public ContactViewModel()
+ {
+ Title = "Contact";
+ }
+
+ private void OpenSlack()
+ {
+ Device.OpenUri(new Uri(Models.Constants.Urls.Slack));
+ }
+
+ private Task ComposeEmail()
+ {
+ //Remark: This will only work on a real iOS device and not on iOS simulator
+ //https://github.com/xamarin/Essentials/issues/370
+
+ return Email.ComposeAsync(new EmailMessage() { To = new List() { Models.Constants.Emails.Contact } });
+ }
+ }
+}
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach/Views/ContactPage.xaml b/CodingCoach/CodingCoach/Views/ContactPage.xaml
new file mode 100644
index 0000000..f954603
--- /dev/null
+++ b/CodingCoach/CodingCoach/Views/ContactPage.xaml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach/Views/ContactPage.xaml.cs b/CodingCoach/CodingCoach/Views/ContactPage.xaml.cs
new file mode 100644
index 0000000..86efbee
--- /dev/null
+++ b/CodingCoach/CodingCoach/Views/ContactPage.xaml.cs
@@ -0,0 +1,12 @@
+using Xamarin.Forms;
+
+namespace CodingCoach.Views
+{
+ public partial class ContactPage : ContentPage
+ {
+ public ContactPage()
+ {
+ InitializeComponent();
+ }
+ }
+}
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach/Views/ItemsPage.xaml.cs b/CodingCoach/CodingCoach/Views/ItemsPage.xaml.cs
index 9a00c38..7bbbd24 100644
--- a/CodingCoach/CodingCoach/Views/ItemsPage.xaml.cs
+++ b/CodingCoach/CodingCoach/Views/ItemsPage.xaml.cs
@@ -1,19 +1,14 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using CodingCoach.Models;
-using CodingCoach.Views;
using CodingCoach.ViewModels;
namespace CodingCoach.Views
{
- [XamlCompilation(XamlCompilationOptions.Compile)]
+ [XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ItemsPage : ContentPage
{
ItemsViewModel viewModel;
diff --git a/CodingCoach/CodingCoach/Views/MainPage.xaml.cs b/CodingCoach/CodingCoach/Views/MainPage.xaml.cs
index 7fd3036..02252f6 100644
--- a/CodingCoach/CodingCoach/Views/MainPage.xaml.cs
+++ b/CodingCoach/CodingCoach/Views/MainPage.xaml.cs
@@ -1,5 +1,4 @@
using CodingCoach.Models;
-using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Forms;
@@ -7,45 +6,48 @@
namespace CodingCoach.Views
{
- [XamlCompilation(XamlCompilationOptions.Compile)]
- public partial class MainPage : MasterDetailPage
- {
- Dictionary MenuPages = new Dictionary();
- public MainPage()
- {
- InitializeComponent();
-
- MasterBehavior = MasterBehavior.Popover;
-
- MenuPages.Add((int)MenuItemType.Browse, (NavigationPage)Detail);
- }
-
- public async Task NavigateFromMenu(int id)
- {
- if (!MenuPages.ContainsKey(id))
- {
- switch (id)
+ [XamlCompilation(XamlCompilationOptions.Compile)]
+ public partial class MainPage : MasterDetailPage
+ {
+ Dictionary MenuPages = new Dictionary();
+ public MainPage()
+ {
+ InitializeComponent();
+
+ MasterBehavior = MasterBehavior.Popover;
+
+ MenuPages.Add((int)MenuItemType.Browse, (NavigationPage)Detail);
+ }
+
+ public async Task NavigateFromMenu(int id)
+ {
+ if (!MenuPages.ContainsKey(id))
{
- case (int)MenuItemType.Browse:
- MenuPages.Add(id, new NavigationPage(new ItemsPage()));
- break;
- case (int)MenuItemType.About:
- MenuPages.Add(id, new NavigationPage(new AboutPage()));
- break;
+ switch (id)
+ {
+ case (int)MenuItemType.Browse:
+ MenuPages.Add(id, new NavigationPage(new ItemsPage()));
+ break;
+ case (int)MenuItemType.About:
+ MenuPages.Add(id, new NavigationPage(new AboutPage()));
+ break;
+ case (int)MenuItemType.Contact:
+ MenuPages.Add(id, new NavigationPage(new ContactPage()));
+ break;
+ }
}
- }
- var newPage = MenuPages[id];
+ var newPage = MenuPages[id];
- if (newPage != null && Detail != newPage)
- {
- Detail = newPage;
+ if (newPage != null && Detail != newPage)
+ {
+ Detail = newPage;
- if (Device.RuntimePlatform == Device.Android)
- await Task.Delay(100);
+ if (Device.RuntimePlatform == Device.Android)
+ await Task.Delay(100);
- IsPresented = false;
- }
- }
- }
+ IsPresented = false;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/CodingCoach/CodingCoach/Views/MenuPage.xaml.cs b/CodingCoach/CodingCoach/Views/MenuPage.xaml.cs
index 897cf85..f0a41c6 100644
--- a/CodingCoach/CodingCoach/Views/MenuPage.xaml.cs
+++ b/CodingCoach/CodingCoach/Views/MenuPage.xaml.cs
@@ -19,7 +19,8 @@ public MenuPage()
menuItems = new List
{
new HomeMenuItem {Id = MenuItemType.Browse, Title="Mentors" },
- new HomeMenuItem {Id = MenuItemType.About, Title="About" }
+ new HomeMenuItem {Id = MenuItemType.About, Title="About" },
+ new HomeMenuItem {Id = MenuItemType.Contact, Title="Contact" }
};
ListViewMenu.ItemsSource = menuItems;