Snooze with background activation.
This commit is contained in:
@@ -3,9 +3,13 @@ using System.Diagnostics;
|
|||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.Toolkit.Uwp.Notifications;
|
||||||
using Microsoft.UI.Dispatching;
|
using Microsoft.UI.Dispatching;
|
||||||
using Microsoft.UI.Xaml;
|
using Microsoft.UI.Xaml;
|
||||||
|
using Microsoft.Windows.AppNotifications;
|
||||||
using Microsoft.Windows.AppLifecycle;
|
using Microsoft.Windows.AppLifecycle;
|
||||||
|
using Wino.Core.Domain;
|
||||||
|
using Wino.Core.Domain.Enums;
|
||||||
|
|
||||||
namespace Wino.Mail.WinUI;
|
namespace Wino.Mail.WinUI;
|
||||||
|
|
||||||
@@ -177,10 +181,12 @@ public class Program
|
|||||||
CWMO_DEFAULT, INFINITE, 1,
|
CWMO_DEFAULT, INFINITE, 1,
|
||||||
[redirectEventHandle], out uint handleIndex);
|
[redirectEventHandle], out uint handleIndex);
|
||||||
|
|
||||||
// Bring the window to the foreground
|
if (ShouldBringWindowToForegroundAfterRedirection(args))
|
||||||
|
{
|
||||||
Process process = Process.GetProcessById((int)keyInstance.ProcessId);
|
Process process = Process.GetProcessById((int)keyInstance.ProcessId);
|
||||||
SetForegroundWindow(process.MainWindowHandle);
|
SetForegroundWindow(process.MainWindowHandle);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void OnActivated(object? sender, AppActivationArguments args)
|
private static void OnActivated(object? sender, AppActivationArguments args)
|
||||||
{
|
{
|
||||||
@@ -191,4 +197,33 @@ public class Program
|
|||||||
app.HandleRedirectedActivation(args);
|
app.HandleRedirectedActivation(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool ShouldBringWindowToForegroundAfterRedirection(AppActivationArguments args)
|
||||||
|
{
|
||||||
|
if (args.Kind != ExtendedActivationKind.AppNotification ||
|
||||||
|
args.Data is not AppNotificationActivatedEventArgs toastArgs)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var toastArguments = ToastArguments.Parse(toastArgs.Argument);
|
||||||
|
|
||||||
|
if (toastArguments.TryGetValue(Constants.ToastStoreUpdateActionKey, out string storeUpdateAction) &&
|
||||||
|
storeUpdateAction == Constants.ToastStoreUpdateActionInstall)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toastArguments.TryGetValue(Constants.ToastCalendarActionKey, out string calendarAction))
|
||||||
|
{
|
||||||
|
return calendarAction == Constants.ToastCalendarNavigateAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (toastArguments.TryGetValue(Constants.ToastActionKey, out MailOperation mailAction))
|
||||||
|
{
|
||||||
|
return mailAction == MailOperation.Navigate;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -350,12 +350,12 @@ public class NotificationBuilder : INotificationBuilder
|
|||||||
var snoozeButton = new ToastButton()
|
var snoozeButton = new ToastButton()
|
||||||
.SetContent(Translator.CalendarReminder_SnoozeAction)
|
.SetContent(Translator.CalendarReminder_SnoozeAction)
|
||||||
.SetImageUri(GetNotificationIconUri("calendar-snooze"))
|
.SetImageUri(GetNotificationIconUri("calendar-snooze"))
|
||||||
.SetBackgroundActivation();
|
|
||||||
|
|
||||||
builder.AddButton(snoozeButton)
|
|
||||||
.AddArgument(Constants.ToastCalendarActionKey, Constants.ToastCalendarSnoozeAction)
|
.AddArgument(Constants.ToastCalendarActionKey, Constants.ToastCalendarSnoozeAction)
|
||||||
.AddArgument(Constants.ToastCalendarItemIdKey, calendarItem.Id.ToString())
|
.AddArgument(Constants.ToastCalendarItemIdKey, calendarItem.Id.ToString())
|
||||||
.AddArgument(Constants.ToastModeKey, Constants.ToastModeCalendar);
|
.AddArgument(Constants.ToastModeKey, Constants.ToastModeCalendar)
|
||||||
|
.SetBackgroundActivation();
|
||||||
|
|
||||||
|
builder.AddButton(snoozeButton);
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.AddButton(new ToastButton()
|
builder.AddButton(new ToastButton()
|
||||||
|
|||||||
Reference in New Issue
Block a user