2020-04-08 00:19:00 -07:00
|
|
|
|
// Copyright (c) Microsoft Corporation
|
|
|
|
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
|
|
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
|
|
|
2021-03-02 20:56:37 +03:00
|
|
|
|
using System;
|
2020-09-04 11:56:52 +03:00
|
|
|
|
using System.Collections.Generic;
|
2021-03-02 20:56:37 +03:00
|
|
|
|
using Microsoft.PowerToys.Settings.UI.Services;
|
2020-04-08 00:19:00 -07:00
|
|
|
|
using Microsoft.PowerToys.Settings.UI.ViewModels;
|
2022-04-19 22:00:28 +02:00
|
|
|
|
using Microsoft.UI.Xaml;
|
|
|
|
|
|
using Microsoft.UI.Xaml.Automation.Peers;
|
|
|
|
|
|
using Microsoft.UI.Xaml.Controls;
|
|
|
|
|
|
using Windows.ApplicationModel.Resources;
|
2020-09-04 11:56:52 +03:00
|
|
|
|
using Windows.Data.Json;
|
2022-04-19 22:00:28 +02:00
|
|
|
|
using Windows.System;
|
2020-03-11 10:43:32 -07:00
|
|
|
|
|
|
|
|
|
|
namespace Microsoft.PowerToys.Settings.UI.Views
|
|
|
|
|
|
{
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Root page.
|
|
|
|
|
|
/// </summary>
|
2020-03-11 10:43:32 -07:00
|
|
|
|
public sealed partial class ShellPage : UserControl
|
|
|
|
|
|
{
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// <summary>
|
2020-05-26 11:02:36 -04:00
|
|
|
|
/// Declaration for the ipc callback function.
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="msg">message.</param>
|
|
|
|
|
|
public delegate void IPCMessageCallback(string msg);
|
|
|
|
|
|
|
2021-03-02 20:56:37 +03:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Declaration for the opening oobe window callback function.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public delegate void OobeOpeningCallback();
|
|
|
|
|
|
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// <summary>
|
2020-04-07 10:19:14 -07:00
|
|
|
|
/// Gets or sets a shell handler to be used to update contents of the shell dynamically from page within the frame.
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// </summary>
|
2020-04-07 10:19:14 -07:00
|
|
|
|
public static ShellPage ShellHandler { get; set; }
|
2020-03-11 10:43:32 -07:00
|
|
|
|
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// <summary>
|
2020-05-05 10:02:31 -07:00
|
|
|
|
/// Gets or sets iPC default callback function.
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// </summary>
|
2020-04-07 10:19:14 -07:00
|
|
|
|
public static IPCMessageCallback DefaultSndMSGCallback { get; set; }
|
2020-03-24 19:55:02 -07:00
|
|
|
|
|
2020-05-05 10:02:31 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Gets or sets iPC callback function for restart as admin.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static IPCMessageCallback SndRestartAsAdminMsgCallback { get; set; }
|
|
|
|
|
|
|
2020-06-23 15:53:02 +03:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Gets or sets iPC callback function for checking updates.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static IPCMessageCallback CheckForUpdatesMsgCallback { get; set; }
|
|
|
|
|
|
|
2021-03-02 20:56:37 +03:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Gets or sets callback function for opening oobe window
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public static OobeOpeningCallback OpenOobeWindowCallback { get; set; }
|
|
|
|
|
|
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// <summary>
|
2020-04-07 10:19:14 -07:00
|
|
|
|
/// Gets view model.
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// </summary>
|
2020-04-07 10:19:14 -07:00
|
|
|
|
public ShellViewModel ViewModel { get; } = new ShellViewModel();
|
2020-03-24 19:55:02 -07:00
|
|
|
|
|
2020-09-04 11:56:52 +03:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Gets a collection of functions that handle IPC responses.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public List<System.Action<JsonObject>> IPCResponseHandleList { get; } = new List<System.Action<JsonObject>>();
|
|
|
|
|
|
|
2020-05-05 10:02:31 -07:00
|
|
|
|
public static bool IsElevated { get; set; }
|
|
|
|
|
|
|
2020-05-14 12:36:27 +03:00
|
|
|
|
public static bool IsUserAnAdmin { get; set; }
|
|
|
|
|
|
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Initializes a new instance of the <see cref="ShellPage"/> class.
|
|
|
|
|
|
/// Shell page constructor.
|
|
|
|
|
|
/// </summary>
|
2020-03-11 10:43:32 -07:00
|
|
|
|
public ShellPage()
|
|
|
|
|
|
{
|
2020-04-10 15:22:07 -07:00
|
|
|
|
InitializeComponent();
|
2020-03-24 19:55:02 -07:00
|
|
|
|
|
2020-04-10 15:22:07 -07:00
|
|
|
|
DataContext = ViewModel;
|
2020-03-30 02:02:25 -07:00
|
|
|
|
ShellHandler = this;
|
2020-04-10 15:22:07 -07:00
|
|
|
|
ViewModel.Initialize(shellFrame, navigationView, KeyboardAccelerators);
|
|
|
|
|
|
shellFrame.Navigate(typeof(GeneralPage));
|
2020-03-24 19:55:02 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-08-13 15:02:05 -07:00
|
|
|
|
public static int SendDefaultIPCMessage(string msg)
|
|
|
|
|
|
{
|
2021-06-04 10:13:56 -07:00
|
|
|
|
DefaultSndMSGCallback?.Invoke(msg);
|
2020-08-13 15:02:05 -07:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static int SendCheckForUpdatesIPCMessage(string msg)
|
|
|
|
|
|
{
|
2021-06-04 10:13:56 -07:00
|
|
|
|
CheckForUpdatesMsgCallback?.Invoke(msg);
|
|
|
|
|
|
|
2020-08-13 15:02:05 -07:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static int SendRestartAdminIPCMessage(string msg)
|
|
|
|
|
|
{
|
2021-06-04 10:13:56 -07:00
|
|
|
|
SndRestartAsAdminMsgCallback?.Invoke(msg);
|
2020-08-13 15:02:05 -07:00
|
|
|
|
return 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// <summary>
|
2020-05-05 10:02:31 -07:00
|
|
|
|
/// Set Default IPC Message callback function.
|
2020-03-24 19:55:02 -07:00
|
|
|
|
/// </summary>
|
2020-05-27 11:06:17 -04:00
|
|
|
|
/// <param name="implementation">delegate function implementation.</param>
|
2020-10-29 14:24:16 -07:00
|
|
|
|
public static void SetDefaultSndMessageCallback(IPCMessageCallback implementation)
|
2020-03-24 19:55:02 -07:00
|
|
|
|
{
|
2020-05-27 11:06:17 -04:00
|
|
|
|
DefaultSndMSGCallback = implementation;
|
2020-03-24 19:55:02 -07:00
|
|
|
|
}
|
2020-05-05 10:02:31 -07:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set restart as admin IPC callback function.
|
|
|
|
|
|
/// </summary>
|
2020-05-27 11:06:17 -04:00
|
|
|
|
/// <param name="implementation">delegate function implementation.</param>
|
2020-10-29 14:24:16 -07:00
|
|
|
|
public static void SetRestartAdminSndMessageCallback(IPCMessageCallback implementation)
|
2020-05-05 10:02:31 -07:00
|
|
|
|
{
|
2020-05-27 11:06:17 -04:00
|
|
|
|
SndRestartAsAdminMsgCallback = implementation;
|
2020-05-05 10:02:31 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2020-06-23 15:53:02 +03:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set check for updates IPC callback function.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="implementation">delegate function implementation.</param>
|
2020-10-29 14:24:16 -07:00
|
|
|
|
public static void SetCheckForUpdatesMessageCallback(IPCMessageCallback implementation)
|
2020-06-23 15:53:02 +03:00
|
|
|
|
{
|
|
|
|
|
|
CheckForUpdatesMsgCallback = implementation;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-03-02 20:56:37 +03:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Set oobe opening callback function
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="implementation">delegate function implementation.</param>
|
|
|
|
|
|
public static void SetOpenOobeCallback(OobeOpeningCallback implementation)
|
|
|
|
|
|
{
|
|
|
|
|
|
OpenOobeWindowCallback = implementation;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-10-29 14:24:16 -07:00
|
|
|
|
public static void SetElevationStatus(bool isElevated)
|
2020-05-05 10:02:31 -07:00
|
|
|
|
{
|
|
|
|
|
|
IsElevated = isElevated;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-10-29 14:24:16 -07:00
|
|
|
|
public static void SetIsUserAnAdmin(bool isAdmin)
|
2020-05-14 12:36:27 +03:00
|
|
|
|
{
|
|
|
|
|
|
IsUserAnAdmin = isAdmin;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2021-03-02 20:56:37 +03:00
|
|
|
|
public static void Navigate(Type type)
|
|
|
|
|
|
{
|
|
|
|
|
|
NavigationService.Navigate(type);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2020-05-05 10:02:31 -07:00
|
|
|
|
public void Refresh()
|
|
|
|
|
|
{
|
|
|
|
|
|
shellFrame.Navigate(typeof(GeneralPage));
|
|
|
|
|
|
}
|
2021-01-05 16:01:42 +01:00
|
|
|
|
|
2021-08-23 19:48:52 +02:00
|
|
|
|
private void OobeButton_Click(object sender, RoutedEventArgs e)
|
2021-01-05 16:01:42 +01:00
|
|
|
|
{
|
2021-08-23 19:48:52 +02:00
|
|
|
|
OpenOobeWindowCallback();
|
2021-01-05 16:01:42 +01:00
|
|
|
|
}
|
2021-08-10 15:03:04 +01:00
|
|
|
|
|
|
|
|
|
|
private bool navigationViewInitialStateProcessed; // avoid announcing initial state of the navigation pane.
|
|
|
|
|
|
|
|
|
|
|
|
private void NavigationView_PaneOpened(Microsoft.UI.Xaml.Controls.NavigationView sender, object args)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!navigationViewInitialStateProcessed)
|
|
|
|
|
|
{
|
|
|
|
|
|
navigationViewInitialStateProcessed = true;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var peer = FrameworkElementAutomationPeer.FromElement(sender);
|
|
|
|
|
|
if (peer == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
peer = FrameworkElementAutomationPeer.CreatePeerForElement(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (AutomationPeer.ListenerExists(AutomationEvents.MenuOpened))
|
|
|
|
|
|
{
|
2022-04-19 22:00:28 +02:00
|
|
|
|
var loader = ResourceLoader.GetForViewIndependentUse();
|
2021-08-10 15:03:04 +01:00
|
|
|
|
peer.RaiseNotificationEvent(
|
|
|
|
|
|
AutomationNotificationKind.ActionCompleted,
|
|
|
|
|
|
AutomationNotificationProcessing.ImportantMostRecent,
|
|
|
|
|
|
loader.GetString("Shell_NavigationMenu_Announce_Open"),
|
|
|
|
|
|
"navigationMenuPaneOpened");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void NavigationView_PaneClosed(Microsoft.UI.Xaml.Controls.NavigationView sender, object args)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!navigationViewInitialStateProcessed)
|
|
|
|
|
|
{
|
|
|
|
|
|
navigationViewInitialStateProcessed = true;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var peer = FrameworkElementAutomationPeer.FromElement(sender);
|
|
|
|
|
|
if (peer == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
peer = FrameworkElementAutomationPeer.CreatePeerForElement(sender);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (AutomationPeer.ListenerExists(AutomationEvents.MenuClosed))
|
|
|
|
|
|
{
|
2022-04-19 22:00:28 +02:00
|
|
|
|
var loader = ResourceLoader.GetForViewIndependentUse();
|
2021-08-10 15:03:04 +01:00
|
|
|
|
peer.RaiseNotificationEvent(
|
|
|
|
|
|
AutomationNotificationKind.ActionCompleted,
|
|
|
|
|
|
AutomationNotificationProcessing.ImportantMostRecent,
|
|
|
|
|
|
loader.GetString("Shell_NavigationMenu_Announce_Collapse"),
|
|
|
|
|
|
"navigationMenuPaneClosed");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2021-08-23 19:48:52 +02:00
|
|
|
|
|
2022-04-19 22:00:28 +02:00
|
|
|
|
private void OOBEItem_Tapped(object sender, Microsoft.UI.Xaml.Input.TappedRoutedEventArgs e)
|
2021-08-23 19:48:52 +02:00
|
|
|
|
{
|
|
|
|
|
|
OpenOobeWindowCallback();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-04-19 22:00:28 +02:00
|
|
|
|
private async void FeedbackItem_Tapped(object sender, Microsoft.UI.Xaml.Input.TappedRoutedEventArgs e)
|
2021-08-23 19:48:52 +02:00
|
|
|
|
{
|
2022-04-19 22:00:28 +02:00
|
|
|
|
await Launcher.LaunchUriAsync(new Uri("https://aka.ms/powerToysGiveFeedback"));
|
2021-08-23 19:48:52 +02:00
|
|
|
|
}
|
2020-03-11 10:43:32 -07:00
|
|
|
|
}
|
2020-04-07 10:19:14 -07:00
|
|
|
|
}
|