From f5ca7c72a2da0992bf039dfcc14e7fd911d19767 Mon Sep 17 00:00:00 2001 From: Maksym Koshovyi Date: Wed, 2 Jun 2021 22:00:21 +0300 Subject: [PATCH 1/9] Update SnackBar.android.cs --- .../Views/Snackbar/SnackBar.android.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs index 3fc7376bd..6621b3afd 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs @@ -133,12 +133,12 @@ public override void OnDismissed(Java.Lang.Object transientBottomBar, int e) switch (e) { - case DismissEventTimeout: - arguments.SetResult(false); - break; case DismissEventAction: arguments.SetResult(true); break; + default: + arguments.SetResult(false); + break; } } } From dc6838c3aac8c589fe2bd7171f0df824a019e56d Mon Sep 17 00:00:00 2001 From: Maksym Koshovyi Date: Wed, 2 Jun 2021 23:39:30 +0300 Subject: [PATCH 2/9] Fix #1340 --- .../Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs | 2 ++ .../Views/Snackbar/SnackBar.android.cs | 17 +++++++---------- .../Views/Snackbar/SnackBar.uwp.cs | 1 - .../Views/Snackbar/SnackBar.wpf.cs | 1 - 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs index 1d6c43371..e5acc6cc0 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs @@ -74,6 +74,8 @@ public SnackBarLayout(SnackBarOptions options) OnSnackBarActionExecuted?.Invoke(); if (action.Action != null) await action.Action(); + + options.SetResult(true); }), Padding = new Thickness(action.Padding.Left, action.Padding.Top, diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs index 6621b3afd..5f6b1bdb4 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs @@ -64,10 +64,12 @@ internal async ValueTask Show(VisualElement sender, SnackBarOptions arguments) foreach (var action in arguments.Actions) { - snackBar.SetAction(action.Text, async v => + snackBar.SetAction(action.Text, async _ => { if (action.Action != null) await action.Action(); + + arguments.SetResult(true); }); if (action.ForegroundColor != Forms.Color.Default) { @@ -131,15 +133,10 @@ public override void OnDismissed(Java.Lang.Object transientBottomBar, int e) { base.OnDismissed(transientBottomBar, e); - switch (e) - { - case DismissEventAction: - arguments.SetResult(true); - break; - default: - arguments.SetResult(false); - break; - } + if (e == DismissEventAction) + return; + + arguments.SetResult(false); } } } diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.uwp.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.uwp.cs index 52032d910..e71c18316 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.uwp.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.uwp.cs @@ -55,7 +55,6 @@ internal ValueTask Show(Forms.VisualElement visualElement, SnackBarOptions argum grid.Children.Remove(snackBarLayout); grid.RowDefinitions.Remove(snackBarRow); snackBarTimer.Stop(); - arguments.SetResult(true); }; snackBarTimer.Start(); grid.RowDefinitions.Add(snackBarRow); diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.wpf.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.wpf.cs index 6b08322a3..66e2d1677 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.wpf.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.wpf.cs @@ -28,7 +28,6 @@ internal ValueTask Show(VisualElement visualElement, SnackBarOptions arguments) { formsAppBar.Content = currentContent; snackBarTimer.Stop(); - arguments.SetResult(true); }; snackBarTimer.Start(); formsAppBar.Content = snackBar; From e45643097ef3d2fa2f9affa96d20a88279026d52 Mon Sep 17 00:00:00 2001 From: Maksym Koshovyi Date: Wed, 2 Jun 2021 23:54:26 +0300 Subject: [PATCH 3/9] Pass exception into result --- .../Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs | 13 ++++++++++--- .../Snackbar/Options/ToastOptions.shared.cs | 2 ++ .../Views/Snackbar/SnackBar.android.cs | 13 ++++++++++--- .../Views/Snackbar/SnackBar.gtk.cs | 16 +++++++++++----- .../Views/Snackbar/SnackBar.ios.macos.cs | 16 +++++++++++----- .../Views/Snackbar/SnackBar.tizen.cs | 16 +++++++++++----- 6 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs index e5acc6cc0..54c6a0ff0 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Helpers/SnackBarLayout.uwp.wpf.cs @@ -72,10 +72,17 @@ public SnackBarLayout(SnackBarOptions options) Command = new Forms.Command(async () => { OnSnackBarActionExecuted?.Invoke(); - if (action.Action != null) - await action.Action(); + try + { + if (action.Action != null) + await action.Action(); - options.SetResult(true); + options.SetResult(true); + } + catch (Exception ex) + { + options.SetException(ex); + } }), Padding = new Thickness(action.Padding.Left, action.Padding.Top, diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Options/ToastOptions.shared.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Options/ToastOptions.shared.cs index d668846eb..c038b5350 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Options/ToastOptions.shared.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/Options/ToastOptions.shared.cs @@ -45,5 +45,7 @@ public class ToastOptions public TaskCompletionSource Result { get; } public void SetResult(bool result) => Result.SetResult(result); + + public void SetException(Exception exception) => Result.SetException(exception); } } \ No newline at end of file diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs index 5f6b1bdb4..26ac6f04e 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.android.cs @@ -66,10 +66,17 @@ internal async ValueTask Show(VisualElement sender, SnackBarOptions arguments) { snackBar.SetAction(action.Text, async _ => { - if (action.Action != null) - await action.Action(); + try + { + if (action.Action != null) + await action.Action(); - arguments.SetResult(true); + arguments.SetResult(true); + } + catch (Exception ex) + { + arguments.SetException(ex); + } }); if (action.ForegroundColor != Forms.Color.Default) { diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs index ef19ca69e..7b8b7501a 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs @@ -58,11 +58,17 @@ HBox GetSnackBarLayout(Container? container, SnackBarOptions arguments) button.Clicked += async (sender, e) => { snackBarTimer?.Stop(); - - if (action.Action != null) - await action.Action(); - - arguments.SetResult(true); + try + { + if (action.Action != null) + await action.Action(); + + arguments.SetResult(true); + } + catch (Exception ex) + { + arguments.SetException(ex); + } container?.Remove(snackBarLayout); }; diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.ios.macos.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.ios.macos.cs index 77c0a7590..35c264ab7 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.ios.macos.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.ios.macos.cs @@ -119,11 +119,17 @@ internal ValueTask Show(VisualElement sender, SnackBarOptions arguments) actionButton.SetAction(async () => { snackBar.Dismiss(); - - if (action.Action != null) - await action.Action(); - - arguments.SetResult(true); + try + { + if (action.Action != null) + await action.Action(); + + arguments.SetResult(true); + } + catch (Exception ex) + { + arguments.SetException(ex); + } }); snackBar.Actions.Add(actionButton); diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.tizen.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.tizen.cs index d445297ea..2e0dda372 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.tizen.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.tizen.cs @@ -28,11 +28,17 @@ internal ValueTask Show(Forms.VisualElement sender, SnackBarOptions arguments) ok.Clicked += async (s, evt) => { snackBarDialog.Dismiss(); - - if (action.Action != null) - await action.Action(); - - arguments.SetResult(true); + try + { + if (action.Action != null) + await action.Action(); + + arguments.SetResult(true); + } + catch (Exception ex) + { + arguments.SetException(ex); + } }; } From 2922f143d9828859db5b7eef9efb8b4389aee2f5 Mon Sep 17 00:00:00 2001 From: Maksym Koshovyi Date: Thu, 3 Jun 2021 00:16:51 +0300 Subject: [PATCH 4/9] Fix build --- .../Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs index 7b8b7501a..d73fd2d47 100644 --- a/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs +++ b/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/Snackbar/SnackBar.gtk.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Threading.Tasks; using System.Timers; using Gtk; From fafe5068957ec9f6de2804fdd9efe84d3fe0a69a Mon Sep 17 00:00:00 2001 From: Maksym Koshovyi Date: Fri, 18 Jun 2021 19:44:44 +0300 Subject: [PATCH 5/9] Add test --- .../SnackBarActionExceptionPage.xaml | 14 ++++++++++++ .../SnackBarActionExceptionPage.xaml.cs | 22 +++++++++++++++++++ .../TestCases/TestCasesGalleryViewModel.cs | 7 +++++- .../Xamarin.CommunityToolkit.Sample.csproj | 3 +++ .../Snackbar/Options/ToastOptions.shared.cs | 4 ++-- 5 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 samples/XCT.Sample/Pages/TestCases/SnackBarActionExceptionPage.xaml create mode 100644 samples/XCT.Sample/Pages/TestCases/SnackBarActionExceptionPage.xaml.cs diff --git a/samples/XCT.Sample/Pages/TestCases/SnackBarActionExceptionPage.xaml b/samples/XCT.Sample/Pages/TestCases/SnackBarActionExceptionPage.xaml new file mode 100644 index 000000000..8fe158939 --- /dev/null +++ b/samples/XCT.Sample/Pages/TestCases/SnackBarActionExceptionPage.xaml @@ -0,0 +1,14 @@ + + + + + +