From 9eda01537168ba8a3a09a56995e2a9025c058208 Mon Sep 17 00:00:00 2001 From: Federico Maccaroni Date: Thu, 27 Jul 2023 17:49:52 -0300 Subject: [PATCH] PM-3165 Finish task completion source when cancelling the dialog tapping on the background. (#2647) --- src/Android/Services/DeviceActionService.cs | 23 +++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/Android/Services/DeviceActionService.cs b/src/Android/Services/DeviceActionService.cs index 4f843eb55..dd1b8f1b6 100644 --- a/src/Android/Services/DeviceActionService.cs +++ b/src/Android/Services/DeviceActionService.cs @@ -3,7 +3,6 @@ using System.Threading.Tasks; using Android.App; using Android.Content; using Android.Content.PM; -using Android.Media; using Android.Nfc; using Android.OS; using Android.Provider; @@ -18,14 +17,9 @@ using Bit.App.Utilities; using Bit.App.Utilities.Prompts; using Bit.Core.Abstractions; using Bit.Core.Enums; -using Bit.Core.Utilities; using Bit.Droid.Utilities; using Plugin.CurrentActivity; using Xamarin.Forms.Platform.Android; -using static Android.Icu.Text.CaseMap; -using static Android.Renderscripts.ScriptGroup; -using static Android.Util.EventLogTags; -using static Bit.App.Pages.SettingsPageViewModel; namespace Bit.Droid.Services { @@ -267,6 +261,7 @@ namespace Bit.Droid.Services var result = new TaskCompletionSource(); + alertBuilder.SetOnCancelListener(new BasicDialogWithResultCancelListener(result)); alertBuilder.SetPositiveButton(config.OkButtonText ?? AppResources.Ok, listener: null); alertBuilder.SetNegativeButton(config.CancelButtonText ?? AppResources.Cancel, (sender, args) => result.TrySetResult(null)); if (!string.IsNullOrEmpty(config.ThirdButtonText)) @@ -614,4 +609,20 @@ namespace Bit.Droid.Services #pragma warning restore CS0618 // Type or member is obsolete } } + + class BasicDialogWithResultCancelListener : Java.Lang.Object, IDialogInterfaceOnCancelListener + { + private readonly TaskCompletionSource _taskCompletionSource; + + public BasicDialogWithResultCancelListener(TaskCompletionSource taskCompletionSource) + { + _taskCompletionSource = taskCompletionSource; + } + + public void OnCancel(IDialogInterface dialog) + { + _taskCompletionSource?.TrySetResult(null); + dialog?.Dismiss(); + } + } }