From 654aa726c6c7e220060b7ea1b7868508f7e1049a Mon Sep 17 00:00:00 2001
From: Paul-Winpenny <92634321+Paul-Winpenny@users.noreply.github.com>
Date: Mon, 14 Oct 2024 16:44:31 +0100
Subject: [PATCH] Can now go back on the bluetooth page. Getting the bluetooth
 and wifi connection is being done first then Styles.

---
 .vs/slnx.sqlite                               | Bin 1175552 -> 1175552 bytes
 .../ViewModels/ConnectionPageViewModel.cs     |   9 +-
 .../ViewModels/MainPageViewModel.cs           |  85 ++++++++++++++----
 App/RobobinApp/Views/ConnectionPage.xaml      |   7 ++
 4 files changed, 80 insertions(+), 21 deletions(-)

diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite
index f1e2a1d8e4e8c7291713d7e5765ea83bd5c35858..ddce4cda1e8734ebd50cba8503c15bb5c329d3f6 100644
GIT binary patch
delta 2876
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

delta 2821
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
a(~s;ENd?&Kly)+&-KzxZtosu0_WTX%l{QBJ

diff --git a/App/RobobinApp/ViewModels/ConnectionPageViewModel.cs b/App/RobobinApp/ViewModels/ConnectionPageViewModel.cs
index 3c91b664..9802d25e 100644
--- a/App/RobobinApp/ViewModels/ConnectionPageViewModel.cs
+++ b/App/RobobinApp/ViewModels/ConnectionPageViewModel.cs
@@ -1,13 +1,14 @@
 using System.Collections.ObjectModel;
 using System.Windows.Input;
 using Microsoft.Maui.Controls;
+using RobobinApp.Views;
 
 namespace RobobinApp.ViewModels
 {
     public class ConnectionPageViewModel : BaseViewModel
     {
         private BluetoothDevice _selectedDevice;
-
+        public ICommand GoHomeCommand { get; }
         public ObservableCollection<BluetoothDevice> BluetoothDevices { get; }
         public ICommand ConnectCommand { get; }
 
@@ -16,8 +17,12 @@ namespace RobobinApp.ViewModels
             BluetoothDevices = new ObservableCollection<BluetoothDevice>();
             ConnectCommand = new Command(OnConnect);
             LoadBluetoothDevices(); // Load available devices
+            GoHomeCommand = new Command(async () => await OnGoHome());
+        }
+        public async Task OnGoHome()
+        {
+            await Application.Current.MainPage.Navigation.PushAsync(new MainPage());
         }
-
         public BluetoothDevice SelectedDevice
         {
             get => _selectedDevice;
diff --git a/App/RobobinApp/ViewModels/MainPageViewModel.cs b/App/RobobinApp/ViewModels/MainPageViewModel.cs
index ddc5ff7b..d2387784 100644
--- a/App/RobobinApp/ViewModels/MainPageViewModel.cs
+++ b/App/RobobinApp/ViewModels/MainPageViewModel.cs
@@ -1,26 +1,73 @@
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
 using System.Windows.Input;
 using Microsoft.Maui.Controls;
 using RobobinApp.Views;
 
 namespace RobobinApp.ViewModels
+
 {
-	public class MainPageViewModel : BaseViewModel
-	{
-		public ICommand NavigateToConnectionPageCommand { get; }
-
-		public MainPageViewModel()
-		{
-			NavigateToConnectionPageCommand = new Command(OnNavigateToConnectionPage);
-		}
-
-		private async void OnNavigateToConnectionPage()
-		{
-			// Navigate to the ConnectionPage
-			var connectionPage = new ConnectionPage
-			{
-				BindingContext = new ConnectionPageViewModel()
-			};
-			await Application.Current.MainPage.Navigation.PushAsync(connectionPage);
-		}
-	}
+    public class MainPageViewModel : INotifyPropertyChanged
+    {
+        private bool _isBusy;
+        private string _statusMessage;
+
+        public ICommand ConnectToRobobinCommand { get; }
+
+        public MainPageViewModel()
+        {
+            ConnectToRobobinCommand = new Command(async () => await OnConnectToRobobin());
+        }
+
+        public bool IsBusy
+        {
+            get => _isBusy;
+            set
+            {
+                _isBusy = value;
+                OnPropertyChanged();
+            }
+        }
+
+        public string StatusMessage
+        {
+            get => _statusMessage;
+            set
+            {
+                _statusMessage = value;
+                OnPropertyChanged();
+            }
+        }
+
+        private async Task OnConnectToRobobin()
+        {
+            try
+            {
+                IsBusy = true;
+
+
+				var connectionPage = new ConnectionPage
+				{
+					BindingContext = new ConnectionPageViewModel()
+				};
+				await Application.Current.MainPage.Navigation.PushAsync(connectionPage);
+			}
+            catch (Exception ex)
+            {
+                StatusMessage = $"Failed to connect: {ex.Message}";
+                await Application.Current.MainPage.DisplayAlert("Error", StatusMessage, "OK");
+            }
+            finally
+            {
+                IsBusy = false;
+            }
+        }
+
+        public event PropertyChangedEventHandler PropertyChanged;
+
+        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
+        {
+            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+        }
+    }
 }
diff --git a/App/RobobinApp/Views/ConnectionPage.xaml b/App/RobobinApp/Views/ConnectionPage.xaml
index 28b40f62..ab9493fd 100644
--- a/App/RobobinApp/Views/ConnectionPage.xaml
+++ b/App/RobobinApp/Views/ConnectionPage.xaml
@@ -3,6 +3,13 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              x:Class="RobobinApp.Views.ConnectionPage"
              Title="Connect to Robobin">
+
+    <ContentPage.MenuBarItems>
+        <MenuBarItem Text="Menu">
+            <MenuFlyoutItem Text="Back" Command="{Binding GoHomeCommand}" />
+        </MenuBarItem>
+    </ContentPage.MenuBarItems>
+
     <StackLayout Padding="20">
         <Label Text="Select a Bluetooth Device" 
                FontSize="Medium" 
-- 
GitLab