diff --git a/Jugenddienst Stunden/Models/ConfirmationEventArgs.cs b/Jugenddienst Stunden/Models/ConfirmationEventArgs.cs new file mode 100644 index 0000000..bf3fe0a --- /dev/null +++ b/Jugenddienst Stunden/Models/ConfirmationEventArgs.cs @@ -0,0 +1,21 @@ + +using System.Threading.Tasks; + +namespace Jugenddienst_Stunden.Models; +public sealed class ConfirmationEventArgs : System.EventArgs { + public string Title { get; } + public string Message { get; } + public string ConfirmText { get; } + + private readonly TaskCompletionSource _tcs = new(); + + public ConfirmationEventArgs(string title, string message, string confirmText = "OK") { + Title = title; + Message = message; + ConfirmText = confirmText; + } + + public Task Task => _tcs.Task; + + public void SetResult(bool result) => _tcs.TrySetResult(result); +} \ No newline at end of file diff --git a/Jugenddienst Stunden/ViewModels/LoginViewModel.cs b/Jugenddienst Stunden/ViewModels/LoginViewModel.cs index 2b2082b..b67742f 100644 --- a/Jugenddienst Stunden/ViewModels/LoginViewModel.cs +++ b/Jugenddienst Stunden/ViewModels/LoginViewModel.cs @@ -1,6 +1,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Jugenddienst_Stunden.Interfaces; +using Jugenddienst_Stunden.Models; namespace Jugenddienst_Stunden.ViewModels; @@ -15,7 +16,8 @@ public partial class LoginViewModel : ObservableObject { private readonly TimeSpan _detectionInterval = TimeSpan.FromSeconds(5); public event EventHandler? AlertEvent; - public event EventHandler? InfoEvent; + //public event EventHandler? InfoEvent; + public event EventHandler? InfoEvent; /// /// Name der Anwendung @@ -102,9 +104,13 @@ public partial class LoginViewModel : ObservableObject { (Server ?? string.Empty).Trim()); Title = $"{user.Name} {user.Surname}"; - InfoEvent?.Invoke(this, "Login erfolgreich"); - - await Shell.Current.GoToAsync("//StundenPage"); + // Info zeigen und auf Bestätigung warten + var args = new ConfirmationEventArgs("Information:", "Login erfolgreich"); + InfoEvent?.Invoke(this, args); + bool confirmed = await args.Task; + if (confirmed) { + await Shell.Current.GoToAsync("//StundenPage"); + } } catch (Exception ex) { if (_alerts is not null) { _alerts.Raise(ex.Message); @@ -128,7 +134,13 @@ public partial class LoginViewModel : ObservableObject { var user = await _auth.LoginWithToken(token); Title = $"{user.Name} {user.Surname}"; - await Shell.Current.GoToAsync("//StundenPage"); + // Info zeigen und auf Bestätigung warten + var infoArgs = new ConfirmationEventArgs("Information:", "Login erfolgreich"); + InfoEvent?.Invoke(this, infoArgs); + bool confirmed = await infoArgs.Task; + if (confirmed) { + await Shell.Current.GoToAsync("//StundenPage"); + } } catch (Exception ex) { if (_alerts is not null) { _alerts.Raise(ex.Message); diff --git a/Jugenddienst Stunden/Views/LoginPage.xaml.cs b/Jugenddienst Stunden/Views/LoginPage.xaml.cs index dff47b4..acbe83a 100644 --- a/Jugenddienst Stunden/Views/LoginPage.xaml.cs +++ b/Jugenddienst Stunden/Views/LoginPage.xaml.cs @@ -33,7 +33,14 @@ public partial class LoginPage : ContentPage { if (BindingContext is LoginViewModel vm) { vm.AlertEvent += async (_, msg) => await DisplayAlert("Fehler:", msg, "OK"); - vm.InfoEvent += async (_, msg) => await DisplayAlert("Information:", msg, "OK"); + //vm.InfoEvent += async (_, msg) => await DisplayAlert("Information:", msg, "OK"); + // Neues InfoEvent: Dialog anzeigen und nach Bestätigung das Result setzen + vm.InfoEvent += async (_, infoArgs) => { + await MainThread.InvokeOnMainThreadAsync(async () => { + await DisplayAlert(infoArgs.Title, infoArgs.Message, infoArgs.ConfirmText); + infoArgs.SetResult(true); + }); + }; } barcodeScannerView.Options =